CycleGAN --- Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

文章地址:http://openaccess.thecvf.com/content_ICCV_2017/papers/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdfgit

代码地址:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixgithub

原理:缓存

  CycleGAN这篇文章的亮点是提出了无需使用成对样本来训练模型的新思路。像pix2pix这类方法则须要成对的数据来训练。网络

 

  因为在实际应用中,咱们很难获取到成对的样本集,这篇文章的思想就是将一类样本转换为另外一类样本。给定两个样本空间X,Y,咱们但愿把X空间中的函数

样本转换为Y空间中的样本,即寻找从源域(X)到目标域(Y)的映射关系G:X->Y,而且要使得数据G(X)的分布与Y的分布不可区分。同时反向映射关系也须要知足,学习

即F:Y->X,经过引入一个循环一致性损失来使得F(G(X))≈X。优化

  其中,G对应了GAN网络的生成器部分,用于将X中的图像转换为Y中的图像,咱们可获得生成的图像为G(X)。此时还须要判别器网络来对生成的图像和真实spa

的图像进行判别。这个判别器用DY表示。对于这部分网络,存在一个对抗损失。3d

其中生成器G试着生成接近目标分布Y的图像G(X),判别器旨在区分转换样本和真实样本,由此构成了一个博弈过程。对于反向映射F:Y->X,一样存在这样的blog

GAN损失。

  理论上说,对抗训练能够学习和产生与目标域Y类似分布的输出,但若是仅使用对抗损失来训练没法获得比较好的结果。缘由在于,在足够大的样本容量下,

网络能够将相同的输入图像集合映射到目标域中图像的任意排列组合。也就是说学习到的能够只是输出的一个子分布,这样就可能会致使输入X经过映射函数得

到Y空间中的特定图像的分布。

意思就是单独的对抗损失没法保证学习函数能够将单个输入Xi映射到指望的输出Yi。由此,做者便提出了“循环一致性损失(Cycle consistency loss)”

即前向循环一致性和反向循环一致性。

简单来讲,思想就是把一个东西通过变换后,经过一个反变换还能回到原来的样子(忽然想到了傅里叶变换和反傅里叶变换)。

总的目标函数为:

实现

  • 网络结构:

  生成器部分使用的是李飞飞团队提出的感知损失用来作风格转换的网络结构。

  判别器采用的70x70的Patch-GANs

  • 训练细节:

  运用了两个技巧来稳定网络模型的训练过程

  1. 使用最小二乘损失来代替对数损失

  

  2. 更新判别其DX和DY,使用以前生成的图像而不是最新生成的图像。保存了50个的缓存数据。

  •  参数设置:

  λ的值设置为10.使用Adam优化求解,batch size为1.前100个epoch学习率设置为0.0002,后100个epoch学习率线性递减直至0.

 实验结果:

相关文章
相关标签/搜索