摘要
在Star GAN的基础上,GANimation又增加了注意力机制,使用了人脸的AU标签代替离散的情感标签,提高了模型对面部的生成效果,使得它在人脸面部情感转换功能有显著的优势。
对于任意情感,GANimation模型将输入的RGB图像定义为
I
y
r
∈
R
H
∗
W
∗
3
I_{yr}∈R^{H*W*3}
Iyr∈RH∗W∗3
把复杂情感分解成一个个AU,本文用一组AU激活值
y
r
=
(
y
1
,
…
,
y
N
)
y_r=(y_1,…,y_N)
yr=(y1,…,yN)对每个情感进行编码,其中每个
y
i
y_i
yi已经经过归一化处理,取值介于0到1之间来模拟第i个AU单元的值。有了这种连续表征,本文就可以在不同的情感表征之间进行自然插值,从而渲染各种逼真、平滑的面部情感。
Generator的目标是学习一个映射M,它能把输入图像
I
y
r
I_{yr}
Iyr转换成基于目标AU序列的标签
y
g
y_g
yg 为条件的输出图像
I
y
g
I_{yg}
Iyg。GANimation的结构模型如图所示:
GANimation的体系结构由两个主要模块组成:
一个是用于使注意力机制和颜色掩膜回归的Generator;
另一个是Discriminator以其真实感 D I D_I DI和AU序列的标签 y g y_g yg评估生成的图像。
整个模型是无监督训练的,因为既不知道同一人的不同情感的图像对,也不假设目标图像 I Y g I_{Yg} IYg是已知的。根据GANimation模型结构图可知,Generator( I y r I_{yr} Iyr, y g y_g yg)经过训练将图像 I y r I_{yr} Iyr中的面部情感转化为基于目标AU序列的标签 y g y_{g} yg。同时Generator在整个网络模型中运用了两次,首先将输入图像 I y r I_{yr} Iyr映射为 I y g I_{yg} Iyg,然后再渲染回 I Y r I_{Yr} IYr。同时GANimation使用了基于Wasserstein GAN的Wasserstein距离的Discriminator来判别生成图像的质量及其损失函数的表示方式。
Generator不仅可以将输入图像映射为情感标签的AU序列,还能将输出图像映射为原始AU序列,本文使用下标o来代表原点,下标f来代表终点。给定的RGB图像定义为
I
y
r
∈
R
H
∗
W
∗
3
I_{yr}∈R^{H*W*3}
Iyr∈RH∗W∗3和其生成图像所需的N维AU序列激活向量
y
f
y_f
yf,则Generator的输入为
I
y
r
∈
R
H
∗
W
∗
(
N
+
3
)
I_{yr}∈R^{H*W*(N+3)}
Iyr∈RH∗W∗(N+3), 这里激活向量
y
f
y_f
yf为N个H*W的矩阵。
在之前的StarGAN中,本文对每张图片只给了一个目标域的离散标签,而不是一个连续面部动作AU序列标签。而在GANimation模型中,想要改变人脸的情感时,不需要改变整个图像,则只需要改变图像中与情感相关的部分。例如,想实现让一个人由开心的情感转换为惊讶的情感,则只需要改变这个人五官和一些相关的面部肌肉,而不需要改变整个人脸,这样会更好的保留原图像的身份信息,使得整个网络不仅生成了目标面部情感,还能使输出的人脸还是输入的人的人脸。这也是GANimation模型在Generator上加入的注意力机制,如图所示。
在GANimation模型中,Generator输出两个掩码,一个是RGB颜色掩码C,另一个是注意力掩码A,这里与Star GAN不同,GANimation的Generator没有直接返回一张图像,而是通过两个掩码融合获得最终的图像,如式所示。
这里 I y o I_{yo} Iyo是原始图像, I y f I_{yf} Iyf为生成图像,
A为Generator输出的一张单通道的注意力掩码,这个注意力掩码的作用是关注人脸,忽略背景,防止复杂的背景和光照变化产生的影响,代表图像中需要更改的面部部位,A是一个介于0和1之间的浮点数组成的一个矩阵,矩阵大小和输入的图像的大小一样,该值越接近1,越代表输入图像的像素不需要改变
,反之A的值越接近0,则输入图像的像素越需要改变,
C是Generator输出的一张RGB颜色掩码,代表的是变化后的人脸的颜色信息,
当A的值接近1时,输出的图像更接近原图,当A的值接近0时,输出的图像更接近于C。
因此得到的 I y f I_{yf} Iyf是通过把这两个输出的掩码和输入的图像结合起来,就可以得到变化后的情感图像。同时,GANimation的Discriminator也有两个功能,一个功能用于判断生成图像的真假,另一个功能用于将图像中的AU激活值进行解码。
GANimation的损失函数
GANimation的损失函数分为四个部分:
1.第一项是生成图像对抗损失,它的作用是使生成图像的分布趋向于训练图像的分布,就是让生成的图像看起来更真实。这个损失是应用了Wasserstein GAN的Wasserstein距离,因为原始的GAN很难训练,很容易梯度消失或梯度爆炸。这个损失函数的意义就是使生成图像通过Discriminator得到的结果最大化,使原始图像通过Discriminator得到的结果最小化,另外再加入一个梯度惩罚项,让梯度控制在一定范围里。
I
y
o
I_{yo}
Iyo是输入图像,对应原始AU序列的激活值
y
o
y_o
yo,
I
y
f
I_{yf}
Iyf为Generator生成的两个掩码进行融合的图像,对应目标AU序列的激活值
y
f
y_f
yf。
P
o
P_o
Po是输入的图像的数据分布,P_I是图像随机插值分布,D_I是Discriminator用来判别图像真假。所以生成图像对抗损失
如式所示。
其中 λ g p λ_{gp} λgp是梯度惩罚项。
2.第二项损失是注意力机制的损失,因为数据集没有注意力掩码A和RGB颜色掩码C的真实标签,注意力掩码就很容易过饱和,就是A的值趋向于1,导致输出的图片和原始图片差别很小使得C的结果没有作用。所以注意力机制的损失![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c2ee8adbbca620cd3e370aa455dbcfb.png#pic_center)
如式所示。
注意力机制的损失函数的第一项是全差分损失,全差分损失是用于图像的平滑,第二项是一个L2的惩罚项。其中H,W代表图像的长和宽, A i , j A_{i,j} Ai,j为矩阵A中第(i , j)的值。
3.第三项是情感判别的损失,分别把原始图像和生成图像输入Discriminator,在减少图像的对抗损失时,Generator还必须减少Discriminator的AU序列激活值解码的回归误差。这样Generator不仅能学到真实的输入图像,还能学习到满足AU序列激活值
y
f
y_f
yf的面部情感。情感判别的损失由两个部分组成:一个是 AU 激活向量的回归损失,用于优化Generator生成的图像,另一个是用于学习 Discriminator上分别得到的情感面孔和情感向量AU序列标签的损失,该损失![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/67c2de87cf798205e20cb33d11fc5986.png#pic_center)
如式所示。
4.第四项是人脸的循环一致性损失,也就是身份损失,使得Generator输出和原始图像更接近。保证生成的人脸和原始图像是同一个人,本文使用循环一致性损失计算原始图像I_yo和其重构图像之间的差异,使得Generator保持个人的身份信息,所以循环一致性损失函数如式所示。
最后为了生成图像
I
y
f
I_{yf}
Iyf,本文线性组合前面的四项损失函数来得到最后得整体损失函数,如式所示。