<SOURCE_TEXT>
CycleGAN
PyTorch | 项目页面 | 论文
Torch实现的图像到图像转换学习(例如:pix2pix),无需输入输出对,例如:
新:请查看我们的新无配对图像到图像转换模型 contrastive-unpaired-translation (CUT),该模型能够实现快速且内存高效的训练。
通过循环一致性对抗网络实现无配对的图像到图像转换
Jun-Yan Zhu*,Taesung Park*,Phillip Isola,Alexei A. Efros
伯克利人工智能研究实验室,加州大学伯克利分校
发表于ICCV 2017.(* 表示贡献相同)
此软件包包括CycleGAN,pix2pix,以及其他方法如BiGAN/ALI和Apple的论文S+U learning。
代码由Jun-Yan Zhu和Taesung Park编写。
更新:请查看PyTorch实现的CycleGAN和pix2pix。
PyTorch版本正在积极开发中,其结果可与此Torch版本相媲美或更佳。
其他实现:
[Tensorflow] (Harry Yang编写), [Tensorflow] (Archit Rathore编写), [Tensorflow] (Van Huy编写), [Tensorflow] (Xiaowei Hu编写), [Tensorflow-simple] (Zhenliang He编写), [TensorLayer] (luoxier编写), [Chainer] (Yanghua Jin编写), [Minimal PyTorch] (yunjey编写), [Mxnet] (Ldpe2G编写), [lasagne/Keras] (tjwei编写), [Keras] (Simon Karlsson编写)
应用
莫奈画作到照片
收藏风格转换
物体变形
季节转换
照片增强:窄景深
先决条件
- Linux或OSX
- NVIDIA GPU + CUDA CuDNN(CPU模式和无CuDNN的CUDA可能需要进行少量修改,但未经测试)
- 对于MAC用户,您需要Linux/GNU命令
gfind
和gwc
,可以通过brew install findutils coreutils
安装。
入门
安装
- 从https://github.com/torch/distro 安装torch和依赖项
- 安装torch包
nngraph
、class
、display
luarocks install nngraph
luarocks install class
luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
- 克隆此仓库:
git clone https://github.com/junyanz/CycleGAN
cd CycleGAN
应用预训练模型
- 下载测试照片(由Alexei Efros拍摄):
bash ./datasets/download_dataset.sh ae_photos
- 下载预训练模型
style_cezanne
(对于CPU模型,使用style_cezanne_cpu
):
bash ./pretrained_models/download_model.sh style_cezanne
- 现在,让我们生成保罗·塞尚风格的图像:
DATA_ROOT=./datasets/ae_photos name=style_cezanne_pretrained model=one_direction_test phase=test loadSize=256 fineSize=256 resize_or_crop="scale_width" th test.lua
测试结果将保存到./results/style_cezanne_pretrained/latest_test/index.html
。
请参阅Model Zoo以获取更多预训练模型。
./examples/test_vangogh_style_on_ae_photos.sh
是一个示例脚本,下载预训练的梵高风格网络并在Efros的照片上运行。
训练
- 下载数据集(例如:ImageNet中的斑马和马的图像):
bash ./datasets/download_dataset.sh horse2zebra
- 训练模型:
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model th train.lua
- (仅限CPU)不使用GPU或CUDNN的相同训练命令。设置环境变量
gpu=0 cudnn=0
强制仅使用CPU
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model gpu=0 cudnn=0 th train.lua
- (可选)启动显示服务器以查看模型训练过程中的结果。(有关更多详情,请参阅Display UI):
th -ldisplay.start 8000 0.0.0.0
测试
- 最后,测试模型:
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model phase=test th test.lua
测试结果将保存到此HTML文件:./results/horse2zebra_model/latest_test/index.html
。
模型动物园
通过以下脚本下载预训练模型。该模型将保存到./checkpoints/model_name/latest_net_G.t7
。
bash ./pretrained_models/download_model.sh model_name
orange2apple
(橙子 -> 苹果)和apple2orange
:在ImageNet类别
数据集
使用以下脚本下载数据集。许多数据集是由其他研究人员收集的。如果您使用了这些数据,请引用他们的论文。
bash ./datasets/download_dataset.sh dataset_name
facades
:来自 CMP Facades dataset 的400张图像。[引用]cityscapes
:来自 Cityscapes training set 的2975张图像。[引用]。注意:由于许可证问题,我们没有在仓库中托管该数据集。请直接从Cityscapes网页下载数据集。有关更多详细信息,请参阅./datasets/prepare_cityscapes_dataset.py
。maps
:从Google Maps抓取的1096张训练图像。horse2zebra
:从 ImageNet 下载的939张马的图像和1177张斑马的图像,使用的关键词是wild horse
和zebra
。apple2orange
:从 ImageNet 下载的996张苹果图像和1020张橙子的图像,使用的关键词是apple
和navel orange
。summer2winter_yosemite
:使用Flickr API下载的1273张夏季优胜美地的图像和854张冬季优胜美地的图像。更多详细信息请参阅我们的论文。monet2photo
、vangogh2photo
、ukiyoe2photo
、cezanne2photo
:艺术图像从 Wikiart 下载。真实照片则使用landscape 和 landscapephotography 标签组合从Flickr下载。每个类别的训练集大小为:莫奈:1074张,塞尚:584张,梵高:401张,浮世绘:1433张,照片:6853张。iphone2dslr_flower
:两个类别的图像都从Flickr下载。每个类别的训练集大小为:iPhone:1813张,DSLR:3316张。更多详细信息请参阅我们的论文。
显示UI
可选地,若要在训练和测试期间显示图像,请使用 display package。
- 安装:
luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
- 然后启动服务器:
th -ldisplay.start
- 在浏览器中打开此URL:http://localhost:8000
默认情况下,服务器在localhost上监听。传递 0.0.0.0
以允许外部连接到任何接口:
th -ldisplay.start 8000 0.0.0.0
然后在浏览器中打开 http://(hostname):(port)/
以加载远程桌面。
设置训练和测试数据
要在您自己的数据集上训练CycleGAN模型,您需要创建一个数据文件夹,其中包含两个子目录 trainA
和 trainB
,分别包含来自域A和域B的图像。您可以通过在 test.lua
中设置 phase='train'
来在训练集上测试您的模型。如果您有测试数据,您还可以创建 testA
和 testB
子目录。
您不应期望我们的方法可以在任何随机组合的输入和输出数据集上工作(例如 cats<->keyboards
)。通过我们的实验,我们发现如果两个数据集具有相似的视觉内容,效果会更好。例如,landscape painting<->landscape photographs
比 portrait painting <-> landscape photographs
更好。zebras<->horses
获得了令人信服的结果,而 cats<->dogs
完全失败。请参阅以下章节了解更多讨论。
失败案例
当测试图像与模型训练的图像相当不同的时候,我们的模型表现不好,如左图所示(我们在没有骑手的马和斑马上训练,但在这里测试的是一匹有骑手的马)。在涉及颜色和纹理变化的翻译任务中,如上面报告的许多任务,该方法通常成功。我们也探索了需要几何变化的任务,但很少成功。例如,在 dog<->cat
转换任务中,学习到的翻译退化为对输入进行最小的更改。我们还观察到,使用配对训练数据可以实现的结果与我们的非配对方法之间存在持续的差距。在某些情况下,这个差距可能非常难以——甚至不可能——弥合:例如,在 cityscapes photos->labels 任务的输出中,我们的方法有时会交换树和建筑物的标签。
引用
如果您在研究中使用了此代码,请引用我们的论文:
@inproceedings{CycleGAN2017,
title={Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks},
author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},
booktitle={Computer Vision (ICCV), 2017 IEEE International Conference on},
year={2017}
}
相关项目:
contrastive-unpaired-translation (CUT)
pix2pix-Torch | pix2pixHD | BicycleGAN | vid2vid | SPADE/GauGAN
iGAN | GAN Dissection | GAN Paint
猫咪论文合集
如果您喜欢猫咪,也喜欢阅读关于图形学、视觉和机器学习的酷炫论文,请查看猫咪论文合集。
致谢
代码借鉴了 pix2pix 和 DCGAN。数据加载器修改自 DCGAN 和 Context-Encoder。生成网络采用了 neural-style 并使用了 Instance Normalization。