Cycle-GAN论文阅读笔记
很久之前就看过这篇文章,而且还在上面做了一些实验,发现确实鲁帮性很强,今天重新review这一篇paper。
图像到图像的翻译,是一个比较古老的任务,作者是第一个用cycle-consistent结合gan这种思想来做图像翻译,而且效果显著。
introduction and motivation
paired training data会比较难以获取,unpaired比较容易获取,针对这个问题,作者提出了他们的方法。从(X) domain到(Y) domain会有无数个映射,而且作者在做实验的过程中,发现模型容易崩溃,而且无论什么样子的输入都会导致同一个输出。这一系列的问题使得需要添加一些其他的目标约束在网络架构里。一个直观的想法就是循环一致性,意思是,一个句子从英文翻译到法文,并且从法文翻译回英文,得到的英文和原始英文应该是一致的。从数学上来讲,如果有一个映射(G:X ightarrow Y),以及另外一个映射(F:Y ightarrow X),(G)和(F)应该是互为inverse的关系。
根据这个出发点 ,作者分别在网络中添加了(G)和(F),并且添加了循环一致性的loss来使得网络满足(F(G(x))approx x)以及(G(F(y))approx y),除此之外,作者还添加了adversarial loss来约束generator。
网络结构
网络结构的detail作者并没有绘制,只是画了一个流程的示意图
网络结构示意图如上图所示。作者定义了两个discriminator,同时也势必有两个discriminator
loss term一共包括两项,一个是adversarial loss一个是cycle consistency loss。其中adversarial loss是衡量生成图像的分布和目标区域的距离。cycle consistency loss是为了阻止(F)和(G)互相矛盾。
目标函数如下图
(D_Y)是对生成的(Y),即(G(x))和真实的(Y)进行判别,这个判别其区别与对x进行判别的(D_X)。总是,(D_Y)的优化方向是使得其能够准确的判别生成的样本和fake的样本,也即loss最小,通过上述loss,能够看出,使得loss最小即使得(D_Y(y))接近于0,(D_Y(G(x)))接近于1.之后的很多gan的变形都是玩变不离其宗。
对于cycle consistency loss,比较粗暴,直接用L1 loss
total的loss如下
实验设定
作者做实验,用的图像是256×256的,并且使用的是70×70的patch gan(实际上是感受野为70×70的discriminator),在真正实验的时候,作者用least-square GAN替代了原始的gan,因为least-square gan更加的稳定,举个例子
上面这个式子,(G)的优化目标是让(D(G(x)))更加接近与1,而(D)的优化目标是让啊(D(G(x)))更加接近与0,同时使得(D(y))接近于1,trade off!!!
作者做实验用的batch size为1,很多图像任务里面都是1,以及用的是instance normalization。initial 的learning rate为0.0002,在前100个epoch keep the same learning rate,在后100个epoch,线性变为0.
评价指标
第一个评价指标是AMT perceptual study, 就是根据人眼来直观评价图像真假。
第二个评价指标是FCN score来评价“label to photo”这个task。
同时作者在处理分割任务中,也用了一些分割任务中的评价指标。
实验结果
作者首先和最近的unpaired image2image的方法相比较,注意这种unpaired的图像在每一个domain是有ground truth的,所以作者可以进行定量的比较。然后作者探讨了cycle consistency loss和adversarial loss。最后,作者把他们的方法推广到了更加一般的没有gt的图像翻译任务上面。
作者的baseline包括pixel2pixel,以及一些其他的方法,来一起compare这些指标。作者的结果能够达到是sota的结果。
ablation study
同时作者也比较了,如果用Cycle alone,或者是只有一个cycle,试验结果也不如都添加上好。假设不添加discriminator,只用循环一致性来约束的话,
即只用cycle-alone,结果比较差;只用GAN,不用cycle约束的话,结果也没那么差,相对于只用cycle约束的话,也会好很多。
如果只加一个forward cycle的话,在label2photo这个任务中,感觉结果会比添加forward cycle 和backward cycle要好,amazing,作者也没有讨论其原因。在photo2label这个任务中有截然不同的结果。
同时作者比较了一下重建的结果
可见重建的结果也是挺好的。
作者在其他任务上,也广泛的应用了cycle-gan,比如style transfer, 目标物体变形等。但是也有失败的例子,文中作者就说了不能够保持物体的几何形状。