首页 > 编程知识 正文

面部表情大全书籍,FACS—面部行为编码系统

时间:2023-05-06 03:27:25 阅读:54241 作者:1524

本文主要参考论文《Deep Facial Expression Recognition: A Survey》

首先,让我们了解一下关于表情识别的背景知识和发展近况。 脸部表情是最直接有效的情感识别模型。 有很多人机交互的应用,如疲劳驾驶检测和手机端的实时表情识别等。 20世纪Ekman等专家通过跨文化调查提出了7种基础表情。 各自生气、害怕、讨厌、快乐、悲伤、惊讶、中立。 但是,我们发现这七种基本表情并不能完全涵盖人们在日常生活中表现出的感情。 针对这一问题,2014年PNAS发表的文章研究提出了符合表情的概念,指出多种离散的基础表情可以结合形成复合表情。 例如,当人们遇到意外的惊喜时,应该会感到开心和惊讶。

人脸识别的具体应用包括人机交互、驾驶员疲劳检测、医疗、谎言检测等(似乎都不太可靠)。

功能表达式识别表情识别,以下简称FER。 另一个概念是AFEA、automaticfacialexpressionanalysis。 完整的FER包括静止图像FER和动态序列FER。 静止图像FER是我们通常意义上的图像表情识别,而动态序列FER是基于视频序列来建模的,诸如RNN方法。 以下是多年来FER上的发展,主要是算法和数据集。

可知实际上,主要是基于静止图像的FER。 主流方式有传统手工制作特点(LBP、LBP-TOP等)、浅层学习(SVM、Adaboost等)、深度学习(CNN、DBN、RNN )。 从2013年开始,FER2013、EmotiW等表情识别的比赛开始了。

人脸整体表情识别的研究是随着人脸识别的发展而发展起来的,人脸识别领域的优秀方法同样适用于表情识别(这里主要指静态图像FER,只是分类问题,与人脸识别类似)。 该综述从算法和数据库两个方面调查了人脸表情识别领域的进展。 在数据库中,表情识别正在从传统实验室统一控制下的小样本量数据库转移到现实生活中各种大型数据库。 在算法方面,传统的手工设计特征乃至浅层学习特征也已经不能很好地适应与现实世界表情无关的各种干扰因素,如光照变换、不同头部姿势及脸部分块。 因此,越来越多的研究将深度学习技术应用于脸部表情识别,以解决上述问题。

基于深度学习的表情识别主要分为以下三个过程。

1 .预处理

预处理是指在计算特征之前,排除一切与脸部无关的干扰。 因此,有人脸检测、人脸定位、归一化等过程,主要有人脸检测、人脸定位、数据增强、人脸归一化。

人脸检测不做赘述。

人脸对齐,主流是IntraFace,采用SDM算法,提供49个积分。 其他还有Mot、DRMF、Dlib、MTCNN、DenseReg、TinyFaces等。 作者这里的人脸定位主要是基于人脸,检测人脸定位点landmark。

数据增强包括在线和离线两种。

主要离线数据扩展,包括随机扰动、变换(旋转、平移、翻转、缩放、对齐)、添加噪声(如椒盐噪声、斑点噪声等)、亮度、饱和度变化以及眼睛之间的二维zzdzm随机分布噪声。 另外,还有GAN生成脸,3DCNN辅助AUs的表情生成。 但是,GAN生成的脸相对于网络模型是否提高了性能,还没有得到证实。

在线数据增强包括Crop、水平反转等,主要意思是在预测时一次对测试数据进行Crop、反转等操作,生成多张类似测试图,将根据各个测试图预测的输出进行平均。 这主要是基于随机扰动训练的模型,这是因为测试时需要计算平均值。

完整的FER系统映像

人脸归一化主要指亮度归一化和姿态归一化。

亮度正规化不仅包括亮度调整,还包括对比度调整。 常见的对比度调整方式有直方图归一化、DCT归一化、DoG归一化。 相关论文证明直方图归一化的效果最稳定,适应各种网络模型。 也有论文认为,在全局对比度归一化、局部归一化、直方图归一化三种方法中,全局对比度归一化和直方图归一化效果最好。 因此,建议同时使用直方图归一化和亮度归一化。

虽然态度正规化了,但其实这是脸部项目中影响最大的。 即使现在,大多数情况下也是以小角度进行2D的地标配准,比较可靠的方向是3d地标配准。 有些是根据图像和相机参数推算出来的,有些是用深度传感器测量后计算出来的。 比较新的估计模型是FF-GAN、TP-GAN、DR-GAN等。

2 .深度特征学习

这里很少描述,主要是基于CNN的网络模型,具有非常高的性能特征表达能力。 特别是基于图像的分类问题、另一个基于DBN网络的特征提取以及DAE变换适于作为特征提取。 最后,还有基于序列建模的RNNs,如LSTM。

3 .脸部显示分类

这里,可以主要基于深度学习,直接学习特征,预测概率(softmax ),或者可以将学习的深度特征分类为浅层,例如SVM

器进行分类。

下面开始介绍FER涉及到数据集。

上图展示了作者收集整理的FER数据集,很全面,基本涵盖了从开始到当下,公开的数据集。

目前的数据结果分析:

这里分两部分,包含基于静态图像和基于动态序列。

1.静态图像FER进展

基于静态图像的FER,在使用深度学习进行分类时,分以下几种情况:

1.1预训练模型fineturn.

主要采用分类网络,或者人脸识别网络,相对来说,后者更好。只是有各种fineturn的方式,比如分级、固定某些层,不同层采用不同数据集,如下图:

还有,考虑到人脸识别模型弱化了人脸情绪差异,可以用人脸识别模型提取特征,然后用表情识别网络消除人脸识别模型带来情绪差异的弱化。也就是这里人脸识别模型起到初始化表情网络的作用。

1.2差异化网络输入

实际上就是,除了常见的输入RGB原始脸部数据给网络,还有一些手工特征,如SIFT,LBP,MBP(人脸识别之表情识别(五)--MBP+CNN),AGE(3D angle,gradient edge),NCDV,还有LBP+HOG+Gray@51点landmark生成DSAE,PCA以及裁剪出五官进行特征学习而不是整个脸部等。个人觉得这个是有道理的,纯粹脸部表情,没有必要将全部脸部数据传递进去提取特征,毕竟,网络模型的权重更新,依据脸部全部数据的话,虽然大多数特征是好的, 但谁也说不好,脸部与表情无关的数据,对表情识别的贡献多大,以及生成的特征是否有效,因为最终的输出是部分节点的激活结果。

1.3辅助块或者层改进

基于经典CNN网络架构,一些人设计了更好的网络块或者网络层,如HoloNet(CReLU代替ReLU以及改进的残差块),还有下图这种结构(多模块监督):

需要注意的一点是,Softmax在表情识别领域,不是很合适,毕竟表情的类间区分本来就不高,这也是难点所在,所以,用人脸识别模型中的改进损失如A-Softmax等效果比普通分类的Softmax普遍好。但是,个人觉得思路还是有问题。作者也整理了了几种针对表情分类的loss,如基于center loss 改进的ISLand loss(增加类间距离),LP Loss(locality-preserving,减小类内距离)。基于triplet loss改进的exponential triplet-based loss(网络中增加困难样本的权重),(N+M)-tupes cluster loss(降低anchor的选择难度,以及阈值化triplet不等式),如下图:

1.4网络集成

集成的方式,在机器学习上面非常成功,如Adaboost就是一个很成功的例子,这里讲的是网络结构的集成,要考虑两点,一是网络模型要有充分多样性这样才可以具有互补性,二是一个可靠的集成算法。

对于深度学习来说,不同的训练数据,不同的网络架构,甚至不同的网络参数,不同的预处理,都有可能产生不同的网络模型,这个不多说了。

对于集成算法,这里需要考虑两点,一个是特征集成,另外一个就是输出的决策集成,对于特征集成,最常见的是不同网络模型的特征直接连接,还有如下图:

 

决策集成,如多模型输出加权投票,简单平均,加权平均,甚至可以一起学习每个模型的集成权重。

1.5多任务网络

这里的多任务网络,不是指常见的检测和对齐一起做,而是表情和landmark一起、表情和人脸验证一起、以及表情和AUs分类一起。如disBM(高阶玻尔兹曼机),学习与表情有关的主要坐标以及后续的表情分类,值得注意的有SJMT解决AUs的多标签用以识别AUs,IACNN包含两种提取网络,一路用表情感知测度学习提取判别表情类别的特征,一路用身份感知测度学习提取表情中不变特征,类似的还有MSCNN,基于监督的表情识别和人脸验证一起,如下图

1.6网络级联

如下图,就是一个网络级联过程

最后,给出一个目前在不同数据集上的结果图。

2.动态序列FER进展

基于时空上下文的表情分析,相比静态图像更全面,毕竟,人的表情,是在真实世界的一个时间和面部空间里变化的结果。这里的动态序列,主要是指表情在视频序列中的变化。

2.1帧聚合

考虑到表情的时空变化,单独的统计每帧的结果作为类别输出不太合适,因此,需要针对一段帧序列给出一个表情结果,这就涉及到帧聚合,也就是用一个特征向量,表示一段时间序列帧。通常有两类,一类是决策级帧聚合,一类是特征级帧聚类。

对于决策级帧聚合,例如有生成所有帧的表情类别概率,并连接成一个固定帧长度向量再进行分类。具体分类序列时,考虑到表情是一个实际由开始到结束的变化过程,因此,作者比较了这些向量最后的决策机制,如去平均,最大,或者WTA,平方再平均等等,具体可以看看论文。

对于特征级帧聚合,主要是指针对每帧的原始数据,提取特征,联合多帧,再做处理,如有人针对这些联合帧的特征数据,计算特征向量(eigenvector),协方差矩阵,以及高维zzdzm模型。还有人提出STAT,即统计编码模型,联合了均值,方差,最小,最大值等。还有采用GMM进行编码生成Fisher 向量的。有兴趣的可以看论文。这里不再赘述了。

2.2强度表达网络

这里的强度,是指在一段序列中,所有帧表现出某个表情的程度,一般中间位置最能表达某个表情,即为强度峰值。大多数方法,都关注峰值附近而忽略了开始和结束时的低谷帧。这部分,主要介绍几个深度网络,输入是具有一定强度信息的样本序列,输出是某一个类表情中不同强度帧之间的相关性结果。如PPDN(peak-piloted),用以内在表情序列里帧之间相关性识别,还有基于PPDN的级联PPDN网络DCPN,具有更深更强的识别能力。虽然,这些网络,都考虑了一段序列里的表情变换,甚至为了计算表情的变化趋势,设计了不同的损失函数,但是,真心觉得,这种代价,对于工程来说,其实是没有意义的。有兴趣的,可以看看论文里对应的方法,这里不再赘述了。

2.3深度时空FER网络

其实 ,到这里,你可以看出,上面的帧聚合,强度表达网络,都是属于传统的结构化流程,这里的时空网络,形成了端到到的序列分类。即输入单独的图像序列,输出某一类表情的分类结果。主要肯定是RNN啦,还有C3D:

RNN:这个不用多说,就是专门为序列建模的,经典的有LSTMs,GRUs等。

C3D:其实就是3D卷积核,对于通常图像上的2D空间卷积,沿着时间轴增加了一个时间维度,就是3D时空卷积。如3DCNN-DAP:

http://

当然,你也可以不用考虑时间维度,直接将一段序列数据,拼接成大向量,进行CNN分类。这种思路简单粗暴如DTAN。

面部landmark运动轨迹

通过研究五官的变化轨迹,来分析表情变化,如DTGN,深度空间几何网络,联合每帧landmark点的x,y坐标值,归一化之后,作为一个运动轨迹维度。或者计算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训练。

最后,给出一个动态序列分析在各个数据集上的目前最佳效果:

 

 

补充:

遮挡和非正脸头部姿态,是两个FER上主要的问题,对于遮挡问题,有人尝试用DBNs提取特征,排除遮挡干扰,也有尝试用两个CNN网络,一个用于没有遮挡干扰数据训练,一个用遮挡数据训练。对于非正面头部姿态的影响,除了上文提到的SIFT特征,做3D/2D透视投影转换,将该转换过程直接放置在CNN模型中,其他,基本就是3D landmakr估计了。

还有,增加额外的数据,如IR近红外,深度数据等,用于辅助光线影响,3D真实脸部数据等。

总结:

1.静态/动态都有一定的应用空间,后者更接近真实客观表情理解。

2.可以看出,除了后面网络集成,网络级联更多的用在刷分,工程意义不大,当然,也不能说没有,在没有资源限制时可用。

3.主要关键过程有预处理,比如人脸检测,人脸对齐,亮度,对比度归一化,姿态归一化,保证输入数据干扰影响较少。

4.数据增强与常见的图片数据扩展一致,深度网络包括CNN分类/识别/RNN分类,与常见分类任务一致。

5.可以用预训练的分类/人脸识别网络fineturn,可以针对表情修改对应的损失函数,也可以局部或者针对某些层,块进行改进

6.可以将DL和Handcrafted特征结合,增加网络输入的多样性。

7.可以CNN+RNN进行端到端的序列识别。具体CNN设计,以及CNN+RNN如何设计(级联,集成,或者联合)需要实际结果测试你确认,说白了,这几种结合方式都有用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。