CycleGAN是Jun-Yan Zhu等人于17年3月份提出的对抗神经网络模型,模型理论与pix2pix非常相似。CycleGAN的的作用是 将一类图片转换成另外一类图片。具体点说,有两个图像域X和Y(比如马和斑马),CycleGAN能够将图像域X的图像(马)转换为图像域Y的图像(斑马),或者是将图像域Y的图像(斑马)转换为图像域X的图像(马)。
相较于pix2pix模型,CycleGAN其最大的贡献在于能够 利用非成对数据(unpaired data)进行训练。比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此 CycleGAN的拓展性更好,应用更加广泛。
在论文中,作者给出了几个该模型应用的具体例子,比如将马和斑马相互转化,苹果和橘子相互转化,冬季和夏季相互转化,油画和风景相互转化等。
【文章链接】:
https://arxiv.org/abs/1703.10593
【CycleGAN Project Page】:
https://junyanz.github.io/CycleGAN/
【参考代码】:
[1] (Official Implementation)https://github.com/junyanz/CycleGAN
[2] https://github.com/floft/cyclegan
[3] https://github.com/nnUyi/CycleGAN/blob/master/CycleGAN.py
网上也有一些比较好理解的代码,比如[2]仅用了一个文件,实现斑马和马的转换,[3]用少量文件实现图像风格的转换。这边我们用的是基于下面代码的简单实现:https://github.com/architrathore/CycleGAN
【参考解读】:
[1] 对抗生成网络学习(三)——cycleGAN实现Van Gogh风格的图像转换(tensorflow实现)
[2] 可能是近期最好玩的深度学习模型:CycleGAN的原理与实验详解
[3] 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服
另外,与CycleGAN同时提出的相似模型还包括DiscoGAN,DualGAN。其与DiscoGAN和DualGAN的区别可以参考下面文章的说明。
[4] 干货 | 孪生三兄弟 CycleGAN, DiscoGAN, DualGAN 还有哪些散落天涯的远亲
为了实现两个域X和Y之间的相互映射,CycleGAN包含两个映射网络(也可以说是生成器):G: X→Y, F: Y→X,以及两个相关的判别器 Dx 和 Dy。判别器 DX 的目标是区分来自图像域X的真实图像和转换的图像F(y),同理 DY 的目标是区分来自图像域Y的真实图像和转换的图像F(x)。
CycleGAN最大的创新突破在于引入了循环映射和Cycle Consistency Loss(循环一致性损失)。
CycleGAN的的生成网络采用(Johnson等人)的架构,他们在神经网络的风格转移和超分辨率方面取得了令人印象深刻的成果。该网络包含两个步长为2的卷积层,几个 残差层(residual blocks) 和两个1/2卷积(反卷积?
)。参考(Johnson等人)的做法,CycleGAN使用了 instance normalization 。
对于鉴别器网络,我们使用了 70x70 的 PatchGANs,目的是对 70x70 的重叠图像块进行真伪判别。这种 patch-level 的判别器结构的参数比 full-image 的鉴别器少,并且可以以完全卷积的方式应用于任意大小的图像。
在对抗损失函数中,生成器G试图生成和图像域Y相似的图片,判别器DY尝试去区分转换的图片 G(x) 和真实的图片y。
理论上,对抗性训练可以训练映射G和F产生和目标域Y和X相同分布的输出。然而,网络可以将同一组输入图像映射到目标域中的任意随机的图像,比如映射F完全可以将所有x都映射为Y空间中的同一张图片(mode collapse),或者是与原图完全不相关的图片。
所以作者主张(直觉)学习的映射函数应该是循环一致的——图像如果一个域转换到另一个域,然后再转换回来,是可以回到原点的。
为了让模型的训练过程更加稳定,作者 借鉴了LSGAN,对 adversarial loss (对抗损失)进行了改进。用最小二乘损失代替了负对数似然目标。这种损失在训练中表现得更稳定,并产生更高质量的结果。
其次,为了减少模型振荡,作者遵循(Shrivastava等人)的策略,并使用生成图像的历史来更新鉴别器DX和DY,而不是使用最新生成网络生成的图像。我们保存了一个图像缓冲区,它存储了之前生成的50个图像。
待补充
待补充