CycleGAN代码使用入门

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

目录

1、下载数据集

2、下载代码

3、程序运行

(1)数据集

(2)运行visdom

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

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

(5)测试模型效果

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


1、下载数据集

Index of /cyclegan/datasets

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

2、下载代码

github地址为:

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

3、程序运行

(1)数据集

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

(2)运行visdom

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

执行命令:python -m visdom.server

刚打开是只有蓝色背景:

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

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

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

执行后报错如下:“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文件中增加如下信息:

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

--netG

resnet_1blocks

--print_freq

1

--display_freq

2

--gpu_ids

-1

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

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

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...,然后一直卡在那里。

(5)测试模型效果

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

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

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

最后效果如下:

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

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

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

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

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

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

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

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

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

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

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

140轮迭代之后变成:

400迭代之后变成:

 

效果仍然欠佳!

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值