人脸识别.docx
《人脸识别.docx》由会员分享,可在线阅读,更多相关《人脸识别.docx(17页珍藏版)》请在冰豆网上搜索。
人脸识别
1PCA原理2
2分析3
3实验分析8
3.1LFW人脸数据库实验分析8
3.1.1LFW人脸数据库数据描述8
3.1.2实验方法9
3.1.3实验结果10
3.2Extended_YalefacedatabaseB数据库实验分析10
3.2.1数据库数据描述10
3.2.2实验结果12
3.3SCface人脸数据库实验分析12
3.3.1数据库数据描述12
3.3.2实验结果14
3.4CMUPIE人脸数据库实验分析15
3.4.1数据库数据描述15
3.4.2实验结果16
4结论17
1PCA原理
主成分分析(PrincipalComponentAnalysis,简称PCA)是一种常用的基于变量协方差矩阵对信息进行处理、压缩和抽提的有效方法。
PCA方法由于其在降维和特征提取方面的有效性,在人脸识别领域得到了广泛的应用。
PCA方法的基本原理是:
利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别。
测试阶段的具体步骤如下:
●第一步:
假设训练集有200个样本,由灰度图组成,每个样本大小为M*N。
写出训练样本矩阵:
其中向量xi为由第i个图像的每一列向量堆叠成一列的MN维列向量,即把矩阵向量化。
●第二步:
计算平均脸。
计算训练图片的平均脸:
(公式1)
●第三步:
计算差值脸。
计算每一张人脸与平均脸的差值:
(公式2)
●第四步:
构建协方差矩阵:
(公式3)
●第五步:
求协方差矩阵的特征值和特征向量,构造特征脸空间的协方差矩阵的维数为MN*MN,考虑其维数较大,计算量比较大,所以采用奇异值分解(SingularValueDecomposition,SVD)定理,通过求解
的特征值和特征向量来获得
的特征值和特征向量。
求出
的特征值
及其正交归一化特征向量
。
根据特征值的贡献率选取前p个最大特征向量及其对应的特征向量。
●测试阶段:
●一般取
即使训练样本在前p个特征向量集上的投影有99%的能量。
求出原协方差矩阵的特征向量:
(公式4)
⏹则“特征脸”空间为:
2分析
经过了解了PCA的工作原理以后,先写一个代码实现PCA,然后对这个结果进行分析。
首先从Yaleb光照变化下人脸识别的图片库中随机的抽取9个图片。
Figure1
首先读入9张图片为96*84,然后转成8064*1的一列作为一个样本。
使用PCA降维,选择的主成份的阀值是0.9。
figure2是特征值由大到小的排列,表明了各个特征向量的贡献率。
figure3是累计贡献率。
Figure2
Figure3
调用calve.m绘图
可以看到这个特征值的增加的趋势。
得到阀值内的特征值后,U矩阵就是特征值所对应的特征向量所构成的矩阵。
也就是方差变化最大的量,含有最多信息的量。
然后根据公式
计算第i个样本的特征脸。
如果不对数据库进行PCA降维,而直接使用最近邻来进行识别,会不会因为使用的信息更多而得到的正确率更高?
感觉会因为维数降低的太多而导致准确度的降低,但实际上这些特征值保留了最大的信息(定义的阀值相关),同时去掉了噪音维度,或者是一些相关的冗余的维度,而不会造成准确度的降低,反而突出了特征值,特征向量,构造了特征图片,对分类更加有益处。
上面9张图片所对应的特征图为:
使用good.m绘制。
figure4是normal后的9张图片的展示,figure5是PCA降维后,得到的特征脸。
就是把原图像投影到主成份所定义的新的子空间中,得到一个较原图更粗糙的图像,但同时也更具有代表性。
Figure4
计算特征脸
Figure5
如果矩阵
中,每个列向量是一个图片,求每一行的平均值,得到M*1的平均脸。
figure6是上面9幅图的平均脸。
Figure6
在通过这9张图片的训练以后,我们得到了主成份矩阵,平均脸,和训练样本集中每个样本的特征脸,也就是主成份下的每个脸的一个自脸,理论下应该是表示了这个脸的主要特征,对分类识别起最大的作用。
接着我们仍从Yaleb光照变化下人脸识别的图片库随机的抽取一张图片。
首先这个图片从96*84维的矩阵变为8064*1的一个列向量,然后用这个列向量和平均脸相减,从新构造矩阵。
然后根据主成份分量矩阵U,求出测试样本的特征脸
。
然后我们还可以重构这个人脸:
Figure7
接着就可以计算这个图片和每个训练样本的欧式距离,一次来进行分类。
Figure8
3实验分析
3.1LFW人脸数据库实验分析
3.1.1LFW人脸数据库数据描述
本次试验我们只在LFW原有人脸数据库中随机选取来自86个个体的1251张人脸图像用做实验,每个个体选取有11-20张不同个数的人脸图像,并且已经将彩色图像转换为灰度图像进行试验,每张图像已经将其转换为32*32大小的人脸图像。
在使用PCA降维后,根据curve.m画出特征值的累计的结果,这个结果就是每个特征值对人脸识别的贡献的累计,可以看到曲线的趋势,从而证明PCA的可行性。
Figure9
根据下面的代码得到LFW人脸数据库的平均脸(figure10),其中m是PCA函数返回的平均脸,然后使用reshape函数进行变型,这里要注意的是,在readdata.m中所有的列向量都是归一化的,而这个维度为1024,所以每个量都是很小的,最后得到的平均脸的重构效果很差,所以在观察这个图的时候,我使用的是没有归一化的数据,否则看不到平均脸。
L=m;
L=reshape(L,32,32);
%L=uint8(L);
imshow(L)
Figure10
3.1.2实验方法
对于LFW人脸数据库,开始的时候,没有使用readData.m,直接load了LFW.mat文件,然后写了一个读文件完成对数据的处理,这个过程在run.m文件中实现。
但后来使用了readData.m文件后,就不在用这个run.m文件,而使用的是run2.m。
这个人脸数据库中只含有86个人,所以首先对训练样本进行PCA降维处理,得到平均脸和主成份矩阵。
接着对每个测试样本计算他的特征脸,和训练样本的特征脸进行对比。
但是从最开始的LFW.mat的数据中看到了2个比较特别的矩阵:
●num表示每一个体所包含的图像数,如:
第1个个体到第16个个体包含有11个图像样本
●trainIdx给定随机取训练样本的标号
根据这两个矩阵,可以让同一个人的脸
是属于第一个人的所有的图片求平均,得到在计算一遍特征脸。
当train_num=8,训练样本数量是688个,测试样本数量是563个。
那这563个测试样本就只需和86个特征脸进行对比,不需要和688个进行对比。
实际上的结果差别不大,而且效果时好时坏。
但是PCA降维后,使用最近邻的方法来进行人脸识别的分类正确率很低,所以在观察数据后,因为数据量不大,所以直接计算每个测试样本和训练样本的距离,来进行人脸识别,没想到结果比使用了PCA后的好。
当train_num=8时,直接使用最近邻的时候是0.2114。
3.1.3实验结果
LFW人脸数据库:
分别选取每个个体的前5,6,7,8,9个人脸图像作为训练数据,剩下的所有的人脸图像为测试数据,实验结果如Table1所示:
Table1.使用PCA降维后,使用最近邻方法在LFW人脸数据库上的识别正确率。
训练样本个数
5
6
7
8
9
识别正确率
0.1803
0.1946
0.2080
0.2096
0.2201
Table1
3.2Extended_YalefacedatabaseB数据库实验分析
3.2.1数据库数据描述
本次试验使用的数据包含了来自yaleB和ExtendedyaleB人脸数据库的在不同光照条件下的人脸图像。
这个数据库包括有来自YaleB数据库的10个个体和来自ExtendedYaleB的28个个体,并且每一个个体都有64张在不同光照条件下采集的人脸图像组合在一起。
这样就组成了来自38个个体在64种不同光照条件下采集的2432张人脸图像。
每张图像已经被转换成84*96大小。
图figure11,是在每个个体选择10个训练样本时,得到的平均脸,这里注意的地方,和在前面的是一样的。
figure12是特征向量累计贡献率的曲线,对比figure9和figure12,可以看到figure12,表明在变化的更剧烈,也就是特征向量的贡献的幅度很大,含有更多的信息。
猜测这样的数据结构,是不是对识别更有益处,也就是这个库中的样本更适合PCA降维的方法。
Figure11
Figure12
3.2.2实验结果
分别选取每个个体的前5,10,20,30个人脸图像作为训练数据,剩下的所有的人脸图像为测试数据,实验结果如Table2所示:
训练样本个数
5
10
20
30
识别正确率
0.3747
0.3796
0.3810
0.4033
Table2
figure12是特征向量累计贡献率的曲线,对比figure9和figure12,可以看到figure12,表明在变化的更剧烈,也就是特征向量的贡献的幅度很大,含有更多的信息。
猜测这样的数据结构,是不是对识别更有益处,也就是这个库中的样本更适合PCA降维的方法。
最后的实验结果十分的不尽人意,但是总体来说是比LFW数据库要好了很多,也就是证明了,这样的数据分布,确实更适合使用PCA降维的方法来表征信息。
但我不明白的是,效果为什么这么差。
3.3SCface人脸数据库实验分析
3.3.1数据库数据描述
本次试验只选取使用了SCface人脸数据库的一个子集用于试验。
这个子集包含有130个个体的1170张彩色图像,每张人脸都包含了9张不同的离散角度,即正面frontal(标记为0度角),左侧L1(左转22.5度),左侧L2(左转45度),左侧L3(左转67.5度),左侧L4(左转90度),右侧R1(右转22.5度),右侧R2(右转45度),右侧R3(右转67.5度),右侧R4(右转90度)。
这样每个个体9张图片,分别从-90度到+90度转动姿态变化。
Figure13
观察这个数据库中的图像,可以发现,侧脸的图像和正脸的图像差别很大,如果做的是人脸测试,我感觉侧脸可能不会被评为人脸,而会被判为非人脸。
或者是在人脸的主成份的矩阵中当作噪音数据。
所以效果很差。
图figure14是特征向量的累计贡献的曲线。
开始在观察数据库的时候,我以为这个曲线会发生质的变化,但是没有,大致的走向没有发生改变。
表明还有有些列可以表示主要的信息。
但不知道这些列是不是人脸的对应的列,有可能是侧脸的边缘部分和背景的边缘部分,同样是方差很大,存储主要的信息。
Figure14
接着观察平均脸figure15,看到平均脸十分的模糊。
figure15是train_num=5的时候的平均脸。
L=m;
L=reshape(L,150,150);
L=uint8(L);
imshow(L)
Figure15
3.3.2实验结果
分别选取每个个体的前1,2,3,4,5个人脸图像作为训练数据,剩下的所有的人脸图像为测试数据,实验结果如Table3所示:
训练样本个数
1
2
3
4
5
识别正确率
0.0577
0.0769
0.0679
0.0523
0.0654
Table3
规范化后,当train_data=4的时候,正确率是0.0215。
当不进行规范化的时候,正确率是0.0523。
当直接使用最近邻的时候,正确率是0.0596。
Figure16
figure16分别是train_num=1,train_num=2,train_num=5的时候的平均脸。
Figure17
figure17分别是train_num=1,train_num=2,train_num=5的时候的特征向量的累计贡献曲线。
3.4CMUPIE人脸数据库实验分析
3.4.1数据库数据描述
本次实验只选取使用了PIE人脸数据库的一个子集用于实验,此子数据库包含来自68个个体的11554张多姿态,变化光照和表情的人脸面部图像,每个个体大约有170张左右人脸图像用于实验。
每个人脸图像都已经转换成32*32大小。
图figure18是PIE人脸数据库的平均脸。
figure19是特征向量的累计贡献曲线。
Figure18
Figure19
3.4.2实验结果
分别选取每个个体的前1,2,3,4,5个人脸图像作为训练数据,剩下的所有的人脸图像为测试数据,实验结果如Table4所示:
训练样本个数
5
10
20
30
识别正确率
0.1340
0.2983
0.3149
0.4303
Table4
当train_num=30的时候,不规范化列向量,得到的正确率是0.3860。
4结论
在对特征向量的累计贡献曲线中,对比figure9和figure12,可以看到figure12变化的更剧烈,也就是特征向量的贡献的幅度很大,含有更多的信息。
猜测这样的数据结构,对识别更有益处,也就是这个库中的样本更适合PCA降维的方法。
实验结果也确实证明了这个结论。
而针对SCface人脸数据库,观察这个数据库中的图像,可以发现,侧脸的图像和正脸的图像差别很大,如果做的是人脸测试,我感觉侧脸可能不会被评为人脸,而会被判为非人脸。
或者是在人脸的主成份的矩阵中当作噪音数据。
所以效果很差。
猜测SCface的特征向量的累计贡献的曲线会发生质的变化,但实验结果表明没有。
说明有些列仍可以表示主要的信息。
但不知道这些列是不是人脸的对应的列,有可能是侧脸的边缘部分和背景的边缘部分,同样是方差很大,存储主要的信息。
在SCface中虽然特征向量的累计贡献的曲线和常规的相同,但可以猜测这个贡献大的特征向量应该是非关键的,噪音的,例如侧面的人脸边缘和正面的人脸边缘是矛盾的。
这些边缘数据的方差最大,数据波动最大,所以的最富含信息的特征向量。