一种基于深度学习(卷积神经网络CNN)的人脸识别算法-含Matlab代码

一、引言

在工程应用中经常面临一些特殊问题,而传统的计算机视觉与机器认知算法在处理这些特殊问题时具有一定的局限性,存在实时性、分析精度等技术瓶颈。随着机器学习等相关数学思想和方法的不断优化、改进,研究人员结合工程应用的实践,也正在不断提出新的高端算法,以帮助克服计算机视觉与机器认知经典算法的不足。以图像识别为例,首先要获取图像数据,然后经过预处理、特征提取、特征选择,最后进行推理、预测以实现图像识别。通过推理、预测来实现图像识别的这一阶段就是用机器学习算法来实现的,而数据的预处理、特征提取以及特征选择这一阶段也至关重要,称之为特征表达。良好的特征表达对最终算法的有效性影响非常大,而特征表达一般都是靠人工完成的,包括人工提取特征、人工选择特征,能否获取良好的特征很大程度上需要靠经验和运气,并且费时。而深度学习(Deep Learning,DL)就可以很好地解决这一问题。

二、算法的基本思想

深度学习强调的是算法结构的深度,与隐含节点数只有一层的浅层学习(如SVMs及Logistic Regression)相比,深度学习通过构建具有很多隐含层的机器学习模型来学习和训练数据,其多层次的网络可以用来表示较复杂的函数,通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。也就是说,深度学习很重要的一点就是可以得到很好的特征表示(representation),通过学习得到的深度学习网络,即使把网络最高层的分类模型去掉,把抽取的特征用于普通的分类器中,也常常会得到更好的效果。

如图1所示,有一系统S,它有一个输入和一个输出,中间有n层。为了使得输出 Output尽量接近输入Input,在梳理Input数据的n个过程中,我们尽量使层与层之间的信息丢失为0。然而这是不可能的事情,根据信息论的“信息逐层丢失”的理论,每一层的输入数据经过处理后,信息只会丢失不会增加。而如果我们尽可能使每层丢失的信息都是没有用的信息,则数据经过处理后信息丢失很少,这样,系统S中的每层Si(i∈{1,2,3,…,n})都可以表示Input数据的特征。在深度学习中,一个深度学习网络由多个层堆叠而成,每个层次的输出实现了对 Input信息的分级表达。

在这里插入图片描述

图1 深度学习系统S

三、算法数学原理

深度学习常用的方法有:自动编码器(Auto Encoder,AE)、稀疏编码( Sparse Coding,SC)、限制玻尔兹曼机(Restricted Boltzmann Machine,RBM)、深度置信网络(Deep Belief Networks,DBN)和卷积神经网络(Convolutional Neutral Networks,CNN)。

深度学习的概念是Hinton等人于2006年提出的,卷积神经网络(Convolutional Veural Networks,CNNs)在2012年之后被更加广泛地用于图像识别、声音识别、物体检测和行为检测等领域,并且都取得了很多突破性的成果。

3.1 权值共享

CNN一个突出的优点体现在感受野和权值共享上。感受野( Receptive Field)是生物学上的名词,其思想被用于神经网络的设计中,使得网络所需训练的参数极大地减少。

例如:假设有一个图像其大小为100×100个像素,若搭建一个神经网络,则需要有10000个隐层神经元与之进行全连接,而此时的网络将有100×100×10000= 10 8 {{10}^{8}} 108个连接,也就是需要训练 10 8 {{10}^{8}} 108个网络参数。然而图像的空间联系具有局部性,正如人类去感受一个物体时只用局部感受野去感受物体一样,没有必要让每一个神经元都与所有像素点做全连接,每个神经元只感受图像的局部区域,然后在网络的更高层将这些接收不同图像区域信息的神经元综合起来,最终将得到一个图像的全局的信息。该方法使得网络中的连接大量减少,也相应地减少了所需训练的参数,提高了网络的学习效率。如果将局部感受野大小设置为10×10,则隐层每个神经元只要与该10×10的图像区域相连即可,所以10000个隐层神经元只需要 10 6 {{10}^{6}} 106个连接,即所需训练的参数只有 10 6 {{10}^{6}} 106个。该方法在输人图像越大的时候,需要训练的参数越少,其优势越为明显。

感受野的思想使得神经网络的训练参数大量减少,而权值共享方法的引入则进一步减少了网络训练所需的参数量。

在卷积神经网络的卷积层,卷积核本质是神经元之间相互连接的权重,而且该权重被每个属于同一特征的神经元所共享。在训练过程中,每个输入图像都将被切割成卷积核大小的区域,每个图像区域都通过卷积核与一个神经元连接。一个图像上的所有小区域和后层图像中某个神经元的连接使用的是相同的卷积核,这样就实现了神经元间的权值共享。

如果在网络中的卷积层使用100个不同的滤波器,每种滤波器的参数都不一样,则该网络就可以用于提取输入图像的多种不同特征。用滤波器对图像做卷积,将得到一个特征映射,如果用100种卷积核就有100个特征映射,这一层网络的权值数量就是10000个参数。

隐含层的参数个数与隐含层的神经元个数无关,只与滤波器的大小及滤波器种类的多少有关。神经网络中,隐含层的神经元的数量与原图像的大小、滤波器的窗口大小及步长都有关系。假设一张图片大小为100×100个像素,滤波器窗口大小为10×10,其步长设定为10,此时隐含层的神经元个数为[(100×100)/(10×10)]个=100个。而由于每个神经元都有一个偏置部分,并且同一种滤波器都共享同一个权值参数,所以总的权指数需加上此处一个参数,共101个。

3.2 CNN结构

使用深度学习的方法来学习图像的特征,不仅可以免去人工选取特征的过程,而且还能学到图像更深层次的良好特征。深层次的网络比浅层次的网络具有更多的优势,尤其是在表达数据中高度的非线性时更为突出。图2为Caffe中重现的Alex提出的 alexnet网络模型bvlc_reference_caffenet.caffemodel的结构图。该卷积神经网络模型共有8层,图像数据经过多次卷积、池化和非线性变换后,再经过最后一层的softmax层进行分类。卷积层通过权值共享的方法减少训练参数,池化层( max pooling、average pooling、 stochastic pooling)对卷积的结果进行处理,使之具有平移、旋转及伸缩不变性,并且还起到降维的作用。网络中使用ReLUs(Rectified Linear Units作为激活函数

g ( x ) = max ⁡ ( 0 , x ) g\left( x \right)=\max (0,x) g(x)=max(0,x)

标准的sigmoid输出不具备稀疏性,而ReLUs是线性修正,实验证明,训练后的网络完全具备适度的稀疏性,并且从函数的二维坐标图形来看,ReLUs也比 sigmoid更接近生物学的激活模型。Hinton在文章中提出了一种dropout机制,在训练神经网络的时候,如果训练样本较少,为了防止过拟合,需要以一定概率将隐含节点清零。

在这里插入图片描述

图2 8层卷积神经网络结构图

四、基于卷积神经网络的人脸识别算法-Matlab代码

基于Matlab代码实现视频中人脸的实时检测与识别,如下动画所演示:

请添加图片描述

五、Matlab源代码获取


博主简介:擅长智能优化算法信号处理图像处理机器视觉神经网络等领域Matlab仿真以及实验数据分析等,matlab代码问题、商业合作、课题选题与指导等均可私信交流


  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研中心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值