文章参考:Github 翻译:马卓奇
导读:最近一款edges2cats的网络开源应用程序迅速走红,它能将你用鼠标绘制的线条图像自动转换成一张猫咪图片。甚至连Yann LeCun 这样的重量级人物进行了自己的“猫片”创作。
Edges2cats:http://affinelayer.com/pixsrv/index.html
这样一种利用pix2pix将边缘图转换成彩色图片的方法,来自于下面介绍的论文。论文中除了由边缘图到彩色图片的转换,还有地图到航拍图的转换,类标图到场景图的转换。一起来看看是怎么实现的吧。
pix2pix
Torch实现,学习从输入图像到输出图像的映射
论文:《使用条件对抗式网络进行图像到图像的转换》
在一些任务中,可以在小数据集上得到又快又好的结果。比如说,要学习生成建筑物的立面图像(上面给出的例图),我们只需要在400张图像上进行两个小时的训练(硬件配置为单块Pascal Titan X GPU)。然而,对于更难的问题,需要在更大的数据集上进行数小时甚至几天的训练。
设置
环境要求
Linux 或OSX系统
NVIDIAGPU CUDA CuDNN(CPU模式和没有用CuDNN加速的CUDA或许经过一些改动也能运行,但并未经过测试证明)
开始阶段
安装torch及依赖项,
地址:https://github.com/torch/distro
安装torch的nngraph和display模块
luarocks install nngraph luarocks install
地址:https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
git [email protected]:phillipi/pix2pix.gitcdpix2pix
bash ./datasets/download_dataset.sh facades
DATA_ROOT=./datasets/facadesname=facades_generation which_direction=BtoA th train.lua
(仅使用CPU)不使用GPU或CUDNN,训练命令是一样的。设置环境变量gpu=0 cudnn=0就可以只使用CPU
DATA_ROOT=./datasets/facadesname=facades_generation which_direction=BtoA gpu=0 cudnn=0 batchSize=10save_epoch_freq=5 th train.lua
(可选设置)启动演示服务器,可以在模型训练的同时看到结果(详情请阅读显示界面(Display UI))
th -ldisplay.start 8000 0.0.0.0
DATA_ROOT=./datasets/facadesname=facades_generation which_direction=BtoA phase=val th test.lua
测试结果会存储到一个html文件中:
./results/facades_generation/latest_net_G_val/index.html.
训练
DATA_ROOT=/path/to/data/ name=expt_name which_direction=AtoB th train.lua
将AtoB换成BtoA来训练反方向的图像转换
模型存储在./checkpoints/expt_name(可以通过在train.lua中修改checkpoint_dir=your_dir来改变存储路径)
更多的训练选项请参考train.lua中的opt
测试
DATA_ROOT=/path/to/data/ name=expt_name which_direction=AtoB phase=val thtest.lua
该命令会运行expt_name模型,方向为AtoB,对/path/to/data/val的所有图像进行测试
转换的图像结果,以及可以看到结果的网页都存储在./results/expt_name(可以通过在test.lua中更改参数results_dir=your_dir来改变存储路径)
更多的测试选项请参考test.lua中的opt
数据库
bash ./datasets/download_dataset.sh dataset_name
使用下面的程序来下载数据:
Facades(建筑物正面):400张图片来自CMP Facades数据库
Cityscapes(城市景观):2975张图片,来自Cityscapes训练集
Maps(地图):1096张图片,来自谷歌地图
Edges2shoes(边缘转换成鞋子):50k训练图片来自UT Zappos50K数据集。边缘图通过HED边缘检测和后处理计算得到。
Edges2handbags(边缘转换成手提包):137k张亚马逊手提包照片,来自iGAN项目。边缘图通过HED边缘检测和后处理计算得到。
模型
使用如下命令下载预训练的模型。下载完成后需要重命名模型。(例如facades_label2image改为/checkpoints/facades/latest_net_G.t7)
bash ./models/download_model.sh model_name
http://transattr.cs.brown.edu/.
准备训练和测试数据
生成图像对
我们提供了一个python程序来生成图像对{A,B}形式的训练数据,其中A和B是同一基础场景的两种不同表示。比如说,可以是{类标图,照片},或者{二值图像,彩色图像}。然后我们就可以学习将A转换到B,或者将B转换到A:
创建文件夹/path/to/data以及子文件夹A和B。A和B应各自有他们的子文件夹用于存放不同用途的数据,train(训练),val(验证),test(测试),等等。
在/path/to/data/A/train中,放入风格A的训练图片
在/path/to/data/B/train中, 放入对应的风格B的图片
对其他的数据划分进行同样的操作(验证数据,测试数据等等)
图像对{A,B}的对应图像应该大小相同并且文件名相同,例如/path/to/data/A/train/1.jpg的对应图像应为/path/to/data/B/train/1.jpg.。
当数据处理成这样的格式之后,调用:
python scripts/combine_A_and_B.py --fold_A/path/to/data/A --fold_B /path/to/data/B --fold_AB /path/to/data
这会把每个图像对结合成一个单独的图像文件,为训练做好准备。
着色任务的注意事项
如果要进行着色,不需要运行combine_A_and_B.py。只需要准备一些自然图像,然后在程序中设置参数preprocess=colorization即可。程序会自动把每个RGB图像转换到Lab色彩空间,然后在训练过程中创建L -
|