junyanz/pytorch-CycleGAN-and-pix2pix: Image-to-Image Translation in PyTorch (github.com)
如果是用cycle_gan
数据集
/数据集文件夹名,下面四个子文件名
testA
testB
trainA
trainB
trainA是A风格图片,trainB是B风格图片。
训练参数
test | ||
dataroot | --filepath | 测试数据的文件夹,放在名称为testA或者testB的文件夹中(子文件夹为trainA,trainB,testA,testB) |
name | flower | 项目名称,就是给自己的项目取个名字,用于代码来辨认,和train的名称保持一致。 |
num_test | 500 | 测试多少张图像。 |
checkpoints_dir | ./checkpoints/ | 保存模型参数的路径。默认 ./checkpoints |
results_dir | ./results/ | 保存结果的文件夹,默认是./results/ |
train | ||
dataroot | filepath | 训练数据的文件夹。子文件夹为trainA,trainB,testA,testB |
name | flower | 项目名称,就是给自己的项目取个名字,用于代码来辨认。默认flower |
n_epochs | 100 | 固定学习率的epoch个数。默认100。 |
n_epochs_decay | 100 | 学习速率线性衰减到零的epoch个数,这个和上面的加起来是总的训练轮数。默认100。 |
lr_policy | linear | 学习率的衰减模式。用于调整学习率的变化。[linear | step | plateau | cosine]线性衰减, 固定步长衰减,plateau,余弦衰减四选一,默认第一个 |
continue_train | FALSE | True/False 表示继续训练,当训练中断之后想要继续训练,把这个值调为True。 |
epoch_count | 1 | 从第几个epoch开始训练,如果继续训练是True,如果训练到第40个epoch终端了,就把这个值设为40.默认1。 |
checkpoints_dir | ./checkpoints/ | 保存模型参数的路径。默认 ./checkpoints |
model | cycle_gan | 如果是cycle_gan方法,就选cyclegan,此外还有pix2pix,colorization也可以训练。[cycle_gan | pix2pix | test | colorization] 选一个,默认第一个 |
netG | unet_256 | 生成器的方式。有[resnet_9blocks | resnet_6blocks | unet_256 | unet_128] 种,不同生成器效果不同。四选一,默认unet_256 |
batch_size | 5 | 每个batch训练的个数,如果电脑配置不够,就减少这个值可以减少内存 |
num_threads | 2 | 用于加载数据的线程,减少这个值可以减少内存 |
preprocess | resize_and_crop | [resize_and_crop | crop | scale_width | scale_width_and_crop | none] |
direction | AtoB | [AtoB | BtoA], AtoB,从A生成B,BtoA,从B生成A |
训练指令
训练
python train.py --dataroot E:\docs\flower --name flower --model cycle_gan --batch_size 5 --netG unet_256 --num_threads 2 --n_epochs 200 --display_id 0
--epoch_count 52 --continue_train 可选
测试
python test.py --dataroot E:\docs\flower\testA --name flower --model test --no_dropout --num_test 504 --netG unet_256
训练后
训练完之后,将训练中保存的checkpoints的其中一个后缀为XX_net_G_A.pth改为latest_net_G.pth供test文件使用。G_A就是A 到B的转换,G_B就是B到A的转换。
如果要用pix2pix
训练集先分为(A,B) A->(train,val) B->(train,val)
A文件下分 train,val两个文件夹
B文件下分 train,val两个文件夹
要用pix2pix 先combine A and B
python ./datasets/conbine_A_and_B.py --后面加上相应的参数
train时把--model cycle_gan 改为--model pix2pix就可以了
python test.py --dataroot F:\data\flower\A\val --name flower --model test --no_dropout --num_test 504 --netG unet_256 --norm batch --num_test 704 --preprocess none
tips
训练的时候可以用
--preprocess crop 和 --crop_size 256把图像转换为256X256
测试的时候用
--preprocess none 这样就不会做改变
假设处理360x256图像。在训练过程中,可以指定--preprocess crop和--crop_size 256。这将允许的模型在训练期间在随机裁剪的256x256图像上进行训练。在测试期间,可以用--preprocess none。将模型应用于360x256图像,
对于每种生成器体系结构,图像大小都有实际限制。对于unet256,它只支持宽度和高度能被256整除的图像。对于unet128,宽度和高度必须能被128整除。对于resnet_6blocks和resnet_9blocks,宽度和高度需要能被4整除。
train结果
每5个epoch保存一次模型,保存了训练过程中全程的模型。 G_A: 表示从A生成B的模型 G_B: 表示从B生成A的模型
latest_net: 表示最近一次的模型节点。 loss_log.txt: 记录了损失的大小。可以根据这个来看训练的怎么样。 test_opt.txt train_opt.txt 记录了训练和测试时的参数。
点击web->index.html 可以看到训练过程中的图像。
test结果
点击results->工程名->test_latest->index.html. 可以看到test的对比图。 点击results->工程名->test_latest->images 后缀为fake的就是我们要的生成的图片。