编者按:本文原作者吴捷,目前于中山大学就读研究生。研究领域为计算机视觉与自然语言处理。本文原载于知乎,经作者授权发布。欢迎去GitHub给大佬加星。
先放出GitHub地址:
https://github.com/WuJie1010/Facial-Expression-Recognition.Pytorch
一. 表情识别 (Facial Expression Recognition )
表情识别是计算机理解人类情感的一个重要方向,也是人机交互的一个重要方面。表情识别是指从静态照片或视频序列中选择出表情状态,从而确定对人物的情绪与心理变化。20世纪70年代的美国心理学家Ekman和Friesen通过大量实验,定义了人类六种基本表情:快乐,气愤,惊讶,害怕,厌恶和悲伤。在本文的表情分类中还增添了一个中性表情。人脸表情识别(FER)在人机交互和情感计算中有着广泛的研究前景,包括人机交互、情绪分析、智能安全、娱乐、网络教育、智能医疗等。
二. 表情识别的常用方法
2.1 人为设计特征
各种的人为设计的特征已经被用于FER提取图像的外观特征,包括Gabor、LBP、LGBP、HOG和SIFT。这些人为设计的方法在特定的小样本集中往往更有效,但难以用于识别新的人脸图像,这给FER在不受控制的环境中带来了挑战。
存在问题:
(1)人为设计的特征太受制于设计的算法,设计太耗费人力。
(2)特征提取与分类是两个分开的过程,不能将其融合到一个end-to-end的模型中
2.2 神经网络
近几年来,前馈神经网络(FNN)和卷积神经网络(CNN)也被用来提取表情特征。基于卷积神经网络(CNN)的新的识别框架在FER中已经取得了显著的结果。CNN中的多个卷积和汇集层可以提取整个面部或局部区域的更高和多层次的特征,且具有良好的面部表情图像特征的分类性能。经验证明,CNN比其它类型的神经网络在图像识别方面更为优秀。基于神经网络的方法也存在着两个问题:
(1)简单的神经网络(如FNN)忽略图像二维信息。
(2)浅层卷积网络所提取的特征,鲁棒性较差。
基本上面的人为设计特征与神经网络的缺陷,我们尝试着用深度卷积网络来解决表情识别的问题。
三. 基于深度卷积神经网络的表情识别
3.1 模型设计
(1)我们采用深度卷积神经网络来将人脸表情特征提取与表情分类融合到一个end-to-end的网络中。分别采用了VGG19和Resnet18来完成表情的识别与分类。
(2)VGG19 的每一个小块是有一个卷积层,一个BatchNorm层,一个relu层和一个平均池化层来构成的。而resnet是由两个卷积层,两个BatchNorm层组成,而且每个resnet模块输入输出端还有快捷链接。
(3)在全连接层之前加入了dropout策略,增加了模型鲁棒性;
(4)我们都去掉了传统VGG19与Resnet18中的多个全连接层,直接在一个全连接层后直接分为7类去识别。
3.2 损失函数设计
在设计中,我们探索了两种损失函数的计算方法,第一种是交叉熵损失函数。模型在全连接层之后,得到了每一类的输出概率,但此时概率是没有经过归一化的,我们通过一个softmax层,将概率归一化到1,更加易于数据处理。而交叉熵损失函数计算公式如下:
在 softmax回归中,我们通过归一化的概率的大小解决多分类问题,类标y可以取k个不同的值(而不是 2 个)。
第二种损失函数是线性SVM分类损失,其抽象为hinge损失函数,Hinge loss 的叫法来源于其损失函数的图形,为一个折线,第i 类的损失表达式为:
如果被正确分类,损失是0,否则损失就是
SVM和Softmax分类器是最常用的两个分类器。不同的是,SVM将输出为每个分类评分,然后再选择得分最高的类;与SVM不同,Softmax分类器是一个logistic分类器面对多个分类的归纳,其归一化的分类概率更加直观,其概率总和为1。
四. 实验设计
4.1 数据集
本文采用了FER2013和CK+数据库。
https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data
FER2013数据集由28709张训练图,3589张公开测试图和3589张私有测试图组成。每一张图都是像素为48*48的灰度图。FER2013数据库中一共有7中表情:愤怒,厌恶,恐惧,开心,难过,惊讶和中性。该数据库是2013年Kaggle比赛的数据,由于这个数据库大多是从网络爬虫下载的,存在一定的误差性。这个数据库的人为准确率是65% 士5%。
http://www.portointeractivecenter.org/site/wp-content/uploads/2012-11-22WeeklyPresentationGustavoAugusto_Paper.pdf
CK+数据库则是发布于2010年,由Cohn-Kanade Dataset的基础上扩展而来的。这个数据库包括123个subjects, 593 个 image sequence,每个image sequence的最后一张 Frame 都有action units 的label,而在这593个image sequence中,有327个sequence 有 emotion的 label,如图4.2.2。这个数据库是在实验室条件下获取的,较为严谨可靠。CK+是人脸表情识别中比较标准的一个数据库,很多文章都会用到这个数据做测试。
4.2 数据增强
为了防止网络过快地过拟合,可以人为的做一些图像变换,例如翻转,旋转,切割等。上述操作称为数据增强。数据操作还有另一大好处是扩大数据库的数据量,使得训练的网络鲁棒性更强。在本实验中,在训练阶段,我们采用随机切割44*44的图像,并将图像进行随机镜像,然后送入训练。在测试阶段,本文采用一种集成的方法来减少异常值。我们将图片在左上角,左下角,右上角,右下角,中心进行切割和并做镜像操作,这样的操作使得数据库扩大了10倍,再将这10张图片送入模型。然后将得到的概率取平均,最大的输出分类即为对应表情,这种方法有效地降低了分类错误。
4.3 在FER2013数据集的实验效果
表1: 在FER2013数据集下VGG19的结果表2:在FER2013数据集下Resnet18的结果
实验结果分析
(1) VGG和Resnet18的深度模型在FER数据库上都可以取得不错的分类效果。而且VGG的方法要比Resnet18的方法要好一些。
(2) Dropout 能有效得降低过拟合,提高准确率。Dropout的方法相当于训练的时候随机失活掉一些连接,而在测试的时候把这些连接补充回来,这就相当于集成多个不错的模型来做综合的预测。
(3)10倍切割的方案能进一步降低识别的错误率,对于训练阶段来说,随机切割增加了数据量,这相当于直接扩充了数据集,减缓了过拟合的作用。对于预测阶段,10倍的数据同时预测结果,相当于集成操作减小网络误判的情况。
(4)Softmax的分类方法比SVM的方法好。softmax将所有分类都考虑到了,而且分类的结果,就是在所有K类分类结果。而SVM的方法,每次只是二分类,只能学习到是否是这个样本,而不一定能学习到正确的样本,这进一步加大了分类的困难。
(5) 在单模型的效果上,我们VGG19+dropout+10crop+softmax达到了很高的水平。在 Public test set 上,达到了71.496%,在Private test set 上达到了73.112%,这个水平也是单一模型下的state-of-the-art水平。
准确率分析
图1:VGG19+dropout+10crop+softmax训练,测试准确率曲线
混淆矩阵分析
图2:VGG19+dropout+10crop+softmax在PrivateTest数据集的混淆矩阵
由图2可知:对于快乐和惊讶的准确率明显高于其他,但是恐惧的准确率就很低。对于此问题的出现,作者认为一是因为该数据集的不同表情的数量不均衡,例如有7215张开心的图片,但只有436张厌恶的图片,而每个分类的图片平均数量是4101,这种种类的不平衡足以使得分类出现误差;二是生气,厌恶,恐惧,悲伤这四类表情本身就有一定的相似性,在现实生活中,人也会觉得这四类表情难以区分,特别是在彼此都不相识的情况下,要正确识别表情就更难了。而且我们发现,误判总是出现在某些类,可能是某些类真的难以区分,易于混淆。接下来应该研究对特定表情的关注模块,关注到细节信息,对提高分类能力提供进一步的支持。
与经典方法的对比
图3:kaggle比赛准确率的排名(2013年)
对于私有测试集,我们模型的准确率是73.112%,图3是2013年的比赛排行榜的准确率,最高的结果是71.161%,而且我们不同的方法都要比2013年的方法好,这说明了深度卷积网络在分类上真的有很明显的效果,比传统的计算机视觉的方法要更优越。
与最先进方法的对比
图4:与最先进paper的对比(2018年)
目前FER2013数据集下,就我们所知,我们的模型是单模型(非集成方法)中效果最好的一个,我们猜想这源于深度卷积网络对于特征提取的有效性。数据增强的方法也能提升表情分类效果。
4.4 在CK+数据集的实验效果
图5:10-fold 交叉验证的结果
实验结果表明,VGG19的效果还是超过了Resnet18。对于FER2013的数据集,CK+的数据的结果要明显好于FER2013,因为CK+数据集是在实验室环境中获得的,样本比较容易识别。我们的VGG19+dropout+10crop+softmax取10折的平均准确率,达到了94.646%的较高水平。
五. 测试可视化实例
我们将测试图片输入FER2013数据集下训练好的最佳模型,得到了不同的表情的概率,接着可视化出图片在不同分类的概率以及模型预测的结果。
六. 总结
我们采用深度卷积神经网络(VGG19,Resnet18)模型在FER2013上取得很高的准确率,在CK+也获得了较高的准确率。这进一步验证了深度卷积网络在表情分类问题上的准确性与可靠性。对于一些表情,比如伤心,难过还是比较难以区分,我们猜想需要设计一些子网络或者关注网络进行进一步的分类。目前该模型还是在单模型下尝试的结果,没有进行集成,多模型集成的方法将使准确率有进一步提高。
代码已在GitHub上发布:
https://github.com/WuJie1010/Facial-Expression-Recognition.Pytorch
参考文献
【1】Jeon, J., Park, J. C., Jo, Y. J., Nam, C. M., Bae, K. H., & Hwang, Y., et al. (2016). A Real-time Facial Expression Recognizer using Deep Neural Network.International Conference on Ubiquitous Information Management and Communication(pp.1-4). ACM.
【2】Kim, B. K., Roh, J., Dong, S. Y., & Lee, S. Y. (2016). Hierarchical committee of deep convolutional neural networks for robust facial expression recognition.Journal on Multimodal User Interfaces,10(2), 1-17.
【3】Chang, T., Wen, G., Hu, Y., & Ma, J. J. (2018). Facial expression recognition based on complexity perception classification algorithm.
【4】Li, D., Wen, G., Hou, Z., Huan, E., Hu, Y., & Li, H. (2018). Rtcrelief-f: an effective clustering and ordering-based ensemble pruning algorithm for facial expression recognition.Knowledge & Information Systems, 1-32.
领取专属 10元无门槛券
私享最新 技术干货