卷积神经网络在人脸表情识别中的应用研究

2021-09-05 14:34侯楚焓陆麟鑫
卫星电视与宽带多媒体 2021年13期
关键词:卷积神经网络神经元

侯楚焓 陆麟鑫

【关键词】卷积神经网络;神经元;卷积核

中图分类号:TN92                   文献标识码:A                  DOI:10.12246/j.issn.1673-0348.2021.013..031

1. 引言

卷积神经网络(Convolutional Neural Network,CNN)是一种带有卷积结构的有监督深度神经网络模型,借助卷积层的应用减小了深层网络占有的内存量,通过让卷积核提取图像特征来实现对图像的识別分类。表情识别是指从静态照片或视频序列中选择出表情状态,从而确定对人物的情绪与心理变化。在人类社会中,最常见的行为便是人与人之间的交流,而交流的方式不仅仅只局限于言语,有时能传达情感的往往是脸上浮现的表情,人的表情大致可分为七种:生气、厌恶、恐惧、高兴、难过、惊讶和无表情,随着网络的飞速发展,人脸表情识别也走上了新的研究方向,也是人机交互的一个重要方面。

2. 数据集描述

数据集train.csv大小为28710行X2305列,每一行包含有label,feature两部分。其中label为图片标签,取值范围为0~6,分别代表了七种表情:(0)生气,(1)厌恶,(2)恐惧,(3)高兴,(4)难过,(5)惊讶和(6)中立(无表情)。feature部分包含2304个数值,代表48X48(分辨率)的人脸图片像素值,其中每个像素值的取值范围为0~255。

3. 算法总体流程

3.1 数据预处理

本次采用的数据集共有28000多张图片,形式为.csv文件,如图1:

其中label代表图片的表情类别,分别有0(生气),1(厌恶),2(恐惧),3(高兴),4(难过),5(惊讶)和6(无表情);

feature代表人脸图片像素值即人脸信息。

我们利用数据处理库pandas进行数据分离,利用read_csv()函数将csv文件以DataFrame的数据类型读取出来,进行缺失值的值填充,之后将label与feature标签进行拆分,分别保存为label.csv和data.csv两个文件,借助openCV库进行图片还原保存。我们取前24000张图片作为训练集,其他图片作为验证集。新建文件夹train和val,将0.jpg到23999.jpg放进文件夹train_data,将其他图片放进文件夹test_data;

部分代码如下:

然后创建data-label对照表,用于正确对应每一张图片和类别,防止出现因储存顺序混乱而导致的类别不匹配。在train_data和test_data文件夹下各生成一个名为dataset.csv的data-label对照表。

部分代码如下:

3.2 搭建卷积神经网络

3.2.1 重写dataset类

Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。在训练模型时使用到此函数,用来把训练数据分成多个小组,此函数每次抛出一组数据。直至把所有的数据都抛出。就是做一个数据的初始化。

在我们自己的模型训练中,常常需要使用非官方自制的数据集。我们可以通过改写torch.utils.data.Dataset中的getitem和len来载入我们自己的数据集。

getitem:获取数据集中的数据

len:获取整个数据集的长度(即个数)

部分代码如下:

3.2.2 网络模型搭建

本代码模型由三层卷积和三层全连接层以及softmax层构成。

我们输入图片大小为为48X48X1(48X48像素,灰度单通道),经过一个3X3X64卷积核的卷积操作,再进行一次2X2的池化,得到一个24X24X64的feature map1(以上卷积和池化操作的步长均为1,每次卷积前的padding为1,下同)。将feature map 1经过一个3X3X128卷积核的卷积操作,再进行一次2X2的池化,得到一个12X12X128的feature map 2。将feature map 2经过一个3X3X256卷积核的卷积操作,再进行一次2X2的池化,得到一个6X6X256的feature map 3。卷积完毕,数据即将进入全连接层。进入全连接层之前,要进行数据扁平化,将feature map 3拉一个成长度为6X6X256=9216的一维tensor。随后数据经过dropout后被送进一层含有4096个神经元的隐层,再次经过dropout后被送进一层含有1024个神经元的隐层,之后经过一层含256个神经元的隐层,最终经过含有7个神经元的输出层。一般再输出层后都会加上softmax层,取概率最高的类别为分类结果。

部分代码如下:

3.3 训练模型

在本次项目中,我们采用的优化器是随机梯度下降,其中参数weight_decay为正则项系数(使用结构化风险函数,考虑到模型复杂度可以减轻过拟合);损失函数采用的是交叉熵函数;可以选择是否使用学习率衰减。设置好后就可以通过数据的前向传播和误差的反向传播来训练模型了。其中,我们设置每四轮训练完就测试训练集和测试集的准确率。

部分代码如下:

主函数中我们设置批大小为128,训练17轮,学习率为0.1,正则项系数为0。

部分代码如下:

3.4 运行结果

经过17轮训练后,结果如下:

4. 结果分析

从运行结果看,损失函数值呈下降趋势,从第一轮的1.45下降到了第17轮的0.42;训练集和测试集的准确率逐步上升,其中训练集从0.41上升到0.70,测试集从0.41上升到0.57。

以上可以看出,模型训练是有成效的,但准确率提升并不算很大。经过我们分析可能有两个原因,一是训练轮数太少,提高训练轮数可以进一步提升准确率;二是参数调节不恰当,以学习率为例,如果学习率太大,就可能会直接错过最低点。如果学习率太小,就可能学得太慢,同样也不可取。解决方法是尝试适当提高学习率以寻得更优的结果。

参考文献:

[1]徐琳琳,张树美,赵俊莉.基于图像的面部表情识别方法综述[J].计算机应用,2017(12):171-178+208.

[2]梁瑞奇,基于神经网络的人脸识别.电子制作,2018,10.

[3]M.Suwaetal.,In:Proc.4thInt.JointConf.PatternRecognition,1978,pp.408~410.

[4]K.Mase,IEICETrans,SpecialIssueonComputerVisionanditsApplication,1991,E74(10).

[5]TIANYL,KANADET,COHNJF.Recognizingactionunitsforfacialexpressionanalysis[J].IEEETransactionsonPatternAnalysis&MachineIntelligence,2001,23(2):97-115.

[6]LITTLEWORTG,BARTLETTMS,FASELI,etal.Dynamicsoffacialexpressionextractedautomaticallyfromvideo[J].Image&VisionComputing,2006,24(6):615-625.

[7]王曉霞,李振龙,辛乐.基于混合特征和分层最近邻法的人脸表情识别,计算机工程,2011,08,171-173+176.

猜你喜欢
卷积神经网络神经元
AI讲座:神经网络的空间对应
神经网络自己搭
仿生芯片可再现生物神经元行为
这个神经元负责改变我们的习惯
基于卷积神经网络温室智能大棚监控系统的研究
基于深度卷积神经网络的物体识别算法
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
研究人员精确定位控制饮酒的神经元
基于卷积神经网络的树叶识别的算法的研究