GAN系列之(二)------CycleGAN

论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks https://arxiv.org/abs/1703.10593
代码:https://github.com/MJJ-5650/PyTorch-GAN/tree/master/implementations/cyclegan

1. 什么是CycleGAN

它们的功能就是:自动将某一类图片转换成另外一类图片。
作者在论文中也举了一些例子,比如将普通的马和斑马进行互相转换,将苹果和橘子进行互相转换:

把照片转换成油画风格

将油画中的场景还原成现实中的照片
GAN系列之(二)------CycleGAN_第1张图片

2.CycleGAN的原理解析

CycleGAN的原理可以概述为:将一类图片转换成另一类图片。也就是说,现在有两个样本空间,X和Y,我们希望把X空间中的样本转换成Y空间中的样本。
所以CycleGAN目标就是学习从X到Y的映射
假设这个映射为G。它就对应着GAN中的生成器,G可以将X中的图片x转换为Y中的图片G(x)。使得来自于G(X)的图片的分布与分布Y无法区分。
对于生成的图片,我们还需要GAN中的判别器来判别它是否为真实图片,由此构成对抗生成网络。设这个判别器为 DY 。
根据这里的生成器和判别器,构造GAN损失,表达式为:
对于映射函数G:X→Y和它的识别器DY,目标函数为:

在这里插入图片描述
其中,G的作用是生成图片G(x),且看起来就像目标域Y的图片,DY的作用是区分生成的G(x)和真实的样本y。
同样的,对于映射F:Y→X,有:
在这里插入图片描述
可以看到这个损失和GAN的损失是一样的。
但单纯的使用这一个损失是无法进行训练的。原因在于,**映射G完全可以将所有x都映射为Y空间中的同一张图片,使损失无效化。**对此,作者又提出了所谓的“循环一致性损失”(cycle consistency loss)。

于是有下面的假设:
假设一个映射F,它可以将Y空间中的图片y转换为X中的图片F(y)。CycleGAN同时学习F和G两个映射,并要求
在这里插入图片描述
也就是说,**将X的图片转换到Y空间后,应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了
**
如何解决呢?作者发现在迁移过程中有这样一个特性——”循环一致性“。比如:我们将一个句子从英语翻译到法语,再将其翻译回英语,我们应该得到与原始的英文相同的句子。
用数学符号来表示下:
我们有一个转换器(映射):G:X→YG:X→Y,
和另一个转换器F:Y→XF:Y→X。
那么G和F应该是互逆的,即两者是一个双向映射。于是可以同时训练G和F来确保这个性质,增加一个循环一致性损失,使得F(G(x))≈xF(G(x))≈x以及G(F(x))≈yG(F(x))≈y。组合该损失和对抗损失,就得到了我们整体的非正对的图像到图像迁移的优化目标。
GAN系列之(二)------CycleGAN_第2张图片

给定训练集样本{xi}Ni=1∈X{xi}i=1N∈X{yj}Mj=1∈Y{yj}j=1M∈Y。
如图-3(a)所示,模型包含两个映射:G:X→YG:X→Y和F:Y→XF:Y→X。此外,引入两个对抗的判别器DXDX和DYDY,DXDX的作用是用来判别{x}{x}和{F(y)}{F(y)};DYDY的作用是用来判别{y}{y}和{G(x)}{G(x)}。
根据上面的要求,则循环一致性损失就可以为:
在这里插入图片描述
同时,为F也引入一个判别器DX ,由此可以同样定义一个GAN的损失

则最终的损失为:
在这里插入图片描述
最终想要的是:
GAN系列之(二)------CycleGAN_第3张图片

参考:https://zhuanlan.zhihu.com/p/37198143

你可能感兴趣的:(论文,卷积神经网络)