CycleGAN论文精读

目的

CycleGAN主要解决的问题是一个Image to Image Translation的问题,也就是从一个图像域转化到另一个图像域的问题,比如说给一张人脸图片,生成对应的动漫头像,还有比如说我们给一个cartoon的图像,需要生成对应的像素化后的图像 (pixel image)。 其次,传统的Image to Image Translation的算法通常需要我们有配对的图像组,但是很显然这是很耗费时间的,也很难获得配对图像。所以CycleGAN提出了一种使用unpaired training set的方法,只需要给定对应两个图像域而不需要配对的图像,我们就可以实现Image to Image的转化。

算法

CycleGAN在GAN的基础上提出了循环一致性损失 (cycle consistency loss)[[GAN论文精读]],不同于GAN从噪声生成相应的图片,CycleGAN的做法是准备非配对的两个图像域的数据集,训练两个GAN网络,一个用来将图像从A域转化到B域,另一个用来将图像从B域转化到A域。在训练过程中,有正反两个过程 (Forward Backward),正向过程首先将图片从A域转化为B域,然后在用另一个网络将生成的假B域的图片再转化成A域的图片,然后用生成回去的图像和原来的输入图像作差,也就是cycle consistency loss,我们希望这个loss尽可能小,也就是经过两次转化之后的图像能够和原来的图像尽可能相像。同样的,在反向过程中,我们从B到A,再A到B,再做一次cycle consistency loss。数学表示就是 \[ \begin{align} \text{forward: }&x\rightarrow G(x)\rightarrow F(Gx)\approx x \\ \text{backward: }&y\rightarrow F(y)\rightarrow G(F(y))\approx y \end{align} \]

为什么要这么做呢?如果说我们不采用正反两个过程和cycle consistency loss,我们就用一个GAN网络从A生成到B,那么可能会造成生成的图片虽然看着确实是B域的图片,但是它实际上和输入的图片已经没有关系了,甚至可能任何A域中的图片输入到网络中得到的B域图片都是一样的,也就造成了模式崩溃问题 (Mode collapse)。而使用cycle consistency loss可以保证生成的图片的内容和原来的图片是相符的。

参考资料