【生成对抗网络】starGAN 详细解读

  • Post author:
  • Post category:其他


对应论文:

《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实现

待补充


参考资料:

[1]

对抗生成网络学习(十五)——starGAN实现人脸属性修改(tensorflow实现)



版权声明:本文为qq_24224067原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。