《基于Tensorflow的人脸表情识别算法研究.pdf》由会员分享,可在线阅读,更多相关《基于Tensorflow的人脸表情识别算法研究.pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、广东东软学院本科生毕业设计(论文)基于基于 tensorflowtensorflow 的表情识别算法实现的表情识别算法实现Expression recognition algorithm based on tensorflowExpression recognition algorithm based on tensorflow内容摘要内容摘要随着时代的发展,大数据已经慢慢的成为互联网时代的主流,以及机器学习、人工智能、计算机视觉逐渐广布在大众生活中,单一的人脸识别技术已经比较成熟的应用在军事、医疗、公共社会等场所中,进而将人脸表情识别推向更高度的热潮。每个人的人脸都是独一无二的,人脸表情是当
2、人们面对面交流时很难被察觉的、带有隐藏的情绪意义的人体情绪,经常标明人们极力压制和暗藏的情绪情感, 所以通过机器与软件的结合进行表情识别可以清楚的得知该人的情绪。人脸表情辨别的研究还有很长的路要走,将以变化多端的模式不断持续的影响我们的日常。本文题目为基于 tensorflow 的人脸表情识别算法的研究。 科研学家把面部表情识别主要将表情划分为七个种类,整个人脸表情识别研究将会广东东软学院本科生毕业设计(论文)划分为四个过程:数据预处理、卷积神经网络的搭建、模型的训练与人脸表情的识别界面的设计,第一部分包括对数据集的预处理和利用卷积网络搭建的神经网络与训练模型,第二部分为加载模型进行人脸表情识
3、别测试,其中创新点就是使用 pyqt5 进行 GUI 界面设计封装,增加系统的界面简洁性与用户体验感。其中最大的难点就是搭建卷积神经网络与训练的过程花费的时间。关键词:关键词:人脸表情识别深度学习人工智能AbstractAbstractWith the development of the times, big data has gradually become themainstream of the Internet era, as well as machine learning, artificialintelligence, computer vision gradually spr
4、ead in public life, a single facerecognition technology has been more mature in military, medical, publicsociety and other places, and then face expression recognition to a higherupsurge. Everyones face is unique. Microexpression is a kind of subtleexpression with certain emotional meaning that is d
5、ifficult to be detectedface to face. It often expresses the depressed and hidden emotional feelings.Therefore, through the combination of machine and software to recognize the广东东软学院本科生毕业设计(论文)expression, the emotion of the person can be clearly known. Facialexpression recognition technology will con
6、tinue to affect our lives in manyways.This question is the research of facial expression recognition algorithmbased on tensorflow. Facial expression recognition mainly divides expressioninto seven categories, and the whole facial expression recognition research ismainly divided into two processes: t
7、he training of convolutional neuralnetwork model and the recognition test of facial expression. The first partincludes the preprocessing of data set and the neural network and trainingmodel built by convolutional network. The second part is the loading modelfor facial expression recognition test, in
8、 which innovation Point is to usepyqt5 for GUI interface design and encapsulation, to increase the systemsinterface simplicity and user experience. The biggest difficulty is to processand analyze the numerical value of face image.Key words:facial expression recognition deep learning artificial intel
9、ligence广东东软学院本科生毕业设计(论文)目目录录第一章 绪论. 11.1 研究背景及意义 . 11.2 国内外研究现状. 11.3 本文组织结构. 2第二章 Tensorflow 相关基础知识 .32.1 Tensorflow 介绍 . 32.1.1tensorflow 计算图 .32.1.2tensorflow 数据读取 .32.1.3 运行模型(会话) .42.2 Tensorflow 平台特性 .42.3 Tensorflow 环境配置 .5第三章 基于 Tensorflow 人脸表情识别.63.1 数据集与预处理. 63.1.1 数据集的选择 . 63.1.2 数据集的预处理
10、.63.2 搭建卷积神经网络. 83.2.1GoogleNet 原理 . 83.2.2 深度卷积神经网络模型 .83.3 模型训练与测试. 113.3.1 模型训练 . 113.3.2 模型测试 . 133.4 本章小结 . 15第四章 系统设计与实现. 174.1 系统设计. 174.1.1 系统功能需求 . 17I广东东软学院本科生毕业设计(论文)4.1.2 系统模块流程 . 174.2 相关技术 . 174.2.1pyqt5 介绍 . 174.2.2opencv 介绍 . 184.2.3 具体设计 . 184.3 系统运行效果. 214.4 本章小结. 23第五章 总结. 245.1 工
11、作总结. 245.2 不足与展望. 24参考文献. 25致谢. 错误错误! !未定义书签。未定义书签。II广东东软学院本科生毕业设计(论文)第一章第一章 绪论绪论1.11.1 研究背景及意义研究背景及意义如今,科技发达,信息流通,科技发展跟着时代变换的脚步,迅速的发展成为巨大的影响力,人际交往主流从面对面交流到书信到电话,到现在许多程序的面世,与人交谈只用花蝼蚁之力。我们已经踏入这个新的打数据的时代,一个数据迅速增长的时代。每天生成着巨量数据,被挖掘且运用在不同的范畴,生活也越来越方便。人工智能、人机交互、自动化也开始出现在人们的眼前,人工智能技术中的生物特征识别技术更加为重中之重,通过数据的
12、收集,将人类的生物特征或行为特征进行分析,从而进行特征的识别。 人脸识别已经运用在许多领域中, 如近期热点人脸支付, 也是通过该技术进行的。人脸包含了许多信息,脸部是含有最多信息的标注,世上没有完全相同的两张脸,没有完全相同的脸部信息,人与人交往中往往都是面对面交谈,脸部是最为重要以及突出的特征。当人们除去语言外,能表达信息还有表情以肢体动作,所以表情是人类的第二语言,经过表现在脸部的思维情绪来传播信息。而且表情还是浮现在表面无法被轻易隐藏的,轻微的器官抽动都是表情变动的特征,可以传递出人的情绪变动,所以表情识别成为了深度学习的其中一个热点。目前,一个高效率、高性能的人脸表情识别系统是非常被需
13、要的,它能够尽责任的被运用在普通日常的许多场景中。许多研究都将人脸表情分为七大类:正常,生气,蔑视,厌恶,恐惧,开心和伤心。在工作中,可以作为趣味性的增加到上下班打卡系统中,只有以开心的表情才能打卡成功,可以提高员工的热情等等。表情识别一直都在研究热门中,而 tensorflow 便携、高效、可扩展用于人脸表情的研究也是对此的一种推进。在本文中主要结合 tensorflow 对人脸表情识别进行研究, 制作一个 GUI 界面进行人脸表情识别认证。1.21.2 国内外研究现状国内外研究现状最早横空出世在人们眼前的表情辨别是在 20 世纪 70 年代,距离现在已经过去了很长一段时间,但是表情识别的热
14、度居高不下,仍为时下热点,特别由于现在处于一个每天都有海量数据产生的时代, 表情识别的展开绝对不失为是一个充满挑战性与可行性的科研研究题目。面部表情作为传递人类内心活动以及情绪的最直接方式, 研究人脸表情识别的源头是由 PEkman 和 WVFriesen 于 1971 年,将面部表情这么复杂的一个事物,划分并设定为 6 种情绪:诧异、快乐、悲哀、恐惧、讨厌、愤怒,而后又增加了没有表情变化的情绪种类:正常;并非零碎的详细有安排地创建了人脸表情图象库,里面包含详细讲诉了如何区分每一种表情的面部特色变动,包括脸部器官等细微变化都一一记录下来。而不得不提的就是表情识别的历史里程碑:面部肌肉行为编码系
15、统(F:Facical A: Action1广东东软学院本科生毕业设计(论文)C:Coding S:System),也是由两位伟大的学家提出的。2019 年 Vanita Jain 等人提出了一种融合局部特彾和全局特彾的面部表情识别模型, 该模型经过将人脸器官作为划分的根据,划分出多个区域,并仔细选择有助于减少冗余的感关趣区域来提取局部特征。国内张正友博士,也曾罗列出表情识别的重要性以及主要内容:人脸表情识别被认为在现代人工智能化与人机交互技术中的占领着一个比较重要的位置, 最近几年该研究也得到不通过领域的深刻关注,顺势飙升而成为现世最受关注的热点之一,许多科学研究学者纷繁研讨以及提出许多提高
16、识别效率的应用方法。 而非动态情绪图象的搭建使用多层深度网络学习的方式也是今日倍受关注的一种人脸情绪识选择:The Third EmotionRecognition in the Wild Challenge 的表情识别方式是在卷积神经网络的基础上实现的。 前馈神经网络作为卷积神经网络的组成部分,它所包含的人工神经元能够对覆盖在其区域内四周的一些周围神经元做出适当的呼应, 对于大型数据图像具有良好的大规模图像处理性能。也给表情识别研究带来飞速进步。2019 年彭兇霖等人提出一种分层任务学习的人脸表情识别并且以现有的卷积神经网络为基础模型,建造双层树的分类器,对旧时惯用的输出层的平面 softm
17、ax 分类器进行替换且同时间内完成构建深度多任务学习框架,将人脸表情识别推上更深层次。人脸表情识别系统主要是对于人脸的检测和对于人脸表情的识别分类组成并且逐步将其运用到跨领域范畴,将其放置于不同的依附体中,如软件,网络摄像头等等。1.31.3 本文组织结构本文组织结构本研究论文主要包罗讲诉了五大个章节:第一章为绪论部分主要对人类脸部表情识别研究的背景与意义进行了了解与收集,最终以文案合集编写的方式显示出来, 还有由古至今的国内国外关于人脸表情识别相应的具有重大意义的研究进行了分析并阐述。第二章为讲述 tensorflow 主流应用以及本文运用到的相关基础知识。本章主要介绍了 tensorflo
18、w 搭建时所需要用到的主要依赖包进行详细阐述,主要详细讲诉 tensorflow的优点以及时效性、 关注点与 tensorflow 与深度学习框架的结合使用的相干常识与应用。第三章主要讲述基于 tensorflow 框架并且搭建卷积神经网络从而进行对人脸表情识别算法的准备与研究。描述研究前期准备工作,包括获取数据集、表情分类、搭建卷积神经网络模型与训练过程。第四章为系统设计与实现为了符合大众性以及优化使用者的体验感, 提高了界面的美观性以及简洁性。使用 opencv 和 pyqt5 进行了 GUI 界面的设计,本章主要讲述 GUI界面的设计原理与步骤。第五章为全文总结对该论文与系统设计一切执行
19、过的任务与具体内容进行细致的总结, 分析优缺点以及不足之处, 并提出自己对未来人脸表情识别的发展所持有的观点。2广东东软学院本科生毕业设计(论文)第二章第二章 TensorflowTensorflow 相关基础知识相关基础知识2.1 Tensorflow2.1 Tensorflow 介绍介绍2.1.1tensorflow 计算图“Tensorflow” 于 2015 年 11 月出现在大众视野中, 是由谷歌在基于 DistBelief 基础上所研发的numerical computation 允许多人分享的开源软件库。他灵活的适应性加速了科研人员一系列的训练模型设计完成,在海量数据集的模型训练
20、中更是拔得头筹,成为开源社区中最为欢迎的深度学习框架。“Tensorflow”的命名由来可以看作是将本身名词划分为两个特有名词,“Tensor”张量,该概念本是扩大数学量且表达到物理量上,而在 tensorflow 中是一个基础并代表的是某节点 a 数据向节点 b 移动传递数据,通常可以用多维数组去定义张量,更加容易被理解与接受,即数据结构。“Flow”数据流、飞,数据按照流的形式进行计算、互相转化的过程,即计算模型。Tensorflow是一个将复合的数据组成结构通过使用计算图的方式进行分析和处理传输过程的程序设计系统。计算图是在“node-edge-node”转换模式下传输数据的非形象概念。
21、Tensorflow 的根本计算模型解释为向量 a、b 强势的向节点 add 进行传输,如下图2-1-1 所示。图 2-1-1 节点与向量关系图2.1.2tensorflow 数据读取现有文章中对于 Tensorflow 数据的处理普遍会划分为有一共四种存取数据的通用方法:1、Feeding(供给数据)用 Python 编程语言来对数据进行控制处理后把被处理的数据供给到计算图中。2、tf.data API(文件读取)将待处理的文件数据用一个输入管道进行数据的读取。3、Preloaded data(预加载数据)使用一个constant 常量对数据进行加载,仅对于数据量较小而言。4、QueueRu
22、nner(队列管理器)通过协调与创建一到多条线程,通过其从文件中读取 records 到数据流图,如果数据量较大,太耗内存,所以这时最好使用该方法,当需要对特殊文件格式如 csv 文件进行一系列的数据读取,继而可以带有选择性的运用具有高效性、通用性并行于一体的 tensorflow 一种特定规范格式TFRecords 格式。3广东东软学院本科生毕业设计(论文)2.1.3 运行模型(会话)在 Tensorflow 框架中能够划分以三种模式进行会话可以分为:1、普通调用 Sess.run 需要明确调用会话生成函数以及使用完成后,关闭会话函数回收资源,使用该模式时必要明确的 Sess.close 关
23、掉会话,不然会造成资源泄露的问题,代码如下:Sess = tf.Session()Sess.run()Sess.close()2、可以经过使用 Python 编程的(With as)上下文管理器进行封装创建会话,可以解决不正常退出程序而导致的资源泄露问题, 当程序结束时上下文管理器时会主动封锁一切资源,代码如下:With tf.Session() as Sess:Sess.run()2.2 Tensorflow2.2 Tensorflow 平台特性平台特性Tensorflow 后端是利用 C+、CUDA 进行保障高效性,其资料库中拥有海量辅佐函数来简化构建图的任务,容易上手,简单易用。其接口可
24、以被使用于 C/C+语言以及Python 等,其余的编程语言也能够通过SWIG 工具来间接运用该接口。Tensorflow 系统计算任务可以是通过计算图来体现其本身不包含各种计算函数,所以在开始编程前,需要在运用前先通过导入(import)命令衔接需要使用的接口。Tensorflow 程序能够划分为构建(bu)图和执行(execution)图两个阶段如下图 2-2-1 所示:图 2-2-1 Tensorflow 程序图4广东东软学院本科生毕业设计(论文)Tensorflow 拥有机动性、可适性强、自动差分、最优化表现等特点,在图像分类、机器视觉、无人驾驶、音频处理、推荐系统等深度学习、机器学习
25、范畴场景下都有丰硕的应用成果,甚至涉及了通用数值、符号计算畛域。 TensorFlow 正在致力于树立能够使得学术界的学术研讨交流与成果展现变得愈加快速的平台, 甚至能够将机器/深度学习跨越学术界至工业界运用到生产之中。2.3 Tensorflow2.3 Tensorflow 环境配置环境配置本研究实验环境为:Tensorflow2.0(CPU)+python3.7+CUDA8.17.13.45051. 安装 python 编程环境浏览器打开网址 :www.python.org,选择合适且需要的python 版本安装包安装即可。2.Tensorflow-CPU 版本比较方便合适大部分电脑,对显
26、卡要求不高,所以选择安装Tensorflow-CPU 版本,从应用中打开命令提示符(cmd)窗口,如果 pip 包已经很久没有更新使用,提议进行升级,因为若版本过旧,不能安装最近更新的包。3.由于各个版本的 Tensorflow 都会包含对应的 numpy 包, 所以提议事先检查本机是否已经安装了 Numpy 包,可以通过输入 pip uninstall numpy 进行将原有的旧版 numpy库删除。4.然后可以在命令提示符中输入安装 tensorflow 的语句,系统会自动选择并下载安装包并进行安装配置 tensorflow。若显示 numpy 错误并安装失败,则可以先把东西全部卸载干净,
27、然后重新开始直接在第三步语句后选择忽略 numpy 组件加上(ignore-installed numpy)进行安装,。5.测试 Tensorflow 能否正常使用, 随便打开 python 编程工具创立项目并输入导包语句若成功输入无红点报错则安装成功。该研究所用到的库:time、tqdm、numpy、os、csv、cv2、matplotlib、sys、pyqt5。5广东东软学院本科生毕业设计(论文)第三章第三章 基于基于 TensorflowTensorflow 人脸表情识别人脸表情识别3.13.1 数据集与预处理数据集与预处理3.1.1 数据集的选择本研究在数据集的选择中,最终抉择使用 k
28、aggle 上被公开的数据集,这样的选择不但可以节省数据采集花费过多的时间,而且可以更加准确、统一地评估同一个数据集以及人脸表情分类器通过不同方式测出的性能, 即而采用人脸表情库 FER2013 作为表情识别的数据集。这个数据集一共包含 35887 张不同人不同表情的图片,并且标注 usage 划分为 3 个部分为测试部分(Training)共有 28709 条数据,共同验证部分和私自验证部分一共由 7178 条数据组成,每条数据都是由48X48 像素的灰色图像转化为不同数据点组成的,并且标注 emotion 划分为 7 种表情,用数字 0-6 标签分别对具体表情标注中英文如下:0=生气(an
29、gry),1=厌恶(disgust),2=恐惧(fear),3=快乐(happy),4=悲伤(sad),5=惊喜(surprised),6=正常(netrual)。所选择的人脸表情库(fer2013)是将表情图片的数据与用途全部以数组的形式存放如 fer2013.csv 文件中而不是以图片的形式保存的,fer2013.csv 数据集的组成为由首行为表头说明三列数据的具体含义与命名,首列为心情标签(即表明表情种类);第二列为图片转化成的所有数据(即像素值)以数组格式储存;尾列为三类数据用途的标注(即为训练集或测试集或验证集)组成如图3-1-1 所示图 3-1-1 fer2013.csv 内容图3
30、.1.2 数据集的预处理若通过寻常的处理数据集的方法, 若选择直接将从网上收集到的图片数据集全部载入内存,再进行预处理将会花费许多时间,也没有必要将csv 文件数据集再转为图片集多此一举的方法会使得每次训练全部数据载入的过程缓慢,耗时长,而且必然会造成内存巨大的开销。所以决定选择将数据集(csv 文件)直接6广东东软学院本科生毕业设计(论文)转化为 TFRECORD 的格式而不是图片从而节省内存与方便调用。选择的 TFRECORD 格式是由 Tensorflow 提供的以一种独特的格式将数据存储起来。TFRECORD 的格式结构比较难理解作为一种二进制文件,没法直接查看。 但是它可以合理调配及
31、运用内存, 便利于海量数据的读取与运用而且不需要独自的标签文件,优点效率高、跨平台,有助于降低学习成本; TFRECORD格式文件由字段(Features)与协议内存块(protocol buffer)组成。并且可以输入代码从而获得所需的数据,再将数据写入 Example 协议内存块(PB)中且将协议内存块序列转化成一个字符串,并且通过 TFRecordWriter 将得到的数据写入到 TFRECORD 格式文件中去。TFRecord 只可以支持 string,int64,float32 三种格式进行存储管理,本文通过以列表的形式选用 Int64 格式写入 Feature 中。 信息包含了图片
32、的标签 (label) ,图片的高度(height)与宽度(width)还有图片的数据(raw),分别对应了 value为 label,height,width,raw 的 feature 如下图 3-1-2 所示。图 3-1-2 csv 转 TFRecorf 主要代码图最终将测试部分( Training)公共验证部分( PublicTest)和私有验证部分(PrivateTest)数据分别生成fer2013_train、fer2013_test、fer2013_eavl 三个TFRECORD 文件,如下图 3-1-3 所示。图 3-1-3 划分数据集图7广东东软学院本科生毕业设计(论文)3.
33、23.2 搭建卷积神经网络搭建卷积神经网络3.2.1GoogleNet 原理Googlenet 是于 2014 年与 VGGNet 并行被提出的深度卷积网络,在深度学习分类与识别方面的实验中深受喜爱且对识别分类体现效果有着很大的作用,GoogleNet 的特点与之前被熟知的网络不一样的是它主要考虑横向的延伸而不是纵向。Googlenet 在深度与宽度的领域中,选择合并使用1*1 与 3*3 与 5*5 与pooling 层的聚集结合使用。主要选择运用 Inception mod 来进行对特征映射厚度的减低作用。 最大优点是使用小计算量却提高一层特征变化与非线性化属于性价比较高的一类 Incep
34、tion 模型如下图 3-2-1 所示。图 3-2-1 Inception 模型图3.2.2 深度卷积神经网络模型一个完整的卷积神经网络(CNN)包括一个输入层(INPUT)、一个卷积层(CONV)、激活 函数 (RELU)、池 化层(POOL)、全连接层 (FC)和一个输出层(OUTPUT),但是在日常实验中那个所使用到的卷积神经网络进行特征提取时,将会使用不限定个卷积层。相对于传统分类方法,神经网络能够在特征提取和分类范畴同时延伸,改变了传统手工编码提取特征的方式,将其优化成自动化一种端到端(ETE)的学习。传统方法与深度学习方法对比如下图 3-2-2 所示:8广东东软学院本科生毕业设计(
35、论文)图 3-2-2 传统方法与深度学习对比图本文所使用 Tensorflow的 API 接口与函数:tf.variable_scope()函数:定义于创立变量层的操作中的上下文管理器。能够判断验证 values 是不是来自同一图型, 保证图型是默许的图型, 并推送名称范畴和变量范畴。tf.get_variable()函数用于截获一个已经存在的变量或者创立一个崭新的变量。tf.nn.relu()函数 Return(返回)Tensor,通常 features 会是(卷积核,图像)的卷积后加上 bias。tf.nn.conv2d()函数 filter(conv1_weight)卷积核,要求也是一个
36、张量。 strides是为在卷积时图像中的每一维的步长,这是个一维的向量, 1, strides, strides, 1开头第一位与结尾一位必需固定为 1。 padding 为 string 类型其值为“same”与“valid”。tf.nn.max_pool()函数 max pooling 是 CNN 当中的最大值池化操作。用法与tf.nn.conv2d()接近。tf.nn.dropout()函数 tensorflow 框架中主要为了尽量避免或过拟合的加重而利用的函数,它普通都是存在于全连接层。tf.reduce_mean()函数:最大作用于作为降维或者计算 tensor (图像) 的平均值
37、。使用到张量 tensor 沿着指定的数轴(tensor 的某一维度)上的平均数值的计算。tf.nn.lrn()函数与 tf.nn.dropout()用法相似, 用于数据增强并且作为 relu 激励之后的防止数据过拟合而被提出的一类解决办法,被称为 local responsenormalization局部响应标准化。在输入层后加入一个 1*1 的卷积层来搭建这个模型,该方法其有既增加非线性表示,加深网络,提升模型表达能力且基本不增加原始计算量的优点。本研究将卷积层与输入层分为两个函分别定义,卷积层关键个别代码如下图3-2-4 所示,全连接层关键代码如下图 3-2-5 所示:9广东东软学院本科
38、生毕业设计(论文)图 3-2-4 卷积层主要代码图图 3-2-5 全连接层主要代码图优 化 器 选 择AdamOptimize , 学 习 率 设 为0.001 , train_step_=tf.train.AdamOptimizer(self.lr).minimize(loss_, name=train_step)。网络的整体架构包含输入层一共 11 层网络,分别为:输入层(input)、卷积层 (convolutions, conv1) 、 卷积层 2 (conv2) 、 池化层 1 (subsampling, pool2) 、卷积层 3(conv3)、池化层2(pool3)、卷积层4(c
39、onv4)、池化层3(pool3)、全连接层 1、全连接层 2、输出层(径向基层)。详细内容如下表所示:表 3-2-1 搭建卷积神经网络种类InputConv1Conv2Pool2Conv3描述卷积层和 relu卷积层和 relu最大池化卷积层和 relu核1*15*53*33*3步长112110填充21输出48*48*148*48*3248*48*3223*23*3223*23*32丢弃广东东软学院本科生毕业设计(论文)Pool3Conv4Pool4Local1Local2Logits最大池化卷积层和 relu最大池化全连接和 relu全连接和 relu输出3*35*53*3212211*1
40、1*3211*11*645*5*641*1*20481*1*20481*1*750%50%3.33.3 模型训练与测试模型训练与测试3.3.1 模型训练对于人脸在图像中的比例、脸部正对或侧对、眼睛等物品对脸部的遮挡、不同浓度的妆容、不同光照等情况,都会影响识别效果。通过编写数据增强函数pre_process_img,使得模型在训练过程中出现过多的网络过拟合现象,通过对训练集数据的变换可以得到泛化能力更强的深度网络顺应于实际场景。主要通过tf.image.random_flip_left_right()函数:可以按水平 (从左向右) 随机翻转图像,tf.image.random_brightne
41、ss()函数: 在-32/255, 32/255的范围内随机调整图片的亮度。tf.image.random_contrast()函数:在-0.8, 1.2的范围随机调整图片的对比度。tf.random_crop()函数:进行对图像大小的随机裁剪。 tf.image.resize_images 函数:调整图像的像素大小至 48*48 主要代码如下图 3-3-1 所示:图 3-3-1 数据增强代码图编写读取 TFRECORD 文件数据函数_parse_function_csv,tf.cast 函数:将tensorflow 中张量数据转换类型即将 features 类型由 int64 变为 int3
42、2,tf.multiply函数:将48,48,1与 1./255 中对应元素各自相乘。主要代码如下图 3-3-2 所示:11广东东软学院本科生毕业设计(论文)图 3-3-2 读写 TFRecord 代码图正式开始训练时,每一步骤(step)训练过程,都要打开 tensorflow 会话,使用 session 的 run 方法执行计算,进行数据的读取,并引用载入所构建的卷积神经网络,主要代码如下图 3-3-3 所示:图 3-3-3 开始训练主要代码图将准确率与缺失值,每一 step 的数据数据变化显示在面板中,可以方便的监控整个训练过程。因为数据量的庞大整个训练过程非常的长。当训练完成时,当准确
43、率为最大时,保存训练模型与权重模型,最终成功有约 75%的准确率。主要代码如下图 3-3-4 所示,部分训练数据如下图 3-3-5 所示:12广东东软学院本科生毕业设计(论文)图 3-3-4 计算 loss 与 acc 代码图图 3-3-5 训练过程数据图3.3.2 模型测试模编写代码验证模型准确率,先布置存放表情识别模型、人脸识别模型(opencv 自带haarcascade_frontalface_alt.xml)、需要验证的图片路径。新建一个列表存放 7 中表情种类angry, disgust, fear, happy, sad, surprise, neutral,然后使用 Sessi
44、on 来激活 ckpt 文件对话。模型测试主要分为三步:1、建立人脸表情文件夹:收集所需要识别的人脸图像存放到一个文件夹。2、创建函数对所需要识别的图形进行数据处理创建函数 advance_image(images_):输入图像格式做统一处理。新建列表(rsz_img)用 for 循环将一张一张图像 filp 水平翻转后的数组数据, resize 重新规定13广东东软学院本科生毕业设计(论文)为 48*48 数组,且 np.reshape 重新规定数组组成为48,48,1存入后,在建一个新列表(rsz_imgs)把(rsz_img)转换为 numpy.array 格式存入。具体方式如下图 3-
45、3-6所示:图 3-3-6 图像数据处理图创建函数 produce_result(images_):对处理过的图像数据,进行识别得出结果,生成 tensor。创建函数 produce_confusion_matrix(images_list_, total_num_):产生混淆矩阵代码实现将 confusion_matrix 值设置为 True 即生成混淆矩阵 False 为识别遍历指定文件夹内所有 jpg 与 png 格式的图片,并计算 7 种表情的百分比。创建函数 predict_emotion(image_):调用 produce_result(images_)使用模型进行预测表情。具体
46、代码如下图 3-3-7 所示:图 3-3-7 预测表情主要代码图创建函数 face_detect():调用人脸识别模型进行人脸识别定位。为了加快检测速度,过滤噪点目标的目的,选择使用 detectMultiScale 函数中目标检测对象的最大与最小两极尺寸。14广东东软学院本科生毕业设计(论文)3、进行表情识别,识别出的人脸使用 cv2.rectangle(img, (x, y), (x + w, y + h),(188, 20, 125), 3) 用 方 框 将 人 脸 框 住 , 并 用 cv2.putText(img, emo, a,cv2.FONT_HERSHEY_SCRIPT_COM
47、PLEX,www_s,(255,200,155),thickness=www,lineType=1)函数将识别出的表情类别写在方框下方,把 7 种表情的比例用柱状图表示出来。遍历文件夹所有图片进行识别。最终效果展示如下图3-3-8 与图 3-3-9:图 3-3-8 识别实例图 1图 3-3-9 识别实例图 23.43.4 本章小结本章小结表情识别的技术原理与和实现原理具体流程如下图 3-4-1:15广东东软学院本科生毕业设计(论文)图 3-4-1 表情识别具体流程图经过测试与诸多 fer2013 模型的测试对比发现,netural 表情最多,happy,surprise 两类表情识别准确率相对
48、较高,而对 angry,fear,sad 类表情识别准确率较低,因为他们都是以皱眉,抿嘴等一系列的动作来辨别表情的,不利于相互之间做明显区分。如下表 3-2 所示:表 3-2 测试结果angrydisgustfearhappysadangry0.6820.1170.0870.3050.0315disgust0.0220.66920.01970.00250.07090.0040.0045fear0.16990.06910.6520.04650.0520.06520.0235happy0.01120.00250.00340.87660.0260.00250.062sad0.14230.01440.
49、09820.01550.7120.00760.0432surpriseneutral0.01540.01890.05840.01560.0220.78350.11220.00870.00310.15790.15610.0075surprise0.0215neutral0.03540.01250.06995由表 3-2 可以看出开心的表情准确率是最高的, 因为他们本身的独有特点是比较独特与其他表情没有太大的相似性。生气, 不安与伤心的准确率相对来说比较低都在 65%-72%之间,并且相互识别也达到了 10%的几率会识别错误为相互的表情,主要原因为在训练集中,各类表情数据量占比不统一,表情特征的相
50、似性,从而导致模型具有倾向性。16广东东软学院本科生毕业设计(论文)第四章第四章 系统设计与实现系统设计与实现4.14.1 系统设计系统设计4.1.1 系统功能需求用户可以通过生成的 ui 界面进行提交图像、实时摄像头读取视频数据进行分析,然后通过检测得到对应的表情分析结果。该系统并没有制定适用人群,需求分析没有较为复杂繁琐的功能,普通的使用 pyqt5 与 opencv 进行实现图片识别与视频在线人脸表情识别 GUI 界面封装。最主要的工作仍然是放在内部各种深度网络算法(包括人脸面部表情特征识别提取、搭建卷积神经网络等)的优化搭建以及实现,并且进一步明确各个功能之间的关联性以及是否达到目的准