CycleGAN
1、四个问题
- 要解决什么问题?
- 图像翻译任务(image-to-image translation problems),域转换任务。
- 用了什么方法解决?
- 提出了CycleGAN的网络结构。
- 目的是:通过使用一组对抗损失,学习到一个映射,使得生成的样本的分布难以跟真实样本的分布区分开来。
- 同样也要保证,通过另一组对抗损失,学习到一个与相反的映射,并能够保证cycle consistency,即,反之同理。
- 效果如何?
- 在图像翻译、风格转换、季节转换等任务上超过之前的模型。
- 能够使用不成对的数据进行训练,cycleGAN会自动学习不同域之间的风格特征。
- 还存在什么问题?
- CycleGAN的训练重度依赖于数据,如果数据质量不好,或是混入较多错误样本,可能会导致灾难性的后果。
- CycleGAN相对难以收敛,直接对映射进行约束训练的难度较大。
2、论文概述
2.1、基本思路
- 条件对抗生成网络(CGAN)是图像翻译问题的一种通用方案。对于这类网络来说,不仅仅会学习图像到图像的映射关系,还会自适应地学习一个损失函数来训练这层映射关系。
- CycleGAN思路参考自机器翻译的研究工作:
- 在机器翻译中,语言与语言之间几乎不存在一一对应关系,可能是多对一也可能是一对多,难以建立标签。因此就有研究者提出,在语言转换过程中引入一致性假设,即:英语翻译为法语,再将其翻译为英语,要保证两次翻译前后的语句尽可能近似。
- 因此,作者提出在图像翻译中引入cycle consistency。即假设有从域到域的映射,又有从域到域的映射,这两个映射要满足前面提到的cycle consistency:
- 使用映射从域转到域,再使用映射从域映射回域,得到,前后要保证L2损失:尽可能小。
- 使用映射从域转到域,再使用映射从域映射回域,得到,前后要保证L2损失:尽可能小。
- 在cycle consistency之外加入两个对抗损失(adversarial loss),构成两个GAN,最后组合起来就是一个CycleGAN模型。
2.2、方法
- 如图所示,是一个CycleGAN的基本结构:
- 对抗损失(Adversarial Loss):
- CycleGAN实际上可以看做是由两个单向的GAN组成的。
- 第一组GAN是:映射和判别器。 损失函数如下:
- 生成器试着去生成图像,并使其尽可能类似于域内的样本,同时尝试去区分生成的样本和真实样本。试图去最小化目标函数,而判别器则尽可能地最大化它,如:
- 第二组GAN与第一组近似,映射关系相反:,以及判别器。
- 与第一组GAN同理,可以构造对抗损失,不做赘述。
- 优化关系也类似:
- Cycle Consistency Loss:
- 仅从理论上来说,使用对抗损失来学习映射和,可以分别学习到域和间的转换关系。
- 在学习映射和映射的过程中,其实更近似与在随机的高维映射函数空间中搜索一组合适的函数。而仅仅依靠对抗损失,往往很难保证学习到有效的映射函数。为了减少在搜索空间中可能的函数选择,还需要加入额外的映射约束。
- 由此,作者提出了cycle consistency函数的概念:
- 作者认为,除了使用原始的对抗损失对映射和映射进行约束之外,这两个映射函数还需要具有cycle consistency的性质。
- 对于图像域的图像,在转换到域后,还要保证能够转换回域后能得到原始图像。,文中称其为forward cycle consistency。
- 类似地,对于图像域的图像,在转换到域后,还要保证能够转换回域后能得到原始图像。,文中称其为backward cycle consistency。
- 公式如下:
- 完整目标函数:
- 控制两个损失的相对关系。
- 最终希望得到的最优生成器是:
2.3、效果
- 总体来说,CycleGAN的效果还是很不错的,论文给出了很多实验结果,不做赘述了。