发明内容
本发明主要针对识别效率低且识别时间长的问题,提出一种基于改进的2DPCA结合SVM的人脸识别方法。
本发明的技术方案为:
一种人脸识别方法,其步骤为:
1)读取训练集上的所有图片,根据图片的像素值生成该图片的二维训练样本矩阵;其中,该训练集包括多类人的图片,每类人具有若干训练样本图片;
2)利用每类人的若干训练样本矩阵求出该类人对应的修匀平均矩阵;然后用每一幅图片所对应的二维训练样本矩阵减去该图片所在类的修匀平均矩阵;
3)对步骤2)的结果累加和得到该训练集的协方差矩阵;计算该协方差矩阵的特征值和特征向量;
4)选取前若干个最大特征值对应的特征向量组成新的矩阵,然后将该训练集每一图片的二维训练样本矩阵分别投影在该矩阵上,得到该训练集降维后的矩阵;
5)利用步骤4)降维后的矩阵中的特征数据进行训练得到若干分类器,然后用该分类器对待测图片进行人脸识别。
进一步的,利用每类人的若干训练样本矩阵求出该类人对应的修匀平均矩阵的方法为:把每一二维训练样本矩阵的第m行第n列的元素组成一个数列,计算该数列的修匀平均值作为第m行第n列的元素,得到矩阵为该修匀平均矩阵。
进一步的,该数列的修匀平均值其中,xi为数列中的第i个值,xmin表示数列中的最小值,xmax表示数列中的最大值,n为该数列元素总数。
进一步的,步骤5)中,利用SVM算法对特征数据进行训练得到若干分类器。
进一步的,采用交叉验证法与网格搜索法进行SVM参数选择,其方法为:
51)依据网格搜索法初步设定SVM的参数变化范围,然后针对参数不同组合运用交叉验 证求得对应的分类正确率;
52)将前两个最高的分类正确率分别对应的参数值作为新的参数范围,然后根据交叉验证平均正确率排序,选择分类正确率最高的参数组合作为模型的最优参数。
进一步的,所述SVM算法为二分类SVM算法。
进一步的,所述二分类SVM算法的核函数为RBF核函数。
本发明首先利用改进的2DPCA算法对训练样本图像进行降维处理,提取其主要特征信息,然后把这些数据利用SVM进行分类,得到若干分类器,再用改进的SVM分类策略对测试样本进行判别,从而实现人脸识别。
传统的2DPCA算法原理:
人脸图像库共有N个人的人脸图像,把每个人其中的H幅图像作为训练样本,则用S(S=N×H)幅图像来训练,其中每幅图像大小为m×n。
设训练样本集A={X1,X2,…,XN},Xij表示训练样本中第i类的第j个样本,这是一个m×n大小的二维矩阵,每一图像对应一二维矩阵,则训练样本均值为:
训练样本的协方差矩阵G为:
其中T表示矩阵的转置,容易知道G为n×n的非负定矩阵。
在求得G的特征值和特征矩阵之后,将特征值从大到小排序,取G的前k个最大特征值所对应的标准正交特征向量V1,V2,…,Vk组成新的矩阵W作为最优投影矩阵,其中W={V1,V2,…,Vk},其大小为n×k。
对某个样本图像X,令Yi=X·Vi(i=1,2,…,k),则称Yi,Y2,…,Yk为这个样本图像的主成分。把图像X投影在矩阵W上所得到的矩阵B称为这个样本的特征矩阵,其中B=X·W={Yi,Y2,…,Yk},其大小为m×k。
因此可以知道,一个图像的大小为m×n,通过投影在矩阵W上,从而得到一个大小为m×k的特征矩阵。因为k≤n,所以一个图像的样本数据可以通过2DPCA降维后来表示,这就是把2DPCA用作降维的原因。
把k个特征值之和占所有特征值之和的比例叫做累积贡献率η,
在实际应用时,主成分的个数即k值,为多少时才较为合适,这个没有统一的规定。其实选择的主成分个数最好能够保留原始样本信息的70%以上,即当已选择的k个特征值的累积贡献率≥70%时即可。
改进的2DPCA算法:
对于有限数列{x1,x2,…,xn}的修匀平均值定义为:
其中,xmin表示数列中的最小值,xmax表示数列中的最大值,即修匀平均是把原数列中的两个极值去除后得到新的数列再进行算术平均。
例如有数列E={2,5,8,8,6,10},其最小值为2,最大值为10,所以去除这两个值组成新的数列E1={5,8,8,6},再求算术平均值,即得到修匀平均值6.75,而E的算术平均值为6.5。
用同样的方法可以得到修匀平均矩阵。
对于第i个人的第j幅训练图像Xij,其对应的矩阵表示为:
由于用每人H幅图像用作训练,则可以求出某人的H幅图像的修匀平均矩阵。例如,修匀平均矩阵的第一行第一列的元素由这样得到:把H幅图像相应矩阵的第一行第一列的元素组成一个数列,按式(4)计算得到的修匀平均值作为其的第一行第一列的元素。依此类推,计算得到m行n列的修匀平均矩阵。
由式(2)和式(4)可得改进后的2DPCA算法的总体散布矩阵的定义如下:
其中,表示第i类人的修匀平均矩阵。
取与G的k个最大特征值对应的标准正交的特征向量V构成最优投影矩阵W={V1,V2,…,Vk},则对已知的图像样本X,其特征矩阵B为:
B=X·W (7)
SVM分类原理:
SVM其实是用于分类两类数据的一种处理方法。如果两类的二维数据线性可分,理论上是能够实现最优分类的。若将从分类二维数据推广应用到分类高维数据,则将最优分类线称为最优超平面。SVM旨在寻找一个超平面,使得两种不同类别的点正好落在超平面的两侧,并且超平面两侧的空白区域达到最大。
若给定的训练集为{(x1,y1),(x2,y2),…,(xi,yi)},xi∈Rn,yi∈{-1,+1},其中xi为输入样本,yi为两类的类别值,n为样本的维数,则该训练集可被一个超平面线性划分,该超平面记为w·x+b=0,其中w是超平面的法向量,b为超平面的截距。
最优超平面的构造问题实质上是约束条件下求解一个二次规划问题,其最优分类函数为:
其中,K(x,y)是核函数,L为训练样本的个数,sgn()是符号函数,当表达式大于0,返回1;等于0,返回0;小于0,返回-1。
而核函数主要包括三种:
(1)多项式形式的内积函数,形式为K(x,y)=(x·y+1)d(其中d=1,2,...);
(2)径向基函数(RBF)为内积,形式为K(x,y)=exp(-γ||x-y||2),其中γ为核函数参数;
(3)Sigmoid核函数,形式为K(x,y)=tanh(b(x·y)-c),其中b,c为核函数参数。
SVM将两类样本数据投影到一个新的高维空间,用一个最优分类面来进行分类,可解决线性不可分的问题。
三种核函数中,RBF核函数表现相对稳定,性能比另外两种好,而多项式核函数与Sigmoid核函数稳定性较差,所以本发明采用的是RBF核函数。
本发明采用交叉验证法与网格搜索法进行SVM参数选择,由于采用RBF核函数,而且在SVM分类时要增加误差惩罚参数C,所以此时需要确定两个参数即惩罚因子C与核函数参数γ。
(1)K交叉验证(k-Cross Validation)
将训练数据集分成k份相等的子集,每次将其中k-1份数据作为训练数据,而将另外一份数据作为测试数据。这样重复k次,根据k次迭代后得到的MSE平均值来估计期望泛化误差,最后选择一组最优的参数。留一法是k-交叉验证的特例,即每次用n-1个数据(n为训练数据集大小)训练,而用另一个数据测试。
(2)网格搜索法(Grid Search)
基于网格法将C∈[C1,C2],变化步长为Cs,而γ∈[γ1,γ2],变化步长为γs,这样,针对每对参数(C',γ')进行训练,取效果最好的一对参数作为模型参数。
从SVM的分类思想知道,SVM只能对两类样本进行分类。但在实际当中,很多时候要分类多类样本,而不是分类两类样本。本发明采用一对一支持向量机方法将SVM分类器进行推广,用于处理多类分类的情况。
一对一支持向量机是利用二分类SVM算法构造一个最优决策面区分每两类不同的训练样本。因此,要用个分类平面(n>2)才能分类出n类样本,即每两类不同的样本都要构造出一个分类器。这相当于将多类问题变换为多个两类问题来求解,与二分类SVM并没有本质的区别。在对训练样本集构造出决策函数之后,就要对测试样本进行精确的分类。投票机制是常用的方法。这方法必须利用已有的n(n-1)/2个决策函数进行分类,才能确定测试样本x所属的类别。如果某个分类器认为x是第s类,则表示对第s类投一票,最后检查哪一类获票数最多,就认为x属于该类。如有两个以上的最大值,则一般可以简单地取第一个最大值所对应的类别。
一对一支持向量机分类的改进
一对一支持向量机存在这样的情况:在预测过程中,每一个预测样本需要分别进入所有n(n-1)/2个分类器进行判定,根据各个分类器投票结果来决定此样本的类别。但若某一预测样本不属于两分类器中的任何一类时,将这一票投给其中任何一类都是不合理的,也是没有意义的,得到的分类结果也是不可信的。由于投票结果具有随意性,影响分类的准确率,并且对这些无效投票的计算增加了额外的运算时间。因此,本文采用一种改进方法,对传统一对一多分类方法的预测阶段进行改进。
改进方法只是针对识别阶段,而在训练阶段仍要训练出n(n-1)/2个分类器。
改进的方法称为多轮投票策略。多轮投票策略即当候选类别较多时,先将所有候选类别分成若干组,然后在每组内使用传统的一对一算法。当一轮投票结束时,每个组中获得票数较高的若干候选类别胜出进入下一轮投票。若下一轮投票的候选类别数仍然较多,则继续使用多轮投票策略,过程同上;否则,将所有候选类别作为一组,直接决出当选者,即是未知样本的分类结果。
多轮投票策略过程如下:首先给每个类别按顺序编号,然后每5个类别作为一个组,例如1到5编号为第一组,6到10为第二组……。若最后一个组不足5个类别,则把这些类别也作为一个组。对每个组进行第一轮投票,即每个组使用传统的一对一SVM算法,得票最高的2个类别称为“胜者”,剩下的类别称为“败者”,若一个小组只包含1个或2个类别, 则也把这些类别都作为“胜者”。“胜者”参与下一轮投票,而“败者”则不参与。然后重复此过程,即编号——分组——小组投票——“胜者”进入下一轮,直到最后一轮,只会产生一个组,然后在这个组产生唯一的“胜者”,即得票最高的1个类别,作为测试样本所属的类别。这里,将2个得票最高的类别作为“胜者”,而不是得票最高的那1个,这是因为可以减少误差,降低识别的错误率。如果使用1个,会显得比较绝对,因为可能存在这样的情况:第2得票高的类别在下一轮的投票中,即会与上一轮不同小组间的“胜者”组成新的一组进行分类,而这可能会使这轮的票数高于上一轮同小组的得票最高者在这轮小组中的得票。但又不会使用得票最高的3个或4个类别作为“胜者”,因为得票数第3高,意味着测试样本属于这个类别的概率已经很低了。
例如,假设对于一个类别数n=25的多类分类问题,采用多轮投票策略,识别一个测试样本过程的示意图如图2所示。
如果按照传统一对一SVM算法,在25个类别中识别一个测试样本,需要在25*(25-1)/2=300个分类器中进行判定。若采用多轮投票策略,从图2可知,第一轮中,每组只有5个类别,则每组只需10个分类器,所以5组共50个分类器;同理,第二轮中,共需20个分类器;第三轮中,只需6个分类器,所以三轮共需76个分类器,比传统的方法少得多。
多轮投票过程中,由于每一轮中每个小组产生的“败者”是测试样本不太可能被判定为属于该类别的,所以不需要对小组间的“败者”进行下一轮投票,只需对“胜者”进行下一轮投票,这样可以避免发生预测样本不属于两分类器中的任何一类时,还要判定的情况。由此可知,采用多轮投票策略可以大大减少不必要的分类判定,从而可以加快识别的速度。
与现有技术相比,本发明的积极效果为:
为测试本发明方法(改进的2DPCA+SVM)的识别效果,进行了与其它识别方法的比较实验,即在训练集与测试集都相同的条件下,与PCA+KNN(k-Nearest Neighbor),PCA+LDA(Linear Discriminant Analysis),PCA+SVM以及传统的2DPCA+SVM进行比较。
表1和表2分别记录了在两个人脸库使用每人前5幅图像作为训练集和每人前7幅图像作为训练集的实验结果。
通过观察表1和表2可知,4种方法使用每人前7幅图像用来训练得到的识别率要高于使用每人前5幅用来训练时的识别率。这是因为这是因为用较多的图像去训练,即用改进的2DPCA降维时,得到的特征向量更加准确,更能反映出原始图像每个人的差异,更好的提取人脸的特征,有效的保留了原来的高维信息数据。同时,在分类时,由于每人用7幅图像训练,即每个人的样本增加了,同类样本能更集中地分布,两类分布更分散,使得更容易分类识别出来。
表1训练每人前5幅图像的结果比较
表2训练每人前7幅图像的结果比较
注:表1和表2中的识别率都是表示实验中得到的最高识别率,而时间是表示训练时间和测试时间之和。
另外,从表1和表2中可以看出本发明的算法所得到的识别率和时间都优于PCA+KNN、PCA+LDA,PCA+SVM,传统的2DPCA+SVM等算法。例如,在表1和表2中,利用本发明的算法得到的ORL库的识别率比用PCA+SVM得到的分别提高了3%和0.8%,时间分别快了2.3秒和2秒;在Yale库中,用本发明的算法得到的识别率比用PCA+SVM得到的分别提高了1.7%和1.6%,时间分别快了2.4秒和2.5秒。所以用本发明的算法得到的识别率比用PCA+SVM得到的约高1.775%(将3%,0.8%,1.7%和1.6%相加取平均值);同理,时间约快2.3秒。从这可知,本发明的算法在识别率和时间方面的性能都得到提升。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅用于解释本发明,并不用于限定本发明。
本发明的方法流程如图1,实施步骤可以概括如下:首先收集多个人的多张图片,组成一个人脸库,将人脸库的图像分为训练集和测试集两部分;然后将训练集的图片用2DPCA进行降维,得到投影矩阵,接着将这些训练集图片都投影在这个矩阵上,得到新的矩阵样本,再对这个矩阵样本用SVM进行分类训练得到多个分类器,这样就可以用测试集上的图片进行识别分类。
改进的2DPCA降维过程如下:首先读取训练集上的所有图片,每一幅图片的读取都能得到对应的二维矩阵,矩阵的大小为图片的长宽值,而矩阵数据则是像素值;然后利用每类人的若干训练样本矩阵求出对应的修匀平均矩阵;接着每一幅图片所对应的矩阵按照上文的公式6减去对应自身类内的修匀平均矩阵,再求累加和,从而求得协方差矩阵;最后求出协方差矩阵的特征值和特征向量,根据特征值大小选取前若干个最大特征值所对应的特征向量组成新的矩阵,再将训练集图片投影在这个矩阵上就能够实现原图片矩阵的降维。
附图中图3显示了主成分个数(k值的大小)对识别率的影响。识别率是指测试集合中所能正确分类识别的图像幅数与测试集图像总数的比例,而不是指待识别图片与原图片之间的相似度。从图3可以看出,随着主成分个数的增加,识别率并不是随其单调地增加,而超过某一值后还会开始下降。人脸图像经2DPCA特征提取后,可以很大程度地降低了特征向量的维数,即保留了那些差异最大的特征,代表不同人的相关特征,可以作为区分不同人的依据,而那些每个人相同的、区分度较低的特征则被舍弃。如果维数增加,这同时会保留一些冗余的信息,这些信息不是区分人脸的关键,甚至会影响分类的效果。如果维数适当较少的话,识别率不一定会很低,相反还会达到最优值,这是因为得到的特征空间已足够能用来表达人脸的特征,得以区分他们。
如果使用每人5副图像作为训练集,则意味着利用5幅图像的数据作为1个人的类别来进行训练SVM分类器。例如,分类2个人的时候,将其中一个人的5幅图的数据标记为+1类,另一个人的5幅图的数据标记为-1类,SVM对这两类数据进行训练,就得到判定这两 人的分类器。以ORL库为例说明分类过程,其包含40类人,每人10幅图片。因为使用一对一SVM进行分类,所以40类样本利用SVM将构造出780个分类器,而780个分类器是这样的来的:将第1个人与第2个人分类,得到第1个分类器;第1个人与第3个人分类,得到第2个分类器……,第39个人与第40个人分类,得到第780个分类器。在识别时,将测试样本也投影到特征子空间之后,依次由这些分类器进行分类,然后判定为+1或-1类,最后经过多轮投票机制确定类别。
在SVM分类时,所选的核函数起到关键作用,选择不同的核函数,产生不同的识别率。附图中图4显示了利用三种不同的核函数所产生的识别率。
从附图中图4可得知,使用Sigmoid核函数时的识别率是三者中最低的,而多项式核函数的识别率在约30维之前都与RBF核函数相差不大,但之后便相差很大,而且使用RBF时识别率下降地也比较平稳,所以本发明采用的是RBF核函数。
对参数进行寻优计算的步骤为:
1)依据网格法初步设定参数变化范围,针对参数不同组合运用交叉验证求得分类正确率。
2)根据前述参数范围进一步细分网格,即将上一步中的最高的那2个正确率对应的参数作为新的范围,然后将变化步长缩小10倍,从而得到更精确的参数值;例如第一步的初始范围为[1,20],变化步长为1,而得到的最高正确率对应的参数为10,次高的对应参数为8,那么将范围变为[8,10],并将步长变为0.1。再根据交叉验证平均正确率排序,选择分类正确率最高的参数组合作为模型的最优参数。
3)将数据重新分成训练集与测试集,利用最优化参数模型训练模型,利用测试数据测试模型性能。因为计算修匀平均过程中涉及最大值和最小值,为了保证参与计算的数据个数要大于2(要舍弃最大值和最小值),所以要求每人要用至少3幅以上图片来训练,因此可以简单地选取每人前3幅以上图片作为训练集,剩下的作为测试集。
以ORL库为例说明参数寻优过程。首先初步设定两个参数的变化范围和步长,然后对每对参数组合利用交叉验证来求得识别率。其中根据交叉验证的思想,由于ORL每人有10幅人脸图像,所以可以将第1幅用来测试,剩下的9幅用来训练;第2幅用来测试,剩下的9幅用来训练……直到第10幅用来测试,剩下的9幅用来训练。因此,每组参数要进行10次测试来进行寻优。所以每组参数都可以对应这10次的平均识别率。然后根据平均识别率进一步细分网格,重新确定参数变化范围和步长,再次求出不同参数对的平均识别率,最后选择平均识别率最高的参数组合作为模型的最优参数。这样,就可以将ORL重新分成训练集与测试集(例如可以用前5幅用作训练,后5幅用来测试),然后使用最优化参数对来训练模型,最后利用测试集来计算识别率,就将这识别率作为最后的识别率。上文提到的不同方法之间 的比较,其中本发明得到的识别率就是根据这过程计算出来的。