朱伟杰,陈 莹
江南大学 轻工过程先进控制教育部重点实验室,江苏 无锡214122
人脸的表情往往反映人类内心最真实的情绪,但是在某些特定的情况下,例如犯人审讯、商业谈判、谎言监测、医疗诊断,人类企图压抑或隐藏真实的情感,往往会不由自主地流露出短暂的微弱的表情。Haggard在1966 年最先发现,并且在研究结果中表明微表情产生与人的自我防御机制有关,能够反映人们试图掩饰的情感。
微表情是人类一种自发式的表情,通常持续时间非常短暂,在1/25~1/5 s之间,而且面部肌肉运动幅度小,涉及到的动作单元(action unit,AU)少。人类裸眼去识别微表情,由于其特性造成识别率非常低。近年来,随着计算机视觉的高速发展,心理学家想借助计算机视觉的技术来解决人眼识别率低的问题。时至今日,越来越多的国内外研究人员开始用计算机视觉技术研究微表情识别的课题。
目前,宏表情识别的研究已经非常深入,使用图片数据即可完成识别,而微表情由于其数据的特殊性,现今的技术一般情况使用图像序列进行微表情识别。微表情识别的步骤一般分为三个步骤:预处理、特征提取、分类。2015 年之前,特征提取大多是手工特征,方法集中使用传统算法,例如局部二值模式(local binary pattern,LBP)、光流法和张量变化分析。Pfister 等提出了三正交平面的局部二值模式(local binary patterns from three orthogonal planes,LBPTOP),通过在3 个正交平面中组合局部二进制模式方法来对自发式微表情进行手动特征识别。Wang等提出六交点的局部二值模式(local binary patterns from six intersection points,LBP-SIP)。张轩阁等提出光流与LBP-TOP 特征结合的方法来识别微表情。上述的算法均由LBP 算法基础改进而来,同时也有许多算法在光流法的基础上改进。Liu 等提出了一种基于时空空间纹理局部纹理描述符的主方向平均光流法(main directional mean optical-flow,MDMO),采用一种鲁棒的光流方法应用到微表情视频序列中,并将面部基于AU 的感兴趣区域(region of interest,ROI)区域划分,更加精确地对各区域进行处理。Ben等提出了张量表示的最大边距投影(maximum margin projection with tensor representation,MMPTR),该算法通过最大化类间和最小化类内拉普拉斯散色,MMPTR 可以找到张量之间的投影,该投影直接从原始张量数据中提取出判别性和几何保留特征。
提取手工特征的传统方法大大推动了微表情识别研究领域的发展。但是传统方法计算量大、耗时长并且普适性不强。更为重要的是,由于微表情持续时间短暂且动作幅度小的特点,传统方法已经很难在识别精度上有进一步的提升,在微表情识别领域发展的道路上遇到了瓶颈,寻找新的突破口已经迫在眉睫。
近年来,深度学习技术大力发展,目前已经被广泛应用在多个领域,例如行为识别、实例分割、人脸识别、目标检测、目标追踪、微表情识别等计算机视觉领域,并且相比于以往的传统方法都有较大提升。在微表情识别领域也有很多研究人员开始使用深度学习。Liong 等提出,计算出每个微表情序列中的顶帧,即运动幅度最大的帧,然后分别求出顶帧与起始帧之间竖直方向和水平方向光流图,进入卷积神经网络(convolutional neural networks,CNN)中提取特征,最终得到的分类效果相比仅仅使用光流方法有很大提升。刘汝涵等针对微表情动作微弱不利于识别,提出一种基于眼部干扰消除的视频放大方法,结合深度神经网络进行微表情识别,最终与仅仅使用深度神经网络相比结果有所提升。微表情识别中的深度学习常用算法一般是CNN 或者是循环神经网络(recurrent neural network,RNN),或者将两者结合。但是这些方法不能够同时编码视频序列时间-空间域的关系。近年来,3D-CNN 在基于视频分类的领域得到广泛的应用,它能够同时提取时间-空间域特征,而对于微表情识别来说,时间域特征也非常重要。Rathi 等、Li 等、Reddy 等的工作 中使用了3D-CNN 来提取特征,相对于仅使用CNN 或者RNN 效果提升明显。然而,目前微表情识别领域使用深度学习方法也遭受到挑战,由于微表情数据库的稀缺造成在搭建神经网络时不能构建大网络,否则网络的参数会过拟合,造成微表情识别精度的下降。
针对小数据集,迁移学习是一个非常行之有效的方法。即使在使用小网络的情况下,也可以缓解网络过拟合的趋势,从而提高精度。Jia 等提出从宏表情迁移到微表情的一种方法,该方法使用LBP和LBP-TOP 分别用于提取宏表情和微表情特征。此外,采用特征选择来减少冗余特征。最终,采用奇异值分解来实现宏到微观的转换模型。Xia 等提出一种利用宏表情样本指导训练的微表情识别网络框架,将MacroNet 固定并用于从标签和特征空间引导MicroNet的微调。在MicroNet和MacroNet之间的功能级别上增加了对抗性学习策略和三元组损失,MicroNet 可以有效地捕获微表情和宏表情样本相同的特征。给标签空间增加损失不等式正则化,从而MicroNet 收敛。Zhang 等的工作中提出深度互学习属于迁移学习中的一种,相比迁移学习的其他方法,深度互学习方法在不借助跨域数据集的情况下,能够有效地缓解网络过拟合的情况并且网络之间可以互相学习新的知识,进而有效提高网络的性能。本文首次将互学习策略融入微表情识别任务中,提出基于双流时间域信息交互的卷积网络(DSTICNN32和DSTICNN64)微表情识别。本文方法适用于不同的主干网络,并且本文方法训练的网络除了在精度上具有优势以外,同时在鲁棒性上也具有很大的优势。通过常规的标签监督损失、不同时间尺度的JS 散度(Jensen Shannon divergence)损失以及均方差损失使得不同时间尺度的网络之间通过不断进行信息交互分享学习经验,提高判别性能。此外,由于互学习机制增强了各模态分支的判别能力,测试阶段只需要将32帧或者64 帧微表情序列输入DSTICNN32 和DSTICNN64网络即可完成识别(即测试时使用单流网络)。
本文对微表情序列进行处理,构建了DSTICNN32和DSTICNN64 网络分别对32 帧和64 帧微表情序列进行识别。由于时序特征对于微表情识别任务是至关重要的,本文DSTICNN 采取3D 卷积网络作为主干网络,卷积核的尺寸为××,和为图像的长、宽尺度,为图像序列的时间尺度。Tran 等提出的C3D 网络中指出维度为3×3×3 的卷积核可以带来最好的效果。因此,本文中的网络也采用了同等维度的卷积核应用在主干网络中。网络一共有5层,4层卷积层加上1层全连接层,4层网络的卷积核数量分别为16、32、64和128。DSTICNN32和DSTICNN64的区别在于第一层卷积核的尺寸,前者为3×3×4,后者为3×3×8,最终使得后面两流的特征图像维度保持一致。具体的DSTICNN 网络结构如表1 所示,Ss 代表卷积核的空间步长,Ts代表卷积核的时间步长。
表1 DSTICNN 网络结构Table 1 Network structure of DSTICNN
双流网络分别输入时间尺度为32 和64 帧的微表情灰度序列,灰度图像更加聚焦于空间信息。从灰度图像序列中计算出的光流序列可以展示出微表情的运动变化,光流序列中白色部分表示运动的区域,白色区域越大说明运动的幅度越大。从图1(a)和图1(b)所示的光流序列中可以看出,同一微表情序列的不同时间尺度所包含的时间信息不同,图1(a)中的32 帧序列明显比64 帧序列微表情运动幅度更大,而图1(b)中64 帧序列则对比32 帧序列动作更加连贯。与之相对应的,32 帧灰度图像序列在面部肌肉运动的幅度上蕴含丰富的信息,而64 帧灰度序列在肌肉运动的连贯性上具有丰富的信息。根据面部行为编码系统(facial action coding system,FACS)所述,面部肌肉运动的部位及方向是微表情分类的重要依据,与此同时,32 帧和64 帧序列所包含的信息都是微表情识别网络所需要的特征。本文网络能够通过训练得到两者的特征,以此来更精准地预测微表情类别。
图1 SMIC 数据库光流序列Fig.1 Optical flow sequence of SMIC database
图2 所示为双流时间域交互网络,同一微表情序列样本的不同时间尺度,所包含的时间域信息不同,网络进行不同时间信息的交互来互相学习。双流网络同时训练,网络中不同颜色的箭头代表微表情序列中的不同帧,网络在提取特征的过程中,会将多帧图像的特征关联,同时提取出空间域信息和时间域信息形成特征图像,经过多层3D 卷积、池化,最终在决策层得到预测结果。本文损失函数分别由三部分组成,第一部分为交叉熵损失,第二部分是两条网络第三层特征图像之间的均方差损失,第三部分是两条网络预测结果之间的JS 散度损失,训练过程中DSTICNN32 和DSTICNN64 网络分别学习到样本的不同时间信息,在损失函数的监督下进行知识的交互,使得双流网络最终学习到的知识更加丰富。
图2 双流时间域交互网络Fig.2 Dual-stream temporal-domain interactive network
具体的DSTICNN32 网络损失函数如式(1)~(7)所示:
散度损失用来度量两流网络预测结果之间距离。由真值label、双流网络特征图像之间的均方差以及另一条DSTICNN网络的预测结果来监督训练,损失函数由真值交叉熵损失L和另一条网络交互损失L组成。
对微表情数据库进行预处理,分为空间域和时间域部分。空间域部分需要对人脸进行定位、配准、剪裁,在输入网络之前去除图像序列中无关的信息,将人脸微表情序列作为网络的输入有利于网络提取出更加有用的特征。由于CASME Ⅱ数据库在原始的数据中包含了已经预处理过的图像序列,本文只针对SMIC 库进行预处理,首先使用Face++API 对图像序列进行人脸的landmark 定位,然后使用Dlib 对图像序列进行人脸的对齐,最后剪裁出图像序列中的人脸ROI 区域。同时将所有的图像序列都尺寸归一化到112×112。时间域部分需要对图像序列的时间尺度进行归一化,本文使用时间插值模型(temporal interpolation model,TIM)将所有的图像序列的时间长度都归一化为32 和64 作为网络的输入。
本文实验使用了CASME Ⅱ和SMIC数据库,图3所示分别为CASME Ⅱ数据库样本和SMIC 数据库中SMIC-HS 样本。
图3 CASME Ⅱ、SMIC 数据库预处理后样本Fig.3 Samples after pretreatment of CASME Ⅱand SMIC databases
CASME Ⅱ是由傅小兰团队建立并公开可供科研使用。CASME Ⅱ由255 个微表情序列组成,采用200 frame/s 拍摄,参与人员平均年龄22 岁,分为26个主题9 个类别:高兴(happiness)、惊喜(surprise)、厌恶(disgust)、害 怕(fear)、悲伤(sadness)、生气(anger)、压制(repression)、紧张(tense)和消极(negative)。实验大部分在样本数比较多的五大类展开:紧张(tense)、厌恶(disgust)、高兴(happiness)、惊喜(surprise)和压抑(repression)。
SMIC由芬兰奥卢大学赵国英团队建立。SMIC包含了3 个子数据集,SMIC-HS、SMIC-VIS 和SMICNIR。本文实验选用SMIC-HS 作为数据样本,其中含有164 个微表情视频序列,分为16 个主题。使用100 frame/s 录制而成,分为3 类:积极(positive)、消极(negative)和惊喜(surprise)。
该实验运行的环境是64位的Ubuntu16.04操作系统,32 GB 内存,以及两块Geforce GTX 1080TI GPU。使用pytorch 框架来搭建神经网络,使用SGD(stochastic gradient descent)作为优化器训练网络,初始学习率设置为1×10,batch_size 设置为16,同时设置了每100 个epoch 衰减到原来50%。作为辅助损失,为了比其他损失小一个数量级,本文式(6)和式(11)中的取1E-5。
本部分实验对SMIC 数据库以及CASME Ⅱ数据库进行实验测试,使用图1 网络来提取特征,识别微表情序列。本实验使用留一目标法(leave-onesubject-out,LOSO),由于SMIC 数据集有16 位志愿者的样本,将数据集按照志愿者分成16 份,每次实验取其中1 份作为测试集,其余15 份为训练集。进行16 次实验之后所得到的结果求出平均值为最终结果。CASME Ⅱ数据库有26 位志愿者样本,因此将数据集按照志愿者分成26 份,每次实验将其中1 份作为测试集,剩下25 份作为训练集。反复进行26 次实验之后,所取得的结果求取平均值作为最终结果。
为测试本文方法的有效性和先进性,将本文方法与现有的优秀方法进行比较,结果如表2 所示。DSTICNN32 和DSTICNN64 的结果为本文方法的baseline,采用DSTICNN 网络提取特征,使用交叉熵损失来监督训练,DSTICNN32_KL 使用交叉熵和KL散度来共同监督训练,DSTICNN32_KL_MSE 使用交叉熵和KL 散度还有特征图像之间的均方差损失来共同监督训练,DSTICNN32_JS使用交叉熵和JS散度来共同监督训练,DSTICNN32_JS_MSE 使用交叉熵和JS 散度还有特征图像之间的均方差损失来共同监督训练。DSTICNN64、DSTICNN64_KL、DSTICNN64_JS、DSTICNN64_JS_MSE 与之相似。
表2 SMIC 和CASME Ⅱ数据库实验结果Table 2 Experimental results of SMIC and CASME Ⅱdatabases %
由表2 可以看出,本文方法无论是在SMIC 还是在CASME Ⅱ数据库中相较于现有的方法在结果上都具有一定的先进性。本方方法在SMIC 数据库和CASME Ⅱ数据库取得的精度分别为85.93%和83.65%。从表2 中可以看出,传统方法LBP-TOP 相对于深度学习方法所取得的精度已经有一定的差距,并且传统方法需要人工提取特征,计算量大,实验过程较为繁琐。
本文方法使用提出的DSTICNN32和DSTICNN64作为基础网络,来提取空间域和时间域的特征,双流网络分别提取了同一样本的不同时间信息特征。得到的最好结果也好于表2 中其他的深度学习方法。ICE-GAN 方法中使用GAN 方法生成微表情序列样本,在一定程度上解决了样本稀缺、样本不平衡的问题,在CASME Ⅱ数据库上取得的最终结果稍高于本文方法。
由于互学习的机制在训练过程中增强了网络的预测能力,测试阶段可以单独测试,单条网络即可完成对灰度图像的预测。图4 所示为测试阶段本文网络对微表情序列预测的网络结构图。
图4 测试网络Fig.4 Test network
表3为本文消融实验的结果,从表中可以看出,采用本文方法在两个数据库上平均结果都得到了明显的提升。图5所示为SMIC数据库DSTICNN64_JS_MSE网络每一折的实验结果,图6 所示为CASME Ⅱ数据库DSTICNN32_JS_MSE 网络每一折的实验结果。从图5 和图6 中可以看出,实验中大部分折在使用本文方法之后准确度都有所提升。SMIC 数据库DSTICNN64 网络的baseline 为69.34%,损失函数使用交叉熵+KL 之后提升至72.72%,损失函数使用交叉熵+KL+均方差之后提升至79.13%,使用交叉熵+JS 之后提升至81.31%,损失函数使用交叉熵+JS+均方差之后提升至85.93%,最好结果最高提升了16.59个百分点。CASME Ⅱ数据库DSTICNN32 网络的baseline 为69.41%,损失函数使用交叉熵+KL 之后提升至76.50%,损失函数使用交叉熵+KL+均方差之后提升至82.21%,损失函数使用交叉熵+JS 之后提升至81.61%,损失函数使用交叉熵+JS+均方差之后提升至83.65%,最好结果提升了14.24 个百分点。
图5 SMIC 数据库DSTICNN64 实验结果Fig.5 Experimental results of DSTICNN64 in SMIC database
图6 CASME Ⅱ数据库DSTICNN32 实验结果Fig.6 Experimental results of DSTICNN32 in CASME Ⅱdatabase
表3 SMIC 和CASME Ⅱ数据库的消融实验结果Table 3 Ablation results from SMIC and CASME Ⅱdatabases %
损失函数使用交叉熵+KL 的组合对比仅使用交叉熵作为损失函数,网络在训练过程中获得来自另一条网络不同的时间域信息,从单一的one-hot 编码标签(如[1,0,0])监督训练,到叠加了DSTICNN 网络的预测结果[0.5,0.3,0.2]监督训练。这样一来,在互学习损失函数的监督训练之下,不仅缓解了由单标签监督所带来的过拟合问题,并且给网络带来更多元的信息,进而优化网络的参数,最终提升精度。交叉熵+JS+均方差组合损失则改善了KL 散度损失预测距离非对称所带来的问题,避免了网络在训练过程中有时因训练顺序不同而产生的结果不一样的情况。叠加不同网络间的特征图均方差损失则是对主干网络进行约束,以此来实现特征图像之间的信息交互,网络获得更为丰富的微表情序列时间域特征,更多不同时间尺度的信息,进一步地辅助网络之间的互学习,从而增强网络的预测能力。
本文引入深度互学习的思维,改良深度互学习的方法,并且引入了特征图像之间均方差损失来辅助网络之间的互相学习,利用网络对同一样本获取到不同的时间域信息进行网络之间的学习,从而提升了整体的识别准确率。实验结果表明本文采用的双流时间域信息交互方法性能明显优于传统方法和一些优秀深度学习方法。此外本文采取两个主流微表情数据库SMIC 和CASME Ⅱ数据库以及LOSO 测试方法,更加模拟了真实场景下的微表情识别任务。