CycleGAN代码使用入门

以下内容为本人亲测使用过程,完成了橘子到苹果的AI转化效果,先上效果:

CycleGAN代码使用入门_第1张图片

目录

1、下载数据集

2、下载代码

3、程序运行

(1)数据集

(2)运行visdom

(3)本地执行train.py文件

(4)ECS服务端运行train.py

(5)测试模型效果

4、自己的数据集进行训练


1、下载数据集

Index of /cyclegan/datasets

CycleGAN代码使用入门_第2张图片

本次做的是苹果和橘子相互转化的实验,所以下载apple2orange.zip数据集

2、下载代码

github地址为:

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

3、程序运行

(1)数据集

将数据集apple2orange放到代码的datasets目录下

(2)运行visdom

这个是facebook开发的类似tensorboard的可视化工具

执行命令:python -m visdom.server

CycleGAN代码使用入门_第3张图片刚打开是只有蓝色背景:

(3)本地执行train.py文件

在pycharm中的”Run”-> “Edit Configurations”下配置执行参数

--dataroot ./datasets/apple2orange --name apple2orange_cyclegan --model cycle_gan

CycleGAN代码使用入门_第4张图片

执行后报错如下:“AttributeError: module 'torchvision.transforms' has no attribute 'InterpolationMode'”

解决方案:参考https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/issues/1450文档,data/base_dataset.py文件中将transforms.InterpolationMode.BICUBIC全部修改为Image.BICBIC。

报错信息:OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\programs\python37\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.

本人2G的GPU跑不起来,需要改小模型、改少数据加载量、以及CPU运行,如果服务器显存够大则不需要下面的步骤。

修改方法为:

在models/networks.py文件中增加如下信息:

CycleGAN代码使用入门_第5张图片

然后修改python运行配置,添加:

--netG

resnet_1blocks

--print_freq

1

--display_freq

2

--gpu_ids

-1

CycleGAN代码使用入门_第6张图片

在options/base_options.py中修改--num_threads为1

再次运行成功,pycharm显示如下:

CycleGAN代码使用入门_第7张图片

Visdom显示如下:

(4)ECS服务端运行train.py

本人在本机(2G显存)上进行代码调试,在服务器(16G显存)上进行训练。

代码在Docker(0a381dad2084)的位置为:/root/program/pytorch-CycleGAN-and-pix2pix

首先,data/base_dataset.py文件中将transforms.InterpolationMode.BICUBIC全部修改为Image.BICBIC

然后,执行命令:python -m visdom.server -p 8097,先下载一些脚本文件

接着,执行命令:python train.py --dataroot ./datasets/apple2orange --name apple2orange_cyclegan --model cycle_gan --display_id 0 --num_threads 1

后台运行方式为:nohup python -u train.py --dataroot ./datasets/apple2orange --name apple2orange_cyclegan --model cycle_gan --display_id 0 --num_threads 1 > train.log 2>&1 &

注意:一定要指定—display_id 0,否则会报错:Setting up a new session...,然后一直卡在那里。

CycleGAN代码使用入门_第8张图片

CycleGAN代码使用入门_第9张图片

(5)测试模型效果

下载测试的预料如下,放置两个目录testA和testB,分别放一张苹果和橘子的图片。

CycleGAN代码使用入门_第10张图片

执行测试命令:python test.py --dataroot datasets/ping2ju --name apple2orange_cyclegan --model cycle_gan --no_dropout

CycleGAN代码使用入门_第11张图片

最后会生成images文件,如下图所示:

CycleGAN代码使用入门_第12张图片

最后效果如下:

CycleGAN代码使用入门_第13张图片

4、自己的数据集进行训练

本次试验是将“虚假的车牌”变成“真实的车牌”。

A是虚假的车牌,B是真实的车牌。

首先根据B生成虚假的车牌A,然后训练A->B的神经网络,最后希望能把任意的A图生成B图。

构造数据集如下:共4个目录,分别为trainA、trainB、testA、testB。XXB为真实的车牌;XXA为代码生成的比较假的车牌,如下图所示:

CycleGAN代码使用入门_第14张图片

 (1)将所有车牌(清晰+不清晰)图片用于cycleGAN训练,迭代了10轮之后模型测试的效果如下:

CycleGAN代码使用入门_第15张图片

可以看到得到的B图非常不清楚。

(2)仅将清晰的车牌用于cycleGAN训练,迭代了100轮之后模型测试的效果如下:

CycleGAN代码使用入门_第16张图片

可以看到车牌样式与实际非常相符,但是车牌号码完全不对。

原因:cycleGAN并不是一对一的进行训练,而是域和域之间的训练,数字被作为域图片样式的一部分,所以使用cycleGAN生成指定字符的“真实车牌”有点困难。

将原始的车牌号码换成较真实一点的如下:

CycleGAN代码使用入门_第17张图片

140轮迭代之后变成:

CycleGAN代码使用入门_第18张图片

效果仍然欠佳!

 

 

你可能感兴趣的:(神经网络,python,开发语言)