这篇文章主要参考论文 《Deep Facial Expression Recognition:A Survey》。
这篇文章[1]是北邮的邓伟洪教授关于深度人脸表情识别(Deep Facial Expression Recognition,DFER) (情感识别)的一篇综述性文章,该文章被计算机视觉顶会CVPR收录。对于像我这样对情感识别感兴趣,但又没做过具体应用的小白来说研读这篇文章再合适不过了。
介绍
表情可以说是一门世界语,不分国界、种族以及性别,可以说所有人都有着通用的表情。FEP在机器人、医疗、驾驶员驾驶疲劳检测和人机交互系统中都有广泛应用,最早在20世纪,Ekman和Friesen通过跨文化研究,定义了6种基础表情:生气、害怕、厌恶、开心、悲伤和吃惊,随后又加入了“蔑视” 这一表情。开创性的工作和直观的定义,使该模型在自动人脸表情识别(automatic facial expression analysis, AFEA)中依然很流行。
根据特征表示,FER系统可以划分为图片FER和视频FER两类。图片FER只提取当前图片的特征,而视频需要考虑相邻帧之间的关系。实际上所有计算机视觉的任务的处理对象都可以划分为图片和视频两类。
FER传统的方式使用手工提取的特征和浅层学习,这种方式的弊端就不多赘述了。得益于深度学习的发展和更具有挑战性的数据集FER2013的出现,越来越多的研究者将深度学习技术运用到FER中。
深度人脸表情识别
这一节讨论了深度学习在人脸表情识别应用上的三个步骤。分别是预处理、特征提取和特征分类,简述了每一步的具体做法,并引用了相关论文。
预处理
人脸对齐
给定一个数据集,第一步是移除与人脸不相关的背景和非人脸区域。ViolaJones(V&J)人脸检测器[2] (在OpenCV和Matlab中都有实现),该检测器能将原始图片裁剪以获得人脸区域, 第二步是面对齐,这一步至关重要,因为可以减少人脸尺度改变和旋转产生的影响。最常用的面部对齐的实现是IntraFace[3],IntraFace采用SDM算法,定位出49个面部特征点(双眼、两个眉毛、鼻子和嘴巴)
数据增强
数据增强包括在线和离线两种方式:
- 离线方式:随机扰动,图像变换(旋转、评议、翻转、缩放和对齐),添加噪声(椒盐噪声和斑点噪声),以及调整亮度和饱和度,以及在眼睛之间添加2维高斯分布的噪声。此外,还有用对抗神经网络GAN[4]生成脸,3DCNN辅助AUs生成表情。使用GAN生成脸对网络性能是否有提升还没有验证过。
- 在线方式:包含在训练时,裁剪图片,水平翻转。主要是通过随机扰动训练模型。
人脸归一化
人脸的光照和头部姿势变化会削弱训练模型的性能,有两种脸部归一化的策略削弱影响,分别是亮度归一化和姿态归一化。
- 亮度归一化:Inface 工具箱[5]是最常用的光照不变人脸检测箱。除了直观的调整亮度以外,还有对比度调整。常见的对比度调整方法有直方图归一化、DCT归一化、Dog归一化。
- 姿态归一化:这是一个棘手的问题,目前的方法都不太理想。有2D的landmark对齐,3Dlandmark对齐,有通过图像和相机参数估计,也有通过深度传感器测量然后计算出来。比较新的模型都是基于GAN的,有FF-GAN、TP-GAN和DR-GAN。
深度特征学习
这一部分主要讲的是使用深度学习模型提取特征,包括卷积神经网络(Convolutional neural network,CNN)、深度置信网络(Deep belief network ,DBN)、深度自动编码器(Deep autoencoder,DAN)和递归神经网络(Recurrent neural network,RNN)。深度人脸表情识别的流程如下,下图可以看出,深度网络模型部分有四种常用的模型。作者只是简单的介绍了几种网络模型,在这里我也不过多的赘述。CNN模型在我前几篇博文卷积神经网络的结构与相关算法和卷积神经网络模型解读汇总——LeNet5,AlexNet、ZFNet、VGG16、GoogLeNet和ResNet有详细介绍。其余的网络模型以后有时间会逐一整理。
人脸表情分类
完成了特征提取后,最后一步对其进行分类。在传统FER系统中,特征提取和特征分类是独立的。而深度学习的FER是端到端的模型,可以在网络的末端添加损失层调节反向传播的误差,预测概率可以由网络直接输出。也可以将两者结合,即用深度学习提取特征,再用SVM等分类器分类。
面部表情数据库
该部分总结了FER可用的公开数据集。
- CK+:包括123个subjects, 593 个 image sequence。该数据库由118名受试者录制,在这593个image sequence中,有327个sequence 有 emotion的 label。除了中性外包含7种表情:愤怒、蔑视、厌恶、恐惧、高兴、悲伤和惊讶。
- MMI:包括32个subjects,326个image sequence。213个sequence 有 emotion的 label。包含6中表情(相比较于CK+没有蔑视),MMI更具挑战性,因为很多人都戴有配饰。
- JAFFE:包含213副(每幅图像分辨率为256*256)日本女性的脸部图像,包含7种表情。该数据库均为正面脸相,且对原始图像进行了调整和修剪,光照均为正面光源,但光照强度有差异。
- TFD:改数据库是几个面部表情数据集的集合,TFD包含112234张图片(每张图片被调整到48*48大小),所有实验对象的眼睛都是相同的距离。其中4189张有标注,包含7种表情。
- FER2013:改数据库通过谷歌图片API自动收集,数据库中所有图片都修正了标签,将图片调整到48*48大小。包含28709张训练图像,3589张测试图像,包含7种表情。
- AFEW:AFEW数据集为Emotion Recognition In The Wild Challenge (EmotiW)系列情感识别挑战赛使用的数据集,该比赛从2013开始每年举办一次。 该数据集的内容是从电影中剪辑的包含表情的视频片段,包含7类表情。训练集、验证集和测试集分别包含773、383和653sample。
- SFEW:该数据集是从AFEW数据集中抽取的有表情的静态帧,包含7类表情。训练集、验证集和测试集分别包含958、436和372sample。
- Multi-PIE:包含4个场景9种光照条件15个视角下337个subject,总计有755370张图片。包含6种表情(没有蔑视)
- BU-3DFE:从100个人获取的606个面部表情sequence,包含6种表情(没有蔑视),多用于三维面部表情分析。
- Oulu-CASIA:80个没被标记的subject收集了2880个image sequence。包含6种表情(没有蔑视)。有红外(NIR)和可见光(VIS)两种摄像头在3种不同光照条件下拍摄。
- RaFD:包含67个subject的1608张图片,眼睛有不同的三种注视方向,包括前、左和右。包含7种表情。
- KDEF:最初用于医学和心理学研究。数据集来自70个演员从5个角度的6种表情。
- EmotioNet:包含从网上收集到的接近100万张面部表情图片。
- RAF-DB:包含从网上收集的29672张面部图像,包含7中基本表情和11种复合表情。
- AffectNet:包含从网上收集的100多万张面部图像,其中45万张图片手工标注为7种表情。
FER目前发展水平
总结了基于静态图像和动态图像序列(视频)的FER进展。
静态图像FER进展
对于每一个数据集,下表显示了目前最优异的方法,在该数据集上取得的效果。
预训练和微调
在相对较小的数据集上直接训练深度网络很容易导致过拟合。为了缓解这个问题,许多研究会在大数据集上先预训练网络,或者对已经训练好的网络进行微调。
如上图所示,先在ImageNet数据集上训练,然后再在具体的人脸表情数据集上微调。微调有较好的效果,人脸表情识别有各种微调方式,比如分级、固定某些曾,不同网络层用不同数据集微调,具体可以看看原文中所引用的论文。 此外,文献[6]指出FR和FER数据集存在巨大差异,人脸似乎别模型弱化了人脸表情的差异,提出了FaceNet2ExpNet网络消除这种影响。该模型分为两个阶段,首先用人脸识别模型提取特征,然后用表情识别网络消除人脸识别模型带来的情绪差异弱化。如下图所示。
多样化网络输入
传统的做法是使用原始的RGB图像作为网络的输入,然而原始数据缺乏重要的信息,如纹理信息,以及图像缩放、旋转、遮挡和光照等方面的不变性。因此可以借助一些手工设计的特征。如SIFT、LBP、MBP、AGEhe NCDV等。PCA可以裁剪出五官进行特征学习而不是整个脸部等。
辅助块与层改进
基于经典的CNN架构,有些研究设计了良好的辅助模块或者改进了网络层,这部分文中有列举几个例子,感兴趣可以找出相关论文翻看。 值得注意的是,Softmax在表情识别领域的表现不太理想。这是由于表情的类间区分度较低。作者整理了几种针对表情分类层的改进。
- 受到center loss的启发,对特征与相应的类距离加了惩罚项,这分为两种
- 一种是增加类间距离的island loss[7],如下图所示
- 另一种是减下类内距离的LP[8] loss,使同一类的局部相邻特征结合在一起。
- 一种是增加类间距离的island loss[7],如下图所示
- 基于triplet-loss,关于triplet-loss的想法可以参考原文和这篇博文。
- exponential triplet-based loss(增加困难样本的权重)
- (N+M)-tupes cluster loss(降低anchor的选择难度,以及阈值化triplet不等式),如下图所示。
网络集成
之前的研究表明,多个网络的集合可以比单个网络表现的更好。在网络集成时,要考虑两点:
- 网络模型要有充分的多样性,以确保网络之间具有互补性
- 要有可靠的集成算法
关于第一点,网络的多样性产生有很多方法,不同的训练数据、不同的预处理方式、不同的网络模型、不同的参数都能产生不同的网络。
关于第二点集成算法。这其中也主要有两点,一个是特征集成,另一个是输出的决策集成。特征集成最常见的做法是将不同网络模型的特征直接链接,还有如下图的方式
关于决策集成采用投票的机制,不同网络有不同的权重。关于决策集成的几种策略如下表所示。
多任务网络
目前许多网络都是单一任务的输出,但在现实中,往往需要考虑其他多种因素的作用。多任务模型能从其他任务中学习到额外的信息有助于提高网络的泛化能力。关于多任务模型的好处,可以参考这篇博文。如下如所示,在MSCNN[9]模型中将脸部验证与表情识别两个任务集成在一个网络中。
网络级联
在级联网络中,将不同模块处理不同的任务组合在一起设计一个更深层的网络,前一个模块的输出被后一个模块使用。如下图所示,在AUDN网络中,该网络由三部分组成。
动态图像序列FER进展
基于动态的表情识别相比静态图片能更全面,这里指的动态图像序列,即在视频中。
帧聚合
考虑到表情在不同时刻有不同的变化,但又不可能单独的统计每帧的结果作为输出,因此需要对一段帧序列给出一个识别结果,这就需要用到帧聚合。即用一个特征向量表示这一段时间序列。与集成算法类似,帧聚合有有两类,分别是决策级帧聚合和特征级帧聚合。这两部分感兴趣的可以参看论文。
强度表达网络
在视频中表情会有微妙的变化,而强度是指在视频中,所有帧表现某个表情的程度。一般在中间位置最能表达某个表情,即为强度峰值。大多数方法,都关注峰值附近而忽略了开始和结束时的低谷帧。这部分,主要介绍几个深度网络,输入是具有一定强度信息的样本序列,输出是某一个类表情中不同强度帧之间的相关性结果。如PPDN(peak-piloted),用以内在表情序列里帧之间相关性识别,还有基于PPDN的级联PPDN网络DCPN,具有更深更强的识别能力。虽然,这些网络,都考虑了一段序列里的表情变换,甚至为了计算表情的变化趋势,设计了不同的损失函数,但是,真心觉得,这种代价,对于工程来说,其实是没有意义的。有兴趣的,可以看看论文里对应的方法,这里不再赘述了。
深度时空FER网络
前面介绍的帧聚合和强度表达网络都属于传统的结构化流程,而在视频中将一些列帧作为单独的图像序列输入,输出某一类表情的分类结果。而RNN网络能利用"序列信息",所以视频FER模型用RNN网络,还有C#D:
- RNN: 从理论上讲,它可以利用任意长序列的信息,RNN呢能对时间序列上的变化建模。
- C3D: 在通常图像上的2D空间卷积的基础上,沿着时间轴加了一个时间维度,就形成了3D时空卷积。例如3DCNN-DAP[10],网络模型如下图所示。
还有种“暴力”做法,不考虑时间维度,将帧序列拼接成大向量,再进行CNN分类,如DTAN[11]。
- 面部landmark运动轨迹:通过研究五官的变化轨迹,进而分析表情的变化,如深度几何空间网络(deep temporal geometry network,DTGN)。该方法联合每帧landmark的x,y坐标值,归一化处理后,将landmark作为一个运动轨迹维度,或者或者计算landmark特征点的成对L2距离特征,以及基于PHRNN用于获取帧内的空间变化信息。还有根据五官将landmark点分成4块,输入到BRNNs,定位局部特征,如下图:
- 级联网络:跟之前静态图像的级联网络思路一样,主要是CNN提取特征,级联RNN做序列特征分类。如LRCN,级联CNN与LSTM,类似的,还有级联DAE作为特征提取,LSTM进行分类,还有ResNet-LSTM,即在低级CNN层,直接用LSTM连接序列之间的低级CNN特征,3DIR用LSTM作为一个单元构建了一个3D Inception-ResNet特征层,其他还有很多类似的级联网络,包括,用CRFs代替了LSTM等等。
- 网络集成:如两路CNN网络模型用于行为识别,一路用多帧数据的稠密光流训练获取时间信息,一路用于单帧图像特征学习,最后融合两路CNN的输出。还有多通道训练,如一通道用于自然脸和表情脸之间的光流信息训练,一路用于脸部表情特征训练,然后用三种融合策略,平均融合,基于SVM融合,基于DNN融合。也有基于PHRNN时间网络和MSCNN空间网络相结合来提取局部整体关系,几何变化以及静动态信息。除了融合,也有联合训练的,如DTAN和DTGN联合fineturn训练。
目前各个数据集上,动态序列的表情识别的最佳效果如下表所示:
最后整理不易,点一波关注吧,或者去我的个人博客逛逛冲弱's Blog。
参考文献
[1]: Li S, Deng W. Deep Facial Expression Recognition: A Survey[J]. 2018.
[2]: Viola P, Jones M. Rapid object detection using a boosted cascade of simple features[J]. Proc Cvpr, 2001, 1:511.
[3]: Torre F D L, Chu W S, Xiong X, et al. IntraFace[C]// IEEE International Conference and Workshops on Automatic Face and Gesture Recognition. IEEE, 2015:1-8.
[4]: Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[C]// International Conference on Neural Information Processing Systems. MIT Press, 2014:2672-2680.
[5]: [http://luks.fe.uni-lj.si/sl/osebje/vitomir/face tools/INFace/](http://luks.fe.uni-lj.si/sl/osebje/vitomir/face tools/INFace/)
[6]: Ding H, Zhou S K, Chellappa R. FaceNet2ExpNet: Regularizing a Deep Face Recognition Net for Expression Recognition[J]. 2016:118-126.
[7]: Cai J, Meng Z, Khan A S, et al. Island Loss for Learning Discriminative Features in Facial Expression Recognition[J]. 2017.
[8]: Li S, Deng W, Du J P. Reliable Crowdsourcing and Deep Locality-Preserving Learning for Expression Recognition in the Wild[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2017:2584-2593.
[9]: Zhang K, Huang Y, Du Y, et al. Facial Expression Recognition Based on Deep Evolutional Spatial-Temporal Networks[J]. IEEE Transactions on Image Processing A Publication of the IEEE Signal Processing Society, 2017, PP(99):1-1.
[10]: Liu M, Li S, Shan S, et al. Deeply Learning Deformable Facial Action Parts Model for Dynamic Expression Analysis[M]// Computer Vision -- ACCV 2014. Springer International Publishing, 2014:143-157.
[11]: Jung H, Lee S, Yim J, et al. Joint Fine-Tuning in Deep Neural Networks for Facial Expression Recognition[C]// IEEE International Conference on Computer Vision. IEEE, 2016:2983-2991.