GANimation: Anatomically-aware Facial Animation from a Single Image

GANimation: Anatomically-aware Facial Animation from a Single Image

paper motivation

近期生成对抗网络(GAN)在人脸表情合成任务中取得了惊人的表现,其中最成功的架构是 StarGAN,但该架构只能生成不连续的表情。为突破这一局限,本文提出了一种基于动作单元(AU)标注的新型 GAN 条件化方法,可以从单张图像和表情编码生成连续的表情动画,生成的图像具备连贯性、真实性、广泛性、鲁棒性。该方法以完全无监督的方式进行训练,使用符合人类解剖结构的面部动作编码系统来编码面部表情。
GANimation: Anatomically-aware Facial Animation from a Single Image_第1张图片

主要创新点

1)GANimation将Action Units(AU)与GAN结合。AU就是动作单元,利用动作单元来描述面部表情,动作单元在解刨学上与特定的面部肌肉收缩有关。动作单元的数量不多,只有不到30个,但是可以通过将动作单元进行组合有7000多种面部表情。比如一个恐惧的面部表情可以是AU1,AU2,AU4…等的结合。通过设置参数来控制一组合目标动作单元(AU)的激活程度,从而实现了对人脸表情的渐变插值过程。(2)将Attention引入到了模型中。生成网络包含两部分, G A G_A GA输出注意力掩模 A A A G I G_I GI输出的是RGB掩模 C C C。最后结果是 ( 1 − A ) ⋅ C + A ⋅ I y o ( 1 - \mathbf { A } ) \cdot \mathbf { C } + \mathbf { A } \cdot \mathbf { I } _ { \mathbf { y } _ { o } } (1A)C+AIyo, I y o \mathbf { I } _ { \mathbf { y } _ { o } } Iyo是输入图像。通过引入Attention可以用于克服生成图片中背景和光照的影响。

主要思想

一种无监督条件生成对抗网络。
什么是AUGANimation: Anatomically-aware Facial Animation from a Single Image_第2张图片
医学上会把人脸肌肉分为不同的区域,那么人脸做出表情的时候,某些区域会有不同程度的变化,比如说左边这个图,这个惊恐的表情,有这些部位会有不同程度的运动。这个数据集就是记录了人脸做各种表情的时候各个区域的变化程度。一般的表情数据集的label都是说这个人脸是什么表情,那这个数据集的label不是离散的各种表情的定义,而是用向量来表示各个区域不同程度的表情变化。通过调节表情向量就可以使这篇文章的模型输出不同程度的表情。这个向量就长下面这个样子,向量长度为N,表示脸部N个区域,每个值的范围从0到1.表示运动程度。 y r = ( y 1 , y 2 , … , y N ) T y _ { r } = \left( y _ { 1 } , y _ { 2 } , \dots , y _ { N } \right) ^ { T } yr=(y1,y2,,yN)T . 作者使用了EmotioNet数据集

网络结构

GANimation: Anatomically-aware Facial Animation from a Single Image_第3张图片

如上图所示,网络由一组生成网络G和判别网络D组成。生成网络和判别网络分别由两个子网络组成。模型的输入图像定义为图像 I y r I_ { y_{ r} } Iyr和目标单元 y g y_ { g } yg 的合并。生成网络 G A G_A GA回归一个注意力掩码,用来只关注人脸忽略背景 ; G I G_I GI用来生成颜色掩码。判别网络 D I D_I DI用来判别生成的图片的真实性; D y D_y Dy用来回归输出图像的目标动作单元。
GANimation: Anatomically-aware Facial Animation from a Single Image_第4张图片
具体看生成网络,其不是回归整个图片,而是输出了两个掩码,一个注意力掩码 A A A和一个RGB颜色掩码。最终的输出图像由 ( 1 − A ) ⋅ C + A ⋅ I y o ( 1 - \mathbf { A } ) \cdot \mathbf { C } + \mathbf { A } \cdot \mathbf { I } _ { \mathbf { y } _ { o } } (1A)C+AIyo,得出 I y f \mathbf { I } _ { \mathbf { y } _ { f } } Iyf

损失函数

Adversarial Loss
用来判别生成图像的真实性,作者使用了WGAN_GP
E I y o ∼ P o [ D I ( G ( I y o ∣ y f ) ) ] − E I y o ∼ P o [ D I ( I y o ) ] + λ g p E I ~ ∼ P I ‾ [ ( ∥ ∇ I ~ D I ( I ~ ) ∥ 2 − 1 ) 2 ] \mathbb { E } _ { \mathbf { I } _ { \mathbf { y } _ { o } } \sim \mathbb { P } _ { o } } \left[ D _ { \mathrm { I } } \left( G \left( \mathbf { I } _ { \mathbf { y } _ { o } } | \mathbf { y } _ { f } \right) \right) \right] - \mathbb { E } _ { \mathbf { I } _ { \mathbf { y } _ { o } } \sim \mathbb { P } _ { o } } \left[ D _ { \mathrm { I } } \left( \mathbf { I } _ { \mathbf { y } _ { o } } \right) \right] + \lambda _ { \mathrm { gp } } \mathbb { E } _ { \widetilde { I } \sim \mathbb { P } _ { \overline { I } } } \left[ \left( \left\| \nabla _ { \widetilde { I } } D _ { \mathrm { I } } ( \widetilde { I } ) \right\| _ { 2 } - 1 \right) ^ { 2 } \right] EIyoPo[DI(G(Iyoyf))]EIyoPo[DI(Iyo)]+λgpEI PI[(I DI(I )21)2]

Attention Loss
在训练数据中attention masks和color masks是没有ground-truth的,他们都是由网络自己来学习的。在训练过程中attention masks A A A容易饱和到1,对应公式 ( 1 − A ) ⋅ C + A ⋅ I y o ( 1 - \mathbf { A } ) \cdot \mathbf { C } + \mathbf { A } \cdot \mathbf { I } _ { \mathbf { y } _ { o } } (1A)C+AIyo, I y o \mathbf { I } _ { \mathbf { y } _ { o} } Iyo将失去意义。为了防止这种情况,对 A A A做L2损失。
λ T V E I y o ∼ P o [ ∑ i , j H , W [ ( A i + 1 , j − A i , j ) 2 + ( A i , j + 1 − A i , j ) 2 ] ] + E I o ∼ P o [ ∥ A ∥ 2 ] ( 2 ) \lambda _ { \mathrm { TV } } \mathbb { E } _ { \mathbf { I } _ { y _ { o } } \sim \mathbb { P } _ { o } } \left[ \sum _ { i , j } ^ { H , W } \left[ \left( \mathbf { A } _ { i + 1 , j } - \mathbf { A } _ { i , j } \right) ^ { 2 } + \left( \mathbf { A } _ { i , j + 1 } - \mathbf { A } _ { i , j } \right) ^ { 2 } \right] \right] + \mathbb { E } _ { \mathbf { I } _ { \boldsymbol { o } } \sim \mathbb { P } _ { o } } \left[ \| \mathbf { A } \| _ { 2 } \right] ( 2 ) λTVEIyoPo[i,jH,W[(Ai+1,jAi,j)2+(Ai,j+1Ai,j)2]]+EIoPo[A2](2)

Conditional Expression Loss
生成网络不仅要学会渲染真是的人脸,还要学会去生成满足目标条件 y f y_f yf。这部分损失包含两部分。对于Fake image 回归的AU用来更新G网络;对于Real image回归的AU用来更新D网络。
E I y o ∼ P o \mathbb { E } _ { \mathbf { I } _ { \mathbf { y } _ { o } } \sim \mathbb { P } _ { o } } EIyoPo [ ∥ D y ( G ( I y o ∣ y f ) ) ] − y f ∥ 2 2 ] + E I y o ∼ P o [ ∥ D y ( I y o ) − y o ∥ 2 2 ] [ \| D _ { y } \left( G \left( \mathbf { I } _ { \mathbf { y } _ { o } } | \mathbf { y } _ { f } \right) \right) ] - \mathbf { y } _ { f } \| _ { 2 } ^ { 2 } ] + \mathbb { E } _ { \mathbf { I } _ { \mathbf { y } _ { o } } \sim \mathbb { P } _ { o } } \left[ \left\| D _ { \mathbf { y } } \left( \mathbf { I } _ { \mathbf { y } _ { o } } \right) - \mathbf { y } _ { o } \right\| _ { 2 } ^ { 2 } \right] [Dy(G(Iyoyf))]yf22]+EIyoPo[Dy(Iyo)yo22]

Identity Loss.
之前的loss是用来引导网络生成更加真实的图像,此外我们还需要保证生成的图像能够保留原始的身份信息。类似cyclegan ,将生成的Fake image 和original AU I y r \mathbf { I } _ { \mathbf { y } _ { r } } Iyr 结合生成的图片计算L1 loss。
L i d t ( G , I y o , y o , y f ) = E I y o ∼ P o [ ∥ G ( G ( I y o ∣ y f ) ∣ y o ) − I y o ∥ 1 ] \mathcal { L } _ { \mathrm { idt } } \left( G , \mathbf { I } _ { y _ { o } } , \mathbf { y } _ { o } , \mathbf { y } _ { f } \right) = \mathbb { E } _ { \mathbf { I } _ { y _ { o } } \sim \mathbb { P } _ { o } } \left[ \left\| G \left( G \left( \mathbf { I } _ { y _ { o } } | \mathbf { y } _ { f } \right) | \mathbf { y } _ { o } \right) - \mathbf { I } _ { y _ { o } } \right\| _ { 1 } \right] Lidt(G,Iyo,yo,yf)=EIyoPo[G(G(Iyoyf)yo)Iyo1]

Full Loss.
L = L I ( G , D I , I y r , y g ) + λ y L y ( G , D y , I y r , y r , y g ) + λ A ( L A ( G , I y g , y r ) + L A ( G , I y r , y g ) ) + λ i d t L i d t ( G , I y r , y r , y g ) \begin{aligned} \mathcal { L } = & \mathcal { L } _ { \mathrm { I } } \left( G , D _ { \mathrm { I } } , \mathbf { I } _ { \mathrm { y } _ { r } } , \mathbf { y } _ { g } \right) + \lambda _ { \mathrm { y } } \mathcal { L } _ { \mathrm { y } } \left( G , D _ { \mathrm { y } } , \mathbf { I } _ { \mathrm { y } _ { r } } , \mathbf { y } _ { r } , \mathbf { y } _ { g } \right) \\ & + \lambda _ { \mathrm { A } } \left( \mathcal { L } _ { \mathrm { A } } \left( G , \mathbf { I } _ { \mathrm { y } _ { g } } , \mathbf { y } _ { r } \right) + \mathcal { L } _ { \mathrm { A } } \left( G , \mathbf { I } _ { \mathrm { y } _ { r } } , \mathbf { y } _ { g } \right) \right) + \lambda _ { \mathrm { idt } } \mathcal { L } _ { \mathrm { idt } } \left( G , \mathbf { I } _ { \mathrm { y } _ { r } } , \mathbf { y } _ { r } , \mathbf { y } _ { g } \right) \end{aligned} L=LI(G,DI,Iyr,yg)+λyLy(G,Dy,Iyr,yr,yg)+λA(LA(G,Iyg,yr)+LA(G,Iyr,yg))+λidtLidt(G,Iyr,yr,yg)

实验

作者通过控制之改变单一的AU变量,通过设置四种不同的激活参数。可以看出面部表情只有某一区域发生了改变。
GANimation: Anatomically-aware Facial Animation from a Single Image_第5张图片
通过可视化Attention image 和color image,模型会学会将注意力进行集中(颜色较暗的区域),较亮的区域从原图提取。
GANimation: Anatomically-aware Facial Animation from a Single Image_第6张图片

缺点


底部是一些失败案例。作者归纳了失败原因,认为这些很可能都是因为训练数据不足引起的。如红脸男子图所示,当模型输入极端表情时,RGB掩模没有及时调整权重,导致嘴部出现透明化。此外,如果输入图像的主体不是人类,模型的表现也会很差。

你可能感兴趣的:(GANimation: Anatomically-aware Facial Animation from a Single Image)