论文Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
摘要:
图像到图像转换是一类视觉和图形问题,其目标是通过训练学习输入图片的风格,将其映射到框架类似的输出图片中。尽管对于很多任务而言,配对训练数据可遇不可求。我们提出了一种在没有配对的情况下从来源域 X 到目标域 Y 进行图像转换的方式。我们的目标是实现 G:X→ Y,其中 G(X) 的图像分布与使用对抗性损失分布的 Y 难以区分。因为映射非常不完全,我们将其以 F:Y→ X 的方式建立映射,同时引入循环一致性损失函数来推动 F(G(X))≈X(反之亦然)。我们在无法配对的训练数据中演示了新方法的成果,其中包括风格迁移、材质改变、季节变化、图像增强等。我们业余之前一些方法进行了定量比较,展示了新方法的优越性。
变量定义:
CycleGAN与pix2pix模型的对比
pix2pix也可以做图像变换,它和CycleGAN的区别在于,pix2pix模型必须要求成对数据(paired data),而CycleGAN利用非成对数据也能进行训练(unpaired data)。
比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛,利用CycleGAN就可以做出更多有趣的应用。
原理:
实现的功能就是将一类图片转换成另一类图片。也就是说,现在有两个样本空间,X和Y,我们希望把X空间中的样本转换成Y空间中的样本。
我们再假设一个映射G,它可以将Y空间中的图片y转换为X中的图片G(y)。CycleGAN同时学习F和G两个映射,并要求 F(G(x))≈x和G(F(y))≈y 。也就是说,将X的图片转换到Y空间后,应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了。由此,循环一致性损失就定义为:
训练细节:
CycleGAN算法仍然是GAN算法,所以需要定义G模型和D模型。在CycleGAN中,G的模型结构与Perceptual Loss中一致,且使用instance normalization。
模型D则是70x70的PatchGAN中的D。这样的D在Pix2Pix图像翻译模型中也有使用,能够使用较少的参数和应用到更大的图像上。
为了使GAN的训练更加稳定,使用平方损失而不是Log似然。
为了减少震荡,使用历史生成图片而不是最新生成图片来进行D的训练。具体为缓存50张历史生成图像。
其他细节:
- λ=10
- Adam 优化算法
- learning rate前100个epoch为0.0002,在下100个epoch上线性下降。
部分实验结果:
缺点:
在有几何学变换的时候,领域转换的效果不好。比如猫狗转换,橘子变苹果。
Pytorch版本(仍旧是作者实现的):https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix