论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
GitHub:CycleGAN
部分图像翻译算法存在的问题
许多图像翻译算法需要一一对应的图像。可是在许多应用场景下,往往没有这种一一对应的强监督信息。比如说以下一些应用场景:
以第一排第一幅图为例,要找到这种一一配对的数据是不现实的。在这篇paper中,作者提出了一种非常惊艳巧妙的办法。绕过了这种一一对应的数据。
作者提出的算法
模型结构
总体思路如下,假设有两个域的数据,记为A,B。对于上图第一排第一幅图A域就是普通的马,B域就是斑马。由于A->B的转换缺乏监督信息,于是,作者提出采用如下方法进行转换:
a. A->fake_B->rec_A
b. B->fake_A->rec_B
对于A域的所有图像,学习一个网络G_B,该网络可以生成B。对于B域的所有图像,也学习一个网络G_A,该网络可以生成G_B。
训练过程分成两步,首先对于A域的某张图像,送入G_B生成fake_B,然后对fake_B送入G_A,得到重构后的A图像rec_A。对于B域的某一张图像也是类似。重构后的图像rec_A/rec_B可以和原图A/B做均方误差,实现了有监督的训练。此处值得注意的是A->fake_B(B->fake_A)和fake_A->rec_B(fake_B->rec_A)的网络是一模一样的。下图是形象化的网络结构图:
cycleGAN的生成器采用U-Net,判别器采用LS-GAN。
Loss设计
总的Loss就是X域和Y域的GAN Loss,以及Cycle consistency loss:
整个过程End to end训练,效果非常惊艳,利用这一框架可以完成非常多有趣的任务