GANimation: Anatomically-aware Facial Animation from a Single Image

本文提出一种基于 Action Units (AU) 的 conditional GAN,可以生成连续人脸表情。文章采用完全的无监督训练(但是要标注AU?)。还提出了一种注意力机制,这种注意力机制使得模型更加关注需要做出变形的地方,对于人脸其他部位和背景可以尽量保持不变,所以模型更加鲁棒。

文章整体思路结合了 conditional GAN, CycleGAN 和 Attention 三种方法,在生成器的输入中加入面部表情编码 (FACS),使得生成器能够生成一系列连续变化的表情。文中借鉴了 CycleGAN 的思想,但是只有一个生成器,生成何种表情,由输入的表情编码决定,这样只要交换输出和输入里的表情编码,就可以实现循环。

方法

如图2所示,该方法中包括两个模块,一方面训练一个生成器 G(Iyryg)G(I_{y_r} | y_g) 根据输入图像 IyrI_{y_r} 和想要生成的表情编码 ygy_g 来产生近乎真是的人脸表情图像。在这个过程中 GG 执行了两次,首先根据 IyrI_{y_r} 生成 IygI_{y_g} (映射 IyrIygI_{y_r} \rightarrow I_{y_g}),然后又反过来将 IygI_{y_g} 作为输入重新生成 IyrI_{y_r} (映射 IygIyrI_{y_g} \rightarrow I_{y_r}) 。另一方面,需要用 WGAN-GP 训练一个判别器 D(Iyg)D(I_{y_g}) 来判断生成图像的真实性。

论文阅读:GANimation

网络结构

生成器。 生成器由两个 Resnet 组成,每个Resnet 包括2次下采样、中间6个残差模块和2次上采样。2个部分分别生成注意力图像 A=GA(Iyoyf)A = G_A(I_{y_o}|y_f) 和色彩图像 C=GC(Iyoyf)C = G_C(I_{y_o}|y_f),最终生成的图像通过下面的公式获得:

Iyf=(1A)C+AIyo I_{y_f} = (1 - A) \cdot C + A \cdot I_{y_o}
基本过程见图3
论文阅读:GANimation
判别器。判别器类似于 PatchGAN,最终输出的特征图为尺寸为 (H/26,W/26H/2^6, W/2^6) ,另外在增加了一个用于判断表情编码的分支。

损失函数

损失函数包括 Image Adversarial Loss, Attention Loss, Conditional Expression Loss, Identity Loss.
Image Adversarial Loss 就是用 WGAN-GP 计算 GAN Loss,公式为
论文阅读:GANimation
Attention Loss. 由于数据中没有 Attention Mask 的 ground truth, 而且在训练过程生成的 attention mask 很容易达到饱和值1,致使对应的生成器没有效果。为了保证生成图像过渡平滑,文章对 A 做了总变差正则化 (Total Variation Regularization). Attention Loss 计算公式为
论文阅读:GANimation
Conditional Expression Loss. 这个 Loss 的作用是为了让生成器学习根据表情编码生成目标表情,计算公式为
论文阅读:GANimation
Identity Loss. 这个 Loss 实际上就是 CycleGAN 中的 cycle-consistency-loss,目的是为了让生成的照片是同一个人,计算公式如下
论文阅读:GANimation
将上面几部分加起来,就得到总的损失函数
论文阅读:GANimation
整个优化过程仍旧是GAN一样:
论文阅读:GANimation

实现细节

生成器的结构采用李飞飞 Perception Loss (参考文献1) 中的 Resnet 结构,文章中说是将最后卷积层改为2个平行的卷积分支,分别输出 color mask C 和 attention mask A ,但是github上的代码中确实从头到尾直接用了两个一样的 Resnet,并没有共享特征提取层。对于判别器,文章去掉了 PatchGAN 中的 normalization,

训练中使用 Adam 优化器,lr=0.0001, beta1=0.5, beta2=0.999, batch_size=25,前30轮学习率不变,后10轮线性减小至0. 每训练更新5次判别器,训练一次生成器。各个 loss 的权重系数为 λgp=10,λA=0.1,λTV=0.0001,λy=4000,λidt=10\lambda_{gp} = 10, \lambda_A = 0.1, \lambda_{TV}=0.0001, \lambda_y = 4000, \lambda_{idt}=10

实验结果

这里关注一下 Attention Mask 的作用。图5 中可以看到 A 很好地体现了面部变化的关注点,变化越明显的地方 A 的值越高。
论文阅读:GANimation

其他实验结果可以参见项目链接: GANimation

参考文献

  1. Johnson, J., Alahi, A., Fei-Fei, L.: Perceptual losses for real-time style transfer and
    super-resolution. In: ECCV (2016)

相关文章:

  • 2021-05-14
  • 2021-08-23
  • 2021-08-15
  • 2021-04-05
  • 2021-12-08
  • 2021-08-23
  • 2021-06-06
  • 2021-04-26
猜你喜欢
  • 2022-01-06
  • 2021-09-18
  • 2021-04-19
  • 2022-01-12
  • 2022-12-23
相关资源
相似解决方案