基于深度学习的人脸表情识别系统_第1页
基于深度学习的人脸表情识别系统_第2页
基于深度学习的人脸表情识别系统_第3页
基于深度学习的人脸表情识别系统_第4页
基于深度学习的人脸表情识别系统_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于深度学习的人脸表情识别系统随着社会的进步和经济的发展,人工智能已经开始应用于各种各样的场景,最典型的应用就是机器人的应用。人机交互的设计已经越来越成熟,而机器确想法就不应仅体现在语言上,还应该在其他方对模型搭建过程和结果分析,会将所用的知识点进际的模型搭建。本文的模型搭建最终使用2012年ILSVRC的冠军AlexNet实现,且会对关键词:表情识别、卷积神经网络、知识归纳、数学推导、AlFacialexpressionrecognitionsystembWiththeprogressofsocietyandthedevelopmentofeconomy,artificibeenappliedinavarietyofscenarios,themosttypicalapplicationistheapplicationofrobots.naturalneuralnetworkandthecomathematicalderivation,analyusedintheknowledgepointsindetailsummarizedmakepeoplebetterunderstandandreatheactualmodelissetup.ThemodelbuildinginthispathechampionofILSVRCin2012,andthemodelwiwillalsoputforwardtheimprovementofthemodelbyusingVGGnetwork,ResNet,GoogLeNetandothermethodswithmorelayersofneuralnetworks.Keywords:Facialexpressionrecognition;convolutionalneuralnetwork;Knowledgeofinduction;Mathematicaldeduction;AlexNet;1.1人脸表情识别的目的和现实意义 11.2人脸表情识别技术国内外现状 11.3环境的搭建 2 2 3 32深度学习的基本原理 32.2自然神经网络的基本原理 32.3卷积神经网络的基本原理 5 5 52.3.3激活函数与学习率 52.3.4学习率 62.3.5感受野和卷积核 62.3.6卷积层和池化层 7 82.3.8全连接层 82.3.9特征归一化 92.3.10损失函数与优化器 92.3.11dropout(正则化) 2.3.12BatchNormalization 2.3.15trainingloss与validationloss的关系 3基于卷积神经网络的人脸表情识别 3.2数据的预处理 3.3图片的转换 3.4搭建模型 3.5直接用.csv文件中的数据进行模型搭建与训练 3.6最终模型展示 3.7结果分析 3.8改进过程分析 21 参考文献23致谢24附录251学习和深度学习的发展,为了解决各种问题演化出了各种神经网络如:自然神经网络、1.1人脸表情识别的目的和现实意义堆的关键词,让机器人准确的抓取人们语言总体的7%,肢体语言及其他方式占总体的百分之38%,通过人脸表情进行信息传达的方式高达55%。在生活中,可以从一个人的表情分析出一个人此时此刻的心理状态,哲这说明如果能用一个模型进行人脸表情的识别和分析就能对人们此时此刻的心情状态进行准确的分析,这对机器人分析出人的情感的帮助远1.2人脸表情识别技术国内外现状早在19世纪,达尔文就发表过一篇文章《论人类和动物的表情》,表面了表情的在国外已经较为成熟,因为在几年前就举办了关于表情识别的比赛,比如2013年的进行模型的搭建与训练,另一部分就是人脸的检测。人测,静态检测要对图片进行处理对人脸进行扫描和识别,运用各种算法进行特征提取;2动态监测要通过特定的摄像头进行动态人脸到3D模型的算法,传给模型的过程中也需要进行类似静态检测的过程对人脸进行扫描和识别。人脸识别是深度学习和机器视觉的一个交互学科和热点,本文不作着重解释。对于其他特征提取这里也介绍几个现阶段国内外热门的人脸表情识别方法:1.Gabor变换:通过不同的卷积核频率对图像进行多频率的分析,可以有效的提取不同空间位置中不同细节程度的特征,经常与支持向量机一起使用。在空间域中有较好的分辨能力且有明显的方向选择性。但如果是低维度的特征会出现2.支持向量机:是一种人类识别的分类器,常与Gabor滤波器一起使用,但是当3.光流法:将运动图像用函数表示,根据图像强度守恒通过求解方程计算运动参数。可以反映人脸表情变化的实际规律,并且受外界的影响较小,尤其是光照的变化对识别率不会产生太大的变化。但是因为计算4.隐马尔模型:由观察的面部表情序列模型计算面部表情序列的概率,选用最佳准则来决定状态的转移,得到相应的模型参数。采用隐马尔模型的识别准确率较高,但是对前期的面部表情序列模型要求较高,对表情识别算法的准确率也1.3环境的搭建要想项目顺利进行,环境的搭建是必不可少的一步。首先需要明确想要的工作环使用Linux系统,以为企业的项目一般都会用Linux系统进行,提前熟悉有助于以后就第一步是安装python3.6.3(3.6版本的python对代码和各种源码包的兼容性更强)应的叙述,然后才会进行下一行程序的转译,就3第二步是安装Anaconda3,Anaconda3是Python的发行版本,集成了python和常见的软件库,比如numpy、pandas等,因为集成了很多软件库所以文件比较大。这里要注意一点每一个软件库都是分版本的,比如你在网上找的一个项目想验证一下,但是可能因为numpy的版本不匹配导致代码编译失败,这时可用Anaconda自带的虚拟环境进行软件库指定安装,用conda指定版本安装。第三步是安装jupyternotebook,jupyterNotebook也可以称为Pythonnotebook。是一个交互式笔记本,可以在运行代码时像word操作一样可以做大量解释说明。它就是一个网页程序,可以理解为运用浏览器编写Python文件,一般可用于机器学习、数据清理和转换和统计建模等。jupyterNotebook可以直接用Anaconda自带的虚拟环境用pipjupyternotebook指令就可以直接安装使用。2.1引言在深度学习真正发展前,具有浅层网络和深层网络的划分,将机器学习分为两个阶段:第一阶段的机器学习运用了Backpropagation,也就是BP算法。当时也是机器学习比较热门的时期,提出了很多不同的神经网络模型,比如支持向量机(SVM)、最大熵法(LR);第二个阶段就是在2006年,机器学习的专家Hinton提出使用多层神经网络进行模型搭建,使深度学习更快的发展。2.2自然神经网络的基本原理把自然神经网络用科学领域的理论进行表述分析,就是一种模仿生物神经网络,比如动物的中枢神经系统,特别是大脑的结构和功能的模型,用于对函数进行近似地计算。4输入层隐藏层隐藏层输出层图2.1自然神经网络示意图他几个节点。接收并处理来自一个层的输入,以络的第一层为输入层,最后一层为输出层,输入层和输出层之间的每一层都为隐藏层。神经网络中他们代表着两个重要的参数:节点和边缘的空白部分在神经网络中的权重就很低,而苹果进行数据迭代时,将数据传送到网络后经过响应得到相应误差相乘,从而获得权重的梯度,将梯度乘于k后加到原来的权重上。然后不断地进2.3卷积神经网络的基本原理52.3.1引言提到图像处理就必定会提及卷积神经网络,因为图像都是有一个一个的像素点组成,大的图片会有成千上个像素点,而卷积神经网络能运用卷积核对图像进行批量处理并且提到图像处理就必定会提及卷积神经网络,因为图像都是有一个一个的像素点组成,大的图片会有成千上个像素点,而卷积神经网络能运用卷积核对图像进行批量处理并且神经元的输入值等于权值相乘再加上一个偏置,使用激活函数并不是用来激活神经元,而是为了使神经网络具备分层的非线性能力,使网络能解决更多的的问题。激活函数用于对输入进行非线性变换,将其映射到输出,主要的激活函数有:1.Sigmoid:Sigmoid是一个将实值输入压缩到【0,1】的区间,因为函数图像与指数函数相近,在物理意义上比其他激活函数更接近生物神经元,所以使用范围比较广,主要用于二分类的输出层。但是Sigmoid具有饱和性,进入饱和区后会导致梯度变得非常小,会产生梯度消失的现象。它的公式如下:X图2.2Sigmoid与Tanh的变化曲线2.Tanh:Tanh(Hyperbolictangentfunction)中文名叫双曲正切函数,是将一个输入6压缩到【-1,1】的区间,函数图像比较平滑且具有单调性。但是tanh与Sigmoid一样具有饱和性,进入饱和区后会造成梯度消失。它的公式如下:3.Relu:(rectifiedlinearunit)是近代深度学习和机器学习中最常用的激活函数。但是它的有缺点也很明显,它的缺点是:当输入值为负数时,其导数的结果始终为0,此时神经元不能更新参数,相对于生物结构就是神经元已经死去,这种现象被称为“DeadNeuron”;但它的优点是:在梯度下降的过程中收敛速度更快,在模型搭建过程中参数(LeakyRelu)、随机relu函数(RRelu)。2.3.4学习率总结完激活函数后就要总结一下学习率:在神经网络中需要不断地对权值进行优化,当采用梯度下降法时会有一个初始解,然后在初始值确定一个方向导数进行移动,移动的步长由自己定义,使初始解在不断优化的过程中更靠近预测的目标值。而在移动的过程中步长太大会导致可能跨过最优解,步长太小会使迭代次数增加,需要更多成本,因此步长的调制就很重要,而学习率就是运用于对步长的调整。例如学习率为0.01时,每次调整的步长为0.01梯度。2.3.5感受野和卷积核卷积神经网络是受哺乳动物视觉的启发,将视觉皮层包含着一系列组合在一起的细腿称为感受野,他们是小而敏感的视觉区域。这些细胞在输入空间上充当局部的过滤器,适合用来处理具有局部相关性的图像。通俗的定义感受野就是每一层卷积网络输出的特征图上的像素点在输入中映射的区域。图2.3卷积过程示意图7在图中可以清楚的明白感受野的概念,图中3×3的矩阵就是卷积核。一张N×N的图像要对他进行处理分析就要进行线性的滤波,可以用一个矩阵对图像进行处理,输出的每个像素点为感受野像素和滤波器矩阵相应元素的乘积和。移动的距离为步长,一般都为1,而卷积核的大小一般都为3×3或5×5,奇数的卷积核才具有半径的概念。而卷积核中所有元素之和应该等于1,这是为了使图片经过卷积后亮度保持不变,当元素和大于1时卷积后图像会变得比原图更亮,反之小于1时图片会变暗。对于卷积后每个像素值的大小超过255则直接截断到0或255。这里说明一下普通的黑白色图中每个像素点只有一个通道,0-255代表灰度值,而彩图像的每个像素点具有三个通道用来确定像素点RGB值,同样一张255×255的图片,卷积处理黑白图只需要处理255×255的像素点,而处理彩色图片需要处理255×255×3的像素点。2.3.6卷积层和池化层卷积神经网络分为输入层、输出层和隐藏层,而隐藏层又分为卷积层和池化层。卷积层就是由若干个卷积核构成,每个卷积核的元素都是通过BP算法不断优化得到。卷积是为了提取输图像的特征,卷积层数较少的神经网络只能从图像中提取简易的特征参数,只有多层的卷积网络才能从低级特征中提取出更复杂的特征参数。卷积的过程也是一个数学计算的过程,在数学中有严谨的推导和计算。假设有矩阵A₃x₃和B₂xz,那么B卷积A的结果就是让B在矩阵A上滑动。换言之,,就是B与A的所有2×2连续子矩阵做对于元素积之和的运算。得到结果,矩阵B就是上文提到的卷积核或滤波器,矩阵C称为得到的特征图,过程可以定义为窄卷积。如果卷积前先对矩阵A预先进行填充后进行计算的过程称为宽卷积。经过多次卷积后的输出特征图有可能会因为特征向量出现过拟合现象。在深度学习存在过拟合的概念,总结一下就是指在最终训练出的模型会对训练数据完美的匹配,这种模型在实际使用中可能准确率很低,只能对训练数据表现出高的准确率。为了解决过拟合问题可以运用池化层对参数进行优化。池化层一般在卷积层的后面添加,用于压缩参数。主要作用表现在两个方面:一个是保持原图的主要特征,例如有一个8×8的图片,里面有个数字,可能偏左或者偏右,用2×2的filters将他池化后会变成4×4的图片,原图的主要特征还会映射在同样的位置。而另一个作用是特征降维,如果一幅图像很大,则需要将冗余的信息去掉并且把主要特征提取出来,这就是特征降维,也是池化最主要的作用。池化的过程也可以用矩阵大致表示出来,假设矩阵C为6×4的矩阵,池化窗口为2×2,则按照池化窗口大小将矩阵C分割成6块不相交的2×2小矩阵,对每个块中的所有元素做求和平均操作,称为平均池化,取最大值则称为最大池化。假如8则平均池化的结果最大池化的结果由于池化也称为下采样,用S=down(C)表示,为了使池化层具有可学习性,一般令:S=βdown(C)+b其中β和b为标量参数。图片经过不断的卷积会变得越来越小,需要提取主要的特征就需要多层的卷积,为了不影响与后面全连接层的数据交换,引入填充的概念。可以在每次卷积后对特征图进行0填充或1填充。顾名思义就是在卷积后的特征图周围全部填上0或者1,使卷积后的特征图与原图的大小保持不变。2.3.8全连接层全连接层是将之前卷积池化得到的全部特征参数通过权值矩阵重新组装,因为用到了全部的特征参数所以叫做全连接层。卷积将图像的特征提取出来后,全连接层会将特征进行统一分析归类。举个例子,假如图片中有一只猫,卷积层可以将图片中的猫的各个特征提取出来,相对于其他动物来说比如猫的眼睛比狗的眼睛小,猫的皮毛相对于其他动物的不同,对比了很多个特征以后发现它有猫的眼睛,猫的皮毛和尾巴,然后经过全连接层进行分类得到几个不同的动物,经过比较得出猫的权值最大从而判断图片中的动物为猫。全连接层还有个作用,假设两张不同的图片中都有一只猫,只是猫在图片中的位置不一样,但是经过卷积池化后,经过计算后得到的特征图是一样的,但可能因为特征位置的不同导致分类结果不一样,运用全连接层就能解决这个问题。但是因为空间结构的忽略,导致全连接层不适用于在空间位置上找特点物品的模型,所以要解决非线性的问题需用两次以上的全连接。但是全连接层的数据量很大,约占整个神经网络的70%以上,所以一般都只用2或者3层。2.3.9特征归一化在深度学习中,不同的特征向量具有不同的量纲,会影响到数据的分析结果,为了消除量纲的影响,需要对数据进行标准化处理。原数据经过标准化后,特征指标会处于同一数量级,可以综合对比评价。归一化的目的就是将预处理的数据限定在一定的区间内,从而消除奇异样本数据导致的不良影响。常用的归一化的方法有两种:Min-MaxNormalization(最大最小标准化)和Z-score标准化方法。最大最小标准化是将结果映射到0和1之间,适用于数据比较集中的情况,当涉及距离度量和协方差时不适用,用后一种方法处理数据后会使数据符合标准正态分9布。这种方法可以处理距离度量和协方差的数据2.3.10损失函数与优化器好了,只需要把头文件加进去然后调用函数名,数和优化器:损失函数又称为目标函数,用于计算预测图2.4损失函数分析图是要经过不断的迭代使w接近真实值。图中的竖线分别是三次迭代后预测的Y与真实Y方差等不同的公式计算,这就是损失函数的衡量决策函数的好坏,然后用所有的训练样本评价决策函数的风险。假设风险函数R(θ)是在已知的训练样本(经验数据)上计算得到,表达式为,需要找到一个值(θ),使风险函数最小。常见的损失函数有0-1损失函数,平方损失函数L(y,y)=(y-1,f(x,θ)相对于真实类别的似然函数,常用最小化处理,最小化负对数似然损失函数优化器的学习率在上文有提到这里不细说,动量在本文调参中不涉及,在实际应用2.3.11dropout(正则化)Dropout的作用是在CNN最后的全连接层进行数据的随即丢弃,值得注意的是暂时性的丢弃,在第二次的全连接层可能会被再次暂时丢弃也有可能被按照label进行分类,dropout的使用也是为了防止CNN网络的过拟合。我看过一篇论文专门分析dropout,讲解的很深有很精确的公式验证和说明,其中有个例子可以很生动的说明dropout的过程:在自然界中,进行有性繁殖的动物的后代会从父母双方各继承一半的基因,有性繁殖会将基于不断地拆分重组,从而破坏了大段基于的联合适应性。但是为什么在物竞天择的世界里自然大部分中大型动物都是有性繁殖呢?因为有性繁殖不仅仅可以将优秀的基于传递给下一代,还可以降低基因之间的联合适应性,从而使复杂的一大段基因联合适应性转化成成一段段小基因的联合适应性。就像军队作战时,50个人互相配合进行任务和五个人一组分成十组进行分组行动进行任务的效果会有很多区别,后者的成功的机会会更大。所以dropout也能达到同样的效果,它使神经元和随机挑选出的其他神经元工作,减弱了神经元之间节点的适应性,增强了泛化能力。图2.5正则化过程示意图BatchNormalization简称BN算法,是对输入进行归一化后给到激活函数的,解决了输入发生偏移的影响。运用算法后可以加快训练速度,增大学习率。采用BN算法后可以不使用池化层,因为参数归一化后分布变得明显,经过一个激活函数以后,神经元会自动削弱或者去除一些神经元,就不用再对其进行dropout处理。举个例子:10000个样本,batch_size为100,则需要迭代10次,此时算训练完一次整个样本,用epoch表示。例如样本为10000,batch_size为100,epoch为5就意味3基于卷积神经网络的人脸表情识别总结完自然神经网络和卷积神经网络中基础的概念和知识点后,将在这一小节进行用卷积神经网络架构的AlexNet进行模型搭建和分析。3.2数据的预处理在进行模型搭建前,数据的处理是最繁琐也是最重要的,因为只要你懂得神经网络的各种原理,在模型搭建好后可以由计算机自己计算分析,不需要人为的干涉它。但是计算机处理的数据需要人为得给它,而且不能有脏数据等,所以对数据的预处理很重要。本设计用的数据是kaggle的fer2013数据集,数据集不是一张张图片而是将数据保存到csv文件中,所以可以运用panda的函数进行数据读取也可以直接转换成图片识别。数据集中分为训练集、测试集和验证集。文件中的label由0-7组成,分别代表着:0(愤具有28708张图片,测试集具有3589张图片,验证集具有3589张图片,图片大小都为3.3图片的转换首先将文件转化为.csv格式,这样才能用python对数据进行批量处理。需要根据label分成三个.csv文件,分别代表训练集、测试集和验证机,用database_path加文件路径获取文件内的数据。这里需要提一下因为用的是有监督学习。机器学习分为有监督学习和无监督学习,有监督学习和无监督学习的区别在于训练数据中有没有带有标签 (label),大部分的卷积神经网络都是采用有监督的学习,事先为每组数据每张图片打上标签,分好类型然后让机器学习;无监督学习的数据不含有label,适用于增强学习等其他神经网络。因为带有标签,需要把label给到中间变量然后删去再将数据进行转化变成图片。K_train*train.frop(lohels["1aheLtest-test,dropilabe1s=!*labe1"7,axis-t)64205图3.1去除label的过程展示然后将去掉标签后的数据打开,然后根据每一个像素点的灰度值转化为48×48的图片。pixel=np.asarray([float(p)forpinpixel.split()]).reshape(48,48)图3.2转化成图片的过程展示名称文件夹文件夹文件夹大小 α用户>海>datasets>test>0图3.3转化后效果展示3.4搭建模型首先定义图像的长和宽,目的是告诉网络输入图像矩阵的大小(48×48×1),确认图像的通道分量,便于搭建网络结构。ifK.image_data_format()='channels_first':input_shape=(1,img_wiinput_shape=(img_width,img_height,1)图3.4模型搭建示意图1然后开始定义网络结构,首先先建立一个model,然后开始添加卷积层、激活函数、池化层。mode1.add(Conv2D(32,(5,5),padding='same',input_shape=input_shape,activation='relu'))mode1.add(Conv2D(32,(4,4),padding='same',activatmode1.add(MaxPoo12D(pool_size=(3,3),strides=(model.add(Conv2D(64,(5,5),padding='same',activatiomodel.add(MaxPool2D(pool_size=(3,3),stridesmodel.add(Flatten))mode1.add(Dense(2048,activation='图3.5模型搭建示意图2搭建的原始模型中第一层卷积层用的是32个5×5的卷积核进行原始图像的特征提取,没有写步长默认为1,采用0填充,使用relu做激活函数,然后再之后构建一个kernelsize为3*3的池化层,步长为2。第三层用32个4×4的卷积核进行第二次卷积,采用0填充,使用relu做激活函数。为3*3的池化层,步长为2;第五层为64个5×5的卷积核进行第三次卷积,第六层构建一个kernelsize为3*3的池化层,步长为2。然后添加全连接层,需要先将featuremap转成n*1的一维网络。第一层全连接层长度为2048,激活函数为relu,然后正则化百分之40的特征参数。再构建第二层的全连接层,长度为2048,激活函数为relu,正则化百分之40的特征参数。然后添加一层BatchNormalization,最后将全连接层的特征参数按label分为7类,激活函数采用然后就是选择优化器和损失函数,优化器选择的是SGD(随机梯度下降)也叫增量梯度下率为0.005,损失函数用的是categorical_crossentropy。这时模型搭建完毕,可以用训练数据进行模型训练了。先对图片集进行读取,然后设置epochs和batch_size,train_data_dir=r"D:\\input\\datasets\\train"validation_data_dir=r"D:\\in_=ImageDataGenerator(rescale=1./255,she=ImageDataGenerator(r=ImageDataGenerator(rescale=1./255,shebatch_size=batch_size,batch_size=batch_size,图3.6模型搭建示意图33.5直接用.csv文件中的数据进行模型搭建与训练直接使用.csv文件的话需要先检查训练数据是否有空值,这会对训练过程产生巨大的影响,因为少了一个像素点的值,后面的像素点就会往前移一个,整个图片就会糊了,这里要注意0不等于空值,可以用rain.isnull().anyO.describe()命令实现。3.6最终模型展示=1硫,,1mde;,mdgConc2ie,amutnte11,l?,aTtwtim'relu,Narnel.hitialiaar'Dearnf'.uyut,AtapFtnrut,aham)mdeLadtCmv22,omrLir-,N),sstiriarr'rrln,anddtraar',knnelInitisdel,a#Cmr,wrteLwn,41.tiratianr'reli',paatinga',komeLIRrTialitartn,posl')imde1,addHesfso22(1,T,trmdeLadli0mnt3int,(3.2),stuntvar'tnla'.tadtinp'uam,tetne]imitialirer-'nesartal')Met图3.7最终模型展示max_pooling2d_13(MaxPooling(None,23,20max_pooling2d_14(MaxPooling(None,11.10max_pooling2d_15(MaxPooling(None,5,0000Non-trainableparam图3.8最终模型各层网络参数展示tn:5]mode1.cotptleloptinlzer-aptimlter,loss-'catrerir3.7结果分析经过50次训练后,准确率来到了57.65%,从第一次训练后的24.94%提升了32.71%,从效果上看模型还算成果,但是根据模型的实际情况分析。首先可以先看看trainingloss和validationloss的曲线图,用plt库就可以实现绘画。根据2.3.14的结论可以看出,最终搭建的模型还是处于过拟合的状态。这个最终模型是经过多次改良后得到的,原本搭建的CNN模型因为dropout随机丢弃的数据不多,没有应用BatchNormalization,过拟合的程度更加严重,即使在算法上已经采用了随机梯度下降法,在每一层卷积层后添加了池化层,在优化器和损失函数上更换了四五个组合,但是最终拟合程度较好的还是SGD(优化器)和categorical_crossentropy(损失函数)。图3.10Trainingloss与validationloss函数图像再来看看混淆矩阵:从矩阵中可以看出fer2013数据集中label1(厌恶)的数据较少,对角线的数据占总体数据越大越好,模型准确率在60%左右,所以混淆矩阵整体分布还算均匀,label3(开心)的训练效果较好。图3.11混淆矩阵示意图最大,从图中可以看出模型准确率还算不错,有可能是数据集的问题,导致模型准度达再用验证集val中的label1验证一次模型准确率,计算出的准确率为99.89%,对于此模型中因为厌恶的数据集较多,拟合程度较好,虽然出现轻微过拟合现象,但用来验:10.99892sbt.:图3.12模型验证示意图3.8改进过程分析在最初模型建好后,就发现了模型过拟合的问题,事实证明在神经网络的搭建过程中,尤其是卷积神经网络对图像处理的应用,解决过拟合问题是最主要的问题。我问过导师在这种情况下应该怎么解决:第一种就是将CNN模型中的参数减少,但是因为本身采用的是AlexNet的架构,卷积层、池化层和全连接层的层数相对于其他CNN模型中已经算少了,就只能改动其他参数的方法进行改良。在优化器的选择挑选了SGD、RMSprop、Adam,损失函数选择了categorical_crossentropy和binary_crossentropy,通categorical_crossentropy适合二分类问题,如果选择这个损失函数的精准率更高反而是个更大的问题。最终还更改了dropout的数据、学习率、用了BN算法,最后准确率达到接近58%。老师还提了个方法就是增大数据集,但是这个方法涉及的问题很多,首先就味着对计算机的算力要求更高。如果要彻底解决这个问题用后一VGG网络就是重复重复使用3x3卷积和2x2池化增加网络深度,在2014年的ILSVRC比赛中,VGG在Top-5中取得了92.3%的正确率(top5表示只要概率向量中最大的前五名里有分类正确的则为正确)。输入的图片为224*224*3,具有13个卷积层和3个全连接层,所以也叫VGG16网络。VGG还有另一种版本叫VGG19,多增加了3ResNet的核心思想是残差模块和深度继承了LeNet以及AlexNet的一些框架结构,增加了卷积池化层数。虽然深度只有22层,但在相对情况比较AlexNet和VGG的参数会少很多,因此在内存或计算资源有限GoogLeNet和ResNet都采用了模块化的结构(Inception结构),方便增添和修改。不难看出,VGG网络、ResNet、Go搭建效果会更好。当然对样本的选择也有要求,输入的大小至少224*224*3,48*48*1的数据集用AlexNet会比较合适,参数优化也会更人脸表情识别在未来的人机交互中必定是一个热门的技术点,虽然己经有很多不同结构的模型,并且取得了不错的识别效果,但是使模型变得更精准、算法更优化、实现方式更简易一直是人们在努力实现的目标。作为一名初学者。通过三个月的学习,在机器学习与深度学习也只能算是勉强入门。在杨老师和几位线上授课的老师的教导下,我也顺利用所学知识搭建出一个人脸表情识别模型,虽然准确率只在60%,且有一定的过拟合现象,但是这也代表着三个月的学习成果,在一次次的调参和优化中,我明白了深度学习基础知识的重要性。调参不是盲目的调超参数,而要懂得对数据进行分析,要对算法有一定的了解才能更好的选择。在训练数据不够多的前提不能选择大的神经网络,尽可能选择能消除过拟合的函数和算法。每搭建一层网络,给一个函数时都应该问自己一句为什么这么做,是不是有更好的选择。总而言之此次毕业设计也算顺利完成,希望在未来能有更好的算法,更完善的数据能搭建出更好的模型,也希望本文能帮助更多初学者理解和完成人脸表情识别。参考文献[1]施徐敢.基于深度学习的人脸表情识别[D],浙江:浙江理工大学,2015-03-08,12。[2]吕亚丹.基于深度学习的人脸表情识别[D],天津:天津大学,2014-15-01,18.themeasurementoffacialactionConsulting,PaloAlto,1978,32-35[4]CootesTF,Taylapplication[J].ComputerVisionandImageUndersta[5]赵艳.基于深度学习的表情识别研究[D],重庆:重庆邮电大学,2016-04-03,22-24.Models[C].BMVC,Nottingham,1999,173-182.manifoldlearning[J].PatternRecognition,2009,42(7):1340-1350.Gabor-wavelets-basedFacialexprNaral998,454-459.[10]李江.基于深度学习的人脸表情识别研究与实现[D],四川:西南科技大学,2017-05-01,师的心血和汗水,在我的毕业设计期间,杨聚庆老师为我论文的指导有着启蒙的意义,我的二稿和一稿无论在内容还是格式方面都有翻天覆地的变化。我做毕业设计的每个阶段,从选题到查阅资料,论文提纲的确定,中期论文的修改,后期论文格式调整等各个环节中都给予了我悉心的指导。这几个月以来,杨聚庆老师不仅在学业上给我以精心指导,同时还在思想上给予我以无微不至的关怀,在此谨向杨老师致以诚挚的谢意和崇高的敬意。同时,本篇毕业论文的写作也得到了何飞、韩烨、王健等老师的热情帮助。感谢在整个毕业设计期间和我密切合作的老师,和曾经在各个方面给予过我帮助的伙伴们。在此,我再一次真诚地向帮助过我的老师和同学表示感谢!附录附录1附录2database_path=r'D:\inpdatasets_path=r'.\datasets’csv_file=os.path.train_csv=os.path.join(datasets_path,val_csv=os.path.join(datasets_path,test_csv=os.path.join(datasets_path,'test.csv')trn=[row[:-1]forrowinrowsifrow[-1]=='Training']lineterminator='\n').wrival=[row[:-l]forrowinrowsifrow[-1]=='PublicTest']lineterminator='\n').writst=[row[:-1]forrowinrowsifrow[-1]=='PrivateTest']lineterminator='\n').writrain_csv=os.path.join(datasets_path,val_csv=os.path.join(datasets_path,'val.csv')test_csv=os.path.join(datasets_pathtrain_set=os.path.joinval_set=os.path.jointest_set=os.path.join(datasetspath,'test')ifnotos.path.exists(save_path):pixel=np.asarray([float(p)forpinpixel.split()]).rifnotos.path.exists(subfolder)image_name=os.path.join(s附录3fromkeras.preprocessing.imageimportImageDataGeneratorfromkeras.layersimportConv2D,MaxPooling2D,MaxPool2Dfromkeras.layersimportActivation,Dropout,Flatten,Densefromkeras.applications.imagenet_utilsimportpreprocess_iimportpandasaspdfromkeras.preprocessing.imageimportImageDataGeneratorfromkeras.layers.normalizationimpsns.set(style='white',coX_train=train.drop(labels=["label"],axis=1)X_test=test.drop(labels=["labX_train=X_train/255.0X_train=X_train.valuesX_test=X_test.values.reshape(-1,48,48,1)Y_train=to_categorical(Y_train,num_classes=7)Y_test=to_categorical(Y_test,num_classes=7)g=plt.imshow(X_train[0]model.add(Conv2D(32,kernel_size=(1,1),activation='relu',ker='he_normal',input_shapemodel.add(MaxPool2D((3,3),strmodel.add(MaxPool2D((3,3),strmodel.add(MaxPool2D((3,3),strmodel.add(BatchNormapile(optimizer=optimilearning_rate_reduction=ReduceLR0nPlateau(monitor='val_acc',patience=3,ax[0].plot(history.history['loss'],color='b',label="Trainingloss")ax[0].plot(history.history['val_loslegend=ax[0].legend(loc='besax[1].plot(history.history['accuracy'ax[1].plot(history.history['val_accuracy']defplot_confusion_matrix(cm,classes,#plt.xticks(tick_marks,classes,rotplt.yticks(tick_marks,cifnormalize:cm=cm.astype('float')/cm.thresh=cm.max()/2.color="white"ifcm[i,j]>threshplt.ylabel('Truelabeldefdisplay_errors(errors_index,img_errors,pred_errors,obs_errors):fig,ax=plt.subplots(nrows,ax[row,col].imshow((img_errors[eformat(prederrors[error],true_prob_errors=np.diagonal(np.take(Y_pred_errors,Y_true_errors,most_important_errors=sorted_dela_errors[-9:]display_errors(most_important_errors,X_val_errfromsklearn.metricsimportroc_cfpr[i],tpr[i],_=roc_curveroc_auc[i]=auc(fpr[i]plt.plot([0,1],[0,1],’k--',lwplt.xlabel('FalsePositiveRate')plt.ylabel(TruePositiveRate')plt.title(SomeextensionofReceiveroperatingcharactplt.legend(loc="lowerriplt.show()电脑快捷知识大全编辑本段一、常见用法F1显示当前程序或者windows的帮助内容。F2当你选中一个文件的话,这意味着“重命名”F3当你在桌面上的时候是打开“查找:所有文件”对话框F10或ALT激活当前程序的菜单栏DELETE删除被选择的选择项目,如果是文件,将被放入回收站SHIFT+DELETE删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站CTRL+N新建一个新的文件复制被选择的项目到剪贴板粘贴剪贴板中的内容到当前位置撤销上一步的操作重做上一步被撤销的操作Windows键+SHIFT+M重新将恢复上一项操作前窗口的大小和位置打开资源管理器打开“查找:所有文件”对话框打开“运行”对话框Windows键+CTRL+F打开“查找:计算机”对话框SHIFT+F10或鼠标右击打开当前活动项目的快捷菜单SHIFT在放入CD的时候按下不放,可以跳过自动播放CD。在打开word的时候按下不放,可以跳过自启动的宏打开程序最左上角的菜单窗口在窗口和全屏幕状态间切换PRINTSCREEN将当前屏幕以图象方式拷贝到剪贴板将当前活动程序窗口以图象方式拷贝到剪贴板CTRL+F4关闭当前应用程序中的当前文本(如word中)CTRL+F6切换到当前应用程序中的下一个文本(加shift可以跳到前一个窗口)显示前一页(前进键)显示后一页(后退键)在页面上的各框架中切换(加shift反向)F5刷新激活程序中的菜单栏F10执行菜单上相应的命令ALT+菜单上带下划线的字母关闭多文档界面程序中的当关闭当前窗口或退出程序ALT+F4显示所选对话框项目的帮助Fl显示当前窗口的系统菜单ALT+空格键显示所选项目的快捷菜单SHIFT+F10显示多文档界面程序的系统切换到上次使用的窗口或者切换到另一个窗口ALT+TAB编辑本段二、使用“Windows资源管理器”的快捷键目的快捷键如果当前选择展开了,要折叠或者选择父文件夹左箭头如果当前选择折叠了,要展开或者选择第一个子文件夹右箭头在左右窗格间切换F6编辑本段可以使用Microsoft自然键盘或含有Windows徽标键的其他任何兼容键盘的显示“系统属性”对话框撤消最小化所有窗口SHIFT+WINDOWS+M编辑本段四、“我的电脑”和“资源管理器”的快捷键关闭所选文件夹及其所有父文件夹按住SHIFT键再单击“关闭按钮(仅适用于“我的电脑”)编辑本段五、使用对话框中的快捷键目的快捷键取消当前任务ESC如果当前控件是个按钮,要单击该按钮或者如果当前控件是个复选框,要选择或清除该复选框或者如果当前控件是个选项按钮,要单击该选项空格键单击相应的命令ALT+带下划线的字母在选项上向后移动SHIFT+TAB在选项卡上向后移动CTRL+SHIFT+TAB在选项上向前移动TAB如果在“另存为”或“打开”对话框中选择了某文件夹,在“另存为”或“打开”对话框中打开“保存到”或“查阅”F4刷新“另存为”或“打开”对话框F5编辑本段六、桌面、我的电脑和“资源管理器”快捷键选择项目时,可以使用以下快捷键。插入光盘时不用“自动播放”“回收站”显示“查找:所有文件”F3刷新窗口的内容F5重命名项目F2选择所有项目CTRL+A兼容键编辑本段七、Microsoft放大程序的快捷键这里运用Windows徽标键和其他键的组合。快捷键目的将屏幕复制到剪贴板(包括鼠标光标)Windows徽标+SCROLLLOCK将屏幕复制到剪贴板(不包括鼠标光标)Windows徽标+向上箭头增加放大率Windows徽标+向下箭头减小放大率编辑本段八、使用辅助选项快捷键目的快捷键切换粘滞键开关SHIFT键五次Alt+S快速回复Alt+C关闭当前窗口Alt+H打开聊天记录Alt+T更改消息模式Ait+J打开聊天纪录Ctrl+A全选当前对话框里的内容Ctrl+FQQ里直接显示字体设置工具条Ctrl+J输入框里回车(跟回车一个效果)Ctrl+M输入框里回车(跟回车一个效果)Ctrl+L对输入框里当前行的文字左对齐Ctrl+R对输入框里当前行的文字右对齐Ctrl+E对输入框里当前行的文字居中Ctrl+V在qq对话框里实行粘贴Ctrl+Z清空/恢复输入框里的文字Ctrl+回车快速回复这个可能是聊QQ时最常用到的了Ctrl+Alt+Z快速提取消息最常用的快捷键F5刷新DELETECTRL+C复制CTRL+XCTRL+A全选CTRL+ZALT+F4关闭CTRL+YCTRL+F5强制刷新CTRL+W删除剪切撤销恢复关闭TAB改变焦点CTRL+F查找CTRL+空格--中英文输入切换CTRL+Shift输入法切换CTRL+ESC--开始菜单Alt+1保存当前表单A1t+2保存为通用表单Alt+A展开收藏夹列表资源管理器数字键盘的减号(-)折叠所选的文件夹数字键盘的加号(+)显示所选文件夹的内容数字键盘的星号(*)显示所选文件夹的所有子文件夹向左键当前所选项处于展开状态时折叠该项,或选定其父文件夹向右键当前所选项处于折叠状态时展开该项,或选定第一个子文件夹自然键盘【窗口】显示或隐藏“开始”菜单【窗口】+F1帮助【窗口】+R打开“运行”【窗口】+E打开“我的电脑”【窗口】+F搜索文件或文件夹【窗口】+U打开“工具管理器”【窗口】+TAB在打开的项目之间切换按SHIFT五次切换粘滞键的开和关按“开始”—“运行”,或按WIN键+R,在『运行』窗口中输入:(按英文字符顺序排列)%temp%打开临时文件夹.C:\DocumentsandSettings\用户名所在文件夹...-我的电脑appwize.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论