【摘 要】 本项目实现两个任务:1、使用ImageNet数据集训练CartoonGan和Pix2Pix网络,使其能够将灰度图转化为彩色图,分析两者性能的差距。2、使用非成对红外图像数据集训练CartoonGan,使其能够将红外图像转化为灰度图像。
Pix2Pix论文链接:https://arxiv.org/abs/1611.07004 Pix2Pix的GitHub地址:https://github.com/phillipi/pix2pix CartoonGan论文链接:点击跳转 CartoonGan的GitHub地址:https://github.com/znxlwm/pytorch-CartoonGAN
一、介绍
1.1 功能介绍
实现功能如下:
- 使用ImageNet数据集训练CartoonGan和Pix2Pix网络,使其能够将灰度图转化为彩色图。
- 对比CartoonGan和Pix2Pix的性能差距
- 使用非成对红外图像数据集训练CartoonGan,使其能够将红外图像转化为灰度图像。
1.2 网络介绍
1.2.1 Pix2Pix
pix2pix1使用的是成对数据集进行训练,生成器采用的是Unet2结构,判别器使用的是马尔科夫性的判别器PatchGAN3。结构如下图所示:

结构比较简单,修改网络的数据集,既可以实现灰度图像彩色化。
1.2.2 CartoonGan
CartoonGan4使用的是非成对数据集进行训练,生成器使用的编解码结构,判别器就是一个普通的分类网络,结构如下所示:

输入为图片为3通道,对数据集进行简单的预处理既可以开始训练。
二、实验步骤
- 将下载好的ImageNet数据集灰度化。
2.1 Pix2Pix灰度图彩色化
- 配置环境
- 分割数据集,训练集0.7,测试集0.3。
- 设置好目录后开始训练,在GTX 2070s上面训练3天,共200个epoch。
2.2 CartoonGan灰度图彩色化
- 配置环境
- 分割数据集,训练集0.7,测试集0.3。
- 由于作者没有提供灰度图彩色化代码,需要自己关注输出结果调整网络参数。
- 现象:图片无明显彩色化,怀疑是内容损失惩罚系数过大,降低内容损失为0.2
2.3 CartoonGan红外图彩色化
更换数据集为红外图像,红外图像和灰度图的区别在于红外图像更加模型,需要模型具备更强的想象力。步骤如下:
- 更换数据集,其他和2.2一样。
三、实验结果
3.1 Pix2Pix灰度图彩色化
Pix2Pix输出结果如下图所示:左边为灰度图,中间为生成图,右边为对应彩色图。

3.2 CartoonGan灰度图彩色化
CartoonGan输出结果如下图所示:左边为灰度图,中间为生成图,右边为对应彩色图。

3.3 CartoonGan红外图彩色化


四、总结
除此之外,对比了峰值信噪比,得出如果有成对数据集,Pix2Pix性能优于CartoonGan。但是面对红外图像,无成对数据集的情况,Pix2Pix便无能为力。
在CartoonGan的训练过程中,作者默认设置的内容损失有些过大,调小会得到更好的结果。同时CartoonGan具有很大的成长空间,修改特征提取方式(作者使用VGG提取特征,权重为VGG官方默认)应该会得到一些有趣的结果。
Pix2Pix处理每张图片用时:0.04914107492991856 s
CartoonGan处理每张图片用时:0.02963963421908292 s
五、环境配置说明
只记录Pix2Pix,CartoonGan配置方式类似。电脑需要安装好Ubuntu18.04,cudnn等必备库
5.1 环境配置
- python:3.6.6
- pytorch:1.5.0
- pillow:6.0.0
- scipy:1.2.0
- torchvision:2.3.1
- visdom
- dominate:2.3.1
将上面的环境先安装好,conda创建环境时命名为:pix2pix,后面提示缺少什么模块安装什么模块。
5.2 数据集配置
数据集下载,由于数据集太大,使用测试集作训练,总共40670张。
5.2.1 目录结构
- 根目录
- train
- 放置30000张图片
- test
- 放置10670张图片
- train
使用时,只需要将根目录地址给程序。
5.2.2 数据集分割
数据集分割代码,需要提前创建train和test文件夹,代码会自动将test2017下的全部图片,分割到train和test文件夹中。
1 | import os |
至此,数据集已处理完毕
5.3 打开visdom服务
必须要打开,不然测试或运行的时候会报错!!!!!
打开终端,进入程序根目录下
- 激活环境
1 | conda activate pix2pix |
- 打开
visdom服务
1 | python -m visdom.server |
开始自动下载脚本,之后会弹出链接,点击链接即可在浏览器查看训练情况
执行后,出现以下提示表示正在下载,如果太久,参考该链接解决: https://github.com/casuallyName/document-sharing/tree/master/static
1 | Checking for scripts. |
提示:visdom在ubuntu下的地址为:
1 | ~/miniconda3/envs/pix2pix/lib/python3.6/site-packages/visdom |
5.4 训练配置
- 下载代码,进入代码根目录
1 | git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix |
安装环境
- python 3.6.6
- pytorch 1.5.0
- visdom
- 其他的提示缺啥,安装啥。
输入以下命令开始训练
1 | python train.py --dataroot /media/w/文档/ubuntu/coco --name BW2COLOR --model colorization |
其中dataroot是数据集地址,数据集参考第二节的做法。
5.5 测试说明
在代码根目录下创建weight/BW2COLOR文件夹,将权重文件: 0awi放入
1 | python test.py --dataroot /media/w/文档/ubuntu/dataset/imagenet/ --name BW2COLOR --model colorization --checkpoints_dir weight |
其中dataroot是测试集地址,需要把测试图片放入到imagenet内的test文件夹中。
5.6 信噪比比较
1 | import numpy as np |
参考文献
1. Image-to-Image Translation with Conditional Adversarial Networks ↩
2. U-Net: Convolutional Networks for Biomedical Image Segmentation ↩
3. Patch-GAN Image-to-Image Translation with Conditional Adversarial Networks ↩
4. CartoonGAN: Generative Adversarial Networks for Photo Cartoonization ↩