论文:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
论文链接:https://arxiv.org/abs/1703.10593
代码链接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
CycleGAN是发表在ICCV2017关于将GAN应用在无监督的图像到图像翻译(image-to-image translation)的著名算法,和应用于有监督图像翻译的pix2pix几乎是同一批作者。CycleGAN最大的特点是无监督,也就是不要求训练数据是成对的,只需要提供不同域(domain)的图像就能成功训练不同域之间图像的映射(或者叫翻译),这大大降低了图像翻译的门槛,毕竟某些类型的成对数据并不容易获取,比如同一个场景的夏天照片和冬天照片、同样造型的斑马和马等,因此CycleGAN是非常棒的一个作品。
关于成对和非成对数据的对比可以看Figure2,左边是成对的数据,也就是pix2pix算法所使用的训练数据;右边是非成对的数据,X和Y是不同域的数据,不同域的例子比如夏天和冬天、斑马和马、苹果和橘子等。
CycleGAN算法的整体示意图如Figure3所示,整体上包含2个GAN网络。
假设现在有X和Y两个域,可以简单理解为X为斑马,Y为马。在CycleGAN中有2个生成器,分别用G和F表示,如Figure3(a)所示,生成器G用来基于X域的图像生成Y域的图像(斑马->马);生成器F用来基于Y域的图像生成X域的图像(马->斑马),这2个生成器的定位是相反的过程,通过(b)和©中的cycle-consistency loss进行约束。同时CycleGAN中有2个判别器,分别用DX和DY表示,用来判断输入的X域或Y域图像是真还是假。因此CycleGAN可以看做是2个GAN的融合,一个GAN由生成器G和判别器DY构成,实现从X域到Y域的图像生成和判别;另一个GAN由生成器F和判别器DX构成,实现从Y域到X域的图像生成和判别,两个网络构成循环(cycle)的过程。
CycleGAN的整个过程可以用如下示意图表示,截取自:https://hardikbansal.github.io/CycleGANBlog/。这个图对CycleGAN的描述非常清晰,该图总共分为上下2部分,分别表示从X域到Y域的图像生成和从Y域到X域的图像生成。
CycleGAN的整体优化目标如公式3所示,一共包含3个部分,第一部分LGAN(G,DY,X,Y)表示生成器G和判别器DY的优化目标;第二部分LGAN(F,DX,Y,X)表示生成器F和判别器DX的优化目标,这2部分是GAN算法本身的优化目标。第三部分Lcyc(G,F)表示cycle consistency loss,用于约束从变换域再变换到原域时图像的一致。
LGAN(G,DY,X,Y)如公式1所示,是常规GAN的优化目标,判别器DY要最大化这个优化目标,生成器G要最小化公式1中的后半部分。LGAN(F,DX,Y,X)也是同理。