转载自网络
数据样本:
分为训练数据和测试数据,A表示带眼镜的样本,B表示无眼镜的样本
trainA有1185个样本,trainB有1350个样本;
后台服务器进入到pytorch-CycleGAN_B目录下,运行如下代码(修改自己的数据路径和训练模型的名字,以及利用的网络结构的名字):
CUDA_VISIBLE_DEVICES=3
python train.py --dataroot ./datasets/glass --name glass_cyclegan
--model cycle_gan --display_id 0
根据前面DEVICES=3来决定用哪块显卡(3对应0号GPU、0对应1号 1-2号 2-3号),--dataroot
./datasets/***表示训练数据所在路径,--name
***_cyclegan根据自己的数据名字来决定保存的训练产生的文件名,后面加上 --display_id
0用于避免额外的内存开支。
首先初始化的是相应的网络参数:
接着加载网络结构:
这是生成网络generator的网络结构,初始化了两个一模一样的generator,G_A和G_B,两个的参数数量也一样;
接下来是如下两个一样的判别网络discriminator:
模型加载完就开始真正的训练:
先初始化网络保存的路径checkpoints,然后开始每个epoch迭代
前100个epoch学习率lr不变,后100个epoch学习率开始逐渐变为0:
跑完训练,训练完的结果保存在文件夹checkpoints下,如果结果不好,修改train_options里面的continue_train,可以在之前训练的基础上继续训练。
再进行一下测试:CUDA_VISIBLE_DEVICES=3 python test.py --dataroot
./datasets/glass --name glass_cyclegan --model cycle_gan --phase
test
跑完测试,接下来调用训练好的模型对新的数据进行测验:
python test.py --dataroot
./datasets/glass/test/ --name glass_cyclegan --model test
--which_direction AtoB --dataset_mode single
其中,./datasets/glass/test/是数据存放的路径,模型的名字记得别加载错了,model也叫改为test模式,接着是确定转换的方向,注意cycleGAN可以做两个方向的转换,根据你所用的数据和想要的转换设置相应的方向,最后数据模式记得切换为single。根据这些参数来加载需要的测试文件,进而加载模型。
注意:这一过程不需要用到GPU,CPU下就可以测试了。