CycleGAN是在去年三月底放在arxiv的一篇文章,文章名为Learning to Discover Cross-Domain Relations with Generative Adversarial Networks,同一时期还有两篇非常类似的 DualGAN 和 DiscoGAN ,简单来说,它们的功能就是:自动将某一类图片转换成另外一类图片。

由于CycleGAN这个框架具有较强的通用性,因此一经发表就吸引了大量注意,很快,脑洞大开的网友想出了各种各样神奇的应用。

比如将猫变成狗:

让图片中的人露出笑容:

将男人变成女人:

如果说这些应用多少可以理解,那么下面的应用就有点“匪夷所思”了:你可以想象将人和拉面做转换吗?

日本网友加藤卓哉(Takuya Kato)就训练了这样一个模型,它可以从拉面中生成人像,此外将人脸变成拉面的图片。鉴于生成的结果比较鬼畜,如果有兴趣的可以搜索观看生成结果。

此外,知乎上的 @達聞西 还用CycleGAN训练了可以脱掉女优衣服的模型(可以参考提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服),其脑洞之大,实在是让人惊叹了一番。

还有自动美颜,卸妆...

CycleGAN与pix2pix模型的对比

pix2pix也可以做图像变换,它和CycleGAN的区别在于,pix2pix模型必须要求成对数据(paired data),而CycleGAN利用非成对数据也能进行训练(unpaired data)。

比如,我们希望训练一个将白天的照片转换为夜晚的模型。如果使用pix2pix模型,那么我们必须在搜集大量地点在白天和夜晚的两张对应图片,而使用CycleGAN只需同时搜集白天的图片和夜晚的图片,不必满足对应关系。因此CycleGAN的用途要比pix2pix更广泛,利用CycleGAN就可以做出更多有趣的应用。

在TensorFlow/Pytorch中实验CycleGAN

1.Tensorflow中开源代码主要可以参考这个

vanhuyz/CycleGAN-TensorFlow(地址:https://github.com/vanhuyz/CycleGAN-TensorFlow)。

具体操作也比较简单,今天主要给大家玩玩Pytorch版CycleGAN 与 pix2pix二合一版的。

2.提高驾驶技术

一行代码都不用改,只需要按照前面的步骤把数据准备好,然后按照pix2pix官方的使用方法训练就可以了:

https://github.com/phillipi/pix2pix

pyTorch版pix2pix(Cycle-GAN二合一版):

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

具体步骤:

1.拷贝项目

  1. git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

  2. cd pytorch-CycleGAN-and-pix2pix

这个没啥好说的,不会github命令请转身学习几分钟。

2.玩转CycleGAN

CycleGAN train/test

懒人系列就直接安装源码中给出的数据集,一步步来就ok.

这里主要介绍如何在自己的数据集上去训练。

数据集准备

To train a model on your own datasets, you need to create a data folder with two subdirectories trainA and trainB that contain images from domain A and B. You can test your model on your training set by setting --phase train in test.py. You can also create subdirectories testA and testB if you have test data.

简单说就是,训练自己的CycleGAN,需要在datasets目录下新建两个文件夹 trainA 和trainB,同时为了后面的测试,可以再建testA,testB,完整目录展示如下:

注意mosaic是我存放两个数据集的根目录。看名字就知道我这个数据集就是用来玩马赛克的。

数据集有千百种获取方式,,写个爬虫脚本,收集一下需要的图片,然后做些处理,随机crop,翻转等数据增强操作。记得一定要准备两类,比如高清图,对应的马赛克图,美颜图,对应的需要卸妆后的图。如果你跟我一样比较懒,那么也好办,从来源数据集下载总可以了吧。这里我下载的celeba数据集,然后截取了两万张,,,后来发现训练太慢来,再次截取,最后采集来三千张来玩,由于我要做的是原图与马赛克图之间的translation,所以,随机采集3000张后的图作为trainB,然后打马赛克的图作为trainA.最后图像转换的方向就是A==>B

话说回来,如何打mosaic?前几天刚好研究到这里,已经放出了代码,请自行移步这里

训练

python3 train.py --dataroot ./datasets/mosaic --name mosaic_cyclegan --model cycle_gan --pool_size 50 --no_dropout --gpu_ids 0,1

说明下:

CycleGAN训练是个非常漫长的过程,如果没有GPU,小哥哥你还是看看就好。我是直接放到服务器上玩的了,配置如下:

如上训练命令,我使用的是GPU DEVICE 0和1

代码想要跑起来,必须搭建好环境,参照项目源码自行配置,记得安装

  1. pip install visdom

  2. pip install dominate

用来可视化训练过程的
To view training results and loss plots, run python3 -m visdom.server and click the URL http://localhost:8097. To see more intermediate results, check out ./checkpoints/maps_cyclegan/web/index.html

可视化过程:

python3 -m visdom.server

记得现把这个执行下,不然直接跑训练命令会报错。

训练过程是这样的

                                          

看不出来?再贴一张:

测试命令在:

/scripts/test_cyclegan.sh
python test.py --dataroot ./datasets/mosaic --name mosaic_cyclegan --model cycle_gan --phase test --no_dropout

3.玩转pix2pix

pix2pix train/test

数据集准备

We provide a python script to generate pix2pix training data in the form of pairs of images {A,B}, where A and B are two different depictions of the same underlying scene. For example, these might be pairs {label map, photo} or {bw image, color image}. Then we can learn to translate A to B or B to A:

Create folder /path/to/data with subfolders A and BA and B should each have their own subfolders trainvaltest, etc. In /path/to/data/A/train, put training images in style A. In /path/to/data/B/train, put the corresponding images in style B. Repeat same for other data splits (valtest, etc).

Corresponding images in a pair {A,B} must be the same size and have the same filename, e.g., /path/to/data/A/train/1.jpg is considered to correspond to /path/to/data/B/train/1.jpg.

这个比较复杂一点,主要是要求图像必须成对

我们同样在./datasets/mosaic文件夹下新建两个文件夹,A 和 B,然后在它们各自目录下再建三个folder,test,train,val

最后将训练数据放到各自的train下,测试的在test下,验证在val下。

整个文件结构长这样子:

细心的盆友可能发现mosaic根目录下也有三个folder,test,train,val,对的,这个是用代码自动生成的:

python3 datasets/combine_A_and_B.py --fold_A ./mosaic/A --fold_B ./mosaic/B --fold_AB ./mosaic

到此,我们的数据集算是搞定了。

训练

还不就是一句话的事

python3 train.py --dataroot ./datasets/mosaic --name mosaic_pix2pix --model pix2pix --which_model_netG unet_256 --which_direction AtoB --lambda_B 100 --dataset_mode aligned --no_lsgan --norm batch --pool_size 0

注意参数选取

可视化

一样的,通过

run python3 -m visdom.server and click the URL http://localhost:8097. 

测试

so easy ..

  1. #!./scripts/test_pix2pix.sh

  2. python test.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --which_model_netG unet_256 --which_direction BtoA --dataset_mode aligned --norm batch

数据集改成自己测试的数据集路径就好。

参考文献:

1.https://cloud.tencent.com/developer/article/1064970

2.https://cloud.tencent.com/developer/article/1077415

3.https://blog.csdn.net/Gavinmiaoc/article/details/80585531

cycle/Pix2Pix 模型相关推荐

  1. DL之pix2pix:基于TF利用pix2pix模型对food_resized数据集实现Auto Color自动上色技术—训练测试过程全记录

    DL之pix2pix:基于TF利用pix2pix模型对food_resized数据集实现Auto Color自动上色技术 目录 训练 food_resized数据集展示 TB过程监控 1.SCALAR ...

  2. TF之pix2pix之dataset:基于TF利用自己的数据集训练pix2pix模型之DIY自己的数据集

    TF之pix2pix之dataset:基于TF利用自己的数据集训练pix2pix模型之DIY自己的数据集 目录 转换图像并合并 1.A 类图像将挖去中心像素后得到B 类图像 2.生成并列图像样本的全过 ...

  3. TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型、测试并进行生成过程全记录

    TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型.测试并进行生成过程全记录 目录 TB监控 1.SCALARS 2.IMAGES 3.GRAPHS 4.DISTRIBUTI ...

  4. chapter 9 pix2pix模型与自动上色技术

    本章主要讲解2方面的内容:1)cGAN和pix2pix的原理:2)tensorflow下pix2pix的实现: 一.cGAN 和 pix2pix (一)cGAN 我们在上一章中,讲了GAN的原理,通过 ...

  5. [Pytorch系列-66]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型测试pix2pix模型

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  6. DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术

    DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术 目录 pix2pix模型输出结果 1.六种风格应用 2.动态生成 pix2pi ...

  7. CycleGAN与pix2pix不得不玩的模型

    CycleGAN是在去年三月底放在arxiv的一篇文章,文章名为Learning to Discover Cross-Domain Relations with Generative Adversar ...

  8. Pix2Pix——基于GAN的图像风格迁移模型

    Pix2Pix--基于GAN的图像风格迁移模型 写在前面 本文是文献Image-to-image translation with conditional adversarial networks的笔 ...

  9. 深入理解生成对抗网络(GAN 基本原理,训练崩溃,训练技巧,DCGAN,CGAN,pix2pix,CycleGAN)

    文章目录 GAN 基本模型 模型 GAN 的训练 模式崩溃 训练崩溃 图像生成中的应用 DCGAN:CNN 与 GAN 的结合 转置卷积 DCGAN CGAN:生成指定类型的图像 图像翻译中的应用 p ...

最新文章

  1. 用耳朵“打字”| 这个设备可以让患者实现用耳朵进行交流
  2. 杂谈人工智能说大数据
  3. Mysql 死锁过程及案例详解之用户自定义锁
  4. C++11新增的关键字decltype(auto)
  5. SpringMvc接收日期参数
  6. cent os重置mysql,linux mysql 能登陆不能修改用户(cent os 6.2)解决思路
  7. Python执行系统命令的方法 os.system(),os.popen(),commands
  8. mysql crash定位分析_MySQL实例crash的案例详细分析
  9. java输入a控制台打印1_Java—— 流(Stream)、文件(File)和IO
  10. innodb 共享表空间 转 独立表空间 详细说明
  11. 最新MT6763参考设计芯片资料
  12. NoSQL数据库简介——《大数据技术原理与应用》课程学习总结
  13. 最小二乘法算法C语言,最小二乘法C算法终极整理版本,绝对原创!
  14. lg相乘公式_ln公式(lg公式大全)
  15. 漏洞补丁在线更新失败或软件安装提示ERROR的解决方案
  16. 小明左、右手中分别拿两张纸牌:黑桃10和红桃8.现在交换手中的牌。
  17. 田忌赛马c语言程序设计,关于c语言的田忌赛马问题。
  18. poco mysql 中文_Poco数据库操作用户手册(一)
  19. win7 无法给系统保留的100M空间分配盘符时,用下面的方法就好
  20. 爬虫3 requests基础2 代理 证书 重定向 响应时间

热门文章

  1. 关于Linux线程的线程栈以及TLS
  2. Shell字符串比较(等于、不等于、大于、小于、起始字符、结尾字符)
  3. PAT B1034 有理数四则运算 (20 分)
  4. Django上传文件,制作文件上传按钮,form上传文件
  5. MYSQL 的静态表和动态表的区别, MYISAM 和 INNODB 的区别
  6. Shell 编程基础之 Case 练习
  7. java程序打包成jar
  8. 在内存中动态生成缩略图
  9. 谈谈Java虚拟机——Class文件结构
  10. “年薪25万只是白菜价”已成过去式,AI 岗位年薪下降8.9%!