人脸检测
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人脸检测--随机过程大作业
目录
一 摘要 二 介绍 三 模型 四 基本理论和方法 五 方法 六 算法和算法分析 七 讨论 八 结论 九 致谢 十 参考文献 十一 附录
1
人脸检测--随机过程大作业
一、 摘要
本文用 PCA 算法进行人脸的检测,PCA 方法由于在降维和特征提取方面 的有效性,被广泛应用于人脸识别领域。基于该方法,我设计了完整的人 脸特征提取和检测的算法。
检测的时候要把图片大小调为 112*92,我刚开始没注意,自己找了张图片检测, 然后总是出现矩阵大小不匹配的错误。
七、讨论
对于实验结果,采用常规的 PCA 算法,识别率并不高。首先,我们用的训 练样本都是灰度值,消除了很多对人脸特征有影响的因素,这也会减低识别率。 如果用彩色图片,或者图片中除了人物以外其他事物比例大一点,识别起来也很 困难。 图象的缩放也会影响识别。我们用的都是 112*92 的图片,测试的时候首先 要把图片调成合适大小。如果图片尺寸过小会导致率降低。
6
人脸检测--随机过程大作业
2、计算均值脸 按照
1 i 200 xi 计算 200 个人脸图像样本的均值。 200 i 1
avg=reshape(sum(total,3)/200,112*92,1);
3、求特征值和特征向量 采用奇异值分解法。
[S V D]=svd(b,0); s=sum(V,2); d1=s.*s;
奇异值分解: 设A为秩为r的m*n (m>n) 维矩阵, 则存在两个正交矩阵和一个对角矩阵:
4
人脸检测--随机过程大作业
A=[a1,a2……ar]=U∧VT 其中U=[u0,u1,……,ur-1],V=[v0,v1,……,vr-1],∧=diag(λ 0,λ 1,……,λ r-1)。并且 UUT=I,VVT=I,λ i成降序排列。其中λ i2为AAT的非零特征值,ui和vi分别是AAT 和ATA对应于λ i2的特征向量,可得一个推论: U=AV∧-1 可计算AAT的特征值及相应的正交归一特征向量vi后,可由推论知AAT的正交归 一特征向量 ui= Avi
阈值是用欧式距离定义,来跟被识别图片进行比较。 6、检测
7
人脸检测--随机过程大作业
检测图片按与训练样本同样的方法,将待识别的人脸与平均脸差值投影到特征脸 空间,然后用欧氏距离计算与每个人脸的距离,并与阈值比较,来判断是否是人 脸。
t2=reshape(t1,112*92,1)-avg; t3=space'*t2; x=0; for i=1:k y=norm(t3-new(:,i))/2; if(x<y) x=y; end end if(x<=f+1) disp(' the picture is a human face!'); else disp('the picture is not a human face!'); end
四、基本理论和方法
PCA 方法的基础就是Karhunen-Loeve 变换(简称KL变换),是一种常用 的正交变换。下面我们首先对K-L 变换作一个简单介绍。 K-L变换: 假设X 为n 维的随机变量,X 可以用n 个基向量的加权和来表示: X=
a iφ i
i 1
n
式中:α i 是加权系数,φ i 是基向量,此式可以用矩阵的形式表示:
λi 1
五、方法
设 n 是训练样本的数目;Xj 表示第 j 幅人脸图像形成的人脸向量,则所需样本 的协方差矩阵为: Sr =
(x
j 1
N
j
u )( xi u )T
(1)
其中 u 为训练样本的平均图像向量: u=
1 n xj n j 1
(2)
令 A=[x1-u x2-u……xn-u],则有 Sr=AAT,其维数为 D*D。 根据 K-L 变换原理,需要求得的新坐标系由矩阵 AAT 的非零特征值所对应得 特征向量组成。直接计算的计算量比较大,所以采用奇异值分解( SVD)定理, 通过求解 ATA 的特征值和特征向量来获得 AAT 的特征值和特征向量。 依据 SVD 定理,令 li(i=1,2,……,r)为矩阵 ATA 的 r 个非零特征值,vi 为 ATA 对应于 li 的特征向量,则 AAT 的正交归一特征向量 ui 为:
3
人脸检测--随机过程大作业
X =(φ 1 ,φ 2,φ 3 ,……,φ n)( α 1, α 2 系数向量为: α =ΦTX
,…… α n)= Φα
综上所述,K-L 展开式的系数可用下列步骤求出: 步骤一 求随机向量 X 的自相关矩阵 R=E[XTX],由于没有类别信息的样本集的μ 均 值向量,常常没有意义,所以也可以把数据的协方差矩阵 =E[(x-μ )(xμ )T]作为 K-L 坐标系的产生矩阵,这里μ 是总体均值向量。 步骤二 求出自相关矩阵或者协方差矩阵R的本征值λ i和本征向量φ i,Φ=(φ 1 ,φ
我开始用的eig函数,试图用eig(b*bT)来求特征值和特征向量,但是发现 不行,内存溢出,然后改用的奇异值分解法。 4、选取前k个最大特征向量,并构造特征脸空间
while(d3/d2<0.99) k=k+1; d3=sum(d1(1:k)); end space=S(:,(1:k)); new=space'*b;
六、算法和算法分析
1、读取图像矩阵
for i=1:N pic=imread(strcat('d:\face','\orl_ceshi_',num2str(i),'.bmp')); total(:,:,i)=pic(:,:,1); end
用 for 循环读取 200 张训练样本,完成循环后的 total 矩阵是(112*92)*200 矩阵。
2 f
根据以下规则对人脸进行分类:
2
其中 f w
Leabharlann Baidu
1)若 ,则输入图像不是人脸图像; 2)若 ,且 i , i ,则输入图像包含未知人脸; 3)若 ,且 i , i ,则输入图像为库中第 k 个人的人脸。
二、 介绍
人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生 物体(一般特指人)本身的生物特征来区分生物体个体。 广义的人脸检测实际包括构建人脸识别系统的一些列相关技术,包括人脸 图象采集、人脸定位、人脸识别预处理等。 人脸检测的研究具有重要的学术价值, 人脸是一类具有相当复杂的细节变化 的自然结构目标, 对此类目标的挑战性在于: 人脸由于外貌、 表情、 肤色等不同, 具有模式的可变性;一般意义下的人脸上,可能存在眼镜、胡须等附属物;作为 三维物体的人脸影像不可避免地受由光照产生的阴影的影响。因此,如果能够找 到解决这些问题的方法, 成功地构造出人脸检测系统,将为解决其他类似的复杂 模式的检测问题提供重要的启示。 目前,人脸检测的方法有:基于特征脸(PCA)的人脸识别方法,但是它 需要较多的训练样本; 神经网络的人脸识别方法,同样是需要较多的样本进行训 练;弹性图匹配的人脸识别方法,但是它空间复杂度高、实时性较差;线段 Hausdorff 距离(LHD)的人脸识别方法,但是 LHD 在大表情的情况下识别效
九、致谢
在 project 完成之际,我要衷心感谢我的几位同学们,非常感谢这期间,在 project 工作中一直都在帮助我的几位同学们, 不管我有什么乱七八糟的问题都会 耐心听完并尽力给我解答。
十、参考文献
[1] 龚勋,PCA 人脸识别及理论基础,2007-4-26 [2] 邓楠, 基于主成份分析的人脸识别, 西北大学硕士学位论文,2006.06 [3] 雷松泽,基于主元分析的人脸特征提取 matlab 实现,2006
5
人脸检测--随机过程大作业
ui
1 Avi (i=1,2,……r) li
(3)
则特征脸空间为:w=(u1 ,u2…… ur,)。 将训练样本投影到“特征脸”空间,得到一组投影向量Ω =wTu,构成人脸识 别的数据库。 在识别时, 先将每一幅待是识别的人脸图像投影到 “特征脸”空间, 得到其特征向量表示: wT ,定义阈值:
1 2 i, j 采用欧式距离来计算 Ω Г 与每个人脸的距离 ε i:
max i j , i, j 1,2,...,200
i 2 i
2
i 1,2,...,200
为了区分人脸和非人脸, 还需要计算原始图像 f 与由特征脸空间重建的图像 之间的距离ε :
十一、附录—matlab 源代码
9
人脸检测--随机过程大作业
clc;close all;clear all; total=[];%所有训练样本 N=200; %读入所有训练样本 for i=1:N pic=imread(strcat('d:\face','\orl_ceshi_',num2str(i),'.bmp')); total(:,:,i)=pic(:,:,1); end avg=reshape(sum(total,3)/200,112*92,1); a=reshape(total,112*92,200); %求差值脸 for i=1:N b(:,i)=a(:,i)-avg; end %求特征值和特征向量 [S V D]=svd(b,0); s=sum(V,2); d1=s.*s; d2=sum(d1); d3=0; k=0; %选取前k个最大特征值向量 while(d3/d2<0.99) k=k+1; d3=sum(d1(1:k)); end space=S(:,(1:k)); new=space'*b; %定义阈值 f=0; for i=1:200 for j=i+1:k g=norm(new(:,i)-new(:,j))/2; if(f<g) f=g; end
八、结论
我是用了常规的PCA算法进行的人脸检测,常规的方法有很多缺陷的地方, 它的识别率并不高,虽然自己有很多想法,但是因为 matlab 使用的不够熟练,
8
人脸检测--随机过程大作业
一些想法没有实现。对 PCA 算法本身,我想可以有以下的一些改进: 1 特征向量的选取。我是选择特征值最大的特征向量,丢弃了特征值较小 的向量。看资料的时候,看到很多特征向量选取的方法,好像是这种方 法是比较好的,但是我觉得向量选取是应该根据应该的要求来选择的, 可是如果综合各方面考虑,应该没有更好的更通用的方法。所以,我觉 得还是根据实际的应用情况来选择。 2 距离函数的选取。我用的是欧氏距离,也就是二范数,如果用协方差, 也就是计算两个归一化后的向量间的角度,如果是角度的话,会比距离 更具有说服力。 3 预处理。可以对训练样本再进行一些预处理,把人脸的一些重要特征突 出出来,比如眼睛、鼻子、嘴巴等,这样再进行特征脸的提取。而且如 果我们只是要检测是否是人脸,而不是要进行区分的话,可以弱化一些 因素,比如光照、表情等引起的变化,会有更好的识别效果。
根据特征值的贡献率选取前 k 个最大特征向量及其对应的特征向量, 我取 a=99%, 使训练样本在前 k 个特征向量集上的投影有 99%的能量, 这样得到了 175 个特征 向量。 5、定义阈值
for i=1:200 for j=i+1:k g=norm(new(:,i)-new(:,j))/2; if(f<g) f=g; end end end
2
人脸检测--随机过程大作业
果不好;支持向量机(SVM) 的人脸识别方法,它支持向量机训练时间长,方法 实现复杂,该函数的取法没有统一的理论。
三、 模型
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一 个矢量,如一幅N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅 图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间, 但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。 不管子空间的 具体形式如何, 这种方法用于图像识别的基本思想都是一样的,首先选择一个合 适的子空间, 图像将被投影到这个子空间上,然后利用对图像的这种投影间的某 种度量来确定图像间的相似度,最常见的就是各种距离度量。 PCA 方法的基本原理是:利用 K-L 变换抽取人脸的主要成分, 构成特征脸空 间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像 比较进行识别。
2,φ 3 ,……,φ n)。
步骤三 展开式系数即为α =ΦTX。
投影: 设d 维样本x1、x2、x3……xn以及一个d 维基w ,那么标量: Yi=wTxi 是相当于xi在基上的坐标值, 如果||w||=1, yi向方向为w的直线景象投影的结果。 可以从图1看到。 推广之,如果有一组基(m个)组成的空间 w=[w1,w2……wm], 那么可以得到xi在空间w上的坐标 为 Y=wTx。
目录
一 摘要 二 介绍 三 模型 四 基本理论和方法 五 方法 六 算法和算法分析 七 讨论 八 结论 九 致谢 十 参考文献 十一 附录
1
人脸检测--随机过程大作业
一、 摘要
本文用 PCA 算法进行人脸的检测,PCA 方法由于在降维和特征提取方面 的有效性,被广泛应用于人脸识别领域。基于该方法,我设计了完整的人 脸特征提取和检测的算法。
检测的时候要把图片大小调为 112*92,我刚开始没注意,自己找了张图片检测, 然后总是出现矩阵大小不匹配的错误。
七、讨论
对于实验结果,采用常规的 PCA 算法,识别率并不高。首先,我们用的训 练样本都是灰度值,消除了很多对人脸特征有影响的因素,这也会减低识别率。 如果用彩色图片,或者图片中除了人物以外其他事物比例大一点,识别起来也很 困难。 图象的缩放也会影响识别。我们用的都是 112*92 的图片,测试的时候首先 要把图片调成合适大小。如果图片尺寸过小会导致率降低。
6
人脸检测--随机过程大作业
2、计算均值脸 按照
1 i 200 xi 计算 200 个人脸图像样本的均值。 200 i 1
avg=reshape(sum(total,3)/200,112*92,1);
3、求特征值和特征向量 采用奇异值分解法。
[S V D]=svd(b,0); s=sum(V,2); d1=s.*s;
奇异值分解: 设A为秩为r的m*n (m>n) 维矩阵, 则存在两个正交矩阵和一个对角矩阵:
4
人脸检测--随机过程大作业
A=[a1,a2……ar]=U∧VT 其中U=[u0,u1,……,ur-1],V=[v0,v1,……,vr-1],∧=diag(λ 0,λ 1,……,λ r-1)。并且 UUT=I,VVT=I,λ i成降序排列。其中λ i2为AAT的非零特征值,ui和vi分别是AAT 和ATA对应于λ i2的特征向量,可得一个推论: U=AV∧-1 可计算AAT的特征值及相应的正交归一特征向量vi后,可由推论知AAT的正交归 一特征向量 ui= Avi
阈值是用欧式距离定义,来跟被识别图片进行比较。 6、检测
7
人脸检测--随机过程大作业
检测图片按与训练样本同样的方法,将待识别的人脸与平均脸差值投影到特征脸 空间,然后用欧氏距离计算与每个人脸的距离,并与阈值比较,来判断是否是人 脸。
t2=reshape(t1,112*92,1)-avg; t3=space'*t2; x=0; for i=1:k y=norm(t3-new(:,i))/2; if(x<y) x=y; end end if(x<=f+1) disp(' the picture is a human face!'); else disp('the picture is not a human face!'); end
四、基本理论和方法
PCA 方法的基础就是Karhunen-Loeve 变换(简称KL变换),是一种常用 的正交变换。下面我们首先对K-L 变换作一个简单介绍。 K-L变换: 假设X 为n 维的随机变量,X 可以用n 个基向量的加权和来表示: X=
a iφ i
i 1
n
式中:α i 是加权系数,φ i 是基向量,此式可以用矩阵的形式表示:
λi 1
五、方法
设 n 是训练样本的数目;Xj 表示第 j 幅人脸图像形成的人脸向量,则所需样本 的协方差矩阵为: Sr =
(x
j 1
N
j
u )( xi u )T
(1)
其中 u 为训练样本的平均图像向量: u=
1 n xj n j 1
(2)
令 A=[x1-u x2-u……xn-u],则有 Sr=AAT,其维数为 D*D。 根据 K-L 变换原理,需要求得的新坐标系由矩阵 AAT 的非零特征值所对应得 特征向量组成。直接计算的计算量比较大,所以采用奇异值分解( SVD)定理, 通过求解 ATA 的特征值和特征向量来获得 AAT 的特征值和特征向量。 依据 SVD 定理,令 li(i=1,2,……,r)为矩阵 ATA 的 r 个非零特征值,vi 为 ATA 对应于 li 的特征向量,则 AAT 的正交归一特征向量 ui 为:
3
人脸检测--随机过程大作业
X =(φ 1 ,φ 2,φ 3 ,……,φ n)( α 1, α 2 系数向量为: α =ΦTX
,…… α n)= Φα
综上所述,K-L 展开式的系数可用下列步骤求出: 步骤一 求随机向量 X 的自相关矩阵 R=E[XTX],由于没有类别信息的样本集的μ 均 值向量,常常没有意义,所以也可以把数据的协方差矩阵 =E[(x-μ )(xμ )T]作为 K-L 坐标系的产生矩阵,这里μ 是总体均值向量。 步骤二 求出自相关矩阵或者协方差矩阵R的本征值λ i和本征向量φ i,Φ=(φ 1 ,φ
我开始用的eig函数,试图用eig(b*bT)来求特征值和特征向量,但是发现 不行,内存溢出,然后改用的奇异值分解法。 4、选取前k个最大特征向量,并构造特征脸空间
while(d3/d2<0.99) k=k+1; d3=sum(d1(1:k)); end space=S(:,(1:k)); new=space'*b;
六、算法和算法分析
1、读取图像矩阵
for i=1:N pic=imread(strcat('d:\face','\orl_ceshi_',num2str(i),'.bmp')); total(:,:,i)=pic(:,:,1); end
用 for 循环读取 200 张训练样本,完成循环后的 total 矩阵是(112*92)*200 矩阵。
2 f
根据以下规则对人脸进行分类:
2
其中 f w
Leabharlann Baidu
1)若 ,则输入图像不是人脸图像; 2)若 ,且 i , i ,则输入图像包含未知人脸; 3)若 ,且 i , i ,则输入图像为库中第 k 个人的人脸。
二、 介绍
人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生 物体(一般特指人)本身的生物特征来区分生物体个体。 广义的人脸检测实际包括构建人脸识别系统的一些列相关技术,包括人脸 图象采集、人脸定位、人脸识别预处理等。 人脸检测的研究具有重要的学术价值, 人脸是一类具有相当复杂的细节变化 的自然结构目标, 对此类目标的挑战性在于: 人脸由于外貌、 表情、 肤色等不同, 具有模式的可变性;一般意义下的人脸上,可能存在眼镜、胡须等附属物;作为 三维物体的人脸影像不可避免地受由光照产生的阴影的影响。因此,如果能够找 到解决这些问题的方法, 成功地构造出人脸检测系统,将为解决其他类似的复杂 模式的检测问题提供重要的启示。 目前,人脸检测的方法有:基于特征脸(PCA)的人脸识别方法,但是它 需要较多的训练样本; 神经网络的人脸识别方法,同样是需要较多的样本进行训 练;弹性图匹配的人脸识别方法,但是它空间复杂度高、实时性较差;线段 Hausdorff 距离(LHD)的人脸识别方法,但是 LHD 在大表情的情况下识别效
九、致谢
在 project 完成之际,我要衷心感谢我的几位同学们,非常感谢这期间,在 project 工作中一直都在帮助我的几位同学们, 不管我有什么乱七八糟的问题都会 耐心听完并尽力给我解答。
十、参考文献
[1] 龚勋,PCA 人脸识别及理论基础,2007-4-26 [2] 邓楠, 基于主成份分析的人脸识别, 西北大学硕士学位论文,2006.06 [3] 雷松泽,基于主元分析的人脸特征提取 matlab 实现,2006
5
人脸检测--随机过程大作业
ui
1 Avi (i=1,2,……r) li
(3)
则特征脸空间为:w=(u1 ,u2…… ur,)。 将训练样本投影到“特征脸”空间,得到一组投影向量Ω =wTu,构成人脸识 别的数据库。 在识别时, 先将每一幅待是识别的人脸图像投影到 “特征脸”空间, 得到其特征向量表示: wT ,定义阈值:
1 2 i, j 采用欧式距离来计算 Ω Г 与每个人脸的距离 ε i:
max i j , i, j 1,2,...,200
i 2 i
2
i 1,2,...,200
为了区分人脸和非人脸, 还需要计算原始图像 f 与由特征脸空间重建的图像 之间的距离ε :
十一、附录—matlab 源代码
9
人脸检测--随机过程大作业
clc;close all;clear all; total=[];%所有训练样本 N=200; %读入所有训练样本 for i=1:N pic=imread(strcat('d:\face','\orl_ceshi_',num2str(i),'.bmp')); total(:,:,i)=pic(:,:,1); end avg=reshape(sum(total,3)/200,112*92,1); a=reshape(total,112*92,200); %求差值脸 for i=1:N b(:,i)=a(:,i)-avg; end %求特征值和特征向量 [S V D]=svd(b,0); s=sum(V,2); d1=s.*s; d2=sum(d1); d3=0; k=0; %选取前k个最大特征值向量 while(d3/d2<0.99) k=k+1; d3=sum(d1(1:k)); end space=S(:,(1:k)); new=space'*b; %定义阈值 f=0; for i=1:200 for j=i+1:k g=norm(new(:,i)-new(:,j))/2; if(f<g) f=g; end
八、结论
我是用了常规的PCA算法进行的人脸检测,常规的方法有很多缺陷的地方, 它的识别率并不高,虽然自己有很多想法,但是因为 matlab 使用的不够熟练,
8
人脸检测--随机过程大作业
一些想法没有实现。对 PCA 算法本身,我想可以有以下的一些改进: 1 特征向量的选取。我是选择特征值最大的特征向量,丢弃了特征值较小 的向量。看资料的时候,看到很多特征向量选取的方法,好像是这种方 法是比较好的,但是我觉得向量选取是应该根据应该的要求来选择的, 可是如果综合各方面考虑,应该没有更好的更通用的方法。所以,我觉 得还是根据实际的应用情况来选择。 2 距离函数的选取。我用的是欧氏距离,也就是二范数,如果用协方差, 也就是计算两个归一化后的向量间的角度,如果是角度的话,会比距离 更具有说服力。 3 预处理。可以对训练样本再进行一些预处理,把人脸的一些重要特征突 出出来,比如眼睛、鼻子、嘴巴等,这样再进行特征脸的提取。而且如 果我们只是要检测是否是人脸,而不是要进行区分的话,可以弱化一些 因素,比如光照、表情等引起的变化,会有更好的识别效果。
根据特征值的贡献率选取前 k 个最大特征向量及其对应的特征向量, 我取 a=99%, 使训练样本在前 k 个特征向量集上的投影有 99%的能量, 这样得到了 175 个特征 向量。 5、定义阈值
for i=1:200 for j=i+1:k g=norm(new(:,i)-new(:,j))/2; if(f<g) f=g; end end end
2
人脸检测--随机过程大作业
果不好;支持向量机(SVM) 的人脸识别方法,它支持向量机训练时间长,方法 实现复杂,该函数的取法没有统一的理论。
三、 模型
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一 个矢量,如一幅N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅 图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间, 但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。 不管子空间的 具体形式如何, 这种方法用于图像识别的基本思想都是一样的,首先选择一个合 适的子空间, 图像将被投影到这个子空间上,然后利用对图像的这种投影间的某 种度量来确定图像间的相似度,最常见的就是各种距离度量。 PCA 方法的基本原理是:利用 K-L 变换抽取人脸的主要成分, 构成特征脸空 间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像 比较进行识别。
2,φ 3 ,……,φ n)。
步骤三 展开式系数即为α =ΦTX。
投影: 设d 维样本x1、x2、x3……xn以及一个d 维基w ,那么标量: Yi=wTxi 是相当于xi在基上的坐标值, 如果||w||=1, yi向方向为w的直线景象投影的结果。 可以从图1看到。 推广之,如果有一组基(m个)组成的空间 w=[w1,w2……wm], 那么可以得到xi在空间w上的坐标 为 Y=wTx。