当前位置: 首页 > news >正文

CycleGAN实现MNIST与SVHN风格迁移

CycleGAN实现MNIST与SVHN风格迁移

    • 0. 前言
    • 1. 代码实现
    • 2. 生成结果
    • 3. 标签翻转问题

0. 前言

我们已经学习了 CycleGAN 的基本原理,并展示了 CycleGAN 在图像转换中的应用。在本节中,我们将处理一个更具挑战性的任务。假设以灰度 MNIST 手写数字作为源数据,并希望借鉴 SVHN 数据集(作为目标数据)的风格特征。下图展示了两个域中的样本数据:

样本数据

1. 代码实现

我们可以复用跨域生成对抗网络一节的 CycleGAN 构建和训练函数来实现风格迁移。唯一区别在于需要增加加载 MNIST 和 SVHN 数据的功能。
CycleGAN 结构与跨域生成对抗网络一节相同,唯一区别是鉴于两个域存在显著差异,我们采用了大小为 5 的卷积核。实现 MNISTSVHN 间跨域风格迁移的 CycleGAN

def mnist_cross_svhn(g_models=None):model_name = 'cyclegan_mnist_svhn'batch_size = 64train_steps = 100000patchgan = Truekernel_size = 5postfix = ('%dp' % kernel_size) if patchgan else ('%d' % kernel_size)data,shapes = mnist_svhn_utils.load_data()source_data,_,test_source_data,test_target_data = datatitles = ('MNIST predicted source images.','SVHN predicted target images.','MNIST reconstructed source images.','SVHN reconstructed target images.')dirs = ('mnist_source-%s' % postfix,'svhn_target-%s' % postfix)#generate predictedif g_models is not None:g_source,g_target = g_modelsother_utils.test_generator((g_source,g_target),(test_source_data,test_target_data),step=0,titles=titles,dirs=dirs,show=True)return#build the cycleganmodels = build_cyclegan(shapes,'mnist-%s' % postfix,'svhn-%s' % postfix,kernel_size=kernel_size,patchgan=patchgan)# patch size is divided by 2^n since we downscaled the input# in the discriminator by 2^n (ie. we use strides=2 n times)patchgan = int(source_data.shape[1])params = (batch_size,train_steps,patchgan,model_name)test_params = (titles,dirs)#train the cyclegantrain_cyclegan(models,data,params,test_params,other_utils.test_generator)

使用以下命令启动模型训练:

$ python cyclegan.py -m

2. 生成结果

模型训练完成后,可以使用以下命令执行模型测试

$ python cyclegan.py --mnist_svhn_g_source=cyclegan_mnist_svhn-g_source.h5 --mnist_svhn_g_target=cyclegan_mnist_svhn-g_target.h5

测试集中 MNIST 数字向 SVHN 风格转换的结果如下图所示。生成图像虽具有 SVHN 的风格特征,但数字形态并未完全转换。例如数字 31 经过 CycleGAN 风格化处理后,仍保留了原始数字的基本形态。而数字 96 的风格化结果出现了显著变化:未使用 PatchGANCycleGAN 将其转换为了 06,而采用 PatchGANCycleGAN 则生成了 065 等混合形态:

生成结果

反向循环的转换结果如下图所示。目标图像来自 SVHN 测试数据集。生成图像虽具有 MNIST 的风格特征,但数字识别结果存在偏差。例如第一行中,数字 52210 在未使用 PatchGANCycleGAN 中被风格化为 778,而在采用 PatchGAN 的版本中则被转换为 331

生成结果

下图展示了 CycleGAN 在前向循环中重建 MNIST 数字的效果。重建后的 MNIST 数字与原始源数字几乎完全相同:

前向循环

下图则呈现了 CycleGAN 在反向循环中重建 SVHN 数字的表现:

反向循环

多数目标图像得以重建,部分数字保持高度一致,也有部分数字在风格保留的情况下发生转换。

3. 标签翻转问题

MNISTSVHN 的转换过程中出现的源域数字被转换为目标域不同数字的现象,被称为标签翻转。尽管 CycleGAN 的预测结果满足循环一致性,但未必保证语义一致性,数字的原始语义含义在转换过程中出现了丢失。
为解决这一问题,Hoffman 提出了一种改进的 CycleGAN 模型——循环一致对抗域自适应 (Cycle-Consistent Adversarial Domain Adaptation, CyCADA)。其核心改进在于引入额外的语义损失项,确保预测结果不仅满足循环一致性,同时保持语义一致性。

http://www.dtcms.com/a/512486.html

相关文章:

  • AVL树手撕,超详细图文详解
  • ZeroTier虚拟局域网内搭建DNS服务器
  • 网络与通信安全课程复习汇总3——身份认证
  • 诸城网站做的好的创网站 灵感
  • C++多线程、STL
  • 自己做的网站怎么加入微信支付哪个网站做五金冲压的
  • MySQL数据库05:DQL查询运算符
  • 橙米网站建设网站建设合同制人员招聘
  • 织梦网站图片修改文化墙 北京广告公司
  • VTK——双重深度剥离
  • Linux小课堂: 软件安装与源码编译实战之从 RPM 到源码构建的完整流程
  • 【Python编程】之面向对象
  • Day67 Linux I²C 总线与设备驱动架构、开发流程与调试
  • 【AI增强质量管理体系结构】AI+自动化测试引擎 与Coze
  • 音频共享耳机专利拆解:碰击惯性数据监测与阈值减速识别机制研究
  • 青岛专业网站设计公司网站后台程序怎么做
  • MySQL创建用户、权限分配以及添加、修改权限
  • 【循环神经网络基础】
  • 郑州网站建设与设计校园网站建设年度总结
  • 中国新冠一共死去的人数网站优化和提升网站排名怎么做
  • 太仓手机网站建设阿里云如何做网站
  • 第二篇:按键交互入门:STM32 GPIO输入与消抖处理
  • JSP九大内置对象
  • 如何选择大良网站建设网站建设插件代码大全
  • 卡码网语言基础课(Python) | 17.判断集合成员
  • 温州专业网站建设成都营销推广公司
  • 淘客做网站还是做app佛山seo网站优化
  • 组合数常见的四种计算方法
  • 美容医疗服务小程序:功能集成,解锁一站式变美新体验
  • 网站建设的展望 视频搭建公司内部网站