PyTorch实现"StarGAN:使用单一模型执行多个域的图像转换"。

转载自:https://ptorch.com/news/116.html

PyTorch实现StarGAN:用于多域图像到图像转换的统一生成对抗网络。StarGAN可以灵活地使用一个单一的发生器和鉴别器将输入图像转换为任何想要的目标域。你可以在这里查看StarGAN的演示视频。本项目源码PyTorch实现"StarGAN:使用单一模型执行多个域的图像转换"。

作者

Yunjey Choi, Minje Choi, Munyoung Kim, Jung-Woo Ha, Sung Kim, 和韩国大学的Jaegul Choo, Clova AI Research (NAVER), 香港科技大学新泽西学院的Clova AI Research(NAVER)

结果

CelebA的面部属性转移

这些图像由在CelebA数据集上训练的StarGAN生成。

RaFD上的表情合成

图像由在RaFD数据集上训练的StarGAN生成。

CelebA上的表情合成

这些图像由在CelebARaFD数据集上训练的StarGAN生成。

模型描述

在单个数据集中进行训练

StarGAN的概况,包括两个模块,一个鉴别器d和发电机G ^。

  • (a) D学会区分真实图像和虚假图像,并将真实图像分类到相应的域。
  • (b) G同时输入图像和目标域标签并生成假图像。目标域标签被空间复制并与输入图像连接。
  • (c) G尝试从给定原始域标签的假图像重建原始图像。
  • (d) G尝试生成与真实图像不可区分的图像,并且可以通过D将其分类为目标域。

使用多个数据集进行训练

StarGAN在与CelebARaFD进行训练时的概述。

  • (a)〜(d)显示了使用CelebA的训练过程,
  • (e)〜(h)显示了使用RaFD的训练过程。
  • (a),(e)鉴别器D学习区分真实图像和伪造图像,并仅将已知标签的分类误差最小化。
  • (b),(c),(f),(g)当掩模向量(紫))为[1,0]时,发生器G学习专注于CelebA标签(黄)),忽略RaFD标签(绿))来执行图像到图像的转换,反之亦然,当掩码矢量是[0,1]时。
  • (d),(h) G试图生成与真实图像无法区分且由D归类为属于目标域的图像。

环境配置

  • Python 3.5+
  • PyTorch 0.2.0
  • TensorFlow 1.3+ (可选张量板)

快速开始

1.克隆存储库

$ git clone https://github.com/yunjey/StarGAN.git
$ cd StarGAN/

2.下载数据集

(i)CelebA数据集

$ bash download.sh

(ii)RaFD数据集

由于RaFD不是公共数据集,因此您必须首先请求访问Radboud Faces数据库网站的数据集。然后,您需要创建文件夹结构,如此处所述。

3.训练StarGAN

(i)与CelebA一起训练

$ python main.py --mode='train' --dataset='CelebA' --c_dim=5 --image_size=128 \
                 --sample_path='stargan_celebA/samples' --log_path='stargan_celebA/logs' \
                 --model_save_path='stargan_celebA/models' --result_path='stargan_celebA/results'

(ii)RaFD训练

$ python main.py --mode='train' --dataset='RaFD' --c_dim=8 --image_size=128 \
                 --num_epochs=200 --num_epochs_decay=100 --sample_step=200 --model_save_step=200 \
                 --sample_path='stargan_rafd/samples' --log_path='stargan_rafd/logs' \
                 --model_save_path='stargan_rafd/models' --result_path='stargan_rafd/results'

(iii)使用CelebA + RaFD进行训练

$ python main.py --mode='train' --dataset='Both' --image_size=256 --num_iters=200000 --num_iters_decay=100000 \
                 --sample_path='stargan_both/samples' --log_path='stargan_both/logs' \
                 --model_save_path='stargan_both/models' --result_path='stargan_both/results'

4.测试StarGAN

(i)CelebA面部属性转移

$ python main.py --mode='test' --dataset='CelebA' --c_dim=5 --image_size=128 --test_model='20_1000' \
                 --sample_path='stargan_celebA/samples' --log_path='stargan_celebA/logs' \
                 --model_save_path='stargan_celebA/models' --result_path='stargan_celebA/results'

(ii)RaFD上的面部表情综合

$ python main.py --mode='test' --dataset='RaFD' --c_dim=8 --image_size=128 \
                 --test_model='200_200' --rafd_image_path='data/RaFD/test' \
                 --sample_path='stargan_rafd/samples' --log_path='stargan_rafd/logs' \
                 --model_save_path='stargan_rafd/models' --result_path='stargan_rafd/results'

(iii)CelebA的脸部表情综合

$ python main.py --mode='test' --dataset='Both' --image_size=256 --test_model='200000' \
                 --sample_path='stargan_both/samples' --log_path='stargan_both/logs' \
                 --model_save_path='stargan_both/models' --result_path='stargan_both/results'

引文

如果这项工作对您的研究有用,请引用我们的arXiv论文。

@article{choi2017stargan,
 title = {StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation},    
 author = {Choi, Yunjey and Choi, Minje and Kim, Munyoung and Ha, Jung-Woo and Kim, Sunghun and Choo, Jaegul},
 journal= {arXiv preprint arXiv:1711.09020},
 Year = {2017}
}


原创文章,转载请注明 :PyTorch实现"StarGAN:使用单一模型执行多个域的图像转换"。 - pytorch中文网
原文出处: https://ptorch.com/news/116.html
问题交流群 :168117787

你可能感兴趣的:(deep,learning,计算机视觉)