CycleGAN 男人变女人

讲一讲如何在TensorFlow中实验CycleGAN,打开全球最大的同性交友网站Github,我们可以发现CycleGAN在TensorFlow中已经有很多轮子了,我使用的代码是:vanhuyz/CycleGAN-TensorFlow

利用这个代码,我训练了一个从男性和女性图片互换的模型,比如将男人转换成女人(左侧为原图,右侧为模型自动生成的图片):

v2-dace98659b3f39eedd7b574d51fd4426_r

还可以将女性转换成男性:

v2-0828b25a2ea4c82d4ce7b5f47adebb6a_hd

为了训练这么一个模型,我们需要分别准备好男性的图片和女性的图片。在实践中,我使用了CelebA数据集,分别取出其中男性和女性的图片并统一缩放到256×256的大小,然后存入两个文件夹中:

v2-b8bb3b3a92d6f61ab66577014f59d9bf_hd

如果你对这个实验有兴趣,可以直接在地址pan.baidu.com/s/1i5qY3y下载到我使用的数据集。当然,也可以使用自己的数据,只需要将它们存为jpg格式并统一缩放到256×256的大小就可以了。接下来的步骤为:

1. 下载项目代码

 

2. 将图片转换成tfrecords格式

这个项目中提供了一个build_data脚本,用于将图片转换成tfrecords形式。假设我们的图片存放在~/datasets/man2woman/a_resized/和 ~/datasets/man2woman/b_resized目录下,对应的命令就是:

 

3. 训练

训练的命令为:

训练的过程比较漫长,此时可以打开TensorBoard来观察训练情况(运行这个命令时需要将“20170715-1622”改成机器中对应的文件夹,下同):

我训练了一段时间得到如下tensorboard scalars,我的机器一般,训练时间较长

20180805212547

 

4. 导出模型并执行单张图片

导出模型的方法为:

对单张图片进行转换(将data/test.jpg替换为对应的输入图片地址):

 

总结

因为CycleGAN只需要两类图片就可以训练出一个模型,所以它的应用十分广泛,个人感觉是近期最好玩的一个深度学习模型。这篇文章介绍了CycleGAN的一些有趣的应用、Cycle的原理以及和其他模型的对比,最后加了一个TensorFlow中的CycleGAN小实验,希望大家喜欢~