StarGAN多域图像变换

原文:StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation

目录

本文的贡献:

简介(翻译):

模型:

StarGAN:

损失函数:

1、对抗损失(Adversarial Loss)

2、域分类损失(Domain Classification Loss)

3、重构损失(Reconstruction Loss)

4、最终目标(Full Objective)

训练:

掩码向量(mask vector)

训练策略(Training Strategy)

实现:

实验结果:

源代码:StarGAN-tensorflow


本文的贡献:

1、提出了一种新的生成对抗网络StarGAN,它只使用一个生成器和一个鉴别器来学习多个域之间的映射,有效地从所有域的图像中进行训练。

2、演示了如何利用掩码向量(mask vector)方法成功地学习多个数据集之间的多域图像转换,该方法使StarGAN能够控制所有可用的域标签。

3、使用StarGAN对面部属性转换和面部表情合成任务进行了定性和定量的研究,结果表明该方法优于基线(baseline)模型。

 

简介(翻译):

图像到图像转换(image-to-image translation)这个任务是指改变给定图像的某一方面,例如,将人的面部表情从微笑改变为皱眉。在引入生成对抗网络(GAN)之后,这项任务有了显着的改进,包括可以改变头发颜色,改变风景图像的季节等等。

给定来自两个不同领域的训练数据,这些模型将学习如何将图像从一个域转换到另一个域。我们将属性(attribute)定义为图像中固有的有意义的特征,例如头发颜色,性别或年龄等,并且将属性值(attribute value)表示为属性的一个特定值,例如头发颜色的属性值可以是黑色 / 金色 / 棕色,性别的属性值是男性 / 女性。我们进一步将域(domain)表示为共享相同属性值的一组图像。例如,女性的图像可以代表一个 domain,男性的图像代表另一个 domain。

一些图像数据集带有多个标签属性。例如,CelebA 数据集包含 40 个与头发颜色、性别和年龄等面部特征相关的标签,RaFD 数据集有 8 个面部表情标签,如 “高兴”、“愤怒”、“悲伤” 等。这些设置使我们能够执行更有趣的任务,即多域图像到图像转换(multi-domain image-to-image translation),即根据来自多个域的属性改变图像。

图 1:通过从 RaFD 数据集学习迁移知识,应用到 CelebA 的多域图像到图像转换结果。第一列和第六列显示输入图像,其余列是产生的 StarGAN 图像。注意,图像是由一个单一模型网络生成的,面部表情标签如生气、高兴、恐惧是从 RaFD 学习的,而不是来自 CelebA。

在图 1 中,前 5 列显示了一个 CelebA 的图像是如何根据 4 个域(“金发”、“性别”、“年龄” 和 “白皮肤”)进行转换。我们可以进一步扩展到训练来自不同数据集的多个域,例如联合训练 CelebA 和 RaFD 图像,使用在 RaFD 上训练的特征来改变 CelebA 图像的面部表情,如图 1 最右边的列所示。

然而,现有模型在这种多域图像转换任务中既效率低,效果也不好。它们的低效性是因为在学习 k 个域之间的所有映射时,必须训练 k(k-1)个生成器。图 2 说明了如何训练 12 个不同的生成器网络以在 4 个不同的域中转换图像。

图 2: StarGAN 模型与其他跨域模型的比较。(a)为处理多个域,应该在每两个域之间都建立跨域模型。(b)StarGAN 用单个生成器学习多域之间的映射。该图表示连接多个域的拓扑图。

为了解决这类问题,我们提出了StarGAN,这是一个能够学习多个域之间映射的生成对抗网络。如图 2(b) 所示,我们的模型接受多个域的训练数据,仅使用一个生成器就可以学习所有可用域之间的映射。

这个想法很简单。我们的模型不是学习固定的转换(例如,将黑头发变成金色头发),而是将图像和域信息作为输入,学习将输入的图像灵活地转换为相应的域。我们使用一个标签来表示域信息。在训练过程中,我们随机生成一个目标域标签,并训练模型将输入图像转换为目标域。这样,我们可以控制域标签并在测试阶段将图像转换为任何想要的域。

我们还介绍了一种简单但有效的方法,通过在域标签中添加一个掩码向量(mask vector)来实现不同数据集域之间的联合训练。我们提出的方法可以确保模型忽略未知的标签,并关注特定数据集提供的标签。这样,我模型就可以很好地完成任务,比如利用从 RaFD 中学到的特征合成 CelebA 图像的面部表情,如图 1 最右边的列所示。据我们所知,这是第一个在不同的数据集上成功地完成多域图像转换的工作。

模型:

图 3:StarGAN 的概观,包含两个模块:一个鉴别器 D 和一个生成器 G。(a)D 学习区分真实图像和假图像,并将真实图像分类到相应的域。(b)G 接受图像和目标域标签作为输入并生成假图像。 (c)G 尝试在给定原始域标签的情况下,从假图像中重建原始图像。(d)G 尝试生成与真实图像非常像的假图像,并通过 D 将其分类为目标域。

 

StarGAN:

我们的目标是训练单个生成器G学习多个域之间的映射。G的输入为原始图像x和目标域的掩码向量(mask vector)c,输出是转换后的领域c的图像。我们随机生成目标域标签c,使G学会灵活地转换输入图像。我们还引入了一个辅助分类器,它允许一个鉴别器D控制多个域。也就是说,我们的鉴别器D产生了源和域标签的概率分布,图三既是其架构。D和G的数学表示为:

损失函数:

1、对抗损失(Adversarial Loss)

为了使生成的图像与真实图像难以区分,我们采用了对抗性损失:

G在输入图像x和目标与标签c为条件下下生成目标图像。D_{src}(x)是由D给出的源的概率分布(即判断是否是真是图像的分布),G希望式1最小化,D却希望它最大化。

 

2、域分类损失(Domain Classification Loss)

对于一个给定的输入图像x和一个目标域标签c,我们的目标是将x转化为输出图像y,正确分类到目标域c。为了达到这个条件,我们添加一个D上的辅助分类器并且在优化D和G时利用域分类损失。即将目标分解为两个术语:用于优化D的真实图像的域分类损失和用于优化虚假图像的域分类损失。具体定义如下:

D_{cls}({c}'|x)表示由D计算的域标签上的概率分布,D学习将真实图像x分类到其对应的原始域c'中。输入的训练数据是(x,c')。D通过最小化式2来学习这种分类方式。而G试图将式3最小化,生成可以分类为目标域c的图像。

 

3、重构损失(Reconstruction Loss)

通过最小化对抗性和分类损失,训练G生成逼真的图像,并将其分类到正确的目标区域。然而,最小化损失(式1、3)不保证翻译后的图像在只改变输入中与领域相关的部分的同时保留其输入图像的内容。为了缓解这个问题,我们对生成器应用循环一致性损失,定义为:

采用L1范数作为重构损失。

 

4、最终目标(Full Objective)

其中\lambda _{cls}\lambda _{rec}作为超参数控制了域分类和重构损失的重要性。在论文中\lambda _{cls} = 1, \lambda _{rec} = 10.

 

训练:

掩码向量(mask vector)

不同数据之间具有不同的标签,比如CelebA数据集有性别、头发颜色、年龄等标签,没有诸如生气高兴的标签,而数据集RaFD则反之。为了缓解这个问题,我们引入了一个掩码向量(mask vector)m,它允许StarGAN忽略未指定的标签,而将焦点集中在特定数据集提供的显式已知标签上。在StarGAN中,我们使用一个n维的一维热向量(one-hot vector)来表示m,其中n是数据集的数量。另外,我们将定义一个统一版标签作为一个向量:

c_{i}表示第i个数据集标签的向量。已知标签c_{i}的向量可以表示为二进制属性的二进制向量,也可以表示为分类属性的one-hot vector。其余n-1个未知标签简单的赋值为0即可。在论文中使用了两个数据集,所以n为2.

训练策略(Training Strategy)

使用式7中的掩码向量和标签向量组合向量\tilde{c}和图像x一起作为G的输入,通过这样做,生成器G学会忽略未指定的标签(它们是零向量),并关注显式给定的标签。除了输入标签\tilde{c}的维度外,生成器的结构与单个数据集的训练完全相同。另一方面,我们扩展了鉴别器的辅助分类器,为所有数据集生成标签上的概率分布。

然后,我们在一个多任务学习环境中对模型进行训练,其中D试图最小化与已知标签相关联的分类错误。例如,当在CelebA中进行图像训练时,D只会最小化与CelebA属性相关的标签的分类错误,而不会最小化与RaFD相关的面部表情。在这些设置下,通过CelebA和RaFD之间的交替,D学习两个数据集的所有鉴别特性,而生成器G学习控制两个数据集中的所有标签。

 

实现:

1、将式1的对抗损失替换为WGAN优化后的损失,具体为:
 

\hat{x}是在真实图像与生成图像之间沿着一条直线的均匀采样。论文中\lambda _{gp}=10

 

2、网络架构

StarGAN的网络架构如表4和表5所示。对于生成器网络,除了最后一个输出层之外,我们在所有层中都使用实例规范化。对于鉴别器网络,我们使用斜率为negative_slope=0.01的Leaky ReLU。符号解释:n_{d}: 域的数量(the number of domain) n_{c}:域标签的维度(the dimension of domain labels,当训练CelebA和RaFD两个数据集时n_{c} =  n_{d} + 2,否则等于n_{d})  N:输出通道数, K:内核尺寸,S:步幅尺寸,P:填充尺寸,IN:实例归一化。

 

 

实验结果:

图4:CelebA 数据集上面部属性转换的结果对凯勒巴数据集。第1列显示输入图像,后4列显示单个属性转换的结果,最右边的列显示多个属性的转换结果。H:头发的颜色;G:性别;A:年龄

图5:RaFD 数据集上面部表情合成的结果

图6:StarGAN-SNG 和 StarGAN-JNT 在 CelebA 数据集上的面部表情合成结果。

 

源代码:StarGAN-tensorflow

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值