APP下载

基于生成对抗网络与FACS的面部表情合成研究

2020-07-24随海亮马军山李丽莹

软件导刊 2020年6期
关键词:注意力

随海亮 马军山 李丽莹

摘要:为实现从单张图片合成连续变化的目标表情,提出一种基于生成对抗网络(GAN)和面部表情编码系统FACS(Facial Action Coding System)的表情合成方法。通过提取面部表情AU(Action Unit)作为生成表情的一种约束,利用生成对抗算法合成目标表情,这种结合表情编码的合成更具合理性。同时在网络中引入注意力机制,使网络在特征提取阶段更关注表情变化。实验表明,该方法能够克服图像中的光照和背景影响,合成表情具备连续性和真实性。该合成表情方法可应用于数字娱乐、影视制作等领域。

关键词:面部表情合成;GAN;FACS;动作单元;注意力

DOI:10.11907/rjdk.192325 开放科学(资源服务)标识码(OSID):

中图分类号:TP317.4文献标识码:A 文章编号:1672-7800(2020)006-0235-05

0 引言

关于面部合成表情的研究很多。传统的人脸建模主要通过3D人脸建模,还有一些通过在模型上绑定骨骼模型塑造变化的人脸表情,但这种建模方式成本高、周期长。生成对抗网络可生成不存在的数据,应用更广。如Pix2Pix,只需要成对的数据就可从简笔画生成一幅真实的图片;CycleGAN则可摆脱成对数据的训练,应用更广,例如可以把马变成斑马,改变人脸的属性如性别、年龄、表情等。但是类似的生成对抗网络架构都只能合成离散的表情变换。图1为离散的表情变换,从左到右依次是:自然表情、生气表情、害怕表情、开心表情、惊讶表情,如果要从一种表情连续变化到另外一种表情还有难度。

基于现有方法的短板,本文将生成对抗网络和面部动作编码系统(FACS)结合,合成连续变化的表情,合成的表情对于光照和背景具有更强的鲁棒性。

本文建立了一种具FACS表达能力的表情合成系统,能够生成连续的表情动画,并且符合人体解剖学在连续域的感知表达。这种方法不需要获取人脸的任何landmark点信息。实验数据从YouTube上爬取,提取出视频序列中的人脸,最后得到的数据集由20多万张面部表情组成,同时利用OpenFace工具对数据集中的人脸进行AU标注。构建一个新的GAN网络架构,以一维向量为条件提取面部动作单元值,只要是带有激活的AU图像就可通过无监督方式训练这个架构。将合成表情问题分成两个阶段:①期望表达式生成目标表情,合成新的表情图像;②把合成的表情渲染回原始的输入表情。因此,渲染回的图像可以和输入的表情图像进行比较,最后通过损失值评估生成图像的真实感。

基于生成对抗网络和FACS构建的表情合成系统,弥补了其它GAN只能合成离散表情的短板,通过建立注意力掩膜机制,很好地克服了图像中变化的背景和光照因素,合成的表情在视觉质量上也有很大提升。图2是结果示例,输入一张图像,通过改变AU的激活程度,生成连续变化的微笑表情。

1 相关工作

1.1 生成对抗网络

生成对抗网络GAN(Generative Adversarial Networks)是一种基于博弈论的生成模型。一个典型的GAN优化包括生成网络和判别网络两个部分。生成网络输入的是一组随机数z,输出的是一幅图像,生成网络就是生成假样本。假样本要尽可能地逼近真实样本的数据分布,让判别网络不能区分是真样本还是假样本。判别网络输人的是一幅图像,输出的是一个概率值(概率值大于0.5就是真样本,小于0.5就是假样本),用于判别输入的样本是真样本还是假样本。GAN网络结构已经证明可以用于生成逼真的高细节图像,成功应用于图像转换、图像超分辨、室内场景见建模等,图2是一个用GAN网络生成的人脸图像。

生成网络和判别网络是交替训练的。在交替训练过程中,生成网络生成的假样本越来越逼近真实数据的分布。生成网络生成的假样本输入到判别网络后,判别网络给出的判别结果是一个接近0.5的值,判别真假的阈值就是0.5,此时判别网络已经难辨样本真假,这就是纳什平衡。

人脸图像处理是计算机视觉和生成模型研究的热点,大多数人脸研究都是人脸属性的编辑任务,修改属性类别,如添加眼镜、改变头发颜色、性别交换和生成老化处理的人脸等。在面部表情合成方面,早期的方法比较依赖三维建模,这种方法在边缘附近容易产生伪影,无法对光照变化进行建模。本文提出的方法是通过把面部肌肉的运动单元嵌入到GAN模型中,合成连续自然变化的面部表情。

1.2 面部动作编码系统FACS

国际著名心理学家Paul Ekman&Friesen开发了Facial Action Coding System(FACS),它描述了人脸不同肌肉和表情之间的对应关系。面部动作编码系统根据人脸肌肉的解剖学结构将其划分成若干相互独立又互相联系的运动单元AU(Action Unit),不同AU控制的面部肌肉运动区域不同,并将不同的表情与对应的AU建立起联系。虽然动作单元数量较少(发现30个AU在解剖学上与特定的面部肌肉收缩有关),但已经观察到的AU组合已经超过7000种。如图3所示,AUl控制內眉提升,AU4控制上眼睑提升,AU7控制上眼睑收紧。

不同表情由不同的AU组合而成,只要控制AU是否存在于面部和AU的激活强度,就可对应不同的面部表情。例如恐惧的面部表情通常是通过内眉提升(AUl)、外眉提升(AU2)、上眼睑提升(AU4)、下眼睑收紧(AU5)、上眼睑收紧(AU7)、唇拉伸(AU20)和下颌下垂(AU26)产生的。根据AU激活程度,表情会或多或少地传递出恐惧情绪,如果AU激活的强度不同也可能会组成另外一种表情。

2 算法概述

该网络结构能合成目标表情,或者说建立原始表情和目标表情的一种映射关系。每张输入图像是RGB图像,表情是任意的,可以定义为Iyr∈R;每一表情都是由N个动作单元组成的,动作单元值大小对应该动作单元激活的强度。N个动作单元编码成少yr=(y1,y2,…yNT,以目标动作单元y.作为输入条件,输出目标图片Iyg。建立输入到输出的映射关系。目标动作单元向量yg随机生成,训练数据不需要同一个人的多张不同面部表情图片,也不需要目标表情图片Iyg,因此是无监督训练方式。

3 算法设计

3.1 注意力掩膜机制

TLGAN等表情合成都存在一个共同问题,即很容易受背景和光照等因素影响,导致合成的表情出现模糊、扭曲、伪影等不可控元素。为消除这种影响,本文在网络架构中引入注意力掩膜机制。注意力掩膜相当于提取人脸动作单元特征(包括动作单元强度),这样生成网络就可更多关注人脸的表情特征而忽略复杂的背景和光照变化带来的影响。GA生成网络就是生成注意力掩膜GA(Iyr|yg),生成器的另一条支路GI用于生成变化后表情的颜色信息。注意力掩膜、颜色掩膜和输入图像结合之后得到合成的目标表情,合成表达式如下:

2 网络架构

判别器以第一个生成器的输出Iyg和yr作为输入。判别器分成DI和Dy两部分,DI用于判断真实图片Iyr,和新的表情图片Iyg,也就是判断生成图片的真实性;Dy用来回归输出图像Iyg的目标动作单元,使合成新的表情和目标表情的动作单元越来越接近。网络基于WGAN评估合成的表情图片质量和动作单元接近程度。图7生成网络和判别网络构造如图5、图6所示。

3.3 损失函数设计

网络架构中共设计4项损失:①对抗损失使生成图像的分布和训练图像的分布不断逼近;②注意力损失促进掩膜平滑,防止其饱和;③条件损失是计算图像的动作单元和目标动作单元的形式性,或者说是二者表情的相似性;④一致性损失有利于保持人物表情纹理的同一性。

对抗损失的作用是使生成图像的分布不断逼近训练图像的分布,这样生成的图像更具有真实性。这个损失设计是在WGAN基础上所做的修改,而没有采用原始GAN损失,因为原始GAN用JS(Jensen-Shannon)散度作为损失函数,会导致网络很难训练,而且容易出现梯度消失或梯度爆炸现象。现在定义的对抗损失能够很好地应对这些问题。另外对抗损失中还加入了梯度惩罚项,使梯度控制在一定范围内。

(1)对抗损失定义为:

其中,Iyr是输入图像,yg是输入条件,也就是目标动作单元向量,Pdata为输入图像的数据分布,Pg为随机的数据插值分布。

(2)表情损失。分别把原始输入图像和生成器生成的图像输入到判别器中,分别计算得到生成图像和表情向量的groundtrue值。这部分损失很重要,在AU条件作用下使生成的图像更具有AU表现力,其整体思路是优化生成器和判别器,使目标表情动作的单元与输入动作单元条件不断逼近。

表情损失定义为:

(3)注意力损失。如果注意力机制生成的A饱和到l,即生成器Iyr=G(Iyr|yg),注意力机制就会失去作用。为防止这种状况发生,对A作L2权值惩罚,得到注意力损失为:

最后,通过不断交替迭代训练生成器和判别器网络,使目标函数不断优化,得到最优模型。

4 实现细节

网络架构中的生成器建立在Johnson等网络基础之上,对其作了一定的修改,生成器最后用两个平行的卷积层替换,一个用于回归颜色mask C,另外一个用于生成注意力mask A。通过实例代替生成器中的批归一化处理,以提高训练的稳定性。

该模型的训练数据集通过YouTube收集视频,视频内容主要是一个人的独白画面,一共200多个视频,每个视频长度30s-60s,帧率为25fps。分离出所有视频帧,通过人脸识别提取人脸图片,然后对所有人脸图片裁剪对齐,最后得到的人脸数据集大概有20万个。由于公开数据集中每张图片人脸都是独立的,相互之间没有关联,也没有时间轴上的变化,因此训练出的模型在时间轴上不具有连续性,合成表情容易出现伪影;而视频具有时间上的连续性,训练的表情数据集同样具有时间轴上的连续变化,最终训练模型合成表情更稳定,同时减少了伪影的出现。

模型训练的参数设置:学习率lr=0.000l,betal=0.5,beta2=0.999,batch_size为16。整个模型训练周期为30epoch。在训练期间,先固定生成器,判别网络训练5step,然后固定判别器,生成网络训练1step。损失函数的权重设置为:λg=10,λA=0.1,λy=4000。实验训练平台在Ubuntu系统服务器上,服务器搭载两块GeForceGTX1080Ti GPU,训练时间大概2天。

5 实验评估

对合成不同的表情进行测试,或者说对不同AU进行测试。测试分成对单AU的测试和对不同AU组合的测试。单个AU的变化只改变目标表情动作单元向量中的某一个AU的强度变化,其余AU值保持不变。目标表情只有一個区域发生变化,可以通过调整AU激活强度,控制AU对应区域表情变化的幅度。

多个AU同时变化,就是控制一组AU同时变化。例如微笑的表情是面部表情的多个AU组合,当对应的多个AU同时激活时就会呈现微笑表情。修改表情向量中的多个AU值以及变化程度参数(AU激活强度),就可得到一组线性插值的连续变化表情。

模型存在一定的限制,图7是一些失败的案例。左边是输入的原始测试图片,右边是输出的表情变化图片,可以看到失败案例中的表情会出现一定的伪影和变形,这可能是测试图片中的人脸有遮挡所导致,如头发遮挡。有些特别夸张的表情测试效果也不是很好,可能是由于训练数据集不足引起的。

6 结语

基于GAN和FACS的面部表情合成是一个新的网络结构,可用于连续变化表情的生成。传统的面部表情合成系统,例如Face2Face,非常依赖3D面部重建模型,建模成本高、建模时间长,限制了它的应用时间与范围。本文提出的模型以解剖结构意义上的肌肉运动为条件,模型通过AU参数化,与解剖学面部变形达成一致。此外可以通过改变AU值激活强度实现连续表情变换,为表情合成变换带来更多应用。通过在GAN网络中引入动作单元,对面部表情合成进行改进,提升表情合成效果。本文方法也存在一定的缺陷,如有些合成的表情会出现伪影,很难达到实时的表情合成等。未来还需要不断提高模型鲁棒性和合成表情的时效性,正确引入一些先验知识以提升表情合成性能。

猜你喜欢

注意力
让注意力“飞”回来
转移注意力
注意力让我们生病了
注意力训练营
注意力训练营
注意力训练营
“扬眼”APP:让注意力“变现”
阅读理解两则