王海涌,梁红珠
兰州交通大学 电子与信息工程学院,兰州730070
人类感情多数通过面部的表情进行传递[1],利用图像处理技术对人脸面部表情进行表情识别意义重大。人脸表情识别在人机交互、公共安全监控、日常监护、心理分析、娱乐产业等都有更加广泛的应用。目前大多数研究者对人脸表情识别基本上采用背景简单、无遮挡的正面人脸图像进行识别工作。但在实际生活中,由于各种原因造成面部存在遮挡物的情况,比如戴眼镜、围巾或者头发等其他遮挡都是很常见的,这些遮挡会影响表情特征的提取,从而造成表情识别率有所降低。
目前针对局部遮挡人脸表情识别,通常采用传统方法(即非深度学习的方法),其思路总体上分为舍弃法和填补法两种。舍弃法是通过一些算法将遮挡部分的信息简化或者丢弃,然后根据未遮挡部位进行表情识别。有研究者提出基于稀疏表[2]的方法来实现遮挡人脸表情识别。但是由于人面部的一些重要部件包含有大量的表情信息,比如嘴巴、眼睛、鼻子等,所以这些部位被遮挡的情况下,直接舍弃明显不合理。填补法则是先对遮挡部分进行修复,然后再对其进行识别。薛雨丽等人[3]采用鲁棒主成分分析法和显著性检测法重构被遮挡像素,然后由权值更新的AdaBoost 分类器对去除遮挡的人脸图像进行表情识别。但是该方法的修复结果并不理想,所以识别率也不理想。有研究者利用卷积神经网络[4-5]进行有遮挡的人脸表情识别,提高识别算法的鲁棒性,但是对于大面积遮挡,准确率则会迅速下降。
将GAN 和卷积神经网络(CNN)结合起来得到深度卷积生成对抗网络[6](DCGAN),其特征表达能力强,使用得到的特征表示进行图像分类,效果较好。Yeh R等人[7]直接使用该模型在人脸数据集上进行了图像填补实验,但是该方法得到的图像整体连贯性较差,适用性受限。Denton 等人提出了将GAN 的鉴别器由原来的二分类改为一个多分类器[8-9],该模型可以实现半监督分类,但是由于前期修复模型是基于简单的GAN,所以修复效果不是很好,容易造成识别阶段识别率不高,甚至误判。
针对上述方法的局限性,本文提出一种基于双鉴别网络的深度生成对抗网络模型,对遮挡人脸进行表情识别。模型前期通过生成器和两个鉴别器进行对抗学习,对遮挡图像进行修复,由于加入了局部鉴别器和全局鉴别器两个鉴别器,所以该模型在修复图像时能够在细节和全局上更好地恢复遮挡图像,使得修复的人脸图像更加真实逼真。对人脸进行修复之后再对其进行表情识别,识别部分在全局鉴别器的基础上,使用其部分卷积和池化层,再添加多分类层来构成表情分类器。生成器的输出样本也发挥了扩充样本数量的作用,从而提高分类模型的泛化能力。
生成对抗网络(Generative Adversarial Networks,GAN)是当前人工智能领域的一大研究热点,GAN中包含两个部分,生成器(Generator)和鉴别器(Discriminator)。生成器主要用来学习真实图像分布使得自身生成的图像更加真实,以骗过判别器[10]。而判别器则需要对接收的图片进行真假判别。经典GAN 模型的结构图如图1所示。
GAN 模型主要有两部分组成:第一部分是生成图像的生成器G,它接收一个随机噪声Z ,通过这个随机噪声生成图片;第二部分是鉴别图像真伪的鉴别器D,判别一张图片是不是“真实的”。在整个过程中,生成器尽可能地生成更加真实的图像,而判别器则努力地去识别出图像的真假。随着时间的推移,生成器和判别器在不断地进行对抗博弈,直到两个网络达到最终的动态均衡状态,即鉴别器无法识别生成器生成的图像的真假。
GAN 的目标函数很好地体现了对抗的思想,目标函数如下:
整个式子由两项构成。 x 表示真实图片,z 表示输入G网络的噪声,而G( z )表示G 网络生成的图片。 D( x)表示D 网络判断真实图片是否真实的概率,而D(G ( z))是D 网络判断G 生成的图片是否真实的概率。然后把生成图像G( )
z 和真实图像x 输入鉴别器D 中,训练鉴别器D 的鉴别能力,使得鉴别网络D 输出的概率D(G ( z ))趋于0,而D( x )趋于1。将这个误差反馈给生成器,生成器根据这个误差来调整参数,从而调整自己生成更加接近真实图像的图像,去欺骗鉴别器,使得D(G ( z ))接近于1。随着不断的训练,生成器与鉴别器在对抗迭代中达到了一种平衡,即D( G ( z ))趋于0.5。这时候,在固定生成器的情况下,目标函数式在式(2)得到鉴别器的最优解:
在这种情况下,鉴别器不能判断出生成图像是真实的还是训练生成的,因为生成对抗网络通过大量的特征学习和训练,很好地学习到同类图像数据集中的图像特征,因此生成了更加逼真的图像。
本文基于生成对抗网络提出一种遮挡表情识别模型,模型分为两个模块,即遮挡人脸图像修复部分和表情识别部分,如图2 所示。该模型与传统GAN 不同之处在于,修复网络的输入是遮挡图像,而不是一组随机噪声。同时在该模型中特别采用了双鉴别器,即局部鉴别器和全局鉴别器,引入局部鉴别器可以更好地修复遮挡部分的细节,全局鉴别器则用来负责鉴别破损区域修复后的整幅图像是否真实且具有连贯性。通过这两个鉴别器和生成器对抗训练,可以产生比较好的修复效果。而识别部分是在全局鉴别器的基础上使用了其部分卷积层和池化层,将其作为特征提取器,额外增加两层全连接层和Softmax层,构成了一个表情分类器。
生成器G 被设计为一个自动编码器,以生成新的内容给输入的缺失图像,首先通过编码器将模型输入映射到一个隐含层,其中包含了原遮挡图像中已知区域和缺失区域两者之间的隐藏关系,解码器利用这些隐含信息生成填补内容,不同于原始GAN,本文生成器G 的输入不再是随机噪声,而是被遮挡的人脸图像。生成器的网络结构将基于VGG19网络“conv1”到“pool3”架构[11],在此基础上再叠加两个卷积层和一个池化层,再添加一个全连接层将其作为编码器。编码器的输入维度是128×128,每个卷积层都采用3×3的卷积核,且在每个卷积层后都紧接一个Leaky ReLU激活层。在池化层中进行最大池化,窗口大小为2×2。解码器则是与解码器对称的结构,通过卷积层Conv()和上采样层Upsampling()逐步恢复人脸图像,在编码器和解码器之间采用了两层神经元个数1 024的全连接层作为中间层。
仅用生成器生成的图像,只能捕捉到缺失人脸组件的粗糙形状或生成错误的像素。为了得到更加清楚真实的图像,本文将采用两个鉴别器D,即局部鉴别器和全局鉴别器。如果只采用一个局部鉴别器,它有一定的局限性,首先不能规范人脸的全局结构,不能保证遮挡区域和非遮挡区域内外的一致性和全局画面的连贯性。其次当新生成的像素受到周围环境的制约时,由于解码器的“逆池化”结构。在反向传播的过程中,局部鉴别器很难对遮挡区域以外的区域产生直接的影响,沿边界区域的像素值的不一致性十分明显。因此,采用了两个判别器来对生成图片的细节进行完善,使得生成的图片更加真实。
局部鉴别网络的输入维度是64×64,整个网络结构为卷积核大小为3×3和4×4交叉使用的全卷积网络,共有11 个卷积层,且前10 个卷积层每一层后面都紧接着一个Leaky ReLU激活层,最后一个卷积层后面则使用tanh激活层,这样可以更好地训练网络。多个卷积层与非线性的激活层交替的结构使得其特征提取能力较强,模型深度、性能等方面也较适合,因此本文基于此构建了局部鉴别器。
全局鉴别网络的输入维度是128×128,该网络则借鉴vgg16 网络结构,共有16 层,13 层卷积和3 层全连接层。且前每个层后面都紧接着一个Leaky ReLU 激活层,最后一个全连接层后面则使用tanh激活层。为了让鉴别器和分类器的特征提取部分整合起来,所以采取了结构较深的网络结构。
图2 基于双鉴别网络的遮挡表情识别模型
为了完成表情识别的训练,需要大量的带表情标签的训练数据,但是已有的表情数据集的数据有限,特别是本文引入深度神经网络后则需要更大量的数据去支持,因为数据过少会造成模型在训练过程中容易达到过拟合,不能展现模型本身的能力。CK+数据集[12](The Extended Cohn-Kanade AU-Coded Database)仅含有327个带标签的峰值表情图像,即使将部分非峰值表情图像也加入训练仍然不够。但是在人脸填补部分,模型的训练数据并不需要标签,因此可以利用现有的大量的人脸图像数据进行训练,鉴别器在训练过程不断加强人脸特征提取能力,利用鉴别器得到的特征表示可进行表情分类。因此分类器共享了鉴别器的部分卷积层和池化层来提取特征,总体上由特征提取层、两层全连接层和Softmax分类层构成,本质上是一个卷积神经网络。
首先在生成器中引入了重构损失Lr,即生成器的输出图像和原始图像之间的Lr距离。只有Lr时,生成的内容往往是模糊和平滑的。其原因是Lr损失过度惩罚了异常值,并且该网络可以避免过度惩罚。通过使用两个鉴别器,本文采用了对抗损失函数,这反映了生成器如何最大限度地欺骗了鉴别器,以及鉴别器如何区分真伪。它被定义为:
其中pdata( x )和pz( z )分别表示噪声变量z 和真实数据的分布。这两个判别网络{a1,a2}对损失函数的定义相同。唯一的不同是,局部鉴别器仅为缺失区域提供损失梯度,而全局鉴别器则是在整个图像中反向传播损失梯度。
在分类器中,采用交叉熵损失Lc来训练表情多分类,交叉熵描述了预测的概率分布q( )x 和真实概率分布p( )x 之间的距离。Lc定义为:
综上所述,整个模型的损失函数定义如下:
其中λ1,λ2,λ3为平衡不同损失影响的权重因子。
为了验证本文修复方法的效果,本文对图像修复进行了多轮的实例验证。实验的平台是Windows 10,Python3.6 和TensorFlow 结合的编程环境,Intel 4.20 GHz CPU时钟频率,内存16.0 GB。
本模型中用到两个数据集,分别是CeleA人脸数据集[13]和CK+人脸数据集。
(1)在修复过中,CelebA 人脸数据集作为本文基础训练数据集,其来源于香港中文大学,包含10 177 个名人的202 599 张人脸图像。但是为了得到更好的实验效果,需要裁剪出人脸部分的图像,尽量选取正面人脸图像,用于修复图像的训练。因此得到162 700 张图像,随机选择其中的7/10 作为训练集,剩余的3/10 数据用于测试模型生成器的填补能力以及鉴别器的真假判别能力。
(2)在表情识别的过程中选择使用CK+人脸数据集,它包括123 个人共595 例的表情序列,该样本共3 559 张表情样本,其中876 张中性表情,260 张悲伤表情,627 张快乐表情,482 张愤怒表情,417 张厌恶表情,640张惊讶表情,257张恐惧表情。
为了进一步扩大样本量,并解决各类表情样本数量不均衡的问题,对数据集中的数据进行镜像翻转、旋转等操作,扩展后共有10 000 张表情图像,各类表情图像的数量在1 300 张左右。随机选择其中的1/5 作为测试集,其余4/5为训练集,同时满足测试集和训练集的人物信息不交叉。
(3)虽然尽量选取了正面图像,但是为了样本数量不减少,还是有部分图像的人脸有所偏转,所以为了避免其不同姿势对实验结果的影响,使用基于Open Face[14]的人脸对齐算法,对齐人脸图像,校准后统一将图像的大小调整为128×128。
(4)现实中的遮挡由各种各样的原因造成,所以目前没有一个通用的、成熟的、标准的遮挡人脸表情数据集。因此在本模型训练过程中,对于图像填补部分,将对训练数据采用模拟系统进行遮挡,遮挡部分的图像大小为64×64,遮挡位置随机。
在测试过程中将选取不同遮挡面积的图像,为了测试不同遮挡面积下的表情识别率和修复效果。随机遮挡10%、20%、30%、40%、50%用于模拟位置不固定的临时遮挡,遮挡后的图像如图3 所示,本文认为遮挡面积超过50%时,表情识别意义不大,故不做分析。
本文的训练将分为两个部分,分别是人脸修复和表情识别的训练。
模型首先在CelebA 数据集上训练人脸修复网络,人脸修复网络的训练的过程分为三个阶段。第一阶段:利用重构损失训练生成网络,来获模糊的内容。第二阶段:加入局部鉴别器损失来微调生成模型。第三阶段:用全局鉴别器损失来调整生成模型参数。这样可以避免训练开始阶段判别器的作用过强。当GAN模型接近纳什均衡,二分类准确率大约0.5时,鉴别器几乎不能判断输入样本的真假,完成修复阶段,此时不再使用CelebA数据集。
此时开始识别阶段,在CK+数据集上进行微调,同时加入了表情分类器的训练,起初通过设置样本权重,让模型使用填补图像和无遮挡图像各一半训练二分类器,而仅使用无遮挡图像训练多分类器,经过100 次迭代后,将填补图像也加入到多分类器的训练。
图3 图像预处理和遮挡模拟
模型使用Adam 优化器,初始学习率为0.000 1,剩余的Adam 超参数设置为默认值,100 次迭代后学习率下降一个量级。
4.3.1 本文模型修复结果分析
本文模型的填补效果如图4 所示。遮挡面积是随机遮挡,其中第一行是遮挡前的原始图像,第二行是遮挡后的人脸图像,第三行是人脸填补修复后的结果。
图4 本文模型修复结果
由图4 可以看出,经过人脸填补修复,整个人脸图像看上去真实连贯,未遮挡区域可能发生细微变化,但一般不会影响人脸图像的表情类别。由于PCA+SVM方法和SRC 以及CNN 方法直接对遮挡图像进行识别,因此将只对比DCGAN+CNN方法和本文方法的修复效果,如图5所示。
图5 本文模型与DCGAN+CNN方法修复结果对比图
图5 中对比了不同遮挡面积下两种方法的修复结果,本文方法的修复效果更加真实流畅,而DCGAN+CNN 方法的修复效果使得人脸看起来不合常理,很奇怪,不够真实,这样就使得识别效果不佳,识别率下降。通过这个对比也可以从侧面证明本文方法的有效性和优势。
4.3.2 填补前后人脸图像识别率对比
将填补后的人脸图像输入到表情分类网络中,对表情进行判别,实验结果如图6所示。为了对比填补前后人脸表情识别效果,在填补前直接采用分类器对遮挡人脸图像进行了表情识别。可以看出,人脸填补模型整体上提升了遮挡表情识别的准确率,当遮挡面积小于50%时,模型整体识别率还在80%以上,较直接使用卷积神经网络提升了接近20%,而在遮挡面积较小的情况下,模型的识别准确率提升幅度较小。考虑模型的处理时间、系统资源等方面因素,在遮挡面积小于面部面积10%时,可不进行填补,直接使用卷积神经网络进行简单分类识别。
图6 遮挡前后识别率的对比实验
4.3.3 与其他方法对比
本文选取了文献[15]的PCA+SVM方法、文献[2]的稀疏表示方法(Sparse Representation based Classification,SRC)以及CNN、DCGAN+CNN 方法来进行对比,DCGAN+CNN方法中DCGAN用于填补遮挡人脸图像,CNN 同为微调的VGG 模型,用于人脸表情分类所有方法都在CK+数据集上进行了实验,结果如表1所示。从表中可以看出,无论人脸图像是否存在遮挡,本文方法的人脸表情识别率都较高,虽然基于DCGAN+CNN 的方法也对人脸图像进行了填补,但是修复之后的图像连贯性较差,因此影响了表情识别的准确率,尤其是遮挡面积小于40%,该方法的表情识别准确率甚至小于仅用CNN 的准确率。而本文方法生成的图像真实连贯,对表情识别的影响很小,所以在人脸遮挡面积50%时,仍能达到80%以上的识别准确率。
表1 与其他算法的对比实验(识别准确率)%
实际应用中局部遮挡问题导致表情识别的准确率不够理想,与在标准人脸表情数据集上取得的高识别率差距明显。本文提出了一种基于双鉴别网络的GAN模型来实现遮挡表情识别,双鉴别网络结构能够在人脸修复阶段生成真实连贯的高质量图像,这样在识别阶段能够达到很高的识别率。在修复阶段利用人脸图像数据集Celeb A对其权重参数进行预训练,最后在CK+数据集上进行微调得到了很好的分类结果。经实验证明,本文方法在修复的人脸图像更加真实连贯,修复后再对其进行表情识别,识别率较其他方法都更高。但是本文方法也存在一定的缺陷,对于大面积遮挡特别是超过50%遮挡的图像修复效不是特别理想,修复结果的误差率较大,还有GAN 网络的训练比较自由,训练比较难以控制,这主要是由于其对抗函数造成,所以下一步的工作计划主要是研究改进本文方法存在的缺陷。