APP下载

网中网残差网络模型的表情图像识别研究

2019-01-24裴颂文杨保国顾春华

小型微型计算机系统 2018年12期
关键词:识别率残差卷积

裴颂文,杨保国,顾春华

1(上海理工大学 光电信息与计算机工程学院,上海 200093)2(复旦大学 管理学院,上海 200433)

1 引 言

深度卷积神经网络是当前最有前景的图像分类技术之一.对人物照片和视频的面部识别能有效处理视觉数据并构建人类面部的通用识别模式,是目前深度卷积神经网络的应用热点.表情图像识别是人脸图像识别的扩展,表情识别过程不仅仅检测人脸的固定特征,还要通过眉毛、嘴唇等的编排和形状等临时的显著特征来预测面部表情,可以广泛应用到执法监视和行为分析领域,还可以应用到数码相机的自动拍照功能[1,2].然而,最有前景的应用涉及人工智能系统的人性化[3].如果计算机能够跟踪人物的心理状态,智能机器人可以据此反应并产生相应的行为反馈.表情识别在提高人机交互过程中起着关键的作用.

表情分类识别过程是不同于人脸识别的.人脸识别是以不同人的脸部轮廓图像作为识别研究的内容,而脸部的肌肉变化等临时性显著特征被视为噪声[4].表情识别过程通常将人脸表情分类为七种情绪:愤怒、厌恶、恐惧、高兴、悲伤、惊讶、中性[5].此时,研究人脸面部的肌肉变化等临时性显著特征在识别表情过程中就尤为关键.在表情识别研究领域,通过利主成分分析(PCA)、尺度不变特征转换(SITF)等技术手段进行预处理,进行特征选择、特征处理后通过分类器进行表情分类[6].当前深度学习在图像处理、语音等领域的发展,推动了表情识别的研究.深度神经网络模型可以通过训练来自动学习表情图像的特征,得到有效的特征后,就可以用训练好的模型进行判别分类.随着人脸表情数据量不断增加,深度学习对表情的识别能力还会有明显地提高[7].神经网络模型如GoogleNet[8],ResNet[2],网中网(NIN)模型[9,10],这些模型对神经网络有从结构上的创新.不同的激活函数对整体模型架构也有不同程度的影响,需要通过实验和经验来选择合适的函数来优化模型.

FER-2013和CK+数据集是研究表情识别的数据集,本文基于谷歌深度学习框架Tensorflow[11]提出网中网残差网络模型对该表情数据集进行训练,以提高面部表情识别率和缩短模型执行时间为目标来进行研究.

2 相关工作

传统人脸表情的研究集中在人脸特征选择、特征提取和分类的理论方法等方面.然而,基于人脸轮廓和特征的方法对人脸图像的检测与提取,难以自动检测面部肌肉等临时性显著特征;基于欧式距离的几何检测方法由于存在外界条件变化的干扰因素,存在识别性能下降较快的问题[12].对面部表情特征的提取,有整体分析法得到全局特征,局部特征分析和局部二值模式等方法得到局部特征.然后,利用主成分分析、线性判别分析等方法进行特征选择.最后建立一个分类器进行表情分类.

Fasel和Luettin[13]概述了人脸表情的特征提取和面部表情识别的神经网络方法,划分了面部表情系统的一般框架为三个模块:人脸获取、特征特取和表情分类.近年来,在表情识别领域采用深度学习方法有较多显著的研究成果.Lin等人提出了网中网(NIN)模型,用多层感知卷积(mlpconv)的微小网络进行分类,用非线性的感知器优化改进卷积操作[9].在跨通道情况下,mlpconv等价于卷积层和1x1卷积层的组合;Zhao等人提出基于mixout 单元的简单模型和网中网模型分析多种池化函数对分类效果的影响[22];Krizhevsky和Hinton提出了AlexNet架构,其中卷积层、池化层和全连接层设计成为图像分类的经典模型[14].在FER-2013数据集上,Liu等人提出多个子卷积模型融合方式,避免单个模型训练的不充分性,识别率为65.03%[15];Minchul Shin等人提出基线CNN架构,训练了20个不同的CNN模型找出最好的模型,识别率为68.53%[16]; Zhou等人提出了多尺度输入的方法,即不同的像素进行模型的输入,识别率为71.8%[17];Breuer和Kimmel在提出动作单元结合循环神经网络在该数据集的分类识别率为72.1%[18].

本文通过残差结构方式在NIN模型基础上进行模型的改进,构建深层级的结构,在FER-2013和CK+数据集上进行实验测试,识别率达到89.99%和96.03%.

3 模型设计与参数设置

3.1 NIN_ResNet模型

NIN_ResNet模型是在网中网(NIN)模型的基础上通过增加两层残差结构而构成的改进神经网络模型.NIN模型是Lin等人基于Caffe平台设计的网络模型[9].NIN_ResNet模型由卷积层、多层感知器层形成的微小网络(mlpConv层,如图2所示),以及最大降采样池化层、Dropout层、全局均值池化层和残差层构成.在Dropout层与下一卷积层中间并行加入一个残差层,与卷积层结果进行参数叠加,进入下一层网络,模型基本结构如图1所示.

网络模型结构的输入层是像素为48×48的灰度图像数据,连接多个mlpConv层和Max-pooling层,最后由一个全局均值池化层完成后flatten后进行7类表情分类输出.Dropout被应用到最大降采样池化层的下一层,并且所有卷积、感知、残差层中均加入ELU函数[19].Max-pooling层减少了参数的数量,降低了神经网络的计算复杂度.此外,模型中常见的随机梯度下降方式的学习率优化器也被调整.模型代替Gudi等人实验中的线性下降学习率[20],使用Adam Optimizer优化器来对学习率进行处理,收敛速度更快.Adam Optimizer通过使用动量(参数的移动平均数)来改善传统梯度下降,促进超参数动态调整.

图1 NIN_ResNet模型结构Fig.1 Structure of NIN_ResNet model

图2 多层感知卷积网络[9]Fig.2 MlpConv network

3.2 NIN_ResNet模型层级分析

1)卷积层(Conv)

卷积层是对输入层的图像进行特征提取.图像输入是由宽(像素)×高(像素)×深(RGB通道)组成,而RGB通道可以为三通道(彩色图像)和单通道(灰度图像).输入图像是48×48像素的灰度图像,即单通道为1,因此输入图像维度可表示为48×48×1.卷积层是一个5×5×1的滤波器(filter).感受野(receptive field)中的这个“深度”参数必须和输入图像的“深度”相同,即为1.通过一个filter与输入图像的卷积可以得到一个48×48×1的特征图(feature map),连续用192个filter得到了192个特征图;输入图像和滤波器的对应位置元素相乘再求和,最后再加上误差e,得到特征图.卷积过后输入图像的像素位置再进行滑动,滑动步长stride等于1.

卷积层由192个48×48×1的特征图组成,即每个特征图上有2304个神经元.而每个神经元对应输入图像上一块5×5×1的区域,即一个神经元和输入图像区域有25个连接,即25个权值参数,即25×2304×192=11059200个权值参数.因此卷积神经网络引入“共享权值”原则,即一个特征图上每个神经元对应的25个权值参数被每个神经元共享,这样则只需25×192=4800个权值参数,而每个特征图的阈值也共享,即需要192个阈值,则总共只需要训练4800+192=4992个参数.

2)感知器层(MLP)

感知器层是将输入矢量转化成0或1的输出.感知器中不断调整权值和阈值的过程称为训练;训练过程中,把输入空间映射到输出空间的能力,称为学习;调整权值和阈值的算法称为学习规则.感知器学习规则称为delta(δ)收敛规则,即求误差e的梯度.

e = t-a

(1)

其中,t表示目标输出值,a表示实际输出值,e表示误差.训练网络的目的就是要使误差e趋向于0.

3)多层卷积感知层(微小网络)

模型通过构建多层感知器来替代了一些传统的卷积过程.过去的卷积层只是将前一层的特征进行了线性组合,然后经过一个非线性激活.MLP神经网络也采用卷积神经网络的共享权值的方法,对相同特征层的权值进行共享.传统的卷积层只是一个线性的过程,而且深层次的网络层只是整合浅层次网络学习到特征.因此采用微小网络(即多层感知卷积网络)做进一步的抽象.

(2)

(3)

公式(3)中n为感知器的层数,i,j表示图想像素点的位置索引,xi,j表示我们卷积窗口中的图像区域,k则表示我们要提取的特征图的索引.

4)最大降采样池化层(Max-pooling)

降采样池化层是对输入的特征图进行压缩.Max-pooling是取一小块区域中像素的最大值.对每一个2x2的区域元素,取区域中像素最大的值做为主要特征,所以采用一个2×2的滤波器,此时特征图大小被压缩为原来的1/4.

5) Dropout层

Dropout层是把深度神经网络模型当作一个集成模型来训练,训练后取所有值的平均值输出到下一层.若网络模型将Dropout值设置为 p,则一个神经元被保留的概率是 1-p.当一个神经元被丢弃时,无论输入值或相关参数的值,它的输出值都会被设置为0.Dropout 可以在模型中发挥很好的效果,它能防止神经网络在训练过程中产生共适应.

6) 残差层(ResNet)

神经网络模型中通过引入残差网络结构函数,可以将网络层级搭建地很深[2].借鉴这一思想,在NIN的模型中引入残差层构建一个新的模型架构.残差结构采用不分解原问题方式,而是采取将神经网络进行分解的方式来降低拟合函数的复杂度.ResNet的核心思想是在不改变网络表达力和复杂度的情形下改变损失函数势能面,从而顺利优化到最佳点.损失函数L(Y,F(X))用于评估预测值F(X)与真实值Y的偏离程度,是一个非负实值的拟合函数,因此降低拟合函数的复杂度也等同于降低损失函数的复杂度.损失函数越小,模型的鲁棒性就越好.

残差结构函数:实现两个张量相加,如果相同维度直接相加,不同维度,维度少的填充0之后再相加

Input:orig_x,x//上一层张量,残差分支张量

Output:x

Begin:

1. in = orig_x.get_shape () [-1];//获取上一层张量的维度

2. out = x.get_shape () [-1];//获取残差分支张量的维度

3. pad = (tf.cast((out -in),tf.int32))/2;//转换数据格式

4. pad = tf.cast (pad,dtype=tf.int32);

5. if in! = out then

6. orig_x = tf.pad(orig_x,[[0,0],[0,0],[0,0],[pad,pad]]);//维度少填充0,变成相同维度

7. end if

8. x = x + orig_x;//两个张量相加

9. x = tf.nn.elu (x,name=′elu′);//ELU函数优化

10. return x;

End

7) 全局均值池化层

NIN模型中采用全局均值池化的方法,替代了自AlexNet之后网络模型中存在的全连接层架构.与全连接层不同,模型对每个特征图一整张图像进行全局均值池化,这样每张特征图都可以得到一个输出.通过均值池化,大大减小了网络,避免过拟合.在采用了微神经网络后,让局部模型有更强的抽象能力,从而让全局平均池化能具有特征图与类别之间的一致性,同时相比全连接层,不易过拟合,因为全局平均池化本身就是一种结构性的规则项.

8) ELU函数

ELU函数过在正值区间取输入x,减轻了梯度弥散问题(x>0区间导数处处为1).ReLU的输出值没有负值,所以输出的均值会大于0.当激活值的均值非0时,就会对下一层造成一个偏置(bias),如果激活值之间不会相互抵消(即均值非0),会导致下一层的激活单元有偏置变换(bias shift).如此叠加,单元越多时偏置变换就会越大.而相比ReLU,ELU可以取到负值,这让单元激活均值可以更接近0,保证在不激活状态下(就是在输入为负的状态下)对噪声具有鲁棒性.

ELU的函数表达式如下:

(4)

(5)

公式(4)表示在x>0处去输入x本身,x<0处激活值为负值,而且导数不为0,(是一个可调整的参数,它控制着ELU负值部分在何时饱和.公式(5)是公式(4)的导数.ELU函数有两个优点:(1)将前面单元输入的激活值均值控制在0;(2)让激活函数的负值部分也可以被使用.我们分别在卷积层、多层感知器层、残差层中用ELU函数来对预激活的结果进行优化.

3.3 参数设置

如图3所示,输入为48×48的灰度图像,设置宽和高为48.由于是灰度图像,因此设置深度值为1.卷积层的卷积核大小为5×5,相比3×3可以获取较大局部特征,卷积层要输出192个maps,为48的整数倍,便于计算,故核函数的shape(形状)设置为[5,5,1,192].Dropout层的p值设置为0.5,此时一半神经元模型丢弃,一半神经元更高效地训练.经过两层MLP层后,由于strides值为1,维度未发生变化,再重复2次上述过程.MLP层的核大小的shape有[1,1,192,160],[1,1,160,96],[1,1,192,192].最大降采样层的核函数大小设为3×3,步长stride值设置为2,此时输入图像维度变为24×24.再次经过多层感知卷积层和最大降采样层,参数设置不变,维度为12×12,但是最后的MLP3_2层核函数的shape为[1,1,192,7],其中7为特征图个数,也为表情的类别.最后一层全局均值池化层要求特征图的个数要与表情分类的类别相同,这时7个特征图对应7种表情,而核函数大小设为8×8,步长stride为1.最后将global pool层输出的特征进行flatten返回函数输出的logits,得出表情的整体识别概率和训练的loss,进行不停的输入迭代,设置所要训练的步骤,执行完步骤,程序即终止.

图3 NIN_ResNet模型参数图Fig.3 Parameter of NIN_ResNet model

在训练模型时,对不同的学习率参数进行训练,分别为0.005,0.0005,0.00005,0.0001,结果发现学习率为0.0005时,模型的迭代效果相对最好,且会逐渐趋于稳定,因此设置learning rate的值为0.0005.其他几种学习率参数会使得模型陷入欠拟合状态,从而模型的整体训练效果影响明显.

4 实验结果与分析

本文的实验运行在Python2.7支持的TensorFlow CPUr1.0.1版的平台上.实验环境的搭建主要通过pip命令完成.

4.1 数据集介绍

实验所采用的数据集为FER-2013和CK+.FER-2013图像大小为48×48像素,数据集中7种表情分别用0~6数字进行标注处理,分别为“0”表示angry,“1”表示disgust,“2”表示fear,“3”表示happy,“4”表示sad,“5”表示surprise,“6”表示neutral.数据集包含训练集和测试集,其中训练集共含有28709张图像(其中angry图像3995张、disgust图像436张、fear图像4097张、happy图像7215张、sad图像4830张、surprise图像3171张、neutral图像4965张),测试集含有3589张图像(其中angry图像467张、disgust图像56张、fear图像496张、happy图像895张、sad图像653张、surprise图像415张、neutral图像607张).CK+数据集包含219张图像,属于小样本数据集(其中anger图像45张、disgust图像59张、fear图像25张、happy图像69张、sad图像28张、surprise图像83张).

4.2 FER-2013数据集实验分析

4.2.1 模型训练的识别率和执行时间分析

模型将在Tensorflow平台上进行60000次网络迭代,每个batch为30,以确保精度收敛于最佳值.在试图提高模型的性能的情况下,网络将对FER-2013数据集的30000张图像进行训练.

图4 三种网络模型的表情识别率Fig.4 Recognition rate of three model

如表1所示,训练的ResNet结束迭代最快.NIN_ResNet在NIN基础上添加了残差结构,比NIN模型更快执行结束.模型迭代初期,执行速度提升不是太明显,在40000步,运行时间缩短了9.5%,最终60000步迭代结束,所需时间缩短了3%.因为残差结构模型更稳定,振幅更小,Tensorflow的数据流图执行更顺畅.但是模型在取得较高识别率的情况下,训练的时间仍较长,有待优化.

表1 三种网络模型的执行时间Table 1 Execute time of three model

4.2.2 表情图像单类别分类测试

针对训练好的NIN_ResNet模型,模型学习到7种表情对应的特征,这样当测试单张图像时,会根据学习到的特征识别出对应的表情,虽然每次执行得出的概率值有波动(所以仅用作参考),但是给出的表情分类结果是基本正确的.图5所示(b)图表情给出识别的结果为中性,真实的情况为厌恶的表情.实际上经过多次的表情测试,模型对厌恶的表情识别效果不是很好,总是以较大的概率识别成其他的表情,常见错误表现为伤心和中性,这是因为厌恶的训练数据样本仅为436张,远少于其他六类表情的数据,有待增添此类表情训练.但是其他六类表情经过多次测试表现良好,均能够以较高概率正确识别出来.

如表2所示,与先进模型对比了单类别表情图像的识别效果,体现出模型在整体识别率高的情况下,单类别图像分类识别率能达到90%以上,效果提升明显.

图5 表情图像的特征及分类结果Fig.5 Characteristic and classification result of expression image

表2 各个模型的单类别表情图像识别率Table 2 Recognition on single picture of expression of each model

4.3 CK+数据集的实验分析

CK+数据集所包含的图片较少,包含7类表情,但其中轻蔑表情不属于7种基本表情,故取其余6类表情,则模型输出分类为6,设置执行每个batch为8,迭代的步数为6000.在Tensorflow平台上训练NIN和NIN_ResNet模型,同样在TensorBoard可视化平滑度Smoothing为0.95的情况下,识别率为94.74%和96.03%,表示模型对CK+数据集训练充分,接近完全收敛,NIN_ResNet模型对识别率有一定提高.模型迭代时间分别为1h40min,2h11min,因为训练的数据每批次执行8张图片,比FER-2013数据集的30张少,因此执行速度更快,更快收敛.

4.4 整体识别率测试对比分析

将网中网残差网络模型的识别率结果与业界先进的其它表情识别模型进行对比分析,如表3所示,本文提出的模型在识别率上具有显著优势.对FER-2013和CK+数据集的分类识别过程中,NIN_ResNet均取得良好的结果.Subnet3模型[15]是采用对FER-2013数据集构建三种CNN子模型,在最后的输出之前,将三个模型的结果叠加平均输出,该方法本质上是构建不同层级的CNN网络模型,无法从根本上避免层级不够深,CNN训练不充分对分类识别结果造成的负面影响,仅取得62.4%的识别率.Multi-scale CNNs模型[17]是多个输入多个尺度的图像作为输入并进行融合输出的结果,识别率为71.8%.Baseline CNN模型[16]在FER-2013和CK+数据集的模型结构搭建不够深,对过拟合情况的处理有待优化,识别率为68.53%和66.49%.Breuer等人采用动作单元结合长短时记忆网络和循环神经网络对这两种数据集进行训练,不必要的动作单元(AU)片段对结构造成影响,识别率为72.1%和98.62%[18].因此,在同样的数据集对比下,本文所提的网中网残差模型对两种表情数据集训练良好,识别分类显著,FER-2013识别率提高17%-27%,CK+数据集识别率提高30%.

表3 表情数据集的整体识别率Table 3 Overall recognition rate of expression dataset

5 结束语

随着深度学习在计算机视觉领域的研究发展,表情图像分类识别也成为目前研究的热点问题之一.深层模型对实现表情识别系统的准确分类起着至关重要的作用.本文在网中网模型的基础上结合深度网络,结合残差层和新的激活函数ELU的特点,提出了网中网残差网络模型.构建了18层神经网络模型,在Tensorflow平台上对FER-2013和CK+表情数据集进行实验,减少梯度消失和提高对“噪声”的鲁棒性问题,并用实验证明了该模型方法的有效性,取得了较高的分类识别效果.然而该模型对非正面,厌恶和微小变化表情训练仍然不够充分.因此,面向特大规模人脸表情自然数据集的分类识别的鲁棒性和微表情的分类问题仍是一个新的挑战,是本文后续研究工作的重点.

猜你喜欢

识别率残差卷积
基于残差-注意力和LSTM的心律失常心拍分类方法研究
基于双向GRU与残差拟合的车辆跟驰建模
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
基于残差学习的自适应无人机目标跟踪算法
基于深度卷积的残差三生网络研究与应用
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
档案数字化过程中OCR技术的应用分析
基于PCA与MLP感知器的人脸图像辨识技术