对应论文:《StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation》
starGAN 是 Yunjey Choi 等人于 17年11月 提出的一个模型。该模型可以实现 图像的多域间的迁移(作者在论文中具体应用于人脸属性的转换)。
在 starGAN 之前,也有很多 GAN模型 可以用于 image-to-image,比如 pix2pix(训练需要成对的图像输入),UNIT(本质上是coGAN),cycleGAN(单域迁移)和 DiscoGAN。
而 starGAN 使用 一个模型 实现 多个域 的迁移,这在其他模型中是没有的,这提高了图像域迁移的可拓展性和鲁棒性。
下图展示了在域迁移中 传统GAN 的做法和 starGAN 的做法的区别:
左边是 传统的GAN,右边是 starGAN。传统的域迁移 需要在不同的两个域之间相互进行特征提取,这就导致在有 k 个域的情况下需要 k(k-1) 个生成器。而 starGAN 则解决了这个问题,自始至终只需要一个生成器。
下图展示了作者在 CelebA 和 RaFD 两个人脸数据集上进行发色,性别,表情等属性转化的效果。
官方PyTorch实现:https://github.com/yunjey/stargan
一、原理介绍
网络模型
网络概述
StarGAN 包含 鉴别器D 和 生成器G 两个部分。
鉴别器D 学习去辨别真实图像和生成图像,以及对图像进行所属域的分类(两个输出)。生成器接受图像和目标域标签(两个输入),生成假的图像【目标域标签是空间重复的,和输入图像相连接】。
具体网络结构
参考了 CycleGAN
,starGAN的生成器包含2个卷积层(下采样的步长设置为2),6个残差层,2个反卷积层(上采样的步长设置为2),生成器中还使用了 归一化(instance normalization)。判别器则采用 PatchGAN
的结构,它可以对局部图像块进行真假分类,但没有使用归一化层。
标签c的表示方式
前面也提到过,模型中是需要输入标签c的,实际上作者在做的时候,标签c是以 one-hot编码 表示的,作者将此输入称为mask vector。
损失函数
Adversarial Loss(对抗损失)
为了保证生成图像的真实性,采用了对抗损失。Dsrc(x)是D给出的源域上的概率分布。
生成器G试图将这个目标最小化,即尽可能缩小自己生成的数据与真实数据的差别,让 D 真假难别;而鉴别器D试图将它最大化,即尽可能正确地识别出真实数据和 G 伪造的数据。
为了防止模式坍塌,作者还 借鉴了 WGAN
的思想,对 adversarial loss (对抗损失)进行了改进。
Domain Classification Loss(域分类损失)
为实现图像域的准确转换,starGAN 在判别器的顶部引入了一个复杂的辅助分类器。在同时优化G和D的同时,添加了一个域分类损失。
判别器的训练目标为将真实图像的域分类损失最小化,以学习真实图像的正确分类;生成器的训练目标为将生成图像的域分类损失最小化,使得生成的图像能够被分类为目标域。
Reconstruction Loss (重构损失)
所谓Reconstruction Loss (重构损失),其实就是CycleGAN中的cycle consistency loss(循环一致性损失)。
最小化上述两种loss并不能保证保留输入图像上与域转换无关的内容不变,只改变与域转换相关的部分,所以在模型中的生成器引入了重构损失。
即使用两次生成器,将原始图像转换为目标域中的图像,然后从转换后的图像重建原始图像,最后比较原始图和重构图的L1正则化距离。
Full Objective(总损失)
- 判别器损失由两部分loss组成:对抗损失和域分类损失;
- 生成器损失由三部分构成:对抗损失和域分类损失和重构损失。域分类损失的权重系数设置为1,重构损失的权重系数设置为10。
二、论文对比实验
作者将 StarGAN 与 最近的面部属性转换方法 进行比较。此外,作者还对面部表情合成进行分类实验。最后证明了 StarGAN 可以从多个数据集中学习到图像到图像的转换。
基准模型
选择了以下的模型作为对比基准——
- DIAT(仅用了 adversarial loss 来映射域之间的关系)
- cycleGAN( 用adversarial loss和 cycle consistency loss来映射域之间的关系 )
- IcGAN(cGAN的改进版)
数据集
- CelebA。CelebFaces Attributes (CelebA)数据集包含202,599张 名人的面部图像,每个图像都带有40个二进制属性。我们将最初的178×218大小的图像裁剪为178×178,然后将其大小调整为128×128。我们随机选取2000张图像作为测试集,并使用所有剩余的图像作为训练数据。
- RaFD。Radboud Faces Database (RaFD)由来自67名参与者的4824张(67x24x3) 图像组成。每个参与者在三个不同的注视方向做出八种面部表情。作者将面居中的图像裁剪为256×256,然后将其大小调整为128×128。
训练细节
所有模型训练都采用β1 = 0.5,β2 = 0.999的Adam优化器。为了增加数据,以0.5的概率水平翻转图像。在五次鉴别器更新之后执行一次生成器更新。所有实验的batch size设置为16。
在CelebA上的实验中,在前10个epoch中以0.0001的学习率训练所有模型,并在接下来的10个epoch中将学习率线性衰减为0。
为了弥补数据的不足,当使用RaFD训练时,我们以0.0001的学习率训练100个epoch的所有模型,并在接下来的100个epoch中应用相同的衰减策略。
三、starGAN实现
待补充
参考资料: