基于CNN的表情识别(FER)pytorch实现
作者:互联网
Report for FER
Jian Tang
Abstract
我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。
数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。
模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了XXXX%的平均分类准确率(avg acc);然后我们将模型应用在baby FER数据集并得到avg acc XXXX%;我们将网络直接应用在baby FER数据集并进行训练,得到的新的avg acc为XXXX%;我们更改了模型的结构以更好的适应三通道,大分辨率的baby FER数据集,最后我们得到的avg acc是XXXX%。
Data
FER2013
FER2013数据集是一个开源的,带标签的,划分好Train/Val的,含7类表情的,含多种族多性别多年龄段的人脸表情灰度图集,且通过对图片的观察我们发现图片存在带水印,卡通图,标签不准确等可能影响分类精度的问题。具体的表情类别和图片数量如下表1和表2。
表情 | Anger | disgust | fear | happy | Neutral | sad | surprised |
数量 | 3995 | 436 | 4097 | 7215 | 4965 | 4830 | 3171 |
表表1 FER2013 TrainSet数据类别和数量
表情 | Anger | disgust | fear | happy | Neutral | sad | surprised |
数量 | 491 | 55 | 528 | 879 | 626 | 594 | 416 |
表2 FER2013 ValSet数据类别和数量
baby FER数据集
工作1。数据集的构建。首先我们爬取了baby的多种表情的图片;考虑到人工圈出人脸框是高人工消耗的,于是接着我们使用了Opencv的CascadeClassifier+Haar分类器[4]对人脸框进行自动寻找并裁剪;然后我们手工对裁剪后的人脸进行了分类标注,考虑到研究并不需要过多的表情类别,这里我们仅分了happy,peace,sad三类,同时,为了提高分类准确率,我们去掉了表情难以区分,带水印,灰度图,分辨率过小的图片;最后我们对数据进行2/8划分以得到TrainSet/ValSet。
最终的baby FER数据集是一个自建的,带标签的,划分好Train/Val的,含3类表情的,含多种族多性别的,年龄段均为baby的人脸表情非灰度图集。其具体的表情类别和图片数量如下表3和表4。
表情 | happy | peace | sad |
数量 | 376 | 372 | 431 |
表3 BabyFER TrainSet数据类别和数量
表情 | happy | peace | sad |
数量 | 94 | 94 | 108 |
表4 BabyFER ValSet数据类别和数量
CNN Model
Luan给出了如下图1和图2的模型结构。具体的,因为FER2013只包含7类表情,为了适配模型的8类输出,Luan在FER数据集读入内存的时候增加了一列全0的虚拟数据,并给这类虚拟数据一个标签。
图1 CNN模型结构
图1 CNN模型具体参数
工作2。考虑到Luan使用TensorFlow 2.3.1 Keras[5]实现网络结构,我们对keras的修改不算熟悉,且我们后期要对结构进行一些修改,于是我们选择使用pytorch[6]复现Luan的工作,但我们将模型输出改成7类,且并没有增加虚拟类数据,且去掉了卷积层的padding,最后的模型输出结果如下
====epoch 333 , acc on TrainSet:==== Accuracy of anger : 86 % Accuracy of disgust : 0 % Accuracy of fear : 85 % Accuracy of happy : 95 % Accuracy of neutral : 88 % Accuracy of sad : 91 % Accuracy of surprised : 85 % avg acc on trainSet = 0.8844264864676582 ====epoch 333 , acc on ValSet:==== Accuracy of anger : 39 % Accuracy of disgust : 0 % Accuracy of fear : 39 % Accuracy of happy : 74 % Accuracy of neutral : 48 % Accuracy of sad : 42 % Accuracy of surprised : 60 % avg acc on ValSet = 0.5188074672610755
我们日志的输出和Luan的工作略有差别,我们在TrainSet的平均准确率达到了88%,但在ValSet只达到了50%,低于Luan的69%,我们猜测这可能是因为其增加的第八个虚拟类别导致的。
我们没有绘图,因为log结果没保存,所以画不了,时间充足我们可以再跑一次画出结果图。
工作3。我们将模型应用在baby FER数据集,模型输出包括7种表情,但baby FER数据集的金标签只有3类,所以我们进行了一个映射。具体的,我们将模型输出进行映射,即将happy映射到happy,neutral映射到peace,其他映射到sad。我们得到的准确率如下:
====> class happy has img number: 94 ====> class peace has img number: 94 ====> class sad has img number: 108 acc for 3 classes (happy peace sad): 0.7234 0.6064 0.8426
工作4。我们更改了模型的结构以更好的适应baby FER数据集,具体的,我们将单通道的灰度图改成3通道图片然后送入模型,调大了模型的输入,从48*48调整为96*96,增加了conv的padding,最后我们得到的模型表现如下:
上图展示了trainSet的loss(交叉熵损失)随着epoch增加的变化趋势。可以观察到模型的loss在0-50 epoch基本维持在1.1左右不变,在50epoch后找到正确的下降方向并开始下降,到200epoch后loss基本稳定,维持在0.5-0.6区间,不再有明显下降。
上图展示了trainSet和valSet在happy类上的accuracy随着epoch增加的变化趋势。可以观察到XXXXX(自行补充,和loss正好对的上(loss越小,acc越高))
上图展示了trainSet和valSet在所有类上的accuracy和所有类的accuracy平均值随着epoch增加的变化趋势。可以观察到XXXXX(自行补充,和loss正好对的上(loss越小,acc越高)),而且效果比直接使用FER2013的model好很多。
工程代码: (github 抽风传不上去)
链接:https://pan.baidu.com/s/10WxYg-0fdEkuXwgaMtOUbw
提取码:932n
[1] Challenges in Representation Learning: A report on three machine learning contests." I Goodfellow, D Erhan, PL Carrier, A Courville, M Mirza, B Hamner, W Cukierski, Y Tang, DH Lee, Y Zhou, C Ramaiah, F Feng, R Li, X Wang, D Athanasakis, J Shawe-Taylor, M Milakov, J Park, R Ionescu,M Popescu, C Grozea, J Bergstra, J Xie, L Romaszko, B Xu, Z Chuang, and Y. Bengio. arXiv 2013.
[2] https://github.com/luanshiyinyang/FacialExpressionRecognition
[3] Kuo C M, Lai S H, Sarkis M. A compact deep learning model for robust facial expression recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition workshops. 2018: 2121-2129.
[4] Soo S. Object detection using Haar-cascade Classifier[J]. Institute of Computer Science, University of Tartu, 2014, 2(3): 1-12.
[5] Ketkar N. Introduction to keras[M]//Deep learning with Python. Apress, Berkeley, CA, 2017: 97-111.
[6] Paszke A, Gross S, Massa F, et al. Pytorch: An imperative style, high-performance deep learning library[J]. arXiv preprint arXiv:1912.01703, 2019.
标签:acc,sad,baby,pytorch,FER,CNN,Accuracy,happy 来源: https://blog.csdn.net/qq_20241587/article/details/116428823