BP神经网络算法在人脸识别中的应用研究
2020-07-10张晗
张 晗
(山东科技大学 计算机科学与工程学院,山东 青岛 266590)
0 引言
人脸识别作为日常生活的需要和硬件技术提升的受益者,开始频繁的走到人们的视线中。人脸识别包括两部分:①人脸检测。具体指对某一图片中是否含有人脸模块进行判断检测并将检测出来的人脸模块用某一特定的方式圈出来,例如才用正方形框出某一图片中某一区域的人脸。②人脸识别。即人们看到这个名词时所想到的概述,利用已知数据库与①中检测出的人脸模块进行比对,从而得到该人脸模块的具体身份,达到人脸识别的目的。
1 特征值提取
PCA(主成分分析法)是一种用来处理数据和建立数理模型的方法。主要过程是通过特征分解协方差矩阵,进而得出数据的主成分(特征向量)与它们的权值(特征值)。是一种对数据集进行分析和简化的技术,此过程的本质是一种通过对数据降低维数从而简化其数据结构的方法。PCA本质是将高维空间中的数据通过正交变换投影到低维空间中,从而实现对主要特征的提取。PCA在分析复杂数据时尤其有用,比如人脸识别。图片作为一个N*N的数据结构,在神经网络中如果直接作为输入层输入进去的话,需要 N*N个神经元,而在本文中,使用PCA对图片进行降维处理,提取六个特征值成为特征向量,作为 BP神经网络的输入层输入,产生六个神经元。这样,极大的缩减了神经网络训练和测试所消耗的资源。
PCA步骤如下:
(1)数据预处理(data preprocessing):均值归一化(mean normalization)。
(2)计算协方差矩阵(covarience matrix)。
(3) 计算特征值(eigenvalue)与特征向量(eigenvector)。
(4)依据特征值大小将特征向量进行排序,选取前k个特征向量作为基(basis)组成一个子空间。
(5)将原始矩阵(及数据矩阵)投射(project)到该子空间中,通过基得到降维之后的矩阵。
2 BP算法的基本原理
神经网络分为监督训练和无监督训练。常用的监督训练算法有六种,分别是反向传播算法,曼哈顿更新规则,快速传播算法,弹性传播算法,量化共轭梯度法,LM算法。其中,反向传播算法是其中基础和重要的算法。反向传播算法(Backpropagation,缩写为 BP)的全称是“误差反向传播”。BP算法通常梯度下降法来对人工神经网络进行训练。其主要实现方法是对网络中所有权重的损失函数的梯度进行计算。在梯度计算完成后,将值反馈传递给某一优化方式,接着对产生的权重进行更新。从而达到将损失函数最小化的目的。简单的来看,反向传播算法就是复合函数的链式求导法则,但反向传播算法在现实生活中的应用比链式求导法则重要的多。根据实验来看,只需要一个简单的包含一个隐含层的三层BP神经网络就可以逼近任意一个的连续函数。
BP神经网络的基本思想分为两部分,一、信号的正向传播。 在正向传播中,每个样本依次通过输入层,然后通过每个隐藏层进行处理,将处理后的数据送达输出层。二、损失(误差)的反向传播。如果实际输出与预先设置的训练输出相差较大,则将损失进行反向传播。损失按顺序依次通过隐藏层传递回输入层。其目的是将误差传回每一层的每一个神经元,从而获得各个神经元,进而获得每层的误差信号,进而对每个单元的权值进行修正,损失在修正中不断减少,越来越接近正确值。一步一步对权重进行调整,不断的前馈和反传,就是传统意义上的神经网络的逐步学习。
反向传播算法实现步骤如下:
(1)首先要对数据进行初始化处理,即对数据矩阵进行归一化或者降维等操作,是对神经网络进行训练之前的准备。
(2)将处理后的数据作为训练集进行输入,逐步计算各层输出,并将其记录下来,为下一步做准备。
(3)通过上一步中计算的各层输出,对全局输出进行总计算,并将其与预期输出进行比较,得到全局输出误差,对全局输出误差进行记录。
(4)将全局输出进行反传,反传后依次计算每一层的误差信号,就是上述中提到的分部到每一个神经元。
(5)通过得到的各层的误差信号,对每一层的权重进行调整,从而达到精确度越来越高的目标。
(6)最后就是查看网络总误差是否达到我们所希望的精确度要求,如果达到了目的,则训练结束;不满足,则重新返回第二步,继续对神经网络进行训练。
3 PCA和BP神经网络实现人脸识别
3.1 总体设计思路
本设计由三个实现部分组成。(1)人脸表情分类;(2)人脸的朝向分类;(3)人脸的匹配识别。其中,采用了耶鲁大学的人脸表情数据库进行人脸表情识别,额外采用了 180张人脸朝向图片和 150张人脸识别图片。包括了15个人的11种表情,一共165幅图片。将其中110幅图片作为训练集,另外55幅图片作为测试集。首先应用主成分分析对训练图像进行二维相关和降维。因本文对精确度要求不高,故统一采用六个特征值作为特征向量输入。对 BP神经网络进行训练,然后再将测试集的图片同样经过PCA处理,输入BP神经网络,得到测试结果。设计结构如图1所示。
图1 设计结构图Fig.1 Design structure
3.2 创建并初始化BP神经网络
BP神经网络一般由三部分组成,即分为三层,分别是输入层、隐藏层和输出层。每一层有着不同数量的神经元,就是我们所说的单元单位。对于每一层的神经元数量,由其所在层数所觉得,一般输入层神经元的数量取决于特征的数量,而输出层的数量则取决于所分种类的数量。但是我们可以自定义隐含层的层数和隐含层中神经元个数。
每一层的每一个神经元都代表了数据的一次操作处理,常用的操作步骤如下图2所示。
图2 操作步骤图Fig.2 Operating steps
而每个神经元经过隐含层输入,经由输出层输出,神经元通过隐含层到达输出层之间的函数关系如公式1为:
其中,Wij的代表了神经元I与J之间连接的权重值,Oj代表了某一神经元J的输出值,sigmod是一种特殊的函数,目的是将实数值投影至(0,1)区间。我们一般把sigmod函数这种具有特殊功能的函数称之为“激活函数”。将神经网络训练完成之后,我们才用神经网络处理问题。
在实际应用中,每一个样本通常都是一个 n*n的矩阵,每个样本单独属于一个类型,因此,对于每个样本来说,都会有N个神经元作为输入层的输入,同时,有一个神经元在输出层作为该样本所属于的类别。即对一个神经元来说,神经网络为之分配n个输入神经元和1个输出神经元。然而,仅仅通过机器的学习分类往往达不到预期的目标,所以在实际中,我们会提供受控输入校正,就是向输入层添加一个额外的神经元作为偏移神经元,对偏移提供校正处理。在将N个特征值依次发送到输入神经元之后,隐层神经元得到输入层的输出并计算它们的输出值。输出层中的神经元输出回归值根据隐藏层计算。
这一趟流程被我们称为“前馈过程”,在前馈中,神经网络的输入和输出可以类比成多维函数的输入和输出。接下来我们进行训练神经网络。BP神经网络算法是一种监督性学习算法。其训练过程被称为“反向传播”,就是通过比较误差与预测值,在对前馈参考值综合对比,从而不断的对权重Wij进行调整的过程。由于数据流与前馈过程恰好相反,所以该训练过程被称为“反向传播”。
在一开始的时候,随机初始化连接权重Wij是我们的第一个问题,我们对每一个权重随机获得,然后对每一个训练样本进行前馈过程,目的是为了得到每个神经元的输出,这样就得到了第一步的结果。
接下来,对输出层的误差进行计算,采用以下公式2
上述公式中Ej表示神经元j的误差(损失)值,Oj代表上述神经元j经过sigmod函数映射到(0,1)中的输出,Tj代表我们标记的训练样本的参考输出,sigmod′(x)是sigmod函数的一阶导函数。
然后对隐含层误差进行计算,如下公式3:
由于隐含层的输出不存在我们标记的参考值,所以使用下一层误差(对于本神经网络来说,即输出层误差)的加权和代替当前训练样本的参考输出减去表示神经元的输出,即上文中的(Tj−Oj)。
在误差计算完成之后,我们就可以对Wij和 θj进行更新了,如公式4:
上述公式中λ是一个被称为学习率的参数,该参数常在(0,0.1)区间上进行取值,用来控制学习速率。
由于每一个训练集样本都会对整个网络的参数进行一次更新,为了防止过多的更新,避免不必要的浪费,我们需要对训练终止的条件进行另外设置。一个最简单的训练终止条件对训练环节设置最大迭代次数,比如将设置成对数据集迭代1000次后将训练终止。但是,仅仅设置了最大迭代次数,并不能对训练结果的精确度进行良好的保证,我们会额外使用损失函数(loss function)作为判断是否应该终止训练的标准。
对于损失函数的选择,我们可以采用输出层各个节点的方差来作为损失函数L,公式3-6如下:
由于神经网络容易出现许多无意义的迭代,为了避免这种情况,我们经常做的事就是抽出一部分的训练数据集,将其作为检查的部分。当这部分检测到预测误差高于某一指定的值(阈值)时候,我们就会提前将训练终止,防止无意义迭代的产生。
3.3 图像预处理
第一步,对图片进行灰度化:
通常,当我们对彩色图像进行处理时,往往图片被分成R,G,B三种通道,而我们则需要对这三个通道进行依次的处理,由于需要处理三个通道,时间成本很高从而导致了效率底下。对此,为了减少时间成本的消耗,我们常常减少需要处理的数据量。就是将彩色图像转化成灰度图像,将三个通道转换成单通道,这样节约时间,提高效率。常用的灰度化法是加权平均法。图片灰度化效果如图3所示。
图3 灰度化效果展示Fig.3 Grayscale effect display
第二步,对图像进行几何变换:
图像几何变换也称为图像空间变换。就是通过一些操作进行图像处理,类似于平移、移调、镜像、旋转和缩放等操作。进行图像几何变换的目的是纠正因图像采集系统的系统误差和仪器位置摆放的误差所导致外部因素误差。减少外部因素对精确度的影响。除了变换之外,我们还需要一些额外的操作,灰度插值算法等。达到图像变换减少误差的最终目的。
第三步,对之前产生的图像进行图像增强,突出特征:
对图像中的有用信息进行增强。主要目的是对图像的视觉效果进行改善。突出图像的特征值,扩大图像的差异,对图像的质量进行提高,信息展现程度也得到了丰富,这样可以满足特殊分析的需要。
4 实验结果分析
用50张正向朝向图片对神经网络进行训练,在神经网络训练完成之后,我们用30张正向朝向图对训练后的神经网络进行测试,将测试结果输入神经网络后,因为我们是监督性学习,事先对训练样例进行了标签分类,人脸正向朝向是[0,0]的标签,所以预测的结果要尽量的像[0,0]进行靠近,最逼近[0,0]这一标签的,就是人脸的正向识别。测试结果如图4所示。
图4 测试结果1Fig.4 Test result 1
由图4可以看到,30张图片的预测值均在[0,0]附近,即预测的结果30张图片都是正向,达到的预期的结果,对30张测试图像进行了正确分类。
上述是人脸正向朝向的分类,接下来是人脸表情的分类,使用的是Yale大学数据集,为15个人的11种表情,本文仅对一种表情(微笑)验证进行展示。人脸微笑表情是[0,0,0]的标签,预测的结果要尽量的像[0,0,0]进行靠近,接近[0,0,0]这一标签的,就是人脸的微笑表情的识别。测试结果如图5所示。
图5 测试结果2Fig.5 Test result 2
由图5可以看到,10张图片的预测值均在[0,0,0]附近,即预测的结果10张图片都是微笑,达到的预期的结果,对10张测试图像进行了正确分类。
本章在前文分析与设计基础上,展示了神经网络的建立,图像的预处理和 PCA的使用,最后对30张人脸正向朝向和10张人脸微笑表情进行测试,测试结果正确。
5 结论
科学技术不断发展,人工智能更是飞快的进步。人脸识别作为人工智能重要的组成部分,在现实生活中的应用越来越广。了解人工智能,学习人工智能,是当代IT从业者都要掌握的知识。BP神经网络算法作为人脸识别最基础,应用最广泛的算法,更是需要深入了解和掌握。