基于人工神经网络的人脸朝向识别模型基于人工神经网络的人脸朝向识别模型摘要:人脸朝向识别是人脸应用研究中重要的一步,在众多研究领域中,人脸朝向识别是模式识别中一个无法回避的问题。本文针对此问题,建立了基于人工神经网络的人脸朝向识别模型。首先,采用基于边缘检测Sobel算子的人脸特征向量提取,把图像转换为6行8列像素值,实现了人脸识别的特征提取,作为神经网络的输入。然后根据实际情况,考虑到误差因素,我们创建一个3层的BP神经网络,输入层8个神经元,输出层3个神经元,中间层17个神经元。选取50张人脸图像中的前30张,作为神经网络的训练样本,通过长达11分钟的训练,我们得到了比较好的网络。接着,把训练好的神经网络用于测试剩余的20张人脸图像,输出的朝向结果与输入的-1-朝向结果完全一致,识别率100%。在BP网络中,由于我们采用了0.01的学习率,虽然识别率很高,但大大延长了网络的训练时间。因此,我们觉得有必要建立一种训练时间和训练效果都较好的神经网络模型。参照模型一,我们接着又建立了基于LVQ神经网络的人脸朝向识别模型二。用于训练的样本和测试的样本都跟模型一相同。与BP神经网络模型相比,不仅大大缩短了训练时间(缩短为1秒),而且保证了识别率为100%。因此,针对人脸朝向识别的问题,采用基于LVQ神经网络的模型更好一些。最后,我们从图像特征提取和神经网络构建两个方面出发,提出了可行的模型改进方法。关键字:人脸朝向识别;BP神经网络模型;LVQ神经网络模型一、问题的重述人脸朝向识别是人脸应用研究中重要的一步,在众多研究领域中,人脸朝向识别是一个无法回避的问题。现有一组人脸朝向不同角度时的图像数据,图像来自不同的10个人(详见附件),每人五幅图像,人脸的朝向分别为:左方、左前方、前方、右前方和右方。现在需要建立人脸朝向识别模型,对人脸的朝向进行识别。二、模型假设及符号说明1、模型的假设①所给的全部人脸图像都未出现损坏等问题;②人脸朝向仅分为5类:左、左前、前、右前、右,其他朝向不予考虑;③对于题目中所给的人脸图像,不考虑人脸的复杂表情问题。-2-2、符号说明①N输入层的神经元个数②L隐含层的神经元个数③M输出层的神经元个数④X加到网络的输入矢量⑤H中间层的输出矢量⑥Y网络的实际输出矢量⑦ijV是网络输出单元i到隐单元j的权值⑧jkW是隐单元j到输出单元k的权值注:未说明符号在文中用到时注明三、问题的分析人脸朝向识别是人脸应用研究中重要的一步,在众多研究领域中,人脸朝向识别是模式识别中一个无法回避的问题。基于误差反向传播算法的多层前馈网络可以以任意精度逼近任意的连续函数,所以广泛应用于非线性建模、函数逼近、模式分类等方面。①人脸识别的首要一步,也是之后所有过程基础步骤,就是人脸特征的提取,即如何把人脸图像转换为数字特征值。目前人脸特征提取的方法有很多,如主元分析法、Fisher线性判别法、小波分析法等。通过特征向量的提取,作为接下来神经网络的输入。②建立神经网络模型,关键是网络拓扑结构的选择和训练参数的设置。特别是对于BP神经网络来说,参数的设置、样本质量等都是影响结果的重要结果,而学习效率的确定和训练函数的选择直接影响样本的训练时间,还有隐含层神经元个数如何确定等都没有统一的规定。但通过尝试和一些经验公式,完全可以达到很好的输出结果。③由于BP网络固有的缺陷和限制,通过该善网络拓扑结构,即采用有导师监督的LVQ网络,可以在保证人脸朝向识别率的基础上,有效的改善训练时间。而且LVQ网络模型具有简单实用的特点,对于本文所讨论的问题来说具有更好的效果。四、基于BP神经网络的人脸朝向识别模型多层前向反馈式神经网络是目前应用比较广泛的人工神经网络,其中BP(BackPropagationnetwork,简称BP网络)学习算法是最著名的多层前向反馈式神经网络训练算法之一。该算法在图像处理和图像识别领域已经取得令人瞩目的成就,其主要思想是利用已知确定结果的样本模式对网络进行训练,然后利用训练好的网络进行图像的处理或识别。本文将首先讨论用MATLAB实现BP神经网络对人脸朝向的分析。4.1基于边缘检测Sobel算子的人脸特征向量提取一个完整的人脸识别系统应该包括人脸检测,特征提取和人脸识别。人脸图像有一些明显的基本特征,如脸部区域通常包括双眼、鼻和嘴等脸部特征,其亮度一般低于周边区域,双眼大致对称,鼻、嘴分布在对称轴上等。本文采用镶嵌图(MosaicImage,又称马赛克图)方法,先将图像划分成一组相同大小的方格,每个方格的灰度取格中各象素灰度的均值,根据一组规则确定可能为人脸的区域,然后将方格的边长减半,重新构建镶嵌图,并根据一组规则分别定位出眼、鼻、嘴等脸部特征。最后,将所前两步所得到的脸部区域二值化,并使用边缘跟踪最终确定脸部特征的位置。-3-物体的边缘是以图像局部特征的不连续性的形式出现的,例如灰度值的突变颜色的突变纹理结构的突变等等,正是这些不连续性构成了图像的边缘信息。图像的边缘有方向和幅度两个特征,通常沿边缘方向的像家变化剧烈。这种变化(不连续性)常可以利用求导数方法,一般常用一阶和二阶导数来检测边缘。在本文中我们采用了有方向性的Sobel算子。也就是说,我们对每个图像点需要计算它在不同方向上的梯度,然后选取一个值最大的方向作为该点的边缘方向。用Sobel算子提取图像边缘的计算方法:假设),(jix表示输入图像在),(ji位置上的灰度值,在计算0水平方向的梯度时,首先计算在X方向的梯度dx,然后计算Y方向的梯度dy,最后将计算两个方向梯度值的平方和作为),(ji在水平方向的梯度d。计算dx,dy的方法:只要将图像中对应位置上的灰度值与上面矩阵中的值对应相乘相加就可以了,比如计算水平方向的dx:1)1,1(0),1()1()1,1(2)1,0(0),0()2()1,0(1)1,1(0),1()1()1,1(jixjixjixjixjixjixjixjixjixdx用同样的方法可以计算出dy,从而可以用下面的等式来计算d:22dydxd在MATLAB工具箱中可采用函数edge(img,'Sobel')进行边缘检测,其中img代表图像矩阵。在本文中,将每幅图片分割成6行8列,,分别求得每个小方格内黑色像素的个数占这个小方格内总像素,利用edge(img,'Sobel')进行边缘检测,最终求得特征值作为训练神经网络的输入数据。在训练和识别以前,我们都对图像进行归一化预处理。由于几何位置的归一化和人脸及组成部分的精确定位有关,是一个解决不好的问题。文献中有提供了一种新颖的解决办法,但却需要大量的样本。本文避开这个问题,在所有图像大小归一化时,主要是对图像光照的归一化处理。为了消除面部光照对识别的影响,我们让每一幅图灰度值的均值和方差都相等。4.2BP算法4.2.1BP网络模型BP神经网络是一种多层前向网络,由输入层、输出层、隐含层(可以是一层或多层)构成,一种典型的三层BP神经网络模型如图1所示。反向传播算法的主要思想是把学习过程分为2个阶段:第1阶段(正向传播过程),输入信息从输入层开始逐层计算各单元的实际输出值,每一层神经元的状态只对下一层神经元的状态产生影响;第2阶段(反向传播过程),若在输出层未能得到期望的输出值,则逐层递归计算实际输出与期望输出之间的差值,根据此误差修正前层权值使误差信号趋向最小。它通过连续不断地在相对于误差函数斜率下降的方向上计算网络权值和偏差变化而逐渐逼近目标。每次权值和误差的变化都与网络误差的影响成正比。-4-图1三层BP神经网络假设输入层、中间层、输出层的单元数分别是N、L和M。),,,(110NxxxX是加到网络的输入矢量,),,,(110LhhhH是中间层输出矢量,),,,(110MyyyY是网络的实际输出矢量,并且用),,,(110MdddD来表示训练组中各模式的目标输出矢量。输出单元i到隐单元j的权值是ijV,而隐单元j到输出单元k的权值是jkW。另外用k和j来分别表示输出单元和隐单元的阈值。传递函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid函数,即:xexf11)(误差函数为:mjkkydE12)(21中间层和输出层各单元的输出为:10NijiijjxVfh,10LjkjjkkhWfyBP算法采用梯度下降法调整权值:ijijijxnWnW)()1(式中,j为本结点的序号,i则是隐含层或输入层结点的序号。ix是结点i的输出或者是外部输入;式中η称为学习速率,j为误差项。4.2.2构建BP神经网络步骤第1步,用均匀分布随机数将权值和阈值初始化。第2步,对样本数据进行训练:①加载输入向量x和目标向量D;②计算隐含层和输出层的实际输出H和Y;③计算输出层的误差;④计算隐含层单元误差;-5-⑤对权值和阈值进行修改,将误差信号沿原来的连续返回,通过修改各层神经元的权值,逐次地向输入层传播去进行计算。再经过正向传播过程,这两个过程反复进行使得误差信号最小;第3步,输入信息向量X,经仿真计算预测输出向量Y。具体的流程图如下图2。图2BP网络流程图4.3人脸朝向识别的BP网络的设计:在进行BP网络的设计时,一般应从输入向量与输出目标向量,网络的层数、每层中的神经元个数,激活函数、初始值以及学习速率等几个方面来综合进行考虑。4.3.1输入向量与输出目标向量设计神经网络输入的确定实际上就是特征量的提取,在本文中我们采用基于边缘检测Sobel算子的人脸特征向量提取。该BP网络的输入为图像,输入单元可取为图像的像-6-素。将每张图像转换成8个排列的像素值,在输入神经网络之前应该首先进行归一化处理。这样一来,网络的输入就是一个8维的向量。在本文中,我们用30幅图(从所给的1_1-6_5)像建库,一共5个方向,每个方向包括6幅人脸图像,将每幅图片分割成6行8列,求得特征值作为训练神经网络的输入数据。各个朝向对应的代码如下表一所示:表一、人脸朝向对于代码朝向左左前前右前右代码1001100100110014.3.2网络的层数:理论上已经证明:具有偏差和至少一个S型隐含层加上一个线性输出层的网络,能够逼近任何有理函数。这实际上已经给了我们一个基本的设计BP网络的原则。增加层数主要可以更进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。而误差精度的提高实际上也可以通过增加隐含层中的神经元数目来获得,其训练效果也比增加层数更容易观察和调整。所以一般情况下,应优先考虑增加隐含层中的神经元数。在本中,我们采用典型的3层BP网络,通过调整隐含层的神经元个数达到了预期的精度。4.3.3隐含层的神经元数网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元数的方法来获得。这在结构实现上,要比增加更多的隐含层要简单得多。那么究竞选取多少个隐合层节点才合适?这在理论上并没有一个明确的规定。在具体设计时,一般可以利用下面两个经验公式之一来确定。anml或者51.035.077.054.212.043.02nmnmnl其中,m、n分别为输入节点数目与输出节点数目;a为1-10之间的常数。隐层节点数可以根据上面两个公式得到一个初始值,然后利用逐步增长或逐步修剪法最终确定神经元的个数。逐步增长是从一个较简单的网络开始,若训练结果不符合要求,则逐步增加隐含层神经元的个数直到合适为止。逐步修剪则从一个较复杂的网络开始逐步删除隐含层神经元。在本文中,我们用逐步增长的方法,最终确定了隐含层的神经元个数为17个。4.3.4初始权值的选取由于系统是非线性的,初始值对于学习是否达到局部最小、是否能够收敛以及训练时间的长短的关系很大。如果初始权值太大,使得加权后的输入和n落在了S型激活函数的饱和区,从而导致其导数)(sf非常小,而在计算权值修正公式中,因为)(nf