CycleGAN与pix2pix不得不玩的模型
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 B
. A
and B
should each have their own subfolders train
, val
, test
, 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 (val
, test
, 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不得不玩的模型相关推荐
- Python基于CycleGAN&pix2pix的黑白图像AI上色(源码&部署教程)
1.项目背景 自从GAN技术发展以来,许多新奇的应用都得到了落地,本次我们来介绍其中一个小应用,就是黑白图像上色.想必大家在网上经常看到一些给黑白图像上色的视频,可以修复早期的黑白影像,背后的技术就是 ...
- 深度学习论文代码复现——CycleGAN和pix2pix
一:前期代码准备 从GitCode(服务器在国内,访问比较快)中将开源代码copy下来 地址:mirrors / junyanz / pytorch-cyclegan-and-pix2pix · Gi ...
- 疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...
出品 | AI科技大本营(ID:rgznai100) 2020年7月3日,AI ProCon 2020 AI开发者万人大会,隆重举行!作为CSDN策划并主办的系列技术「开发者大会」之一,本次大会通过线 ...
- 【论文笔记】CIRNet:基于CycleGAN的无监督循环配准模型
本文是论文<UNSUPERVISED THREE-DIMENSIONAL IMAGE REGISTRATION USING A CYCLE CONVOLUTIONAL NEURAL NETWOR ...
- 【游戏开发进阶】带你玩转模型法线,实验一下大胆的想法(法线贴图 | shader | Unity | python | 爬虫)
文章目录 一.前言 二.直观感受法线贴图 三.表面法线 1.表面法线的概念 2.空间与坐标系 2.1.世界空间--世界坐标系 2.2.局部空间--局部坐标系 2.3.切线空间--切线坐标系 2.4.小 ...
- CycleGAN与pix2pix训练自己的数据集-Pytorch
github:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 参考:https://blog.csdn.net/Gavinmiaoc/a ...
- 手游 android 分辨率 适配,安卓不得不玩的神作,十大超高画质手游(安卓)
随着智能手机硬件的不断提升,手游的画质也做的越来越精美,越来越高清.无论某一款手游的玩法再多.再吸引人,如果画面不好的话还是会劝退很多玩家的.所以超高的画质成了玩家留存一款游戏的主要标准,第一印象其实 ...
- 飞桨万能转换小工具X2Paddle,教你玩转模型迁移
百度推出飞桨(PaddlePaddle)后,不少开发者开始转向国内的深度学习框架.但是从代码的转移谈何容易,之前的工作重写一遍不太现实,成千上万行代码的手工转换等于是在做一次二次开发. 现在,有个好消 ...
- cycle/Pix2Pix 模型
CycleGAN是在去年三月底放在arxiv的一篇文章,文章名为Learning to Discover Cross-Domain Relations with Generative Adversar ...
最新文章
- 防止在iOS设备中的Safari将数字识别为电话号码
- 不厌其烦,又一个Vue组件库
- C语言函数题-取子串 (10分)
- eclipse常用的快捷键
- kibana使用详解
- Maven项目添加FindBugs、PMD插件
- yolox: AssertionError: Caught AssertionError in DataLoader worker process 0.
- 程序员离职后12天,被前领导命令回去讲清代码?小伙直接说收费
- Requested registry access is not allowed 解决办法
- LabView学习笔记(六):while循环与for循环
- 线程的常用方法(1)
- 为什么学习线性代数_工程应用简介
- datax修复\N脏数据
- mysql运维监控工具排名_运维监控工具
- mt管理器主题修改教程_手机全局主题:美乐蒂
- 一、markdown 常见公式
- 趣图:道高一尺,魔高一丈
- linux下源代码安装f90,linux下编译fortran linux安装gfortran
- Get Request
- 使用WASAPI捕获声卡音频