《基于python人脸识别系统.docx》由会员分享,可在线阅读,更多相关《基于python人脸识别系统.docx(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于python人脸识别系统基于Python人脸识别系统 Face recognition system based on Python 摘要 随着科技的不断发展,人工智能在人类生活的应用越来越普及,作为当前最受关注的生物特征识别的方法,人脸识别在考勤、边检、安防、运输等领域有着巨大应用前景,是人工智能与计算机视觉领域的探讨热点之一。本文是基于python语言实现的人脸识别系统,利用keras搭建CNN卷积神经网络构造一个18层网络结构的识别模型,实现人脸录入、图像处理、模型训练、识别人脸等功能。主要描述图像处理与模型搭建两个模块。图像处理包括图像的尺寸比例调整、数据归一化等学问,模型搭建包括
2、模型建立、训练、评估。最终识别精确率达到99.6% 。 关键词:人脸识别 图像预处理 模型训练 CNN Abstract With the rapid development of science and technology, artificial intelligence is more and more popular in human life. As the currently most concerned method of biometrics recognition, face recognition has great application prospects in the
3、 fields of time and attendance, border inspection, security, transportation, etc. It is one of the research hotspots in the field of artificial intelligence and computer vision. This paper is a face recognition system based on python. It use keras to build a convolutional neural network to construct
4、 an 18-layer structure recognition model to realize functions such as face input, image processing, model training, and face recognition. It mainly describes two modules of image processing and model building. Image processing includes knowledge such as image size adjustment and data normalization,
5、and model building includes model establishment, training, and evaluation. The final recognition accuracy reached 99.6%. Key words: Face recognition Image preprocessing Model training CNN 书目 第一章 课题背景 1 1.1课题来源 1 1.2 探讨意义 1 1.3 国外探讨现状 2 1.4 国内探讨现状 2 其次章 需求分析 3 2.1技术可行性分析 3 2.2系统需求分析 3 2.2.1程序功能需求分析 3
6、 2.3开发环境需求 4 第三章 系统概要设计 5 3.1各模块功能介绍 6 3.1.1人脸录入模块 6 3.1.2搭建模型模块 6 3.1.3 人脸识别模块 7 第四章 系统具体设计 8 4.1 整体运行流程图 8 4.2 图像预处理设计 8 4.2.1调整图像尺寸 8 4.2.2交叉验证法划分数据集 10 4.2.3数据标签one-hot编码 10 4.2.5像素归一化 11 4.2.6 补充说明 12 4.3 卷积神经网络模型的设计 12 4.3.1卷积神经网络 12 4.3.2模型设计 15 4.3.3模型训练 17 第五章 系统 识别结果 20 结束语 22 参考文献 23 致谢 2
7、4 第一章 课题背景 1.1课题来源 随着线上支付在生活中的快速普及,人们出行不带钱包只带手机渐渐成为一种趋势,然而不带钱包,通常就会忘带身份证。而如今现实生活的方方面面中,像银行、金融借贷、买房、购车、住宿、旅游、购物都须要随身携带身份证。而随着科学技术的快速发展,刷脸时代已经强势进入我们的生活,刷脸支付、刷脸安检、刷脸考勤靠刷脸办事正快速渗透我们的日常生活和工作。这种追求更加便捷生活方式的理念为人脸识别技术创建出很多新的应用场景,并给予它新的生命,使得人脸技术成为近几年的探讨热点。然而,这项技术早在20世纪的60年头便已经有学者绽开探讨,尤其在安防领域,已经研发出不少的应用并投入实际运用。
8、大众对于该技术的理解更多的是在欧美犯罪电影中出现的FBI和CIA,探员通过查询世界各个角落的监控器,将犯罪嫌疑人与人脸识别系统相比对,从而确定犯罪嫌疑人出现过的地点。虽然情节夸大了该项技术的应用,但事实上人脸识别技术早已被很多国家的大量运用在安防领域。它并不是一项新出现的技术,只是缺乏在人们日常生活中的应用场景,使得人脸识别技术直到近几年随着智能化时代的到来才渐渐被大众熟知。在国内,对该项技术的探讨起先于1990年,目前主要应用在考勤、边检、运输、安防等领域。 1.2 探讨意义 随着人工智能在计算机技术领域的快速发展,智能化产品渐渐渗透在人类社会生活中的各个方面,使得社会的运行效率大幅度的提升
9、,人类也渐渐从体力劳动中解脱出来,将更多的时间放在技术创新创建上,而人脸识别作为人工智能中的重要技术之一,是富有应用意义和挑战性的探讨课题之一。相对于其他生物特征识别技术,人脸识别技术因为具有非侵扰性、非强制性、非接触性、便捷性等优点,符合人们对便捷生活方式的追求和对身份识别的快速、精确、平安的要求,使得它在身份识别、自动监控、人机交互等领域拥有巨大的发展潜力。人脸识别技术覆盖了计算机视觉、模式识别、数字图像处理、数学等诸多领域学科内容,虽然对该项技术的探讨已取得一些成果,但在实际应用中仍存在着不足和困难,比如人脸识别的背景环境,脸部表情、妆容、姿态、发型的改变,都会降低识别的精确性,给识别带
10、来困难。降低识别错误率、提高识别速度、实时性要求是人脸识别技术当前迫切须要解决的问题。1.3 国外探讨现状 20世纪60年头,人脸识别技术便已经有人探讨,但始终到80年头后期这段时间内人脸识别技术都只是作为一般性的问题探讨,不能自动完成识别任务,没有发表具有代表性的理论探讨成果。直到90年头后随着计算机运算速度的提高,人脸识别技术发展迎来了重大突破,诞生了很多代表性的算法,“特征脸”法1 樊慧慧. 智能家居环境下动态人脸身份识别系统设计D.2015. 、基于线性判别分析的Fisherface方法, “作差法”,弹性图匹配技术等等,使得人脸识别技术突飞猛进。如今,人脸识别技术已被运用到很多公众场
11、所,尤其是“911”事务后,国外许多大型公众场合已经应用这一技术。美国等欧美国家在人脸识别技术有着较大的成就,早在90年头,美国军方就组织了FERET人脸识别算法测试,对人脸识别技术起到主动的推动。2000年后,人脸识别技术渐渐从学术探讨走向商业应用。如今,经过几十年的发展,人脸识别技术已经被广泛应用到金融、安防等其他众多领域。1.4 国内探讨现状 国内对于人脸识别技术的探讨起先于上世纪80年头2 许丽艳. 人脸识别技术探讨D.天津高校, 2010. ,但到90年头后期才被很多院校和机构普及,相比其他国家起步相对较晚,但是进展快速且成果斐然。如苏光大教授提出的最佳二维人脸理论和MMP-PCA算
12、法、李子青带领的探讨团队提出了基于近红外的人脸识别技术、汤晓鸥试验室发表的DeepID系列算法等等,其中为08年奥运会安保3 曹健. 人脸检测和识别系统的设计与应用D. 南京信息工程高校,2013. 4 人脸识别系统应用奥运开幕式J.中国防伪报道, 2008, 000(009):59. 供应保障的人脸识别系统和智能视频监控系统就是李子青教授在中科院自动化所研发。不只是在学术探讨上,在商业上,也涌现了许多科技公司专注于这项技术的探讨,如商汤科技、依图科技、旷视科技都是国内探讨人脸识别技术的知名企业,且在该领域均取得不错的成果,如依图科技分别在2017和2018的全球人脸识别挑战赛FRPC竞赛中获
13、得冠军,在2018年的竞赛测试结果显示依图科技的识别算法在千万分之一的误报状况下识别精确率接近99,达到接近极限水平。而且依据NIST在2018年依据全球人脸识别算法测试状况发布的排名中,前五名中三名被中国公司包揽5 弘毅. 2019人脸识别技术50强J.互联网周刊,2019(21). 。这些数据表明我国的人脸识别技术在国际上名列前茅。其次章 需求分析 人脸识别技术是近几年人们的探讨热点和探讨焦点,它能应用于很多领域,从一起先的安防到如今的金融、教化、考勤等,目前我国和其他国家有大量的学者在不断的深化探讨。 2.1技术可行性分析 在着手开发之前,我查阅了大量资料,对比目前人脸识别技术的多种算法
14、,卷积神经网络能对极少的预处理过的原始像素,快速识别出特征规律,因此选择卷积神经网络算法做人脸识别。通过搭建一个多层网络模型,对模型输入人脸数据进行训练,使模型能够对实时视频流中出现的人脸进行精确识别。 训练模型须要打算数据集,利用摄像头收集身边人的脸部图片作为数据集,为了更好的验证模型,须要将数据集根据交叉验证原则划分训练集、验证集和测试集三部分。采纳交叉验证是因为手动划分数据集可能会使数据分布不匀称,导致训练出来的模型偏向于数据较多的,造成在测试或在实际预料时数据较少的分类不正确。交叉验证法通过不同比例对样本进行划分,重复运用样本数据,能够得到多组不同的训练集和测试集,使模型训练效果更优。
15、 很多机器学习算法不能干脆对标签数据进行操作。它们要求全部的输入变量和输出变量都为数字形式。one-hot编码把分类数据转化为二进制格式,分类的输入和输出变量都是一样的,供机器学习运用。 图像是由像素组成,彩色图像由3个矩阵所构成,即红(R)、绿(G)、蓝(B)三个颜色通道,每个像素矩阵的取值都0,255区间内的整数,因此当训练数据的值较大时,会导致模型的训练时间增加,速度变慢。因此须要将图片像素归一化,用于提升网络收敛速度,削减网络模型的训练时间。2.2系统需求分析 2.2.1程序功能需求分析 整个程序的最终目的是能识别出人脸。首先通过摄像头获得人脸图片,经过图像预处理后作为模型后期训练的数
16、据,预处理模块的好坏干脆影响着模型的识别精确率。接着利用keras框架搭建卷积神经网络构建一个18层的卷积网络结构,并利用上述处理过的数据供应给模型进行训练,选择其中最优的模型。这两个模块是实现人脸识别功能的基础。所以本设计中所要完成的功能如下所述: (1)人脸录入 这个模块是为了获得图片作为训练数据,主要通过开启摄像头后从视频流中截取人脸图片,并将截图的人脸图片独立保存在文件夹中,文件夹以该人的名字命名;也可以干脆导入人脸图片。(2)图像预处理 该模块主要包括图像的尺寸比例调整、交叉验证、变更维度依次、One-hot编码、归一化等。(3)人脸检测 该模块采纳OpenCV自带的人脸检测工具ha
17、arcascade_frontalface_alt2,检测摄像头的哪个区域为人脸,可用于检测静止图像,视频和摄像头所得到图像中的人脸。(4)模型建立 该模块采纳keras搭建CNN卷积神经网络框架,将预处理过的脸部图像数据作为训练数据,对搭建的神经网络进行模型训练,并评估模型的识别率,得到最终模型。2.3开发环境需求 Anaconda是一个开源的集成各类python工具的集成平台,包含了pyqt等大量包,供应包管理与环境管理功能,能很便利的配置程序设计所需的环境。程序设计采纳Anaconda 3作为开发工具,内置python版本为3.7,通过Anaconda prompt安装tensorflo
18、w,numpy,keras,sklearn等第三方库。值得留意的是不同版本的tensorflow要搭配对应的python版本,安装前最好上网先查询二者对应版本搭配,否则会耗费大量时间在安装上。第三章 系统概要设计 本章节大致介绍了人脸识别系统的整体结构设计流程以及图像处理模块运用的原理。(1)系统整体结构设计如图3. 1所示 图3.1系统结构设计图 (2)图像预处理模块设计如图3.2。 图3.2 图像预处理层次图 3.1各模块功能介绍 3.1.1人脸录入模块 人脸采集模块是为了获得人脸图片作为后期模型的训练数据,人脸图片可以从USB摄像头实时截取,也可以从视频中截取。利用OpenCV的Vide
19、oCapture函数获得摄像头的视频流,利用OpenCV自带的人脸检测工具haarcascade_frontalface_alt2检测摄像头的哪个区域为人脸,进行长宽坐标获得后并截取人脸,将截取到的人脸写入到本地磁盘,作为训练数据。 3.1.2搭建模型模块 该模块的主要功能是进行图像数据处理并建立好模型,是实现人脸识别功能的重点,有以下两个子模块: (1)数据预处理 主要进行图像数据预处理,通过调整图像的尺寸大小和比例缩放、划分数据集、独热编码标签向量化、像素归一化等一系列操作,将样本处理成为可以被卷积神经网络读取的数据类型。 (2)创建模型 采纳keras框架搭建CNN卷积神经网络,搭建一个
20、4层convl+2层maxpool+2层dropout+2层dense+1层Flatten的以softmax函数作为输出的多分类网络结构,采纳预处理后的数据作为样本数据,对模型进行训练;训练选择随机梯度下降法SGD+Momentum作为优化器,以损失函数categorical_crossentropy作为优化目标度量模型拟合程度,选出最优的模型参数,再对数据进行数据增加,通过图片改变扩充数据集,供应给fit_generator函数对模型进行训练,最终将训练后的模型保存在程序书目下。3.1.3 人脸识别模块 同样利用OpenCV的VideoCapture函数打开摄像头,用 OpenCV的人脸检测
21、工具haarcascade_frontalface_alt2,截取摄像头中出现的人脸图片,交予模型识别,并给出识别结果,将识别结果保存在对应的excel文件中。第四章 系统具体设计 本章节主要介绍图像预处理和建立模型这两方面进行具体介绍,对这两模块涉及到的相关原理算法进行叙述。4.1 整体运行流程图 图4.1 系统运行流程图 4.2 图像预处理设计 4.2.1调整图像尺寸 本程序设计的卷积神经网络中加入两层全连接层,全连接层的输入在网络配置时便固定维数,全连接层的核心操作就是矩阵向量乘积,即将输入的特征图矩阵和相应权值矩阵进行乘积运算,矩阵之间的点积运算要求两个矩阵的维数相同,因此固定输入数据
22、的特征图矩阵维数,所以须要对图像数据进行尺寸、比例调整。核心代码如下: def resize_image(image, height = IMAGE_SIZE, width = IMAGE_SIZE): top, bottom, left, right = (0, 0, 0, 0) h, w, _ = image.shape#获得图像尺寸 longest_edge = max(h, w) #对于长宽不相等的图片,找到最长的一边 #计算短边须要增加多上像素宽度使其与长边等长 if h < longest_edge: dh = longest_edge - h top = dh / 2 bo
23、ttom = dh - top elif w < longest_edge: dw = longest_edge - w left = dw / 2 right = dw - left else: pass BLACK = 0, 0, 0 #RGB颜色 #给图像短的两边增加边界成为正方形,cv2.BORDER_CONSTANT指定所加边界颜色为黑色 constant=cv2.copyMakeBorder(image,top , bottom, left, right, cv2.BORDER_CONSTANT, value = BLACK) return cv2.resize(consta
24、nt, (height, width) #调整图像大小并返回 图像大小的调整利用tensorflow库供应的resize()函数,然而假如干脆对图像进行resize,会把图像拉变形(图4.3)。为了使图像resize后仍旧保持原始图片的宽高比,我们须要为图像较短的两边加黑框(图4.4),使图像变成正方形又不失真,最终再利用resize()函数进行图像比例缩放(图4.5)。缩放成64*64的目的是为了削减计算量及内存占用,提升后续网络模型的训练速度。 图4.2 200*300原始图片 图4.3 300*300正方形图像 图4.4 300*300正方形图像 图4.5 64*64正方形图像 4.2.
25、2交叉验证法划分数据集 为了更充分利用有限的数据,采纳交叉验证来分割数据集,它的基本思想是从现有的数据集中,拿出大部分样本(或者按比例)作为模型训练数据集,留小部分样本用于验证模型。所谓“交叉”,是指这一次作为训练模型的样本,下次可能就是测试集的样本,验证结果会与验证集的真实值比较并计算出误差平方加和结果,这个过程会重复进行,反复的进行交叉验证,直至全部验证结果与真实值相同,验证结束。 train_test_split()是Sklearn库中交叉验证模块供应的用于划分数据集的函数,将数据的30%划分为验证集, 70%划分为训练集,详细语句如下: train_images, valid_imag
26、es, train_labels, valid_labels = train_test_split(images, labels, test_size = 0.3, random_state = random.randint(0, 100) 参数test_size = 0.3表示数据划分的比例,参数random_state表示随机选取1,100区间内的整数,每次都随机从数据集中抽取数据建立训练集和验证集,导致每次训练的结果会有不同。_, test_images, _, test_labels = train_test_split(images, labels, test_size = 0.5,
27、 random_state = random.randint(0, 100) 测试集同样调用这个函数,只不过选择的比例为50%。4.2.3数据标签one-hot编码 对标签进行独热编码(One-hot)的缘由是因为卷积神经网络采纳分类交叉熵(categorical_crossentropy)作为损失函数,它要求训练样本标签必需为one-hot编码形式。One-hot编码又称为独热编码,它采纳状态寄存器的组织方式对状态进行编码,用N位寄存器编码N个状态,即每个状态值对应一个寄存器位,且随意时刻仅有一位有效。它先将每个分类值映射成整数值,整数值再表示成二进制形式,事实上就是将分类变量表示为二进制向
28、量,使整数的索引设为1,其他全为0。程序输入4张人脸,每张人脸为一类,一共4类,则用4个状态位来表示,类别状态为0,1,2,3; 0代表“archer”,1代表“miaor” ,2代表“pangzi”,3代表“shouzi”。one-hot编码会供应4个寄存器位保存这4个状态,对这四个标签进行One-hot编码后,结果如表4. 1 。表4.1 One-hot编码 标签 One-hot编码 0 1 0 0 0 1 0 1 0 0 2 0 0 1 0 3 0 0 0 1 即标签的1在第几位则代表第几位有效,简洁的说,One-hot编码将数值变成了位置信息,使其向量化,便利卷积神经网络操作。4.2.
29、5像素归一化 归一化是为了简化计算,通过将数据统一处理为0,1之间的小数,达到减低计算量的目的。周知图像是由像素组成,彩色图像由即红(R)、绿(G)、蓝(B) 这3个像素矩阵所构成,每个像素矩阵的取值都为0,255之间的整数,因此当训练数据的值为较大整数值时,会使模型的训练速度变慢,即模型的训练时间增加,因此对图像数据进行归一化,目的就是为了提升网络速度,削减训练时间。在整数形式的颜色空间中每个像素取值都是在 0,255区间内的整数,而归一化后是小数形式的颜色空间,因此须要先将数据形式浮点化,再归一化。像素的归一化用原始像素值除以全部原始像素值中的最大值来实现,最大像素值一般为255,最小值为
30、0。公式形式6 鲁磊. 基于卷积神经网络的人脸识别方法探讨D.西安科技高校,2019. 如下: x=xX_minX_maxX_min (4- 1) 这里的X_min为0。x是归一化后的值,X_max和X_min分别表示样本的最大最小值。归一化后图像的像素处于0-1.0范围时,依旧介于0-255之间,图像照旧有效的。4.2.6 补充说明 Keras是一个以tensorflow或theano作为后端引擎的模型库,只供应快速构建神经网络模型,不处理卷积和矩阵乘积等计算,而是把这些底层计算交给后端引擎来完成。后端引擎系统确定了图像数据输入卷积神经网络时的维度依次,而theano和tensorflow的
31、维度依次是不同的,theano是通道数、行数、列数,而tensorflow为行数、列数、通道数。而不同版本的keras所支持的后端系统不一样,因此须要先确定当前安装的keras采纳的后端系统,在进行图片预处理前把图像数据修改成对应后端引擎支持的维度依次。4.3 卷积神经网络模型的设计 4.3.1卷积神经网络 卷积神经网络(Convolutional Neural Network,简称CNN)是上世纪80年头科学家从对猫视觉皮层的探讨受到启发而诞生的算法,它能够对数据进行有效分类,普遍运用在语音、图像识别等领域。通过多层卷积、池化的堆叠 使得卷积神经网络相比传统神经网络具有参数少、模型训练难度和
32、困难度低等优点。一个卷积神经网络主要由以下5类组成: (1)卷积层 卷积层的作用是对图片进行局部特征提取,是CNN的核心层,作用是对图片进行局部特征提取。详细指输出图像的每个像素值都由输入图像对应位置区域的像素通过加权所得,这个区域叫做局部感受野,区域的权值叫做卷积核,输入图像通过卷积运算后再加上偏置项,通过激活函数得到其特征图,卷积层的数学形式7 易超人,邓燕妮.多通道卷积神经网络图像识别方法J.河南科技高校学报(自然科学版),2017,38(03):41-44+5-6. 如下: Xjl=f(iMjXil1Kijl+bjl) (4- 2) 其中:l为层数;Xjl为卷积层l层的第j个特征图;M
33、j为输入层的感受野;K为卷积核;b为偏置;f为神经元的激活函数。在数学上来说卷积运算是对两个矩阵进行的。如下图所示8 秦川.基于卷积神经网络的图像识别J.电子技术与软件工程,2020(01):98-99. ,用一个3*3的卷积核,卷积核内的点与图片上重合区域的每个像素值做乘积加和运算后再加上偏置,作为输出图片中的一个像素值。 图4.6图像矩阵与卷积核的点积运算 (2)池化层 图像经过卷积之后获得了多个特征图, 但是与原始图像相比特征图的尺寸并没有变更, 所以数据运算量照旧很大。为了降低运算量, 通常会在卷积层后加入下采样层。 下采样层也叫池化层,主要功能是对经过卷积层特征提取后的图像矩阵进行信
34、息过滤,去除冗余信息,只保留主要特征,削减网络中的参数和计算次数,防止模型过拟合。常见的池化操作方法有平均值池化(Average Pooling)和最大值池化(Max Pooling)。Average Pooling保留图像的背景信息,它是通过计算覆盖区域的平均值作为池化后的值。而Max Pooling能够保留图像的边缘和纹理信息,它是通过选取覆盖区域的最大值作为区域池化后的值。 图4.7 最大池化法 图4.8 平均池化法 虽然卷积层和池化层都是提取图像特征,但二者略有区分,卷积层是通过卷积核逐个像素滑动覆盖达到目的,而池化层则是根据池化窗口逐块覆盖特征图的方式提取该区域内的代表性特征。 (3
35、)Dropout层 在神经网络模型训练过程中,假如供应给模型、的训练样本数太少,简单导致训练后模型泛化实力差,产生过拟合现象。过拟合现象是指模型在训练集上预料效果比在未知数据集(测试集)上预料的效果好。这种现象是模型过度依靠现有训练数据集的特征造成的。为了防止过拟合现象发生,在神经网络中加入Dropout层,在诸多过拟合问题的解决方案中,Dropout以其具有简洁性和效果良好而被广泛运用。Dropout的关键思想9 Srivastava N, Hinton G, Krizhevsky A, et al. Dropout: A simple way to prevent neural netwo
36、rks from overfittingJ. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958. 是在训练过程中从神经网络中随机删除单元以及它们的连接,即在训练过程中,以概率p舍弃神经元并让其它神经元以概率q=1-p保留,这样每一次数据训练都为一个网络结构,相当于训练多个不同结构的网络并集成一体,这样可以使模型的泛化实力更强,防止单一网络结构过拟合 图4.9 Dropout前后神经元数对比图 (4)Flatten层 经过多次的卷积、池化之后,在卷积神经网络中流淌的数据照旧是三维的(图4. 10),然全连接层接收的输
37、入要求是一维的数据,因此必需将多维数据“压平”即进行一维化处理后才能作为全连接层的输入。即将(height,width,channel)的数据压缩成长度为 heightwidthchannel 的一维数组就是Flatten层的作用。 图4.10多维数据一维化 (5)全连接层 经过前面若干层卷积+池化的特征提取后,全连接层的作用是把前面提取的“好”的局部特征进行重新整合成完整的图,并舍弃掉“不好”的特征,然后再交给softmax函数,完成最终分类。 Softmax用于多分类任务,它将每个神经元的输出映射到(0,1)区间内,从而得到当前样例中不同种类的概率分布状况,Softmax函数形式如下: a
38、jL=ezjLk=1NezkL (4- 3) 其中:ajL代表第L层第j个神经元输出,zjL代表第L层第j个神经元的输入, 用单个神经元的输入结合常数e做指数运算,并把运算结果除全部L层神经元的指数运算之和,得到一个介于0,1之间的浮点值ajL,从softmax的数学形式我们可以得出全部神经元输出之和应为1,即 j=1NajL=1 (4- 4) 因此公式4-3所求的值就是第j个神经元占全部神经元输出的比重。站在分类的角度,第j个神经元的输出值越大,占总神经元输出的百分比越高,被预料为真实类别的概率就越大。因此,经过分类层softmax函数后,最也许率者即为模型预料类别。4.3.2模型设计 卷积
39、神经网络的特点10 许少尉,陈思宇.基于深度学习的图像分类方法J.电子技术应用,2018,44(06):116-119. 是逐层提取特征, 第一层提取的特征较为低级, 其次层在第一层的基础上接着提取更高级别的特征, 第三层在其次层的基础上提取的特征也更为困难,以此类推,越高级的特征越能体现出图像的类别属性,卷积神经网络正是通过逐层卷积的方式提取图像的优良特征。通过keras库的序贯模型(Sequential)来堆叠多个网络层来构建出深度神经网络,keras.models和keras.layers库用于建立并训练模型,通过.add()方法将layer一个个的加入模型中。本程序搭建的CNN卷积网络
40、模型如表4. 2所示,包括 4个convl+2个maxpool+3个dropout+2个dense+1个flatten+1个softmax总共18层的神经网络结构。将神经网络结构分为三部分,输入图像为64x64像素的RGB图像。 第一部分为2个convl层、1个maxpool层和dropout层,卷积核个数为32个,大小为3x3,首个卷积层的参数个数为33+132=896,采纳保留边界特征的方式卷积计算,这样输入和输出尺寸会保持一样。MaxPooling(2,2)为实行池化尺寸窗口为2x2的最大池化法,因此经过池化层后图像从64x64像素变为32x32大小。其次部分跟第一部分相同,不同的是卷积
41、层的卷积核个数为64,大小不变。第三部分包括1个flatten层,2个dense层和1个dropout层,dense(512)表示512个神经元, dense(4)表示分为四个类,最终运用softmax进行分类;第一、二部分池化层后加入0.25比例的dropout层,第三部分dense层后加入0.5比例的dropout层。 激活函数Relu是一种非线性函数,在卷积层、全连接层后加入Relu是在神网络中引入非线性,因为神经网络的计算是线性的,无法模拟非线性的关系,线性神经网络的学习实力特别有限,所以引入非线性,使神经元适应困难的非线性问题,强化神经网络学习实力。表4.2 网络模型结构 层数 功能
42、描述 1 输入图像(64*64*3) 2 Convol (32,3,3) 第一部分 3 Relu 4 Convol2D(32,3,3) 5 Relu 6 MaxPooling(2,2) 7 Droupt(0.25) 8 Convol (64, 3, 3) 其次部分 9 Relu 10 Convol (64, 3, 3) 11 Relu 12 MaxPooling(2,2) 13 Droupt(0.25) 14 Flatten() 第三部分 15 Dense(512) 16 Relu 17 Droupt(0.5) 18 Dense(4) 19 softmax 输出层 4.3.3模型训练 (1)优
43、化器选择 设计卷积神经网络采纳softmax函数作为输出层的激激函数,使模型可以用于处理多分类任务,该函数选择多类别交叉熵(categorical_crossentropy)作为损失函数,数学形式如下: L=kyklog(Slk) (4- 5) 其中:Slk表示softmax函数输出层的神经元,K个神经元对应k个类别,yk为One-hot编码后的标签,目标类的yk为1,其他类的yk为0。选择随机梯度下降法SGD结合动量Momentum作为损失函数的优化算法,作用是在模型训练过程的每次更新时随机选择一个样本进行梯度下降,调整参数(权重和偏置值)使其最优,确保e值最小。随机梯度下降法的基本思想是只
44、随机选取训练集中的一个样原来学习,每次迭代只是考虑当前样本点,而不管其他的样本点,这样当训练数据太多时,可以快速收敛,提高学习速度。但缺点也很明显,每次梯度下降的方向完全依靠当前的训练样本(batch),导致收敛过程曲折,模型迭代次数增多。为使优化更加稳定,引入动量(Momentum),Momentum的概念来自于物理学的力学,其基本原理是模拟物体运动时的惯性,即让优化器在每次更新时保留肯定范围的上一轮更新后的方向,同时又依据这一轮的样本调整最终优化方向,这样能增加稳定性又能提高模型学习速度,避开陷入局部最优陷阱。利用keras库供应的model.fit_generator()函数起先模型训练
45、。self.model.fit_generator(datagen.flow(dataset.train_images, dataset.train_labels, batch_size = batch_size), samples_per_epoch = dataset.train_images.shape0, nb_epoch = nb_epoch, validation_data=(dataset.valid_images, dataset.valid_labels) 参数nb_epoch指定模型须要进行多少轮次的训练,一轮次训练为训练集全部样本训练一次。参数batch_size指定每次
46、迭代训练样本的数量。为了使模型训练到最优,在每一轮次的训练中还要进行多次的迭代训练,事实上每次迭代训练后,模型在理论上应当朝梯度下降的方向前进一步,直到全部样本数据训练完毕,模型梯度降到本轮训练最低点,训练到此完成,将最终模型保存在程序书目下,存储形式为高压缩效率的HDF5。(2)训练结果 模型训练完成后,还须要对模型进行评估,通过keras供应的model.evaluate评估函数。模型训练的数据通过人脸采集模块获得,选取4个人的4张人脸,每张人脸500张图像数据,总共2000张图片作为样本数据,在人脸识别系统中每张人脸为一个类别,总共4个类别。将处理过的图像数据传入网络结构进行训练,训练结
47、果如下: 图4.11神经网络结构 可以清楚的看到网络模型的基本结构信息,包括网络层类型、输出数据的维度、每层训练参数个数、总训练参数个数。 图4.12 模型训练结果 整个模型训练完成一共进行8轮次训练(nb_epoch = 8),每轮再循环35次迭代训练,每次迭代运用20个样本数据(batch_size = 20),结果如表4. 3所示(以最终一轮的训练结果为例): 表4.3 模型评估结果 训练误差(loss) 0.0593 训练精确率(acc) 0.9886 验证误差(val_loass) 0.0453 验证精确率(val_acc) 0.9933 最终评估模型的精确率为99.60%。 图4.
48、13 模型评估结果 第五章 系统识别结果 系统的识别过程如下:启动系统后,点击识别按钮,系统调用摄像头开启,当人脸检测分类器检测出摄像头存在人脸时,划出脸部区域,并截取一张图像,通过图像预处理后交予模型识别,图像处理与章节4.2的数据预处理一样,不一样的是识别模块仅针对一张图片进行。 模型预料概率值设置为0.85,即当截取的人脸图像作为输入交予模型识别后,模型将输入图像与库中的数据类别对比,计算出当前人脸属于各个类别的概率值。就模型训练中用4张人脸作为训练数据,每张人脸为1类,也就是4值类别,则模型预料会给出输入图像属于这4类的概率各为多少,若最也许率值小于0.85,表示这张人脸不在人脸库中。当模型确定当前人脸为库中数据时,会在框出脸部区域,并给出人脸名