1 GAN & Cycle GAN

Ian Goodfellow 在2014年提出了原始的GAN模型,我这篇博客有初步介绍 $\rightarrow$ GAN Notes

Cycle GAN是2017年ICCV上的一篇文章,以GAN为基础来实现图像的风格迁移,表现非常惊艳。

论文标题:Unpaired image-to-image translation using cycle-consistent adversarial networks.

Github项目主页:Cycle GAN

2 Motivation

原始GAN学习到的是随机噪声分布$Z$到真实数据分布$X$的映射:$G(z)\approx x$。

但GAN模型所生成的数据是不可控的,以MINIST数据集为例,GAN无法生成指定label的数字图片。

那么,如果将label作为条件信息也加入模型进行训练呢?这个思路就是 conditional GAN。

具体到图像风格迁移,基于conditional GAN的pix2pix已经可以完成这项任务,但代价是训练样本必须是两两配对的。

Cycle GAN对pix2pix的改进是解决了对训练样本的限制,即不需要两个domain的样本是两两配对的。

以上就是Cycle GAN这个工作的意义。

3 How?

3.1 基础架构

需要注意,原始GAN以随机噪声作为生成器的输入。

而Cycle GAN生成器的输入是另一个域的数据,因此不再需要随机噪声

3.2 思路

Cycle GAN的解决方案很简单,一个GAN不行,我两个GAN行不行?

直观上,Cycle GAN就是训练两个GAN模型构成一个循环。

第一个GAN的生成器负责学习 $X\rightarrow Y$,第二个GAN的生成器负责学习 $Y\rightarrow X$。

然后保证数据在这个循环前后的一致性:$x\rightarrow G(x)\rightarrow F(G(x))\approx x$,$y\rightarrow F(y)\rightarrow G(F(y))\approx y$。

3.3 损失函数

对两个domain的数据${{X,Y}}$,学习过程分别是对称的两个循环:$F(G(x))\approx x$,$G(F(y))\approx y$。

这两个循环的损失函数定义为 cycle consistency loss,即循环一致性损失:

\[L_{cyc}(G,F)=E_{x\sim p_{data}(x)}[\Vert F(G(x))-x\Vert_1]+E_{y\sim p_{data}(y)}[\Vert G(F(y))-y\Vert_1]\tag{1}\]

所以模型最终的Loss是两个GAN的Loss + 两个循环的Loss。 \(L(G,F,D_X,D_Y)=L_{GAN}(G,D_Y)+L_{GAN}(F,D_X)+L_{cyc}(G,F)\tag{2}\)

3.4 two details

4 Cycle GAN in PyTorch

作者公布了Cycle GAN的PyTorch源码,Github项目主页在此 $\rightarrow$ のPytorch Cycle GAN

需要安装的两个额外库依赖

pip install dominate
pip install visdom

下载数据集

bash ./datasets/download_cyclegan_dataset.sh vangogh2photo

train & test,参数设定及说明见 options 文件夹

# train
python -m visdom.server
python train.py --dataroot ./datasets/vangogh2photo --name vangoph_cyclegan --model cycle_gan --gpu_ids 0,1 --batch_size 8 --display_id -1
# test
python test.py --dataroot ./datasets/vangogh2photo --name vangoph_cyclegan --model cycle_gan --gpu_ids 0,1

TBC

5 無駄無駄

このジョルノ・ジョバァーナには夢がある!