CycleGAN简介及使用

近期在看相关论文时,在论文中发现了这个好玩的一个深度学习GAN的模型,

回顾GAN

传统的GAN是单向的,网络中有生成器G(generator)和鉴别器(Discriminator)两部分组成。
假设两个数据域分别为X,Y。G 负责把X域中的数据拿过来拼命地模仿成真实数据并把它们藏在真实数据中让D猜不出来,而 D 就拼命地要把伪造数据和真实数据分开。经过二者的博弈以后,G 的伪造技术越来越厉害,D 的鉴别技术也越来越厉害。直到 D 再也分不出数据是真实的还是 G 生成的数据的时候,这个对抗的过程达到一个动态的平衡。

图片

GAN损失计算:

单向GAN需要两个loss:生成器的重建Loss和判别器的判别Loss。
重建Loss:希望生成的图片Gba(Gab(a))与原图a尽可能的相似。

判别Loss:生成的假图片和原始真图片都会输入到判别器中。公式为0,1二分类的损失。

CycleGAN

CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。两个GAN共享两个生成器,并各自带一个判别器,即共有两个判别器和两个生成器。一个单向GAN两个loss,两个即共四个loss。

图片

作者使用均方误差损失表示:

CycleGAN的网络架构如图所示:

图片

图片

可以实现无配对的两个图片集的训练是CycleGAN与Pixel2Pixel相比的一个典型优点。但是我们仍然需要通过训练创建这个映射来确保输入图像和生成图像间存在有意义的关联,即输入输出共享一些特征。

简而言之,该模型通过从域DA获取输入图像,该输入图像被传递到第一个生成器GeneratorA→B,其任务是将来自域DA的给定图像转换到目标域DB中的图像。然后这个新生成的图像被传递到另一个生成器GeneratorB→A,其任务是在原始域DA转换回图像CyclicA,这里可与自动编码器作对比。这个输出图像必须与原始输入图像相似,用来定义非配对数据集中原来不存在的有意义映射。

生成器

生成器由编码器、转换器和解码器构成。

 

生成器结构

  • 编码:第一步利用卷积神经网络从输入图象中提取特征。将图像压缩成256个64*64的特征向量。
  • 转换:通过组合图像的不相近特征,将图像在DA域中的特征向量转换为DB域中的特征向量。作者使用了6层Reset模块,每个Reset模块是一个由两个卷积层构成的神经网络层,能够达到在转换时同时保留原始图像特征的目标。
  • 解码:利用反卷积层(decovolution)完成从特征向量中还原出低级特征的工作,最后得到生成图像。

鉴别器

鉴别器将一张图像作为输入,并尝试预测其为原始图像或是生成器的输出图像。

鉴别器本身属于卷积网络,需要从图像中提取特征,再通过添加产生一维输出的卷积层来确定提取的特征是否属于特定类别。

man2woman实验

分别有大约2万张男人与女人的脸作为输入的训练集。

TensorFlow上CycleGAN的实现代码:
https://github.com/vanhuyz/CycleGAN-TensorFlow.git
工具:pycharm+python3.6+TensorFlow

参考链接

https://yq.aliyun.com/articles/229300

 

 

 

 

 

 

 

 

 

 

 

### CycleGAN简介 CycleGAN是一种无监督图像到图像翻译模型,能够学习两个不同域之间的映射关系而无需成对训练样本。该网络架构由两个生成器和两个判别器组成,通过循环一致性损失来保持输入输出间的语义关联[^1]。 ```python from keras.layers import Input, Conv2D, LeakyReLU, Activation, Concatenate from keras.models import Model def build_generator(): """ 构建生成器 """ input_img = Input(shape=(None, None, 3)) # Encoder layers... # Transformation layer # Decoder layers... generated_image = ... # 完整层定义省略 model = Model(input_img, generated_image) return model ``` ### 使用教程概述 对于希望基于Keras框架利用TensorFlow后端部署CycleGAN的研究人员而言,存在专门针对这一需求设计的开源项目——CycleGAN-Keras[^2]。该项目提供了详细的安装指南以及如何准备数据集的具体说明,使得开发者可以快速上手构建自己的跨领域图像转换应用程序。 #### 数据预处理阶段 为了使模型有效工作,在开始之前需准备好源域A与目标域B的数据集合,并对其进行标准化处理以便更好地适应神经网络的要求。通常情况下会涉及到裁剪、缩放等操作让所有图片具有相同的尺寸规格。 #### 训练过程描述 一旦完成了前期准备工作,则可以通过调用`train.py`脚本来启动整个训练流程。在此期间,用户还可以自定义超参数设置如批次大小(batch size),迭代次数(epochs)以及其他可能影响最终效果的因素。值得注意的是,由于采用了对抗性训练机制,因此在整个过程中应当密切监控生成质量和稳定性指标的变化趋势。 #### 测试与评估环节 当训练完成后,就可以加载保存下来的权重文件来进行新样例预测测试了。此时可借助提供的工具函数轻松完成从一种风格向另一种风格转变的任务可视化展示。此外,也支持导出转换后的结果作为静态图像文件供进一步分析研究之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值