Cycle-GAN论文阅读笔记

Cycle-GAN论文阅读笔记

很久之前就看过这篇文章,而且还在上面做了一些实验,发现确实鲁帮性很强,今天重新review这一篇paper。

图像到图像的翻译,是一个比较古老的任务,作者是第一个用cycle-consistent结合gan这种思想来做图像翻译,而且效果显著。

introduction and motivation

paired training data会比较难以获取,unpaired比较容易获取,针对这个问题,作者提出了他们的方法。从\(X\) domain到\(Y\) domain会有无数个映射,而且作者在做实验的过程中,发现模型容易崩溃,而且无论什么样子的输入都会导致同一个输出。这一系列的问题使得需要添加一些其他的目标约束在网络架构里。一个直观的想法就是循环一致性,意思是,一个句子从英文翻译到法文,并且从法文翻译回英文,得到的英文和原始英文应该是一致的。从数学上来讲,如果有一个映射\(G:X\rightarrow Y\),以及另外一个映射\(F:Y\rightarrow 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如下

1579591309484

1579591331035

实验设定

作者做实验,用的图像是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, 目标物体变形等。但是也有失败的例子,文中作者就说了不能够保持物体的几何形状。

posted on 2020-01-21 16:29  YongjieShi  阅读(950)  评论(0编辑  收藏  举报

导航