对应论文:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》
CycleGAN 是 Jun-Yan Zhu 等人于17年3月份提出的生成对抗模型,模型理论与 pix2pix 非常相似。该模型的作用是 将一类图片转换成另外一类图片。具体点来讲,有 X 和 Y 两个图像域 (比如马和斑马),CycleGAN能够将图像域X的图像 (马) 转换为图像域Y的图像 (斑马) ,或者是将图像域Y的图像 (斑马) 转换为图像域X的图像 (马) 。
相较于 pix2pix 模型,CycleGAN 最大的创新在于 能够利用非成对数据(unpaired data)进行训练。比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用 pix2pix 模型,那么我们必须在搜集大量地点在白天和夜晚的两张 对应图片,而使用 CycleGAN 只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此,CycleGAN 的拓展性更好,应用更加广泛。
在论文中,作者给出了几个该模型应用的具体例子,比如将马和斑马相互转化,苹果和橘子相互转化,冬季和夏季相互转化,油画和风景相互转化等。
【CycleGAN Project Page】
https://junyanz.github.io/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
G: X→Y
G:X→Y,
F
:
Y
→
X
F: Y→X
F:Y→X,以及两个对应的判别器
D
X
D_X
DX 和
D
Y
D_Y
DY。判别器
D
X
D_X
DX 的目标是区分来自图像域 X 的真实图像和转换的图像
F
(
y
)
F(y)
F(y),同理
D
Y
D_Y
DY 的目标是区分来自图像域 Y 的真实图像和转换的图像
F
(
x
)
F(x)
F(x)。
CycleGAN 最大的创新在于引入了 循环映射 和 Cycle Consistency Loss(循环一致性损失)。
具体网络结构
CycleGAN的的生成网络采用(Johnson等人)的架构,他们在神经网络的风格转移和超分辨率方面取得了令人印象深刻的成果。该网络包含两个步长为2的卷积层,几个 残差层(residual blocks) 和两个1/2卷积(反卷积?
)。参考(Johnson等人)的做法,CycleGAN使用了 instance normalization 。
对于鉴别器网络,我们使用了 70x70 的 PatchGANs,目的是对 70x70 的重叠图像块进行真伪判别。这种 patch-level 的判别器结构的参数比 full-image 的鉴别器少,并且可以以完全卷积的方式应用于任意大小的图像。
损失函数
Adversarial Loss(对抗损失)
在对抗损失函数中,生成器G试图生成和图像域Y相似的图片,判别器DY尝试去区分转换的图片 G(x) 和真实的图片y。
Cycle Consistency Loss(循环一致性损失)
理论上,对抗性训练可以训练映射G和F产生和目标域Y和X相同分布的输出。然而,网络可以将同一组输入图像映射到目标域中的任意随机的图像,比如映射F完全可以将所有x都映射为Y空间中的同一张图片(mode collapse),或者是与原图完全不相关的图片。
所以作者主张(直觉)学习的映射函数应该是循环一致的——图像如果一个域转换到另一个域,然后再转换回来,是可以回到原点的。
Full Objective(总损失)
训练策略
为了让模型的训练过程更加稳定,作者 借鉴了LSGAN,对 adversarial loss (对抗损失)进行了改进。用最小二乘损失代替了负对数似然目标。这种损失在训练中表现得更稳定,并产生更高质量的结果。
其次,为了减少模型振荡,作者遵循(Shrivastava等人)的策略,并使用生成图像的历史来更新鉴别器DX和DY,而不是使用最新生成网络生成的图像。我们保存了一个图像缓冲区,它存储了之前生成的50个图像。
二、CycleGAN实现
待补充