目录
总结
一、CycleGAN概述
CycleGAN主要用于图像到图像的转换任务,能够将图像从一个领域转换到另一个领域,而无需在训练过程中使用配对示例。该模型尤其适用于将照片转换为绘画、改变图像中的季节或在不同艺术风格之间转换图像等任务。
论文《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》
很推荐读一下这篇ICCV2017的文章,有兴趣的小伙伴可以点击项目主页去学习一下这篇文章。
二、CycleGAN实现
1.下载并配置环境
Github:点击进入
我已经将作者官方的代码下载并保存到了网盘中进行分享,如果Github链接进不去的小伙伴可以点击下方的百度网盘进行下载
BaiduYun:点击下载 (key:2qd0)
下载完毕之后使用编译器打开(我这里使用的为Vscode),如上图所示的为CycleGAN官方的项目文件目录。
然后,根据下方的版本号进行安装即可,如果没有配置过torch环境的小伙伴可以学习一下我之前发布的环境配置教程:配置环境(二、mmdetection环境配置)
需要安装的依赖版本号如下:
torch>=1.4.0
torchvision>=0.5.0
dominate>=2.4.0
visdom>=0.1.8.8
wandb
2.准备数据集
①采用CycleGAN官方的数据集
下载链接:数据集下载
②准备自己的数据集
由于CycleGAN是一种非配对的风格迁移方法,所以我们准备数据集时不需要让两个域的文件是成对的,图片的数量也可以不同,具体准备过程如下:
首先新建一个文件夹存放数据集,文件夹中子目录以如下形式命名
┬─ 数据集名称
│ │ ├─ trainA
│ │ │ ├─存放A域训练图片
│ │ └─ trainB
│ │ ├─ 存放B域训练图片
│ │ └─ testA
│ │ ├─ 存放A域测试图片│ │ └─ testB
│ │ ├─ 存放B域测试图片
本文中我采用的数据集是由UVCGANv2论文中所制作转换动漫头的selfie2anime数据集。
UVCGANv2论文链接:文章下载 Github项目链接:项目下载
selfie2anime数据集如下所示:
3.Visdom安装
我们在进行训练时会发现visdom一直处于下载状态或者出现一些报错,这里我们先解决一下这个问题再进行之后的训练。
首先输入下面的指令对visdom进行激活:
python -m visdom.server
如果遇到上方的报错,需要将科学上网工具关闭再重新输入指令,如果出现下面内容之后说明已经完成visdom的配置。
4.参数介绍
在开始训练之前,我们需要先了解一下配置文件中的一些参数,打开options目录会发现有三个文件,分别是train、test和base,我们主要对train的参数文件进行一个介绍。
表格中为训练配置参数的介绍,其中我们需要重点了解的是display_id(如果需要进行长时间训练的话需要把这个参数设置为0,经过多次训练发现如果可视化打开的话容易造成训练停滞)、n_epochs和n_epochs_decay。默认是训练200个epoch,假如需要训练400轮可以对n_epochs和n_epochs_decay参数进行修改,使其加起来为400轮即可。
5.开始训练
训练指令:
python train.py --dataroot datasets/selfie2anime(这里是数据集存放在本地的位置) --name selfie2anime(这个参数能够给这次的训练起一个名字) --model cycle_gan
如果出现如上错误,需要先使用 python -m visdom.server 指令激活一下localhost,然后打开另一个窗口输入训练指令,如下图所示,当左侧POST和GET动态变化说明已经可以使用可视化界面:
第一种错误解决之后,Windows系统会出现第二种错误,遇到页面太小这个问题需要对虚拟内存进行设置,具体操作如下所示:
首先打开编辑环境变量的设置窗口,按照:设置——高级——更改——(选择Anconda所在盘符)——自定义大小设置24000即可,然后保存一下,重新训练便可解决错误2。
默认的可视化端口为http://localhost:8097/,直接在浏览器打开即可,如果是在linux训练一样可以打开,左侧第一个窗口是训练的损失函数,第三个窗口是对中间窗口各位置图片的介绍。
real_A | 输入的真实的A图片 | real_B | 输入的真实的B图片 |
fake_B | 真实图片A生成的伪B风格图片 | fake_A | 真实图片B生成的伪A风格图片 |
rec_A | fake_B再生成回A风格图片 | rec_B | fake_A再生成回B风格图片 |
idt_B | 真实图片A生成的A风格图片 | idt_A | 真实图片B生成的B风格图片 |
6.结果测试
训练过程中的权值和过程文件会保存到checkpoints目录下,我这里由于是在服务器进行的训练因此只在文件夹下存放了最后的权值文件,这里的名称不需要修改,如下图所示:
输入下方指令便可开始测试
python test.py --model test --name selfie2anime(这里name要与训练时的保持一致) --dataroot selfie2anime\testB(这里是测试集路径) --num_test 100(测试图片数量) --model_suffix "_B"(采用A生成器还是B生成器) --no_dropout(无滤波)
这里我是将真实人脸照片转换成二次元人脸照片,因此选用的为生成器B,测试结果会保存到results文件夹下:
下面是我的部分测试结果,整个训练为400轮,效果不是太好,原论文中经过2500轮训练得到了一个不错的效果。
最后,我将本文中所用的代码、数据集和训练的权重文件上传至Github:点击进入,有兴趣的小伙伴可以进行下载测试。目前已经在Hugging face发布了demos,小伙伴可以通过Github进入或者直接点击链接:点击进入。大家可以上传自己的照片来进行动漫化,后续如果有其他新的想法还会在此文章继续进行更新。
总结
本文对CycleGAN方法进行了简单的介绍,帮助大家更好地去了解这项技术。此外,针对代码部分,我对此进行了详细的步骤来让大家更好地去进行训练和测试,通过CycleGAN去尝试有趣的风格转换。