首页 存档 技术 查看内容

开源|分分钟教你学会:使用条件对抗式网络进行图像转换 pix2pix

2018-3-30 13:00 |来自: 互联网 1764 0

摘要: 全球人工智能 文章参考:Github 翻译:马卓奇 导读:最近一款edges2cats的网络开源应用程序迅速走红,它能将你用鼠标绘制的线条图像自动转换成一张猫咪图片。甚至连Yann LeCun 这样的重量级人物进行了自己的“猫片 ...

全球人工智能


文章参考: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


  • 复制repo


git [email protected]:phillipi/pix2pix.gitcdpix2pix


  • 下载数据库(以CMP建筑物正面数据库为例)



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


  • facades_label2image (类标转换成建筑物立面图): 在 CMPFacades 数据库上训练.
    cityscapes_label2image (类标转换成街景图): 在 Cityscapes数据库上训练.
    cityscapes_image2label (街景转换成类标): 在Cityscapes 数据库上训练.
    map2sat (地图转换成航拍图): 在Google maps数据库上训练.
    sat2map (航拍图转换成地图): 在Google maps数据库上训练。
    edges2shoes (边缘转换成照片): 在 UTZappos50K 数据库上训练.
    edges2handbags (边缘转换成照片): 在亚马逊手提包图像(Amazonhandbags images)数据库上训练.
    day2night (白天场景转换成晚上的场景): 在大约 100 张网络摄像机的图片上进行训练


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 -

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部