cycleGAN

   传统GAN的原理已经了解,写博客还是为了学习新东西,cycleGAN网上已经有了很多介绍,这里也是参考别人写的东西,自己再学习了解。
   cycleGAN个人感觉主要可以用于风格迁移,可以用来处理图像转换过程中数据unpair的问题。其本质是两个对称的GAN,构成一个环形网络。两个GAN共享两个生成器,并各自带一个判别器,即总共两个判别器和两个生成器。其基于的原理是,一个A类型的图片,经过两次变换,可以变回自己,B类型亦然。表示如下:

   cycleGAN的模型结构如下所示:

   介绍一下损失函数,对于生成网络x到y及其判别网络,目标函数为:

该公式的目的是为了让生成网络生成图像Y,和真实的Y尽可能相似。同理也可以构建生成网络y-x,及其判别网络的目标函数。
   上述损失函数其实和一般的GAN的损失函数没有什么区别,而单纯使用这个损失函数是没有办法进行训练的,因为由于训练数据是unpair的,所以映射G完全可以将所有的x都映射成y,从而使损失无效。因此这里提出了循环一致性损失,要求F和G两个映射可以分别将y和x变回去,即$F(G(x))=x$和$G(F(y))=y$,循环一致性损失定义如下:

   最终的损失函数综合了G和F的GAN损失和循环一致性损失,如下所示:

   最终的目标就是求得使目标最小的生成网络G,F,在实际训练过程中,上面的生成判别损失使用LSGA。cycleGAN的通俗解释图如下所示:

   在判别损失部分的训练和正常的GAN一样,使得生成的A和目标A尽可能接近,B亦然。在循环一致性损失,就是让A生成的B通过B2A和原来的A尽可能接近,B生成的A通过A2B和原来的B尽可能接近。

参考:
1.https://blog.csdn.net/u011501388/article/details/77948644
2.https://www.jianshu.com/p/64bf39804c80
3.https://yq.aliyun.com/articles/229300

0%