StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation (CVPR 2018)

摘要

现有的图像翻译方法在两个域之间的图像翻译问题上取得了很大成就,但在处理多个域上有很大局限,因为必须为每对图片域建立独立的模型。为了解决这个问题,我们提出了 StarGAN,它能使用一个模型对多个域进行图像到图像翻译。我们在一个人脸属性转化任务和一个面部表情生成任务上验证了方法的有效性。

1.png

介绍

定义属性 (attribute) 是图片中的一个有意义的固有属性(如发色,性别等),属性值是属性的一个具体取值。域 (domain) 是具有相同属性值的图片集合。

CelebA 数据集包含 40 种人脸属性标签,RaFD 数据集包含 8 种面部表情标签。

现有的模型在 multi-domain 图像翻译任务上效率很低,因为对 k 个属性,需要训练 k(k − 1) 个生 成器。同时不高效,因为尽管存在可以从所有域中的图片学习到的全局特征,如脸型等,每个生成器却不能使用整个训练数据,只能从两个域中学习。除此之外,它们不能从不同的数据集中联合训练 domain, 因为每个数据集都只是部分标注的 (partially labeled)。

2.png

并非学习一个固定的翻译,我们的模型同时以图片和域信息作为输入,学习灵活地将输入图片翻译到指定的域中。我们使用一个标签来表示域信息(binary 或 one-hot)。在训练过程中,我们随机生成一 个目标域标签,训练模型灵活地将输入图片翻译到目标域中。这样,我们能在测试过程中控制域标签以生成想要的图片。

我们同时介绍一个简单但有效的手段,通过对域标签添加一个 mask vector 来使联合训练不同数据集的图片成为可能。我们提出的方法能保证模型忽略未知的标签,而专注于特定数据集提供的标签。这 样,我们的模型能使用从 RaFD 中学习到的特征来生成 CelebA 集合中的图片面部表情。

我们的贡献主要在于:

  • 我们提出了 StarGAN,一种只使用一个单独的生成器和判别器来学习多个域之间映射的 GAN,能
    从多个域的图片中高效地训练。
  • 我们提出了使用 mask vector 来进行多个数据集的联合训练的方法。
  • 我们使用 StarGAN 展示了大量高质量的人脸属性转化和人脸表情生成的结果,证明了它的优越性。

相关工作

GANs GAN 的应用:image generation、image translation、super-resolution imaging、face image synthesis 等。我们的方法也使用了对抗损失来使生成的图片更真实。

条件GANs 先前的研究提出向生成器和判别器提供类别信息,从而生成类别条件下的样本。其他近期研究专注于给定文本描述,生成与其高度相关的图片。条件 GAN 的想法也被成功应用于 domain tranfer、super-resolution imaging、photo editing 等。在本文中,我们提出了一种可扩展的 GAN 框架,通过提供条件域信息,它能将图片翻译到多种目标域内。

图像到图像翻译

使用成对数据:使用 cGAN 的 pix2pix;无需成对数据:将 CoGAN 与 VAE 结合的UNIT、使用循环一致性损失的 CycleGAN 和 DiscoGAN。上述方法均只能一次学习两个域之间的关系。

StarGAN

我们首先描述 StarGAN 如何在单数据集上进行 multi-domain 图像翻译,然后讨论 StarGAN 如何
使用多个含有不同标签集合的数据集上使用任意标签进行图像翻译。

3.png

多域图像翻译

我们的目标是:生成器 $G : G(x, c) \rightarrow y$,判别器 $D : x \rightarrow\left\{D_{s r c}(x), D_{c l s}(x)\right\}$。

Adversarial Loss 为了使生成的图片与真实图片相似,我们采用对抗损失:

$$ \mathcal{L}_{a d v}=\mathbb{E}_{x}\left[\log D_{s r c}(x)\right]+\mathbb{E}_{x, c}\left[\log \left(1-D_{s r c}(G(x, c))\right]\right. $$

Domain Classification Loss 为了使生成的图片 $y$ 能被正确分类到目标域 $c$,我们在 $D$ 的顶部添加一个辅助分类器,在最优化 $D$ 和 $G$ 时使用域分类损失。也就是说,我们将目标函数分为两项:真实图片的域分类损失,用来最优化 $D$;假图片的域分类损失,用来最优化 $G$。

真实图片的域分类损失可以表示为:

$$ \mathcal{L}_{c l s}^{r}=\mathbb{E}_{x, c^{\prime}}\left[-\log D_{c l s}\left(c^{\prime} | x\right)\right] $$

其中 $c′$ 是真实图片 $x$ 所在的域标签。
假图片的域分类损失可以表示为:

$$ \mathcal{L}_{c l s}^{f}=\mathbb{E}_{x, c}\left[-\log D_{c l s}(c | G(x, c))\right] $$

其中 $c$ 是目标域标签。$G$ 尝试最小化这个目标函数来生成能被分类到目标域 $c$ 的假图片。

Reconstruction Loss 通过最小化对抗损失和域分类损失,$G$ 会努力生成看起来真实且能被分类到目标域 $c$ 的图片,但并不能保证生成的图片保留了输入图片的内容,即只改变了与域相关的部分。为缓解这个问题,我们对生成器采用了循环一致性损失,定义为:

$$ \mathcal{L}_{r e c}=\mathbb{E}_{x, c, c^{\prime}}\left[\left\|x-G\left(G(x, c), c^{\prime}\right)\right\|_{1}\right] $$

Full Objective

$$ \mathcal{L}_{D}=-\mathcal{L}_{a d v}+\lambda_{c l s} \mathcal{L}_{c l s}^{r}\\ \mathcal{L}_{G}=\mathcal{L}_{a d v}+\lambda_{c l s} \mathcal{L}_{c l s}^{f}+\lambda_{r e c} \mathcal{L}_{r e c} $$

在实验中,取 $\lambda_{c l s}=1$ 和 $\lambda_{r e c}=10$。

使用多个数据集训练

StarGAN 的一个重要优点是能使用含有不同类别标签的多个数据集同时进行训练。例如 CelebA 数据集只含有属性标签,而 RaFD 数据集只含有表情标签。

Mask Vector 为了解决这个问题,我们介绍一个 mask vector $m$,它能是 StarGAN 忽略未被确定的标签,而只专注于特定数据集提供的明确的标签。我们使用一个 $n$ 维 one-hot 向量来表示 $m$,$n$ 是数据集的数量。此外,我们将标签统一定义为一个向量:

$$ \tilde{c}=\left[c_{1}, \ldots, c_{n}, m\right] $$

其中 $[·]$ 表示连接;$c_i$ 表示第 $i$ 个数据集的标签向量,它可以是表示 binary 属性的 binary 向量,也可以是表示 categorical 属性的 one-hot 向量。对于其他 $n-1$ 个未知的标签,直接将其值设为 $0$。

训练策略 使用多个数据集训练 StarGAN 时,我们使用域标签 $\tilde{c}$ 作为生成器的输入。这样,生成器将学会忽略值为 0 的未被确定的标签。生成器的结构与使用单数据集进行训练时是相同的,除了输入标签 $\tilde{c}$ 的维度。另一方面,我们扩展判别器顶层的辅助分类器,使其能计算关于所有数据集的标签的概率分布。然后,我们使用一种多任务学习 (multi-task learning) 的设置来训练模型,即判别器只最小化已知标签的分类损失。

实现

经过改进的GAN训练 为了使训练过程稳定并产生高质量图片,我们将对抗损失替换为带有梯度惩罚的 Wasserstein GAN 目标函数:

$$ \mathcal{L}_{a d v}=\mathbb{E}_{x}\left[D_{s r c}(x)\right]-\mathbb{E}_{x, c}\left[D_{s r c}(G(x, c))\right]-\lambda_{g p} \mathbb{E}_{\hat{x}}\left[\left(\left\|\nabla_{\hat{x}} D_{s r c}(\hat{x})\right\|_{2}-1\right)^{2}\right] $$

其中 $\hat{x}$ 是一对真假图片之间的直线均匀采样得到的。实验中取 $λ_{gp} = 100$。

网络结构 StarGAN 的生成器采用了 CycleGAN 的结构,使用了两个 stride 为 2 的卷积层进行下采样,6 个残差块,两个 stride 为 2 的转置卷积层进行上采样。生成器使用 instance normalization,判别器不用。使用 PatchGAN 作为判别网络。

实验

数据集

CelebA 数据集中的图片大小为 178x218,首先裁切到 178x178,再 resize 到 128x128。随机选择 2000 张图片作为测试集,剩下的图片作为训练集。使用以下属性建立 7 个域:发色(黑/金/灰)、性别(男/女)、 年龄(年轻/年老)。

RaFD 数据集包含 4824 张图片,里面共有 67 个参与者。每个参与者对着三个凝视方向做八个表情, 并分别从三个角度捕捉图像。我们将图片裁切到 256x256,使脸部居中,然后 resize 到 128x128。

训练

All models are trained using Adam with 1 = 0.5 and 2 = 0.999. For data augmentation we flip the images horizontally with a probability of 0.5. We perform one generator update after five discriminator updates. The batch size is set to 16 for all experiments. For experiments on CelebA, we train all models with a learning rate of 0.0001 for the first 10 epochs and linearly decay the learn- ing rate to 0 over the next 10 epochs. To compensate for the lack of data, when training with RaFD we train all models for 100 epochs with a learning rate of 0.0001 and apply the same decaying strategy over the next 100 epochs. Training takes about one day on a single NVIDIA Tesla M40 GPU.

CelebA上的实验结果

4.png

RaFD上的实验结果

5.png

CelebA和RaFD上的实验结果

6.png

7.png

参考文献

[1] StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation

Last modification:August 11th, 2019 at 11:10 pm
如果觉得我的文章对你有用,请随意赞赏