GAN是一种典型的概率生成模型,其核心思想是:找出给定观测数据内部的统计规律,并且能够基于所得到的概率分布模型,产生全新的,与观测数据类似的数据。
概率生成模型可以用于自然图像的生成。假设给定1000万张图片之后,生成模型可以自动学习到其内部分布,能够解释给定的训练图片,并同时生成新的图片。
与庞大的真实数据相比,概率生成模型的参数个数要远远小于数据的数量。因此,在训练过程中,生成模型会被强迫去发现数据背后更为简单的统计规律,从而能够生成这些数据。
由于GAN这种无监督学习已经成为深度学习的新技术点,而且出来了很多应用,因此对GAN的一些应用进行逐步学习,其中图像到图像之间的转换操作是一种典型的应用。因此对该技术进行学习操作。
本实验主要参考代码为:https://github.com/affinelayer/pix2pix-tensorflow
(1)首先下载数据集,https://people.eecs.berkeley.edu/~tinghuiz/projects/pix2pix/datasets/,从这个网址上可以下载很多个经典的应用数据集。本文实验只选用facades这个数据集,由于剩下原理都是一样的。
(2)进行训练
在程序pix2pix.py代码中,手动添加测试参数,本文只让运行200次。
# 训练的时候的参数
# a.input_dir = "/home/ndscbigdata/work/imgdata/facades/train"
# a.mode = "train"
# a.output_dir = "/home/ndscbigdata/work/imgdata/facades/ckt"
# a.max_epochs=200
# a.which_direction = "BtoA"
(3)进行测试
# 测试的时候的参数a.input_dir = "/home/ndscbigdata/work/imgdata/facades/val"
a.mode = "test"
a.output_dir = "/home/ndscbigdata/work/imgdata/facades/facades_test"
a.checkpoint="/home/ndscbigdata/work/imgdata/facades/ckt"
测试结果运行结果如图所示:
测试结果截图如下:可以看出生成效果还是相当不错的,不过假如把训练max_epochs设置大一些,可能效果更好。
具体的代码已经发布在github上:https://github.com/ndscigdata/tensorflow-pratice