windows中tensorflow实现CycleGAN

目录

CycleGAN的原理(转)

CycleGAN与DCGAN的对比(转)

CycleGAN与pix2pix模型的对比(转)

在TensorFlow中实验CycleGAN(实战过程)

环境:tensorflow-gpu(此代码在cpu版本训练时间太长,最好用gpu版本)

python 3.6.8

Data preparing

Training

Export model

Inference

参考


CycleGAN是在2017年3月底放在arxiv(地址:[1703.10593] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks)的一篇文章,同一时期还有两篇非常类似的DualGAN和DiscoGAN,简单来说,它们的功能就是:自动将某一类图片转换成另外一类图片。

这篇文章主要分成三个部分:

  • CycleGAN的原理解析(转)
  • CycleGAN与原始的GAN、DCGAN、pix2pix模型的对比(转)
  • 如何在TensorFlow中用CycleGAN训练模型(windows)(原创)

CycleGAN的原理(转)

我们之前已经说过,CycleGAN的原理可以概述为:将一类图片转换成另一类图片。也就是说,现在有两个样本空间,X和Y,我们希望把X空间中的样本转换成Y空间中的样本。

因此,实际的目标就是学习从X到Y的映射。我们设这个映射为F。它就对应着GAN中的生成器,F可以将X中的图片x转换为Y中的图片F(x)。对于生成的图片,我们还需要GAN中的判别器来判别它是否为真实图片,由此构成对抗生成网络。设这个判别器为 。这样的话,根据这里的生成器和判别器,我们就可以构造一个GAN损失,表达式为:

参考:GAN学习指南:从原理入门到制作生成Demo。

但单纯的使用这一个损失是无法进行训练的。原因在于,映射F完全可以将所有x都映射为Y空间中的同一张图片,使损失无效化。对此,作者又提出了所谓的“循环一致性损失”(cycle consistency loss)。

我们再假设一个映射G,它可以将Y空间中的图片y转换为X中的图片G(y)。CycleGAN同时学习F和G两个映射,并要求 ,以及 。也就是说,将X的图片转换到Y空间后,应该还可以转换回来。这样就杜绝模型把所有X的图片都转换为Y空间中的同一张图片了。根据 和 ,循环一致性损失就定义为:

同时,我们为G也引入一个判别器 ,由此可以同样定义一个GAN的损失 ,最终的损失就由三部分组成:

CycleGAN与DCGAN的对比(转)

为了进一步搞清楚CycleGAN的原理,我们可以拿它和其他几个GAN模型,如DCGAN、pix2pix模型进行对比。

先来看下DCGAN,它的整体框架和最原始的那篇GAN是一模一样的,在这个框架下,输入是一个噪声z,输出是一张图片(如下图),因此,我们实际只能随机生成图片,没有办法控制输出图片的样子,更不用说像CycleGAN一样做图片变换了。

 

 

CycleGAN与pix2pix模型的对比(转)

pix2pix也可以做图像变换,它和CycleGAN的区别在于,pix2pix模型必须要求成对数据(paired data),而CycleGAN利用非成对数据也能进行训练(unpaired data)。

比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛,利用CycleGAN就可以做出更多有趣的应用。

在TensorFlow中实验CycleGAN(实战过程)

代码参考vanhuyz/CycleGAN-TensorFlow。

Original paper: https://arxiv.org/abs/1703.10593

test data 数据下载地址https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/apple2orange.zip

trainA:apple

trainB:orange

环境:tensorflow-gpu(此代码在cpu版本训练时间太长,最好用gpu版本)

python 3.6.8

Data preparing

build_data.py

windows中tensorflow实现CycleGAN_第1张图片

生成两tfrecords文件

Training

windows中tensorflow实现CycleGAN_第2张图片

黄色划线部分可以不插入文件路径,各参数没有改变。

训练过程较长,可通过tensoboard实现查看。开始训练后,会产生以时间为名的文件夹,如:D:\zj\CGAN\checkpoints\20190104-1948

windows中tensorflow实现CycleGAN_第3张图片

anaconda环境名为tensorflow(个人习惯)

调用tensorboard方式为,进入环境,activate tensorflow

tensorboard --logdir=D:\zj\CGAN\checkpoints\20190104-1948

如图,复制网址到谷歌或火狐浏览器,便可观察训练情况。

参考代码地址上,作者大概训练了60万step的数据,占内存比较大,故我只训练到10万就停了,用时13小时,产生数据占内存58G。

windows中tensorflow实现CycleGAN_第4张图片

tensorboard上的效果,怎么说呢,很迷。

Export model

export_graph.py

windows中tensorflow实现CycleGAN_第5张图片

checkpoint文件地址插入,XtoY _model输出格式为pb.

windows中tensorflow实现CycleGAN_第6张图片

Inference

inference.py

这个文件只能一张一张的转换,并且程序运行一次就会提醒defined twice

此时需要

consoles→restart kernel 

不然就需要重启spyder才能再次运行此程序。

下图是几张例子。(效果真的很迷,不知道是不是训练时间短了。)

windows中tensorflow实现CycleGAN_第7张图片

以上,第一次训练数据,其实遇见了许多问题,一个个查找解决方法的过程也是一种学习,所以想记录下来这个过程,望能给予你一些帮助。

多有不足,请多包涵。

望努力。

参考

https://blog.csdn.net/qq_41185868/article/details/82988675

https://github.com/vanhuyz/CycleGAN-TensorFlow(代码部分)

https://zhuanlan.zhihu.com/p/28342644

https://blog.csdn.net/omnispace/article/details/78519805

 

 

 

你可能感兴趣的:(windows中tensorflow实现CycleGAN)