一代宗师__循环一致性生成对抗网络(CycleGAN)(八)

简介
CycleGAN是在2017年发表的一篇文章《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》,同一时期还有两篇非常类似的DualGAN和DiscoGAN,简单来说,它们的功能就是:自动将某一类图片转换成另外一类图片。传统的GAN是单向生成,而CycleGAN是互相生成,网络是个环形,所以命名为Cycle。并且CycleGAN一个非常实用的地方就是输入的两张图片可以是任意的两张图片,也就是unpaired。
一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第1张图片
原论文地址:https://arxiv.org/pdf/1703.10593.pdf

一、CycleGAN原理:
单向GAN详解:
CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。其实只要理解了一半的单向GAN就等于理解了整个CycleGAN。
一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第2张图片
上图是一个单向GAN的示意图。我们希望能够把domain A的图片(命名为a)转化为domain B的图片(命名为图片b)。为了实现这个过程,我们需要两个生成器GAB和GBA,分别把domain A和domain B的图片进行互相转换。图片A经过生成器GAB表示为Fake Image in domain B,用GAB(a)表示。而GAB(a)经过生辰器GBA表示为图片A的重建图片,用GBA(GAB(a))表示。最后为了训练这个单向GAN需要两个loss,分别是生成器的重建loss和判别器的判别loss。
1.判别器loss:
判别器DB是用来判断输入的图片是否是真实的domain B图片,于是生成的假图片GAB(A)和原始的真图片B都会输入到判别器里面,公示挺好理解的,就是一个0,1二分类的损失。最后的loss表示为:
在这里插入图片描述
2.生成器loss:
生成器用来重建图片a,目的是希望生成的图片GBA(GAB(a))和原图a尽可能的相似,那么可以很简单的采取L1 loss或者L2 loss。最后生成loss就表示为:
在这里插入图片描述
以上就是A→B单向GAN的原理。

CycleGAN详解:
CycleGAN其实就是一个A→B单向GAN加上一个B→A单向GAN。两个GAN共享两个生成器,然后各自带一个判别器,所以加起来总共有两个判别器和两个生成器。一个单向GAN有两个loss,而CycleGAN加起来总共有四个loss。CycleGAN论文的原版原理图和公式如下:
一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第3张图片
我们之前已经说过,CycleGAN的原理可以概述为:将一类图片转换成另一类图片。也就是说,现在有两个样本空间,X和Y,我们希望把X空间中的样本转换成Y空间中的样本。
因此,实际的目标就是学习从X到Y的映射。我们设这个映射为G。它就对应着GAN中的生成器,G可以将X中的图片X转换为Y中的图片G(x)。对于生成的图片,我们还需要GAN中的判别器来判别它是否为真实图片,由此构成对抗生成网络。设这个判别器为 D{Y} 。这样的话,根据这里的生成器和判别器,我们就可以构造一个GAN损失,表达式为:
在这里插入图片描述
这个损失实际上和原始的GAN损失是一模一样的,但单纯的使用这一个损失是无法进行训练的。原因在于,映射G完全可以将所有x都映射为Y空间中的同一张图片,使损失无效化。我们再假设一个映射F,它可以将Y空间中的图片y转换为X中的图片F(y)。同样的我们为F也引入一个判别器 D{X} ,由此可以同样定义一个GAN的损失:
在这里插入图片描述
CycleGAN同时学习G和F两个映射,并要求将X的图片转换到Y空间后,应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了。对此,作者又提出了所谓的“循环一致性损失”(cycle consistency loss)。
而循环一致性损失(两个生成器的loss加起来)就定义为:
在这里插入图片描述
最终网络的所有损失加起来为:
在这里插入图片描述

下面放一张网友们自制的CycleGAN示意图,比论文原版的更加直观,出处见水印。
一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第4张图片
一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第5张图片
CycleGAN结果展示:

一代宗师__循环一致性生成对抗网络(CycleGAN)(八)_第6张图片

CycleGAN与pix2pix模型的对比
pix2pix也可以做图像变换,它和CycleGAN的区别在于,pix2pix模型必须要求成对数据(paired data),而CycleGAN利用非成对数据也能进行训练(unpaired data)。
比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛,利用CycleGAN就可以做出更多有趣的应用。

你可能感兴趣的:(人工智能)