在前面我们已经介绍过了最原始的GAN网络和DCGAN,这篇文章我将来为大家介绍CycleGAN,并且基于CycleGAN实现一个小demo——将一张图片进行季节转换,即从冬天变换到夏天和从夏天变换到冬天。
大家已经看到了CycleGAN,应该对GAN已经有了一定的了解,因此我不会对GAN的原理进行详细的讲解,只会叙述CycleGAN的独到之处。
在正式讲解之前,我给大家先展示一下CycleGAN可以做哪些事:
普通马变斑
可以看到,使用CycleGAN可以实现各种各样的风格转换,是非常有意思的一个算法。大家准备好了嘛,下面就正式发车了。
这一部分我会来介绍CycleGAN的核心思想,相信你了解后会和我有一样的感觉,那就是这个设计太巧妙了!!!
首先我们还是来介绍一下这篇论文的全称—— Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks
,即非成对图像转换循环一致性对抗网络。我们一点点的来解释,首先什么是非对称图像呢?其实啊,这里的非对称图像指的是我们的训练样本是不相关的。在之前的一些GAN转换实验中,往往都需要成对的图片数据,例如pix2pix,而成对的图片数据是很难获取的,于是CycleGAN对数据的要求就大大降低,不需要成对图像,即非对称图像,这样就让CycleGAN的应用场景就变得非常丰富。下图展示了对称数据和非对称数据的区别:
接下来再来讲讲什么是循环一致性对抗网络?这个就是本文的核心思想,听懂这个那么这篇论文你就搞懂了,这就为大家慢慢道来!!!
我们先来明确一下这篇文章的目标,即有两个域的图像,分别为域X和域Y,例如域X表示夏季图片、域Y表示冬季图片,现期望将这两个域的图片互相转换,即输入域X的夏季图片生成器输出域Y的冬季图片或输入域Y的冬季图片生成器输出域X的夏季图片。我们来考虑考虑传统的GAN网络能否完成这项任务,示意图如下:
上图我们的确是将域X中图片转换成了域Y中冬季图片风格,但是你会发现转换后的图片和原始图片没有任何关系,即GAN网络只学到了把一张夏季图片传化为冬季图片,但至于转换后的冬季图片和原始夏季图片有没有关系没有学习到,这样的话这个网络肯定是不符合实际要求的。那么CycleGAN就提出了循环一致性网络,如下图所示:
现对上图做相关解释,首先我们先对相关字母做一定了解,如下表所示:
其实这样就把CycleGAN的核心思想都介绍完了,这里再贴上论文中关于这部分的一张完整的图供大家参考:
其实介绍完理论部分,那么损失函数就很简单了,一共有三部分组成,如下表所示:【呜呜呜,这里编辑的markdown表格在网页中显示总是乱码,大家将就看一下图片吧】
实验论文中也给除了Github地址,连接如下:CycleGAN
这里我就不带大家一点点的解读代码了,相信你阅读了我之前的文章看这个代码应该能大致了解,我之前几期做过一些代码的解读,但是我自己觉得描述并不算很清晰,有的想要表达的点也没有表述清楚,所以我觉得代码部分大家还是看视频讲解比较高效,但是不论怎样,阅读代码你一定要自己亲自调试调试,这样你会有很大的收获!!!
这里我就放一张我运行的结果图片,从夏季转换到冬季,如下:
可以看出,变换的效果还是不错的。【注意:我只再Googleclab上训练了15个epoch就得动了这样的效果,大家可以增大epoch进行训练。】
阅读量:2012
点赞量:0
收藏量:0