CycleGAN-Unpaired图像翻译

在Pix2Pix中,输入图像数据都是成对的。但在现实生活中,两个不同领域的图像很难有成对的。莫奈的画很好,但莫奈永远也画不出21世纪的样子,所以我们不可能获得21世纪莫奈风格的图像。那么要想让21世纪的图像变成莫奈风格,就必须用到无pair数据。

在语言翻译中,常用的一种假设是Cycle一致性,即X语言翻译到Y语言在翻译回X语言,应该和初始的表达是一致的。而一言以蔽之,本文介绍的CycleGAN算法就是将这种Cycle一致性思维引入到图像翻译任务上来。

算法模型

本文的问题和算法框架与Pix2Pix一致。如果对Pix2Pix不了解的话,出门左转到Pix2Pix进行阅读。

其实之前有很多Unpaired Image Translation的算法出现。但是相对于它们,CycleGAN的优势在于:

  • 不依赖基于特定任务的预定义的输入和输出的相似度计算方法。
  • 不需要假设输入和输出在同一个低维embedding空间。

公式变量定义

  • X,Y:两个领域
  • {x}, {y}: 两个领域的图像集合
  • 映射G: X->Y
  • 映射F: Y->X
  • DX: 用于区分{x}和{F(y)}
  • DY: 用于区分{y}和{G(x)}

损失函数

首先是GAN Loss,对于映射G来说,GAN loss是:

对于映射F有一个类似的公式。

其次是Cycle GAN的核心, Cycle一致性Loss。所谓的Cycle一致性,就是要保证

  • 前向一致: x->G(x)->F(G(x))≈x
  • 后向一致: y->F(y)->G(F(y))≈y

表示成公式为:

最后汇总的损失函数是:

Why works

为什么Cycle一致性能够起作用?

对于Unpaired问题来说,只是用普通GAN的话可以学到的模型有很多种。种类数目为领域X和领域Y之间的随机映射数目。所以只是用普通GAN损失函数无法保证输入x能够得到对应领域的y。而Cycle一致性的出现,降低了随机映射的数目。从而保证得到的输出不再是随机的。

训练细节

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上线性下降。

实验

实验检测手法仍然是AMT和FCN-score,与Pix2Pix图像翻译相似。

对比baseline算法

  • CoGAN
  • Pixel Loss + GAN
  • Feaure Loss + GAN
  • BiGAN
  • Pix2Pix(在Pair数据上训练)


Loss function实验

对比普通GAN损失,GAN+前向一致性损失,GAN+后向一致性损失,CycleGAN

应用

  • Collection Style Transfer
  • Object Tranfiguration
  • Season Transfer
  • Photo Generation From Paintings
  • Photo Enhancement

更多效果图请参考Paper

总结

使用了普通的GAN和两个方向上的一致性损失解决了Unpair的图像翻译问题。虽然效果比Pix2Pix要差,但已经达到了能看的地步。

但Pix2Pix系列的GAN算法整体上来说,在色彩和纹理上能够达到较好的效果,在有几何学变换的时候,领域转换的效果不好。比如猫狗转换问题。

另外,Unpaired问题与Paired问题存在一个Gap,生成的图像总体上相差太远。为了解决这个混淆性,弱监督或者半监督可能会帮助提高效果。

Reference

  • [1]. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
  • [2]. Pix2Pix图像翻译
  • [3]. Perceptual Loss

你可能感兴趣的:(论文笔记)