python卷积神经网络图像,基于卷积神经网络的人脸识别
基于卷积网络的面部表情识别及其应用前言1。面部表情识别技术现状2。卷积神经网络技术概述1。卷积神经网络图像理解过程2。卷积神经网络结构3。卷积神经网络的优势3。模型构建、训练环境2(数据集选择和分类3)模型的初步设计和配置4)卷积网络模型的优化5)模型的最终效果4)面部表情识别模型的实际应用(学生学习状态实时评价系统)1。
本文以卷积网络和面部表情识别技术为背景,详细完整地描述了如何建立、训练、优化和应用基于卷积神经网络的模型。
Ps:在实际应用阶段,利用面部表情识别模型和百度AI人体姿态识别接口,实现对学生学习状态的初步评估和分析。
注:未经作者允许,请勿转载。
一、面部表情识别技术的现状。人脸表情识别技术是基于人工智能技术和生物技术的交叉研究。这项技术的出现,预示着计算机技术发展方向和应用领域的多样性,也意味着面部表情识别技术的发展不仅需要计算机技术的支持,更需要生物学的探索和进步。
目前,面部表情识别理论将面部情感识别的过程分为三个阶段:人脸检测阶段、面部表情特征提取阶段和面部表情识别阶段。
人脸检测是表情识别的第一步,是保证表情识别准确率的第一步,是整个表情识别的基础。在人脸检测阶段,需要准确地检测和提取人脸在目标区域的位置。只有保证基础数据的准确性,特征提取和表情识别阶段才能取得好的效果。
在人脸识别阶段,利用卷积神经网络模型(卷积核)提取人脸图像的相关特征数据,为后续的表情识别提供有效的数据特征。
在表情识别的第三阶段,对数据特征进行分类,以确定当前人脸图像属于哪种表情。
目前,人脸表情识别存在一些问题。比如有以下问题。
人脸识别等任务的数据不足且不准确,部分面部表情的生物边界识别不清晰。数据中几乎只有正面图像,所以深度学习容易过拟合。
面部表情数据受外部条件如光线和颜色的影响很大。
个体之间的差异太大,个体之间的五官和情绪状态差异很大;有时表情重叠,使识别变得困难。
由于面部表情识别更加抽象细致,所以不仅要识别眼睛、嘴巴等人脸的基本特征,还要识别这些基本特征的相对位置、角度、扭曲程度等细节。
二。卷积神经网络技术概述1。卷积神经网络图像理解过程卷积网络模型面部表情识别的过程如下。
初始卷积层提取局部线或图形边界的数据特征,识别局部图像中的基本曲线和边界。中间卷积层综合初始卷积层识别的特征信息,实现眼、口、鼻等人脸局部特征的识别。深度卷积层对眼睛、鼻子等人脸的局部特征进行更高层次的整体分析和判断,最终对面部表情进行分类,完成面部表情识别。
2.卷积神经网络结构卷积神经网络主要由卷积层、池化层、全连接层、软化层(softmax层)和实现不同功能的运算组成。通过合理设置上述层结构,不同层可以根据需要进行Dropout、NB等运算,最终可以形成一个高效率、高精度的卷积神经网络模型。
卷积层
卷积核是一系列用于提取某些特征的过滤器。尝试用卷积核处理图像。如果图像特征与滤波器所表示的特征相似,则卷积运算可以得到更大的值。如果图像特征与滤波器不相似,卷积运算可以得到一个相对较小的值。实际上,卷积结果的特征图显示了卷积核所代表的特征在原始特征图上的分布。为每个卷积核生成一个特征图,这些特征图重叠形成整个卷积层的输出结果。卷积体现了参数共享和局部连接的模式。卷积核的大小表示感觉野的大小。卷积得到的特征图的大小为(w-F2 * p)/S1;p是为步骤[11]填充S。池化层
图像局部相关性原理,即局部相邻像素之间存在一定的共性和相关性,一定数量的像素可以代表一个局部区域内所有像素的特征。在池层的总体思路中,认为最大值或平均值代表局部特征。通过从局部区域而不是区域中选择最具代表性的像素值,可以在减少数据处理量的同时保持最具特征的数据信息。池操作可以逐渐减小数据卷的空间大小,保持一定的数据相关性,有效减少网络中的参数数量,减少计算资源的消耗,对过拟合也带来一定的预防。全连接层
所有连接图层都将要素地图转换为类别输出。所有连接层都由多层组成。为了防止过拟合,在所有连接层中引入删除操作。Softmax层
Max layer不属于CNN特有的结构层次,随机输出图像分类的结果。将Softmax层的所有输出相加为1,根据这个概率判断图像最终属于哪一类。3.卷积神经网络简化参数的优点
利用现有的神经网络处理图像信息,需要将图像转换成N个像素。即使从N个像素中提取图像的特征,要处理的数据量也太多,成本高,效率也高。
比率非常低。卷积神经网络通过卷积计算、池化等运算,从原始图片信息中提取最突出的数据特征,然后进行处理。在大多数场景下,降维并不影响人类对图像数据的理解。局部连接局部连接是指卷积层的节点只与上一层的部分节点连接,仅用于学习局部特征。在计算机视觉中,图像中的某个区域
像素之间的相关性也与像素之间的距离有关。邻近的像素往往代表一个局部特征信息,而远处的像素则代表不相关的因素。卷积符合局部相关原理,卷积网络可以逐层细化图像数据的局部数据特征。3.面部表情识别的卷积网络模型。模型建立和训练环境Keras是基于神经网络引擎的高级神经网络API,用python语言编写,支持Tensorflow、Theano等主流神经网络框架作为后端。Keras将常见的神经网络计算过程封装成一个独立的模块,并提供简单易用的接口。Keras可以快速构建神经网络,并支持CNN、RNN或两者的结合。
在该模型中,Tensorflow将用作神经网络计算环境,keras将用于建立、训练和优化卷积网络模型。
2.数据集的选择和划分经过广泛的收集和搜索,可以得到面部表情识别的三个数据集,CK、MMI和FER-2013。所有三个数据集都包含六种基本的面部表情,如笑、哭和惊讶。CK和MMI数据集的图片数据较少。虽然FER-2013数据集中的部分图片并不准确,但其较小的图片规格更能适应博主目前的软硬件条件,基本能满足本项目的需求。我选择FER-2013作为研究数据集。
FER-2013数据集包含35887张面部表情的单通道灰度图像,包括愤怒、厌恶、害怕、快乐、悲伤、惊讶和中性七种表情。模型应用后,将采集到的图像进行灰度处理,然后输入卷积神经网络模型进行分析判断,可以在一定程度上解决人脸表情识别容易受光感和颜色影响的问题。
3.模型的初步设计和配置
初步设计:整个卷积神经网络由三个卷积段、三个全连接层和一个软化层组成,每个卷积段包含两个卷积运算相同的卷积层。由于作者物理机内存空间有限,模型采用批处理方式训练,batch_size设置为:256;Adam优化器用于在训练时自动调整学习率;所有卷积层采用3*3卷积核;采用了sigmoid激活函数。
4.卷积网络模型选择高效的激活函数:的优化
在初始卷积神经网络结构中,使用sigmod激活函数,sigmod激活函数的梯度在饱和区趋于零,或者显著减缓梯度下降速度甚至导致梯度消失。在大量的中间层计算中,输入数据不可避免地会落在使sigmod函数值趋近于1和-1的饱和范围内,因此使用relu激活函数来避免上述问题。Relu激活函数在整个函数域内是非线性的,但在局部范围内是线性的。对于小于零的输入,Relu函数设置为0,对于非零输入值,执行线性y=x运算。所以relu函数对于非负输入其实不需要数值计算,只需要判断阈值和输入是否为零即可。因此,relu函数可以加快神经网络的运行速度,避免sigmod和arctanx激活函数引起的梯度消失问题。
添加L2 regularization(权重衰减):
L2正则化是指在损失函数中加入L2正则项,这会影响W的更新,也就是求导后的权重。经过推导,L2正则化的参数会使原W权值的系数小于1,从而衰减权值,减缓梯度下降,减缓模型的学习效果,防止模型下降前期过程中训练集的学习效果过于“理想”,但到达验证集的准确率较低,没有很好的泛化效果。
L2正则化会在反向传播梯度下降时使原始W的系数小于1来推导和更新权参数,从而减缓W的更新速度,防止模型的过拟合。
增加Batch Normalization操作:
在卷积层完成卷积计算后,在数据进入激活函数前加入批量标准化。在数据进入激活函数之前,对一批数据进行标准化处理,使数据尽可能落在激活函数梯度较陡的区域,避免梯度消失,提高模型的泛化能力。但是经过批量标准化处理后,正确率并没有得到很大的提升,稳定在61%,这可能是因为使用了更小的卷积核。
增加Dropout操作:
对应卷积层后的Dropout运算会以一定概率随机放弃节点信息,防止模型的“过学习”造成过拟合。在计算完所有连通层后增加Dropout运算,将放弃节点的概率设置为0.2,即在计算完每层和每个卷积段的所有连通层后,将放弃20%的节点信息;在每个卷积段后增加Dropout运算,将放弃节点的概率设置为0.5。随着退网操作的增加,正确率大大提高,达到65%。由于在卷积层舍弃了很多计算节点,有效缓解了过拟合问题,模型学习效果在30次迭代前非常明显,val_loss下降趋势在30-80次迭代后趋于减缓,但仍下降缓慢。
优化的卷积网络模型如下:
5.模型经过上述训练和优化后的最终效果,卷积神经网络模型在验证集中的准确率稳定在65%,测试集在批量训练时的最高准确率为68%。基本上达到了人类对愤怒、厌恶、恐惧、快乐、悲伤、惊讶、中立七种表情所表现出的情绪状态的认知水平。其中,高兴、悲伤和愤怒表情的识别成功率高于65%的平均水平,而恐惧、厌恶、惊讶和中性表情的识别成功率较低,因此在判断相似表情时容易出错,比如将中性判断为厌恶。
通过调整和简化卷积神经网络的结构,在卷积计算后增加批量标准化操作,在全连接层计算后增加丢包操作,可以有效提高模型学习效果,缓解过拟合问题。后期实验要寻求数据变化,使用相应的数据增强方法,进一步提高模型在验证集中的准确性。
四。面部表情识别模型的实际应用(学生学习状态实时评价系统)温馨提示:
在模型的实际应用阶段,我们将构建一个简单的学生学习状态实时评价系统。该系统将通过对学生面部表情的分析、对学生坐姿的检测以及一些心理学结论,实现对学生学习状态的评价和分析。
由于文章篇幅过长,文章中涉及的代码没有完全展示出来,之后详细完整的代码会更新到单独的文章中。
1.Opencv图像处理,视频图像采集,学生学习状态检测所需的数据通过GetView函数获取。GetView函数使用Opencv库提供的VideoCapture()方法来捕捉和控制摄像设备。通过调整输入VideoCapture()的参数,可以读取本地视频,并从本地摄像机获取实时视频资源。
人脸目标检测人脸目标检测是实现人脸表情识别的第一步。利用Opencv库中内置的Haar分类器等图像分割方法实现人脸目标检测,将人脸表情图像区域与其他无关区域分割开来,保持单一人脸区域,从而保证卷积神经网络模型人脸表情识别的准确性。
Haar分类器以xml文档的形式保存在OpenCV安装目录的Lib\site-packages\cv2\data路径下。其中,由专门针对肩、脸等目标的分类检测器组成。Haar分类器在使用时需要预先加载相应的xml文件。在人脸目标检测阶段,需要加载人脸正面目标检测器的文件Haar cascade _ frontal face _ default . XML。在将采集的图像输入分类器之前,需要进行灰度处理。分类器检测后,会返回人脸在图像左上角的坐标位置以及人脸区域图像的长度和宽度。如果出现多个面部表情,它会返回一个由上述信息组成的数组。
利用python的切片功能,根据分类器返回的人脸图像的区域,对灰度图像进行切割,只留下人脸区域,然后对分割后的人脸图像进行灰度化,调整大小为48*48,才能输入卷积神经网络进行分析。
2.由于物理环境和时间的限制,不再在本地构建和训练卷积神经网络模型,直接采用百度AI人体姿态检测接口,将本地采集的图片数据转换成字符串,传输到百度AI云进行数据分析。分析后,头、肩、肘、腿等人体12个关键点的像素坐标信息将以json格式返回。由于本研究主要利用第一平面获取图像数据,所获取的信息一般仅限于人体从头至腹部的图像数据,因此坐姿的正确性检测只能在头、颈、肩区域完成。如果后期时间充裕,我们会考虑使用第二座椅结合外部视频采集设备,从侧面和全角度更完整地评估坐姿的正确性。
根据教育相关心理学的结论,坐在放松状态下,学生的学习状态和表现是最好的。如果学生或周围大部分人抱着胳膊上课,上课的效果比自然放松至少差26%。因此,在坐姿检测阶段,系统会重点检测学生是否处于不自然的放松状态,包括抱臂、肩膀高低不一致等。
3.收集测试数据分析根据相关论文的讨论和分析,大部分学生在学习状态良好时,身心状态处于自然放松状态,面部表情反馈处于中性状态。没有突出的情绪状态倾向,可能会有短暂的无辜砖和皱眉五官的变化。当学生的面部表情在一段时间内多次出现明显甚至夸张时,大部分学生的学习状态会明显下降。比如,一段时间内多次出现无辜的砖头甚至是笑的表情,学生很可能会处于“心不在焉”和“走神”的状态。
本研究将通过卷积神经网络识别和记录学生学习过程中的面部表情,综合表情反映学生学习状态的微表情和教育心理学相关论文的论述[16],统计学生在一段时间内的面部表情,分析学生在这段时间内的学习状态。一段时间内中性表情和无辜砖头表情的比例越高,没有其他不良坐姿的学生学习状态越好。如果有很多悲伤、惊讶、愤怒等表情,学习状态会被评定为差[17]。
4.学习状态分析报告及邮件发送在对学生面部表情和坐姿的统计分析完成后,将对学生这一时期的学习状态进行评估,形成最终的学习状态分析报告。包括学生在舞台上的表情信息和坐姿的统计。报告将自动发送到指定的邮箱。
学习状态分析报告会统计学生在一段时间学习中的愤怒、厌恶、恐惧、快乐、悲伤、惊讶、中立等情绪状态,以及各种不自然的放松坐姿的次数和频率。根据面部表情和坐姿的数据,对一段学习时间内比例最高的表情进行统计分析,根据不同表情和坐姿的比例,综合评价学生的学习状态。如果学生在一段时间内出现中性的面部表情和无辜的砖头面部表情,而没有过度的不自然的放松,其学习状态将被评价为较好的学习状态;反之,对学生学习状态的评价就会很差。当学生出现明显的不自然放松行为时,如抱臂、肩颈不平衡等,学习状态分析报告会呈现对学生不自然放松行为的分析、评价和提醒。如果系统长时间无法对采集的图像和视频资源中的人脸进行分析,该学生将被判定为“缺课”。
5.最终系统实现效果。面部表情识别效果显示:
人体关键点识别效果:
学生学习状态评价系统的效果演示:
实时表情 及 坐姿分析效果学习状态评估报告邮件转发效果
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。