前言: CycleGAN是发表于ICCV17的一篇GAN工作,可以让两个domain的图片互相转化。传统的GAN是单向生成,而CycleGAN是互相生成,网络是个环形,所以命名为Cycle。并且CycleGAN一个非常实用的地方就是输入的两张图片可以是任意的两张图片,也就是unpaired。
单向GAN
读者可以按照原论文的顺序理解CycleGAN,这里我按照自己的思路解读。CycleGAN本质上是两个镜像对称的GAN,构成了一个环形网络。其实只要理解了一半的单向GAN就等于理解了整个CycleGAN。
上图是一个单向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。
判别loss
判别器 DB 是用来判断输入的图片是否是真实的domain B图片,于是生成的假图片 GAB(A) 和原始的真图片 B 都会输入到判别器里面,公示挺好理解的,就是一个0,1二分类的损失。最后的loss表示为:
LGAN(GAB,D