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

下载本文档

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

文档简介

基于深度学习的人脸识别主讲人信息工程学院高政霞老师《实战深度学习—原理、框架和应用》前言①人脸验证做的是1:1的比对,即判断两张图片里的人是否为同一人。②人脸识别做的是1:N的比对,即判断系统当前见到的人,为事先见过的众多人中的哪一个。人脸识别问题宏观上分为两类,一是人脸验证(又叫人脸比对),二是人脸识别。人脸识别技术包括采集训练图像数据集、人脸检测和提取人脸特征等过程,人脸识别技术隶属于生物识别技术的一种,主要用生物识别技术来进行区分,使用人脸特征等信息来进行识别。二十世纪八十年代国内开始对人脸识别技术的研究,当时主要研究主体是研究机构和高校,经历了技术引进-专业市场导入-技术完善-技术应用-各行业领域使用等五个阶段。近年来广泛应用于安全防务、电子商务等领域,深度学习技术让计算机人脸识别能力超越人类的识别程度。目录contents训练图像数据采集CNN人脸识别设计CNN模型搭建本章总结Part01Part02Part03Part0401训练图像数据采集人脸识别的精准度与数据集有很大的关系,数据集越符合规范精准度越高,数据集越嘈杂越容易造成神经网络训练时向错误的方向传播。例如,训练目的是识别狗狗,然后一半数据集是猫咪,在进行测试的时候,可能会造成猫咪也识别成狗狗。提供人脸数据库的有PubFig:PublicFiguresFaceDatabase等网站。在接下来的案例中,选取PubFig:PublicFiguresFaceDatabase作为训练图像数据集。它记录了大量人脸数据,里面包含了两百个人的五万八千多张图像。但是它不太适合做这么简单的人脸识别训练数据集,因为这些图像都存在着姿势、表情和光照的差异,作为仅仅识别人脸的训练数据集会不大合适,所以在这可以通过不断的筛选使得人脸数据集逐渐的适合案例中构建的神经网络。01训练图像数据采集

训练图像数据源PubFig数据集一共分为了两大部分,一部分包含60个人的图像,另一部分包含另外160个人的图像。这两部分数据都分为了两个文件记录,一个储存的是人的名字,另一个储存的是这些人的图像地址等信息。案例中使用的是包含60个人那部分的图像,这60个人一共有16336张图像。(1)加载人脸数据文件(2)下载与储存图像数据(3)训练图像数据整理01训练图像数据采集

爬取图像数据集01训练图像数据采集

爬取图像数据集加载人脸数据文件包括了personName.txt和url.txt两个文件,personName.txt文件储存了所有人脸图像的名字,url.txt文件储存了人名、图片序号、URL地址、人脸坐标和MD5校验码。在拥有这两个文件的前提下可以通过personName.txt创建文件夹以储存即将下载的图片,然后读取url.txt文件。加载url.txt文件,获取需要用到的数据,并把数据进行另外存储。01加载人脸数据文件01训练图像数据采集

爬取图像数据集加载url.txt文件和personName.txt文件后,开始编写爬虫以爬取需要的图像数据。由于需要长时间爬取,虽然图像数据集来源于很多的网站,但为防止它们同一个网站的图像聚集而导致爬虫在此网站被封,所以要模拟浏览器、设置代理IP和动态头部,防止爬虫被网站封杀。通过urllibs的requests获取图片,获取图片后需要对图片进行脸部截取,截取后使用OpenCV进行人脸检测,检测图像是否包含人脸,是否符合人脸识别的需要,因为不是每一张图片网站都能很完美地标注人脸的位置。02下载与储存图像数据01训练图像数据采集

爬取图像数据集下载好图像后就会发现,下载的图像并不能全部满足需求,比如一开始爬取到图像按照人脸坐标截取后发现并不是每张截取到的图片都有人脸。首先要做的就是针对下载好的图片做一个筛选,筛选出从正面截取、不戴墨镜、头发不遮掩和能准确看出五官的图像。由于爬取时间长使得url.txt文件的部分URL失效或链接无响应,最后获取到的图像有10173张图像,最后经过筛选只取了6031张人脸图像。03训练图像数据整理02CNN人脸识别设计在进行卷积神经网络人脸识别时,先获取足够训练图像数据集,然后进一步对图像进行规范化。在获取足够的训练图像数据后,开始搭建卷积神经网络,使用的是Keras函数库搭建卷积神经网络模型。激活函数的存在是为解决非线性方程数据,一般遇见的激活函数有Relu、Sigmoid和Maxout等激活函数。在确定卷积神经网络激活函数后,需要确定卷积神经网络模型的卷积层数,再进一步确定使用卷积层使用搭建,卷积核的行列数等都需要进一步确定。基于Python实现CNN人脸识别,是使用Python实现神经网络搭建和图片预处理等过程,再使用Keras接口调用Theano或Tensorflow后端进行训练。由此不难描绘出卷积神经网络人脸识别基本流程图,如图9-1所示。图9-1CNN人脸识别基本流程图02CNN人脸识别设计

CNN人脸识别设计方案)。如图9-2所示,在卷积神经网络图像处理中神经网络会把输入的图像数据转化为矩阵数据,然后把矩阵数据逐个放入神经元中进行卷积运算。最左边的X1到Xn是经过图像数据转化的矩阵数据。把矩阵数据拆分为无数份的,正是平常所说的卷积核。图9-2人工单元神经元的结构图9-2是一个人工单元神经元的结构,其中,X1到Xn为神经元的输入,W1到Wn则是权值,b为偏置标量,c为卷积值与偏置标量b相加,a为神经网络输出,卷积值由输入数据和权值相乘求和而得,神经网络的输出a是c经过激活函数后输出的数据。02CNN人脸识别设计

CNN图像处理a=f(c),c等式最右边的是计算过程的向量表达形式,其中W、X分别代表权值矩阵和输入数据矩阵,WT为W的转置矩阵,进行矩阵转置后实现W和X的逐个元素相乘叠加,其本质就是矩阵乘法。02CNN人脸识别设计

CNN图像处理向量表达公式图像预处理是将每一个人脸图像分拣出来然后交给模型训练模块,在进行模型训练和人脸识别前准备工作。(1)人脸检测(2)数据随机分组(3)图像数据标准化(4)CNN人脸识别显示数据02CNN人脸识别设计

图像预处理02CNN人脸识别设计

图像预处理Python里的Dlib和OpenCV都是包含了图像处理和机器视觉方面的开源函数库,采用Python实现人脸识别可以使用这两个函数库,实现模型训练前的图像预处理和模型测试时的人脸检测。Dlib和OpenCV均包含了人脸检测接口。由于Dlib有比OpenCV抗遮挡的特性,因此数据预处理方面使用的是Dlib函数库。在摄像头人脸检测方面两者性能类似,图像裁剪可使用OpenCV函数库。01人脸检测数据储存方式是放在一个大的文件夹中,所有图片均放在以图片上的人脸名字拼音为文件夹名的文件夹中,这就导致同一个人的照片集中在一处,呈类群居式的样子。在进行模型训练的时候如果不进行随机分组,将会出现一种每次训练的均是同一个人图像的情况,容易出现过拟合的情况。Dropout是专门用于神经网络正规化的方法,将数据集打乱随机分组train_test_split功能是从样本中随机地按比例选取训练数据和测试数据;train_data是进行训练的所有矩阵数据;train_target是进行训练的数据标签集合;test_size是属于样本占比,小数为训练数据的百分比,整数为训练数据的具体数目;random_state是随机数种子。02CNN人脸识别设计

图像预处理02数据随机分组02CNN人脸识别设计

图像预处理图像数据的标准化包括数据采集中的统一尺寸和统一转化灰度图,同时,把数据放入Theano或TensorFlow后端训练模型前也要进行数据的标准化。采集图像数据时同时裁剪和灰度化使得后面模型训练以及进行人脸检测和人脸识别时不需要进行这两步操作,简化了训练和识别过程。数据的标准化可以使得数据符合模型训练后端的数据要求。03图像数据标准化02CNN人脸识别设计

图像预处理人脸识别数据可以简单地分为两种,一种是静态图像,一种是视频图像。静态图像可以直接加载图像数据,视频数据是来源于普通摄像头或者一段简单的视频图像。然后使用卷积神经网络模型训练出来的数据进行对比判断是谁的脸,判断的概率大小是97.5%,即相似度达到97.5%就确认是这个人,如果一直都没有达到的就在人脸上显示特殊标记。04CNN人脸识别显示数据03CNN模型搭建神经网络可以粗略分三层,输入输出和“黑盒”,黑盒的意思就是神经网络不可见部分。卷积神经网络模型的搭建主要是在于“黑盒”部分。在这里使用的是八层网络结构,输入层、两层卷积层、两层池化层、两层全连接层和输出层,使用的激活函数是ReLu函数,使用的分类函数是Softmax函数。卷积神经网络的搭建使用的是Keras函数库进行搭建,在Theano后端运行。03CNN模型搭建

CNN模型搭建(1)搭建卷积层(2)搭建池化层(3)选取激活函数(4)选取优化器(5)自定义损失函数(6)设置参数调整学习效率(7)训练CNN模型(8)模型保存加载与评估(9)模型测试在用Keras搭建卷积神经网络前需要先安装HDF5模块使用keras.layers搭建卷积层有两种方法一种是Conv1D,另一种是Conv2D,Conv1D主要用于自然语言处理,Conv2D主要用于计算机视觉,而且表面上Conv1D没有给出卷积大小,Conv2D给出了。所以在此使用Conv2D搭建两层卷积层。01搭建卷积层03CNN模型搭建

注意,在使用Keras搭建神经网络时,只需要给第一层输入数据,后面层数的数据均来自于上一层神经网络,由于池化层是跟着卷积层添加到模型中的,所以池化层输入来源于上一层输出数据。只需要设置池化的核大小、池化的滑动步长和边界模式。使用MaxPooling2D搭建两层池化层。02搭建池化层03CNN模型搭建

激活函数解决的是线性方程不能概括的,例如,y=AF(Wx)函数,在这里AF就充当了激活函数的角色,基于Python使用Keras搭建的神经网络有ReLu、Sigmoid、Tanh等几个比较火的激活函数。当然激活函数也可以自己创建,但是必须得保证激活函数可以微分,因为误差反向传递的时候只有可以微分的函数才可以把数据传递回去。少量层结构中,可以选择多种激活函数,CNN推荐的激活函数是ReLu函数,RNN推荐的激活函数可以是ReLu函数也可以是Tanh函数。在此搭建的是卷积神经网络模型,所以使用ReLu函数作为激活函数。03选取激活函数03CNN模型搭建

优化器(optimizers)的目的是加速神经网络训练,最基础的算法是随机梯度下降算法。正常情况下是把训练数据不断的放入神经网络中计算,这样计算机资源会消耗很大。而SGD是把一个数据分成很多的小份,然后分批的放入神经网络中进行计算。每次计算使用批量数据,虽然不能反映整体数据的情况,不过很大程度上加速了训练过程,而且不会丢失太多准确率。当随机梯度下降算法还不能满足时,可以选择在参数上进行修改。常用的几种优化器分别是Momentum、AdaGrad、RMSProp和Adam。Momentum优化器是由曲折线变为相对平滑的线,类似于给一个人安排下坡路;AdaGrad优化器是在学习率上面进行更改,它的每一个参数的更新都会获得不同的学习效率,和Momentum类似:相当于一个人获得一双不适合的鞋子,走路疼,所以逼着它走直线,那么就会少走很多弯路;RMSProp类似于Momentum+AdaGrad;Adam能又快又好地达到目标迅速收敛。所以在此优化器使用Adam进行优化。04选取优化器03CNN模型搭建

在确定优化器的情况下可以自定义损失函数,并添加指标来获得想要看到的更多结果。05自定义损失函数03CNN模型搭建

在确定卷积层数、池化层数、全连接层数、激活函数、优化器以及损失函数的情况,搭建好一个卷积神经网络模型,需要给各个关键位置设置参数。参数的设置基于神经网络模型的层数,使用了两层卷积结构。其次就是每轮训练的样本数(batch_size)的设置,batch_size太小容易造成神经网络不收敛,batch_size太大容易造成训练的计算机无法满足计算负荷。滤波器的大小选择也影响着神经网络模型的学习效率和测试精准度,一般卷积层滤波器数量均会是上一层的两倍。训练图像数据集大小是6031*128*128*0,即6031张人脸图像,每张图像大小是128*128,并且每张图片均经过灰度化处理,不属于三原色任何一种,只留下光强和暗影。06设置参数调整学习效率03CNN模型搭建

完整的神经网络模型见下页完整的神经网络模型如下:06设置参数调整学习效率03CNN模型搭建

训练模型的目的是为使得模型可以识别人脸,识别图像出现的人脸是属于哪个文件夹里的,对应的标签数据是什么,所以需加载训练文件,训练文件均贴着标签,标签就是文件夹名称,然后读取图片,才能训练。左边程序会根据输入的训练图像数据集的路径获取到所有图像的向量集合,标签集合和子文件夹数。图像的向量集合是一个模型训练预处理的一部分,同时标签集合也是模型训练中必不可少的部分数据,里面包含了文件夹的独特标记,可以用于后期的模型评估。07训练CNN模型03CNN模型搭建

模型训练,这是一个时间长久并能检测模型是否符合的一个手段,在训练中你可以看到模型的整个训练过程,就是一个不断学习

温馨提示

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

评论

0/150

提交评论