讲一讲如何在TensorFlow中实验CycleGAN,打开全球最大的同性交友网站Github,我们可以发现CycleGAN在TensorFlow中已经有很多轮子了,我使用的代码是:vanhuyz/CycleGAN-TensorFlow。
利用这个代码,我训练了一个从男性和女性图片互换的模型,比如将男人转换成女人(左侧为原图,右侧为模型自动生成的图片):
还可以将女性转换成男性:
为了训练这么一个模型,我们需要分别准备好男性的图片和女性的图片。在实践中,我使用了CelebA数据集,分别取出其中男性和女性的图片并统一缩放到256×256的大小,然后存入两个文件夹中:
如果你对这个实验有兴趣,可以直接在地址https://pan.baidu.com/s/1i5qY3yt下载到我使用的数据集。当然,也可以使用自己的数据,只需要将它们存为jpg格式并统一缩放到256×256的大小就可以了。接下来的步骤为:
1. 下载项目代码
1 |
git clone https://github.com/vanhuyz/CycleGAN-TensorFlow.git |
2. 将图片转换成tfrecords格式
这个项目中提供了一个build_data脚本,用于将图片转换成tfrecords形式。假设我们的图片存放在~/datasets/man2woman/a_resized/和 ~/datasets/man2woman/b_resized目录下,对应的命令就是:
1 2 3 4 5 |
python build_data.py \ --X_input_dir ~/datasets/man2woman/a_resized/ \ --Y_input_dir ~/datasets/man2woman/b_resized/ \ --X_output_file ~/datasets/man2woman/man.tfrecords \ --Y_output_file ~/datasets/man2woman/woman.tfrecords |
3. 训练
训练的命令为:
1 2 3 4 |
python train.py \ --X ~/datasets/man2woman/man.tfrecords \ --Y ~/datasets/man2woman/woman.tfrecords \ --image_size 256 |
训练的过程比较漫长,此时可以打开TensorBoard来观察训练情况(运行这个命令时需要将“20170715-1622”改成机器中对应的文件夹,下同):
1 |
tensorboard --logdir checkpoints/20170715-1622 |
我训练了一段时间得到如下tensorboard scalars,我的机器一般,训练时间较长
4. 导出模型并执行单张图片
导出模型的方法为:
1 2 3 4 5 |
python export_graph.py \ --checkpoint_dir checkpoints/20170715-1622 \ --XtoY_model man2woman.pb \ --YtoX_model woman2man.pb \ --image_size 256 |
对单张图片进行转换(将data/test.jpg替换为对应的输入图片地址):
1 2 3 4 5 |
python inference.py \ --model pretrained/man2woman.pb \ --input data/test.jpg \ --output data/output.jpg \ --image_size 256 |
总结
因为CycleGAN只需要两类图片就可以训练出一个模型,所以它的应用十分广泛,个人感觉是近期最好玩的一个深度学习模型。这篇文章介绍了CycleGAN的一些有趣的应用、Cycle的原理以及和其他模型的对比,最后加了一个TensorFlow中的CycleGAN小实验,希望大家喜欢~