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.拷贝项目

git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
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

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

pip install visdom
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 ..

#!./scripts/test_pix2pix.sh
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

CycleGAN与pix2pix不得不玩的模型相关推荐

  1. Python基于CycleGAN&pix2pix的黑白图像AI上色(源码&部署教程)

    1.项目背景 自从GAN技术发展以来,许多新奇的应用都得到了落地,本次我们来介绍其中一个小应用,就是黑白图像上色.想必大家在网上经常看到一些给黑白图像上色的视频,可以修复早期的黑白影像,背后的技术就是 ...

  2. 深度学习论文代码复现——CycleGAN和pix2pix

    一:前期代码准备 从GitCode(服务器在国内,访问比较快)中将开源代码copy下来 地址:mirrors / junyanz / pytorch-cyclegan-and-pix2pix · Gi ...

  3. 疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...

    出品 | AI科技大本营(ID:rgznai100) 2020年7月3日,AI ProCon 2020 AI开发者万人大会,隆重举行!作为CSDN策划并主办的系列技术「开发者大会」之一,本次大会通过线 ...

  4. 【论文笔记】CIRNet:基于CycleGAN的无监督循环配准模型

    本文是论文<UNSUPERVISED THREE-DIMENSIONAL IMAGE REGISTRATION USING A CYCLE CONVOLUTIONAL NEURAL NETWOR ...

  5. 【游戏开发进阶】带你玩转模型法线,实验一下大胆的想法(法线贴图 | shader | Unity | python | 爬虫)

    文章目录 一.前言 二.直观感受法线贴图 三.表面法线 1.表面法线的概念 2.空间与坐标系 2.1.世界空间--世界坐标系 2.2.局部空间--局部坐标系 2.3.切线空间--切线坐标系 2.4.小 ...

  6. CycleGAN与pix2pix训练自己的数据集-Pytorch

    github:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 参考:https://blog.csdn.net/Gavinmiaoc/a ...

  7. 手游 android 分辨率 适配,安卓不得不玩的神作,十大超高画质手游(安卓)

    随着智能手机硬件的不断提升,手游的画质也做的越来越精美,越来越高清.无论某一款手游的玩法再多.再吸引人,如果画面不好的话还是会劝退很多玩家的.所以超高的画质成了玩家留存一款游戏的主要标准,第一印象其实 ...

  8. 飞桨万能转换小工具X2Paddle,教你玩转模型迁移

    百度推出飞桨(PaddlePaddle)后,不少开发者开始转向国内的深度学习框架.但是从代码的转移谈何容易,之前的工作重写一遍不太现实,成千上万行代码的手工转换等于是在做一次二次开发. 现在,有个好消 ...

  9. cycle/Pix2Pix 模型

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

最新文章

  1. 防止在iOS设备中的Safari将数字识别为电话号码
  2. 不厌其烦,又一个Vue组件库
  3. C语言函数题-取子串 (10分)
  4. eclipse常用的快捷键
  5. kibana使用详解
  6. Maven项目添加FindBugs、PMD插件
  7. yolox: AssertionError: Caught AssertionError in DataLoader worker process 0.
  8. 程序员离职后12天,被前领导命令回去讲清代码?小伙直接说收费
  9. Requested registry access is not allowed 解决办法
  10. LabView学习笔记(六):while循环与for循环
  11. 线程的常用方法(1)
  12. 为什么学习线性代数_工程应用简介
  13. datax修复\N脏数据
  14. mysql运维监控工具排名_运维监控工具
  15. mt管理器主题修改教程_手机全局主题:美乐蒂
  16. 一、markdown 常见公式
  17. 趣图:道高一尺,魔高一丈
  18. linux下源代码安装f90,linux下编译fortran linux安装gfortran
  19. Get Request
  20. 使用WASAPI捕获声卡音频

热门文章

  1. 华为云物联网平台的C#应用开发(基本接口调用)
  2. h5封装table表格 vue
  3. GraalVM 安装及运行Python
  4. 特征工程与CTR预估
  5. InVEST模型 | HAbitat quality模块计算生境质量
  6. 帮管客CRM客户管理系统 v3.2.0
  7. python网格交易法详解_什么是网格交易?一文教会你网格交易策略
  8. linux中使用命令启动tomcat后显示tomcat started,实际却没启动的问题
  9. 阿里巴巴Java开发手册1.3.0(终极版)
  10. Redis实战之查询缓存