APP下载

基于CNN的面部表情识别算法

2021-06-23靳显智

齐鲁工业大学学报 2021年3期
关键词:池化层卷积神经网络

靳显智,林 霏,王 叶

齐鲁工业大学(山东省科学院) 电气工程与自动化学院,济南 250353

过去的面部表情识别方法主要依靠于人工设计的特征(比如边和纹理描述量)和机器学习技术(如主成分分析、线性判别分析或支持向量机)的结合。但是在无约束的环境中,人工设计对不同情况的特征提取是很困难的,同时容易受外来因素的干扰(光照、角度、复杂背景等),进而导致识别率下降。深度学习方法的主要优点在于它们可通过使用非常大的数据集进行训练学习从而获得表征这些数据的最佳功能。

刘谕奇等认为基于深度学习的新方法可以改善面部表情分类任务[1-3],特别是ImageDataGenerator实现数据增强,使的CNN达到了更大的突破。陈雄采用AAM模型对中性表情图像进行特征点定位,接着采用SVM算法训练分类器,进行人脸表情运动单元分类[4]。李清霞等用AR-LGC算子对提取的Gabor特征进行编码,从而得到图像的AR-LGGC复合特征,进而进行人脸识别[5-6]。韦坚等依据神经网络算法的原理,设计出了修复数字电视故障的神经网络模型[7]。

本文主要研究如何利用卷积神经系统设计一个人脸表情识别系统,一个表情识别系统的核心便是网络模型部分[1],在VGG模型的基础上改动了部分参数得到自己的网络模型,并利用Fer2013数据集的训练集对其进行训练,优化,最终可以达到较准确的识别图片中人物表情的结果。

1 面部表情识别概述

1.1 面部表情识别框架

面部表情识别通常可以划分为四个进程。包括图像获取,面部检测,图像预处理和表情分类。其中,面部检测,脸部特征提取和面部表情分类是面部表情识别的三个关键环节[2]。面部表情识别的基本框架如图1所示。

图1 表情识别大致框架

首先是获取图像并执行面部检测,然后提取仅具有面部的图像部分。所提取的面部表情在比例和灰度上不均匀,因此有必要对面部特征区域进行分割和归一化,其中执行归一化主要是对面部光照和位置进行统一处理,将图像统一重塑为标准大小,如48×48像素的图片,即图像预处理[3]。然后对脸部图像提取面部表情特征值,并进行分类[4]。采用卷积神经网络(CNN)来完成特征提取和分类的任务,因为CNN是模仿人脑工作并建立卷积神经网络结构模型的著名模型,所以选择卷积神经网络作为构建模型体系结构的基础,最后不断训练,优化,最后达到较准确识别出面部表情的结果[5]。

1.2 图像预处理

采用多普勒扩展法的几何归一化分为两个主要步骤:面部校正和面部修剪。主要目的是将图像转化为统一大小。具体步骤如下:

1)找到特征点并对其进行标记,首先选取两眼和鼻子作为三个特征点并采用一个函数对其进行标记,这里选择的函数是[x,y]=ginput(3)。这里重要的一点是获得特征点的坐标值,可以用鼠标进行调整。

2)两眼的坐标值可以看作参考点,将两眼之间的距离设置为d,找到两眼间的中点并标记为O,然后根据参考点对图像进行旋转,这步操作是为了保证将人脸图像调到一致。

3)接下来以选定的O为基准,分别向左右两个方向各剪切距离为d的区域,在垂直方向剪切0.5d和1.5d的区域,这样就可以根据面部特征点和几何模型对特征区域进行确定。如图2所示。

图2 剪切的特征区域

4)为了更好的对表情进行提取,本文的做法是将表情的子区域图像裁剪成统一的48×48尺寸。

2 基于CNN的人脸面部表情识别算法

2.1 卷积神经网络概述

卷积神经网络(CNN)是一种前馈神经网络,它包括卷积计算并具有较深的结构,因此是深度学习的代表性算法之一。随着科技的不断进步人们在研究人脑组织时受启发创立了神经网络。神经网络由很多相互联系的神经元组成并且可以在不同的神经元之间通过调整传递彼此之间联系的权重系数x来增强或抑制信号[6]。

标准卷积神经网络通常由输入层、卷积层、池化层、全连接层和输出层组成,如图3所示。

图3 标准卷积神经网络

其中图3中第一层为输入层,大小为28×28,然后通过20×24×24的卷积层,得到的结果再输入池化层中,最后再通过图中第四层既全连接层,直到最后输出。

图4为本文所采用的网络模型。其中包括4个卷积层,3个池化层,池化层的大小为3×3,最终再通过两个全连接层到达输出层。网络模型中的输入层一般是一个矩阵,卷积层,池化层和全连接层可以当作隐藏层,这些层通常具有不同的计算方法,需要学习权重以找到最佳值。

图4 实验网络模型

2.2 卷积神经网络各层结构与功能

通过研究发现,卷积神经网络类似于生物视觉神经系统网络,具有分层特征。从图3可以看出,标准卷积神经网络除了输入和输出外,还主要具有三种类型:池化层,全连接层和卷积层。这三个层次是卷积神经网络的核心部分[8]。

2.2.1 卷积层

卷积层是卷积神经网络的第一层,由几个卷积单元组成。每个卷积单元的参数可以通过反向传播算法进行优化,其目的是提取输入的各种特征,但是卷积层的第一层只能提取低级特征,例如边、线和角[7]。更多层的可以提取更高级的特征,利用卷积层对人脸面部图像进行特征提取。

一般卷积层结构如下图5,卷积层可以包含多个卷积面,并且每个卷积面都与一个卷积核相关联。

图5 卷积层机构

h1,α和W1,α分别表示H1的第α个卷积面和第α个卷积核,x 表示输入的人脸面部图像矩阵;b1,α表示偏置,f表示卷积层函数。通过图3至图5可以看到,h1,α就是通过输入的人脸面部图像矩阵x和W1,α进行内卷积运算然后加上偏置b1,α得到的,如式1所示。

h1,α=f(u1,a)=f(C1,α+b1,α)=f(x·W1,α)。

(1)

由式(1)可以看出,每次执行卷积层计算时,都会生成与之相关的多个权重参数,这些权重参数的数量与卷积层的数量相关,即与卷积层所用的函数有直接的关系。

2.2.2 池化层

在卷积神经网络中第二个隐藏层便是池化层,在卷积神经网络中,池化层通常会在卷积层之间,由此对于缩小参数矩阵的尺寸有很大帮助,也可以大幅减少全连接层中的参数数量[9]。此外池化层在加快计算速度和防止过拟合方面也有很大的作用[10]。

在识别图像的过程中,有时会遇到较大的图像,此时希望减少训练参数的数量,这时需要引入池化层。池化的唯一目的是减小图像空间的大小。常用的有mean-pooling和max-pooling。

mean-pooling 即对一小块区域取平均值,假设pooling窗的大小是2×2,那么就是在前面卷积层的输出的不重叠地进行2×2的取平均值降采样,就得到mean-pooling的值。如图6所示。

图6 不重叠的4个2×2区域分别mean-pooling

max-pooling 即对一小块区域取最大值,假设pooling的窗大小是2×2,就是在前面卷积层的输出的不重叠地进行2×2的取最大值降采样,就得到max-pooling的值。如图7所示。

图7 不重叠的4个2×2区域分别max-pooling

2.2.3 全连接层

卷积神经网络中的最后一个隐藏层是全连接层。该层的角色与之前的隐藏层完全不同。卷积层和池化层的功能均用于面部图像的特征提取,而全连接层的主要功能就是对图像的特征矩阵进行分类[11]。根据不同的状况,它可以是一层或多层。

通过该层的图片可以高度浓缩为一个数。由此全连接层的输出就是高度提纯的特征了,便于移交给最后的分类器或者回归。

2.3 网络的训练

神经网络通过自学习的方式可以获得高度抽象的,手工特征无法达到的特征,在计算机视觉领域已经取得了革命性的突破[12]。被广泛的应用于生活中的各方面。而要想让神经网络智能化,必须对它进行训练,在训练过程中一个重要的算法就是反向传播算法。反向传播算法主要是不断调整网络的权重和阈值,以得到最小化网络的平方误差之和,然后可以输出想要的结果。

设误差函数为公式(2)

(2)

y为实际结果,o为预测结果。所以此时要求的就是J最小的时候wi的值。α是变化的速率。wi的计算方法如以下(3),(4)两式。

(3)

=(y-o)×f(∑wixi)(1-f(∑wixi))×xi。

(4)

由此方法便可以计算出最好的wi值,让最终的输出结果更贴近想要的结果。

3 人脸面部表情识别实验与结果

3.1 实验环境

本次实验是在Win10环境下进行的,为了少出错误,方便起见,查阅资料后决定利用Anaconda3搭建tensorflow。

3.2 实验过程与结果

3.2.1 数据集介绍

图8为部分数据库图像。本文中使用的Fer2013数据库是一个常用于面部表情识别的数据库,2013年举办了面部表情识别挑战赛,在此次比赛中,kaggle引入Fer2013数据库,数据库中的图片已经进行标注,根据图片中人物的表情标注为六个基本表情和一个中性表情。

图8 数据库图像

3.2.2 实验过程

搭建卷积神经网络模型:本次实验根据VGG网络的想法,尝试将5×5网络拆分为两层3×3但最后效果并不理想,在多次尝试了多种不同的模型并不断调整之后最终自己定义了一个模型。如图4所示。

训练模型:在训练的过程中使用了ImageDataGenerator实现数据增强,并通过flow_from_directory根据文件名划分label,优化算法选择了SGD,而激活函数选择了硬饱和的ReLU。因为tanh和sigmoid在训练后期,产生了因没有进行归一化而梯度消失训练困难的问题。如图9所示。

图9 梯度下降

在训练好表情识别模型之后,选用了部分数据集以及自己的图片作测试,数据集中的图片大都是归一化之后的黑白图片,所以识别结果较自己的图片更为准确。下面为测试集中图片的识别结果,结果如图10所示。

图10 测试集识别结果

首先识别了两张表情不明显的图片,识别结果如图10 a)和b)所示。因为七种表情里面neutral概率最大,所以最后输出Emotion:neutral,从图片中可以看出人物是笑着的,由于背景以及贴纸的遮挡导致了不准确性。同理检测图10 b)图片时输出概率最大的仍为中性,所以最终输出结果为neutral,观察可知,此张图片识别结果正确。对表情比较明显的图片(图10 c)至g))进行识别,得出结果准确,系统识别输出的结果都与图片面部表情相符。

3.3 实验结果分析

表1为上述几种表情对应的分类结果数据,可以看出,相比传统的识别算法,此处采用的算法其分类正确率还是较高的。不足之处是本文中采用的Fer2013数据集中的部分图片进行训练,由于图片分辨率低,存在错误标签等原因,导致最终的识别率并不理想。但是构建网络模型,对数据进行训练,并不断更改参数,减少错误率,经过尝试之后,用上述所示的网络模型最终识别率明显得到很大的提高,但是对于表情不是特别明显的多人图片,表情识别的准确度还有待提高。

表1 表情的分类结果

4 总结与展望

本文在无约束条件的情况下,提出了基于集成卷积神经网络的面部表情分类方法,主要研究的是如何利用卷积神经系统设计一个人脸表情识别系统,一个表情识别系统的核心便是网络模型部分,在VGG模型的基础上改动了部分参数得到自己的网络模型,并利用Fer2013数据集的训练集对其进行训练,优化,提高了分类的识别率,具有识别率高,泛化能力强、稳健性好等优点,最终可以达到较准确的识别图片中人物表情的结果。

猜你喜欢

池化层卷积神经网络
基于递归模糊神经网络的风电平滑控制策略
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络模型研究分析*
改进深度卷积神经网络及其在变工况滚动轴承故障诊断中的应用
基于卷积神经网络的纸币分类与点钞
基于深度学习卷积神经网络的人体行为识别研究
卷积神经网络的分析与设计
神经网络抑制无线通信干扰探究
从滤波器理解卷积
基于神经网络的中小学生情感分析