CycleGAN讲解

论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
作者:Jun-Yan Zhu
年份:2017
期刊: IEEE International Conference on Computer Vision

介绍

在这里插入图片描述
本文提出了一种在没有配对示例的情况下学习将图像从源域X转换为目标域Y的方法。目标:学习一个映射G:X→Y,使得来自G(X)的图像分布与D的分布在对抗性损失下无法区分。由于此映射的约束严重不足,将其与逆映射F:Y→X耦合,并引入循环一致性损失以推动F(G(X))≈X(反之亦然)。
(将图像从给定场景x的一种表示转换为另一种y,例如,将灰度转换为颜色,将图像转换为语义标签,将边缘映射转换为照片。)
翻译G:X→Y和另一个翻译器F:Y→X,则G和F应该彼此相反,并且两个映射都应该是双射。通过同时训练映射G和F来应用这个结构假设,并增加了循环一致性损失鼓励F(G(x))≈x和G(F(y))≈y。将这种损失与X和Y域上的对抗损失结合起来,就得到完整的未配对图像转换目标。我们将我们的方法应用于各种应用程序,包括样式转移,对象变形,属性转移和照片增强。
在这里插入图片描述
相关工作
受GAN影响,采用对抗性损失来学习映射,从而无法将翻译的图像与目标域中的图像区分开。
本文公式不依赖于输入和输出之间的任何特定于任务的、预定义的相似函数,也不假设输入和输出必须位于相同的低维嵌入空间。
本文引入了一个类似的损失来推动G和F相互一致。
本文主要关注点是学习两个域之间的映射,而不是两个特定图像之间的映射,方法是尝试捕获高级外观结构之间的对应关系。

公式

3.1 对抗性损失

使生成的图片在分布上更接近于目标图片
在这里插入图片描述
G:尝试生成类似于域Y的图像的图像G(x),DY:区分翻译后的样本G(x)和实际样本y。 同时引入映射函数F:Y→X即(LGAN(F,DX,Y,X))
当映射G 试图生成与数据域Y相似的图片 G(x) 的时候,判别器也在试着将生成的图片从原图中区分出来。映射G希望通过优化减小的项目与映射F希望优化增大的项目相对抗,另一个映射F 也是如此。这两个相互对称的结构用公式表达就是
在这里插入图片描述

3.2 循环一致性损失

防止学习的映射G和F相互矛盾
为了进一步减少可能的映射函数的空间,认为学习的映射函数应该是周期一致的,对于来自域X的每个图像x,图像转换周期应该能够带来x回到原始图像,即x→G(x)→F(G(x))≈x,称为前向循环一致性。对于来自域Y的每个图像y,G和F还应满足反向循环一致性:y→F(y)→G(F(y))≈y。使用周期一致性损失来激励这种行为:
在这里插入图片描述

3.3 完整目标

在这里插入图片描述
λ控制两个目标的相对重要性,希望解决映射的学习问题:
在这里插入图片描述
本文模型可以看作是训练两个“自动编码器”:F◦G:X→X和G◦F:Y→Y。在本文中,X→X自动编码器的目标分布是域Y的目标分布。
4 实现
网络结构:包含两个步长为2 的卷积层,几个残差模块,两个步长为1/2 的转置卷积层。使用了6个模块去处理 128x128 的图片,以及9个模块去处理256x256的高分辨率训练图片。本文使用 70x70 的PatchGANs 作为判别器网络,这个网络用来判断图片覆盖的70x70补丁是否来自于原图。比起全图的鉴别器,这样的补丁层级的鉴别器有更少的参数,并且可以以完全卷积的方式处理任意尺寸的图像。
在这里插入图片描述
使用两种技术来使得训练更加稳定。
(1)对于公式(1),使用最小二乘损失替换负的log似然损失。利用该损失训练过程更稳定,且得到了更好的结果:
(2)为了减少模型的波动,在更新识别器DX和DY时,使用前段时间已生成的图片,而不是进几次迭代生成的图片。保留了一个图像缓冲区,用来存储50幅以前生成的图像。
比较了本文方法与最近的方法在同一个数据集上的未配对图像对图像的转化。然后研究了对抗性损失和循环一致性损失的重要性,并将我们的完整方法与几个变量进行了比较。最后,我们证明了我们的算法在非配对数据的应用中的通用性。本文方法称为CycleGAN。
局限:在涉及颜色和纹理更改的翻译任务上通常会成功,在几何改变是会失败(狗→猫)
失败的例子
在这里插入图片描述
失败的例子

猜你喜欢

转载自blog.csdn.net/demo_jie/article/details/106725136