论文链接:https://arxiv.org/abs/1703.10593
1. 介绍
图像翻译是指将图片内容从一个域转换到另一个域。这类任务一般都需要两个域中具有相同内容的成对图片作为训练数据。比如在pix2pix中,要将白天的图片转换成夜晚的图片(图 1),那么就需要将同一个地方的白天和夜晚的图片作为一对训练数据对模型进行训练。但是这种成对的训练数据很难获得。
CycleGAN的创新点就在于其能够在没有成对训练数据的情况下,将图片内容从源域迁移到目标域。CycleGAN在训练时,只需要将源域的图片和目标域的图片作为输入即可,这里并不要求源域跟目标域的图像内容是匹配的。
2. 方法
CycleGAN的核心理念是,如果有一个图像风格转换器 G 可以将 X 域的图片转换为 Y 域的风格,而 F 可以将 Y 域的图片转换为 X 域的风格,那么 G 和 F 应该是互逆的。也就是说, X 域的图片经过 G 转换为 \hat{Y} 之后,\hat{Y}应该可以通过 F 转换为 X 。同样地, Y 域的图片经过 F 转换为 \hat{X} 之后,\hat{X}应该可以通过 G 转换为 Y 。即:F(G(x))=x ; G(F(y))=y 。为了实现这一个Cycle Consistency,论文使用了一个Cycle Consistency Loss :
L_{cyc}(G,F) = E_{x\sim p_{data}(x)}[\left \| F(G(x)) - x \right \|_{1}] + E_{y\sim p_{data}(y)}[\left \| G(F(y)) - y \right \|_{1}]
CycleGAN的模型同时训练两个原始GAN:生成器G、F 和判别器 D_Y、D_X 。G 用于将 X 域的图片转换成 Y 域风格的图片,D_Y则分辨 \hat{Y} 的真假, F 将 Y 域的图片转换成 X 域的风格,D_X则判别 \hat{X} 的真假。这里用了两个原始GAN的loss:
L_{GAN}(G,D_{Y},X,Y) = E_{y\sim p_{data}(y)}[log D_Y (y)] + E_{x\sim p_{data}(x)}[log (1-D_Y (G(x))]
L_{GAN}(F,D_{X},Y,X) = E_{x\sim p_{data}(x)}[log D_X (x)] + E_{y\sim p_{data}(y)}[log (1-D_X (F(y))]
所以CylceGAN总的目标函数是如下,\lambda 作为超参数控制Cycle Consistency 的重要性。
使用Cycle Consistence Loss 之后,将 x 通过 G(x) 转换之后,再通过 F(G(x)) 重建的效果如下:
3. 效果
论文先将CycleGAN 跟当时的一些图像风格转换的方法在具有成对图像的数据集上进行比较。在这里,用完全监督的方法pix2pix作为上界。可以看到,CycleGAN 生成的图片对于除pix2pix以外的方法来说效果好很多。而相对于pix2pix,CycleGAN 生成的图片虽然不够清晰,但基本接近。
接着,论文又研究了CycleGAN 的目标函数中每一部分所起的作用,效果如下(总的来说,每一部分都很重要)
4.总结
CycleGAN 解决了pix2pix 必须使用成对数据进行训练的问题,原理比较简单,但非常有效。只需要不同域的一系列图片即可进行训练。类似的工作还有DualGAN,DiscoGAN。三者的想法和模型基本一样,发在了不同的地方。。