基于卷积神经网络的多人表情识别算法

2019-04-08 00:46党宏社白文静马毅超陶亚凡
现代计算机 2019年6期
关键词:识别率人脸卷积

党宏社,白文静,马毅超,陶亚凡

(陕西科技大学电气与信息工程学院,西安710021)

0 引言

研究人与人交互的情绪表达的特征,找寻到其内在真实的或统计意义上的规律,将有可能实现人与计算机和谐的情绪交互[1]。面部表情是人体语言的一部分,能够传递心理的情感,从外观体现人的情绪。随着计算机技术在各个领域的快速发展,人与计算机之间的交互越来越频繁,人们对人与计算机的交互要求也随之提高,表情识别在计算机情感分析系统的地位也越来越重要。有研究指出,比起动作和语音,面部表情更能够表达人的心理活动[2]。

近年来,面部表情识别技术越来越广泛的应用在人机交互、智能控制、安全、医疗、通信等领域。面部表情识别一般涉及表情图像的获取、图像预处理、情感特征的提取和表情分类[3]。特征提取的结果对最终的识别率有很大的影响。2013年胡敏等[4]人在LBP特征基础上提出了自适应加权的完全二值模式,有效地提取了局部特征和全局特征。2014年李雅倩等人[5]将PCA算法和流型学习思想相融合,提出了一种融合全局与局部多样性特征方法。2015年Robert Walecki等[6]提出了Variable-state LCRF模型通过解决AU识别问题很好地解决了面部表情分类问题。2016年王晓华等[7]提出了一种融合局部特征的提取方法,与最近邻方法相结合对局部遮挡噪声有很好的抗噪性。2017年钟伟等[8]将粒子群算法与线性判别式分析(LDA)相结合,提出基于粒子群算法的LDA(PSO-LDA)来提取表情特征,对最优解的搜索能力有很大的改善。

传统的特征提取采用的都是人为设定的特征,不仅损失了部分原有特征信息,并且由于特征维数较大增加了一定的运算量和复杂度。卷积神经网络不需要人为的设定特征,而是通过训练网络结构而自动获取特征,从而给出识别的结果。由于表情识别问题的复杂性,卷积神经网络结构越来越复杂,参数不断增加,计算复杂度越来越大,容易出现过拟合现象,因此本文利用MTCNN模型进行人脸检测,引入inception模型,使用1×1的卷积核,降低特征图的厚度,平衡网络深度和宽度。

1 卷积神经网络算法结构设计

1.1 网络结构设计

一个最简单的卷积神经网络结构包括:数据输入层、卷积计算层、池化层、全连接层和输出层。本文的算法思路:对输入图片采用不同卷积核进行卷积操作得到特征图,再进行最大池化;之后采用inception模型,利用1×1卷积进行降维处理,将得到的特征图池化;在全连接之后使用dropout进行过拟合处理,最后使用Softmax分类器完成分类。在整个结构中卷积是核心,卷积神经网络通过卷积来模拟特征区分,并且通过卷积的权值共享及池化,来降低网络参数的数量级。本文设计的卷积神经网络结构如图1所示。

图1 网络结构

算法的具体实现过程如下:

Step1:经过预处理后得到的48×48像素的图片作为输入层的图像。将输入的图像与32个不同大小的像素为5×5的卷积核进行卷积,即每一个神经元制定一个5×5的局部感受野,卷积之后得到大小为44×44像素的32个特征图。也就是提取了32个不同的局部表情特征,产生了832个((5×5+1)×32)可训练的参数。

Step2:在BN(BatchNorm)层对得到的特征图进行处理,实质是固定网络层输入的均值和方差。对于每个神经元而言,就是在进入下一层之前把非线性函数映射后,向取值区间极限饱和区靠拢的输入分布,强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,避免梯度消失问题。当梯度一直都保持比较大的状态,神经网络的参数调整效率就比较高,即收敛地速度快。

Step3:对BN层的输出的特征图进行池化,即下采样。下采样的目的是为了保持图像的旋转、平移、伸缩等不变性,同时也是为了降低因卷积层数增加而增加的特征维数。采用2×2的窗口进行最大池化,将得到32个像素为22×22的特征图,特征图的个数相比上一层不会发生改变。

Step4:第二次卷积采用64个3×3的卷积核对上一层输出的特征图进行卷积操作,得到了64个像素20×20的特征图。将得到的64个特征图,经BN层处理后,采用2×2的窗口进行最大池化,得到64个像素为10×10的特征图。

Step5:网络层数的增加导致参数增加,计算资源增加,因此用稀疏连接来代替全连接,网络拓扑结构可由逐层分析与输出高度相关的上一层的激活值和聚类神经元的相关统计信息来优化。但有非常多的限制条件,对计算的基础设施要求过高,因此将稀疏矩阵聚类成相对稠密子空间来倾向于对稀疏矩阵的计算优化[9],就有了inception结构。在进行3×3和5×5卷积操作前,采用1×1卷积进行降维处理,1×1卷积不仅能够降维,还能引入ReLU非线性激活。inception结构增加了每个阶段的单元个数,也就是网络的宽度和深度;同时也将多尺度处理之后的图像结果聚集起来便于下一步能同时提取不同尺寸下的特征。对输出的特征图再进行池化,为全连接层做准备。

Step6:上一层输出的每一个特征图都是一个二维数组,全连接层的数据必须是一维的数组,因此将每一个二维数组转换为一维数组,再将每一个特征图的数组串联起来形成一个特征向量,特征向量就是每一个神经元的输入,则每个神经元输出为:

ω为权值向量;x为神经元的输入特征向量;在实验中b=0表示偏置;θ(·)表示激活函数,本文中使用ReLU函数作为激活函数。

Step7:Dropout层的目的是为了防止过拟合,按照一定的概率暂时将部分神经元从网络中丢弃[10]。经过Dropout层之后,有N个节点的神经网络就可以看成是2N个模型的组合,但不影响训练参数的数量,相比于训练多个模型做组合节省了时间。

Step8:在卷积神经网络的最后一层使用Softmax分类器。结合上一层的输出结果,Softmax会给每一个类别分配一个小数用来表示类别概率,这些概率相加的结果为1。输出层输出的是属于7种表情的概率数值,取最大值作为最终的识别结果。

1.2 参数修正

卷积神经网络模型通过训练来完成参数修正。训练主要包括两方面:正向传播和反向传播。正向传播就是对特征提取的过程,也就是网络结构当中的卷积和池化。反向传播则是根据网络各层的反馈误差计算参数的修正量[11],再通过梯度下降法对参数进行更新。

本文选用对数函数作为网络模型训练过程中的损失函数,其标准形式为:

y为已知分类的类别,x为样本值,需要让概率p(y |x)达到最大值,即求一个参数值,使得输出的目前这组数据的概率值最大。在训练过程中采用随机梯度下降算法达到损失函数的最优化,随机梯度下降算法公式为:

θt表示t时刻的训练参数,△θt表示t时刻θt的修正量,η是学习率,gt为x在t时刻的梯度,训练参数θ沿着负梯度方向更新。

2 实验验证

2.1 数据集和预处理

本文选取的实验样本来自JAFFE人脸表情库、CK+人脸表情库。JAFFE数据库发布于1998年,该人脸表情库是由10名女性的7种表情图片构成,整个数据库合计213张图像。CK+数据库发布于2010年,是在Cohn-Kanade Dataset的基础上扩展来的,该数据库包括 123个 subjects,593个 image sequence,每个 image sequence的最后一张Frame都有action units的label,而在这 593个 image sequence中,有 327个 sequence有emotion的label[12]。数据库都将表情分为生气、厌恶、恐惧、高兴、悲伤、惊讶、平静7个类别。选取JAFFE数据库所有图片,CK+数据库选择2000张表情图。CK+数据库相比JAFFE数据库增加了男性图片,范围更大。

样本数据在实验前需要进行预处理,本文采用MTCNN进行人脸检测。MTCNN由P-Net、R-Net和O-Net三个网络组成的[13]。MTCNN模型中综合考虑了人脸边框回归和面部关键点检测,能够同时对多个人脸以及人脸特征点进行检测。首先将照片按照不同的比例,缩放成不同大小的图片,形成图片的特征金字塔。P-Net再获得人脸区域的候选窗口和边界框的回归向量,并用该边界框做回归,对候选窗口进行校准,然后通过非极大值抑制(NMS)来合并高度重叠的候选框。R-Net将经过P-Net的候选框在R-Net网络中训练,然后利用边界框的回归值去微调候选窗体,再利用NMS去除重叠窗体。O-Net功能与R-Net作用类似,只是在去除重叠候选窗口的同时,同时显示五个人脸关键点的定位。MTCNN算法能够在多人情境下快速准确地检测到每一个人脸进行。

2.2 结果及分析

本文使用Python、Tensoflow和Keras搭建网络。硬件平台 Dell XPSD14D-5518:Intel酷睿 i5 2.5GHz,内存4GB。本文实验分为三组进行:

(1)用JAFFE数据库样本进行训练和测试,训练样本149个,测试样本64个,循环20次后平均值作为测试结果。测试结果如表1所示。

表1 JAFFE数据库测试识别率(%)

由表1可以计算出,在JAFFE数据库测试的平均识别率89.35%。对于平静和高兴的识别率很高,伤心的识别率最低。

(2)用CK+数据库样本进行训练和测试,训练样本2000个,测试样本396个,循环20次后平均值作为测试结果。测试结果如表2所示。

表2 CK+数据库测试识别率(%)

由表2可以计算出,在CK+数据库测试的平均识别率90.10%。相比于JAFFE的测试结果的89.35%,识别率有小幅的增加。

(3)为了扩大数据集的样本数,将CK+数据集的样本进行翻转,并且与JAFFE数据库合并。选取合并后的表情图库图像的90%为训练样本,其他10%为测试样本,循环20次后平均值作为测试结果。测试结果如表3所示。

表3 CK+数据库测试识别率(%)

由表3计算出,在合并的数据集进行测试的平均识别率为90.86%。CK+数据集样本识别率相比,平均识别率有所提高,但部分表情的识别率有所下降。将本文算法与其他算法进行比较,可以看出本文算法有较好的识别率。

表4 本文算法与其他算法识别率比较

使用本文算法在实验室环境下进行测试,结果如图2所示。可以看出能够显示出每个人的表情状态,实现了对多人表情的识别。

图2 测试结果

3 结语

本文在预处理阶段使用了MTCNN模型进行了人脸检测,能够快速准确地检测出多个人脸以及人脸特征点。在提取人脸图像后采用了加入inception模型的卷积神经网络进行面部表情的识别,降低了特征图的厚度,平衡了网络深度和宽度,抑制了过拟合现象,在测试过程中取得了较好的结果。下一步的研究工作将针对减小损失误差问题对网络结构进一步优化。

猜你喜欢
识别率人脸卷积
基于全卷积神经网络的猪背膘厚快速准确测定
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
有特点的人脸
一种并行不对称空洞卷积模块①
一起学画人脸
玻璃窗上的人脸
档案数字化过程中OCR技术的应用分析
基于PCA与MLP感知器的人脸图像辨识技术
科技文档中数学表达式的结构分析与识别