cycleGAN图像修复实战

1.男人转女人数据集
请大家把数据集下载好:https://pan.baidu.com/s/1WEowSXnl5EvQuChhyUKmkg

--data                          #用于放置测试的图片,或者是你在训练之后需要转换的图片

--datasets                   #用于放置训练需要的图片

--pretrained                 #用于存放训练好的模型,就是.pb文件

--checkpoints              #训练时保存的数据

2.预处理数据集
这里我把目录通过图片方式给大家看一下,文件夹samples大家不需要创建,__pycache__文件夹是python编译产生的文件夹:

这里我们之前下载的训练集叫man2woman,解压后得到a_resized和b_resized两个文件夹,a_resized文件夹里是男人的图片,b_resized文件夹里是女人的图片。我将这两个文件夹放在datasets这个文件夹里。

首先,训练是不能直接拿图片去训练,我们需要转换一下格式,build_data.py,就是建立数据的文本,tensorflow训练数据需要接收.tfrecords格式的文件,这里不同于别的模型,我们需要两个tfrecords格式的文件。男性的图片我们转换格式后命名为man.tfrecords,女性的图片转换格式后我们命名为women.tfrecords。

如何转换,我们定位到build_data.py这个文件夹这里,打开cmd,输入如下命令:

python build_data.py --X_input_dir datasets/a_resized --Y_input_dir datasets/b_resized --X_output_file datasets/man.tfrecords --Y_output_file datasets/woman.tfrecords

python build_data.py --X_input_dir datasets/data_x --Y_input_dir datasets/data_y --X_output_file datasets/x.tfrecords --Y_output_file datasets/y.tfrecords

X_input_dir和Y_input_dir是图片的路径,两个tfrecord文件的路径,X_output_file和Y_output_file是输出tfrecord文件路径。

转换完后我们在datasets文件夹下多得到了tfrecord文件,那么就开始训练吧。

3.训练
训练需要使用train.py这个文件,我们需要定义几个参数,除了两个tfrecord文件输入路径以外,还需要图片的大小,–image_size,我们这里训练集图片的边长均为256,因此我们可以这样命令来训练:

python train.py  --X datasets/man.tfrecords --Y datasets/woman.tfrecords --image_size 256
python train.py  --X datasets/x.tfrecords --Y datasets/y.tfrecords --image_size 256

这里,我想再补充一下,大家打开train.py文件,看到代码如下:

上面一个划线部分是训练多少步在cmd中打印出训练的信息,大家可以根据自己需要修改,不过我认为应该不怎么需要,我想提醒的是下一个,下一个是训练多少步保存一次,这里如果步数间隔太小很可能造成文件膨胀,也就是保存了太多的数据导致过于占磁盘空间,我之前是50步保存一次,结果发现占了200G空间,因此建议大家可以多等一会,1000步保存一次,并且如果你手动关闭训练电脑也是会保存你此时的模型的。就是把下面的if step % 100 == 0的100更改,相信大家都是懂程序结构,也就是知道怎么更改多少步保存一次。

修改后保存在训练一下,训练时间需要长一些,不然可能测试效果不太好。如果你想终止训练,在命令行按Ctrl+c键中止训练。大家不需要担心中断后得重新训练,我在后面会为大家讲怎么接着以前训练。成功开始训练标志如下:

训练的过程中,我们除了可以在命令行查看loss等数据,也可以打开tensorboard,我们打开checkpoints文件夹,里面会看到一些有一串数字的文件夹,那些文件夹是保存训练时数据的,命名是根据保存数据时间来命名的,比如会有20180819-2346这个命名的文件夹,说明是在2018年8月19日23时46分保存的文件。我们根据此时保存在哪个文件夹确定,大家可以看最新产生的文件夹来确认。比如此时产生的文件夹是20180819-2346,我可以这样来观察:

tensorboard --logdir checkpoints/20180819-2346
4.转换为模型
我们用于将训练数据转换为模型的文件是export_graph.py,我们可以这样使用:

在上面我们说了在checkpoint文件夹下的时间命名的文件夹,训练保存的数据就在那里,我们应该是选择时间最近的文件夹,比如我时间最近的文件夹叫20180819-2346,我们可以这样来导出模型:

python export_graph.py --checkpoint_dir checkpoints/20180819-2346 --XtoY_model man_to_woman.pb --YtoX_model woman_to_man.pb --image_size 256

checkpoint_dir是数据的路径,XtoYmodel是从X风格变为Y风格的模型,YtoXmodel是从Y风格变为X风格的模型,image_size是图片大小。pb文件会自动保存到pretrained的文件夹里。

5.测试

对单张图片进行转换,我把需要转换的图片放在data文件夹下,因为我们有2个.pb文件,一个是从X风格到Y风格,另一个是Y风格到X风格。我们这里选的图片是X风格,所以我们用的是man_to_women.pb这个模型来转换,转换使用的文件是inference.py。测试命令如下:

python inference.py --model pretrained/man_to_woman.pb --input data/input.jpg --output data/output.jpg --image_size 256

model是使用什么转换的模型,input是需要测试的图片的路径,output是输出位置,image_size是输入图片边长大小。

然后大家就能在你想要的输出路径下看到输出的图片了。

6.如果中断怎么接着训练
我们找到时间最近的checkpoint中的文件夹名字,比如最近的是20180819-2346,我们可以使用如下命令接着训练:

python train.py --load_model 20180819-2346

你可能感兴趣的:(GAN,图像修补,CycleGAN,深度学习)