APP下载

基于PCA和SVM的人脸识别系统

2017-12-25胡沐晗

计算机时代 2017年12期
关键词:测试数据人脸识别

胡沐晗

摘 要: PCA(主成分分析)与SVM(支持向量机)技术对于人脸识别而言非常重要,文章结合PCA与SVM来设计一个人脸识别系统。在MATLAB编译环境下,分别探讨PCA技术与SVM技术,总结出一种快速PCA算法以及SVM的测试与训练算法;从orl_faces人脸库中选取训练数据与测试数据进行训练与测试,对其中重要的参数进行调优,最终达到90%的识别成功率。再经真实人脸的训练与测试,达到了73%的真实人脸识别成功率。

关键词: PCA技术; SVM技术; 人脸识别; 训练数据; 测试数据; matlab

中图分类号:TP391.4 文献标志码:A 文章编号:1006-8228(2017)12-60-04

Face recognition system based on PCA and SVM

Hu Muhan

(Department of Information, ZhongBei College of NanJing Normal University, Nanjing, Jiangsu 210046, China)

Abstract: PCA (Primary Component Analysis) and SVM (Support Vector Machine) technologies are very important for face recognition. This paper combines PCA and SVM to design a face recognition system. In the MATLAB compiler environment, the PCA technology and SVM technology are discussed, a fast PCA algorithm is summed up as well as the test and training algorithm for SVM; the training data and test data are selected from the orl_faces database to train and test, the important parameters are optimized, and 90% recognition success rate is ultimately achieved. After the training and testing by real face, the success rate of 73% real face recognition is achieved.

Key words: PCA; SVM; face recognition; training data; testing data; MATLAB

0 引言

人臉识别是人工智能领域的一个重要技术。如今,人脸识别技术已经在我们的生活中被广泛应用,例如人脸识别门禁考勤系统,公安部的人脸识别网络等。本研究项目主要立足于PCA(主成分分析方法)以及SVM(支持向量机)来对图像进行识别,PCA与SVM是处理图像的重要技术,其中涉及的图像降维处理,机器训练对人像识别尤其重要。

1 PCA技术

1.1 PCA技术原理

PCA技术是将高维的数据通过投影方式,降至低维的平面上[1],即乘以少于向量本身维数的基,来达到降维的效果。具体我们可以通过一个例子展开,如下列矩阵:

首先将每个字段内所有值减去均值,结果每个字段都变为均值为0,变换后:

若要将图1的点降维,则要进行投影,即乘以所选方向的基,不过若向X轴投影,那么最左边的两个点将重叠,中间的两个点也将重叠,若想要尽量多的保存信息,则要选择一个投影平面使得投影值尽量的分散,而在数学上,判定一个数值分散程度的量是方差,方差即每个元素与字符段均值的差的平方和的均值,即:

由于上文已将字段均值减为0,所以可表示为:

方差越大,则投影的数据越分散,从而数据可尽量多的保存。

正如以上所述,PCA技术原理之一即保证投影降维之后方差尽可能大,从而保留更多的数据[2-4],但除此之外PCA还需要处理另一个问题,例如对于三维降到二维的问题来说,需要选择两个投影的方向,我们需要引入另一个约束条件,即不希望两个投影方向之间存在线性相关性,因为相关性必然意味着存在重复信息。数学上可以用协方差来表示其相关性即:

当协方差为0时,表示两个字段完全独立,为了让协方差为0,我们选择第二个基时只能在第一个基正交的方向上选择,因此最终选择得两个方向一定正交。

1.2 PCA的具体操作

1.2.1 快速PCA算法

普通PCA算法存在一个问题,即对于协方差矩阵M而言,M是由ZT*Z得出,而Z是一个m*n的矩阵,所以ZT*Z是一个n*n的矩阵,往往在图像中,n的值远远大于m,所以对这样一个协方差矩阵求特征值特征向量开销会非常巨大,因此我们需要一种更高效的PCA算法。

对于M=ZT*Z有M*V=D*V,其中V是M的特征向量,D是M的特征值,因此两边乘以得到M*ZT*V= D*ZT*V,所以(ZT*Z)*ZT*V=D*ZT*V,又设N=Z*ZT,且(ZT*Z)*ZT*V=ZT*(Z*ZT)*V所以ZT*N*V=D*ZT*V=ZT*D*V,所以根据以上数学公式的推导,可以看出M的特征值D和特征向量V可以通过N来获得,因为M如上所述是一个n*n的矩阵,而N=Z*ZT且Z=m*n,所以N是一个m*m的矩阵,因n远大于m,故通过N求得M的特征值和特征向量将会减小资源的开销,提高PCA降维的效率,因此可以得到一个快速PCA算法,步骤如下。

⑴ 将原始数据按列组成一个m行n列的矩阵Z。

⑵ 将Z的每一行减去零均值化,减去均值。

⑶ 设矩阵N=Z*ZT。

⑷ 求出N的特征值和特征向量,使用eigs函数将特征值从大到小排列,取出前K个特征值对应的特征向量。

⑸ 乘以ZT得到M的没有单位化的特征向量。

⑹ 对协方差矩阵M进行单位化。

⑺ 原始矩阵Z乘以特征向量V,得到降至K维的矩阵。

1.2.2 PCA降维

完成PCA算法后,接下来就是使用它对一组图片进行降维处理,这里我们使用了orl_faces图片库,其中有40个人,每个人10张照片,总共400张照片,然后对所有图片读入减去均值到一张平均脸,然后将图片进行PCA降维之后还原得到还原脸。

可以看出,相对于图3,图2保留了大量特征,K值越高,即降的维数越高,图像越清晰,保留的特征越多。

两种PCA算法的比较:

普通PCA算法降至100,200,300,400维的时间总共为81秒,而快速PCA算法所需时间仅0.4秒。

2 SVM技术

2.1 SVM技术原理

2.1.1 SVM技术简介

SVM技术可以将一些数据点分为两个不同的类[5-7],如图4所示,现有一个二维平面,平面上有两种不同的数据,分别用圈和叉表示。由于这些数据是线性可分的,所以可以用一条直线将两类数据分开,这条直线相当于一个超平面,超平面一边的数据点对应的Y全是-1。另一边所对应的Y全是1。

因此,对于人脸识别而言,我们可以通过标签来区分两个不同的人脸,即将一组人脸标志为1,另一组人脸标志为0。然后,如图4所示这个超平面可以f(x)=ωTx+b来表示,当f(x)等于0时,x便是位于超平面上的點,当f(x)大于0的点对应的y=1的数据点,f(x)小于零对应y=-1这个点,如图5所示。

以上通过SVM处理的都是线性可分的点,而对于线性不可分的点而言,要做的是将这些点投放到更高维的空间中进行处理,不过对于机器而言,投射的维度越高意味着模型的复杂度越高,处理数据的开销也就越大,从而泛化误差也就越大,因此为了处理线性不可分的数据,我们引入了高斯核函数,核函数对于线性不可分的点不用投放到高维空间进行处理,只用在低维空间运算就可以计算高维空间的内积。

2.1.2 SVM技术中的重要参数

SVM模型中有两个非常重要的参数C和gamma。SVM的目标函数:

其中C代表惩罚因子,即在线性不可分的情况下,对分类错误的惩罚程度。C越高往往越不能容忍误差,因此容易过拟合,C越小,分类器会越不在乎分类错误,会欠拟合。

gamma是选择RBF函数作为核函数后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布。RBF核函数:

其中gamma=-,对于gamma的物理意义而言,它影响的是每个支持向量对应的高斯作用范围,从而影响泛化性能,gamma越大,σ越小,对应的支持向量也就越少,gamma值越小则支持向量越多。支持向量的个数影响训练与预测的个数。因此c和gamma两个参数的调优对于后续的人脸识别系统的成功率是非常重要的。

2.2 SVM的具体操作

2.2.1 SVM训练函数

这次我们选取两组图片来进行SVM处理,其中一组为训练数据,一组为测试数据,训练数据对应的是0-9共十个不同数字,每个数字有5张图片,测试数据也是0-9十个不同数字,每个数字3张图片。除了选取数据之外,最重要的是编写SVM训练函数与SVM测试函数。SVM训练函数步骤如下。

⑴ 将50张图片数据读入矩阵,每个数字对应5张图片,形成训练数据。

⑵ 将前5张打上标签为1,后5张数字打上标签0。

⑶ 调用matlab库中的SVMtrain函数,进行训练,通过循环产生45个分类器。

⑷ 将分类器存入矩阵中。

2.2.2 SVM测试函数

SVM训练函数主要是用来形成分类器,接下来,就要通过这个分类器来编写SVM测试函数,测试函数主要是运用了投票的理念,SVM测试函数步骤如下:

⑴ 将30张图片数据读入矩阵,每个数字对应3张图片,形成测试数据。

⑵ 读入测试数据,获取测试数据的容量m,以及分类的容量n,形成一个m*n的voting矩阵。

⑶ 根据分类器对测试数据进行比对,通过svmclassify库函数返回标签,如果标签对应的是1,则测试数据在对应数字数目加一,如果标签对应的是零,则在另一个数字数目加一。

⑷ 最后,找到每个测试数据中对应数目最多的数字,这个数字即跟这个测试数据匹配。

设置c=1,gamma=0.0001,最后经过SVM训练和测试,我们对测试数据30张数字图片的识别成功率为86.67%。

3 结合PCA与SVM的人脸识别系统

这个人脸识别系统采用的数据主要是orl_faces人脸库中的40个人总共400张人脸,其中前五张作为训练数据,后五张作为测试数据,主要流程如下。

⑴ 将40个人的人脸总共400张图读入,其中前五张作为训练数据,后五张作为测试数据。

⑵ 将训练数据进行PCA变换,得到降维后的矩阵,然后用scaling对数据标准化,使其在-1到1的范围内,增加识别成功率。

⑶ 将训练数据放入SVM训练函数中,产生分类器。

⑷ 将测试数据进行PCA降维,然后放入SVM测试函数中。

⑸ 将测试函数产生的标签与现实图片标签进行比对,输出成功率。

最后,如圖7所示当降维数K=80时,经过对gamma和C的调参,当C在70到80的范围内,gamma在0.005到0.02的范围内时,识别成功率最 高可达90%。然后,我们将C设置为70,gamma设置为0.015,K设置为80,将小组内三个人共30张照片放入orl_faces人脸库进行比对,成功率只有73%。而将30张真实人脸单独进行训练,测试,识别成功率只有60%。真实人脸比对的图如图8、图9、图10、图11和图12所示。

以上可以看出图8,图9识别都正确,而图10识别错误主要是光线问题,图11,图12识别错误主要是相似特征太多,如黑框眼镜。

4 结束语

为了制作一个人脸识别系统并且实现人脸识别的功能,本文将PCA与SVM技术结合,分别用于对图片降维提取重要特征以及训练机器识别不同的图片,最终在orl_faces人脸库中测试达到了90%的识别成功率,但是如果将真实人脸图片进行识别,成功率只有73%。本系统在特定的人脸库中证明是可行的,下一步需考虑如何减少像光照,湿度,以及过于相似的特征对于识别成功率的影响,从而使本系统更好的识别真实人脸。

参考文献(References):

[1] 金忠.人脸图像特征抽取与维数研究[D].南京理工大学硕士

学位论文,1999.

[2] 徐勇,张重阳,杨静宇.基于主分量特征与独立分量特征的人

脸识别实验[J].计算机工程与设计,2005.26(5):1155-1157

[3] 陈伏兵.人脸识别中鉴别特征抽取若干方法研究[D].南京理

工大学,2006.

[4] 张翠平,苏光大.人脸识别技术综述[J].中国图像图形学报,

2000.5(11):885-894

[5] Javed A. Face Recognition Based on Principal Component

Analysis[J]. International Journal of Image, Graphics and Signal Processing(IJIGSP),2013.5(2):38

[6] Stan Z.Li Anil K.Jain. Handbook of Face Recognition[M].

New York:Springer,2004.5.

[7] Wayman J L Jain A K Maltoni D et al.Biometric Systems:

Technology, Design and Performance Evaluation[M].London:Springer,2005.

猜你喜欢

测试数据人脸识别
基于ID3决策树算法的大学生体能测试数据管理系统设计
基于回收测试数据特点的判读方案设计与实现
人脸识别 等
揭开人脸识别的神秘面纱
测试数据管理系统设计与实现
基于(2D)2PCA-LBP 的人脸识别方法的研究
人脸识别在高校安全防范中的应用
基于自适应粒子群优化算法的测试数据扩增方法
空间co-location挖掘模式在学生体能测试数据中的应用
基于类独立核稀疏表示的鲁棒人脸识别