Matlab 人脸图像中的相关特征向量?

Matlab 人脸图像中的相关特征向量?,matlab,image-processing,linear-algebra,pca,Matlab,Image Processing,Linear Algebra,Pca,我正在使用PCA进行人脸识别。我已经获得了每个图像的特征向量/特征面,这是一个列矩阵。我想知道选择前三个特征向量,因为它们对应的特征值占总方差的70%,是否足以用于人脸识别?首先,让我们明确一些事情。特征向量是从整个数据集形成的协方差矩阵计算出来的,即,将人脸的每个灰度图像重塑为一列,并将其视为R^d空间中的一个点,从中计算协方差矩阵并计算协方差矩阵的特征向量。这些特征向量成为人脸图像空间的新基础。对于每个图像,没有特征向量。相反,通过投影到特征向量(可能的子集)来表示每个人脸图像 特征面限制

我正在使用PCA进行人脸识别。我已经获得了每个图像的特征向量/特征面,这是一个列矩阵。我想知道选择前三个特征向量,因为它们对应的特征值占总方差的70%,是否足以用于人脸识别?

首先,让我们明确一些事情。特征向量是从整个数据集形成的协方差矩阵计算出来的,即,将人脸的每个灰度图像重塑为一列,并将其视为R^d空间中的一个点,从中计算协方差矩阵并计算协方差矩阵的特征向量。这些特征向量成为人脸图像空间的新基础。对于每个图像,没有特征向量。相反,通过投影到特征向量(可能的子集)来表示每个人脸图像

特征面限制

至于在这种新的基础上,你的人脸图像的表现是否足以用于人脸识别取决于许多因素。但一般来说,特征脸方法对于真实世界中的无约束人脸效果不佳。它仅适用于像素对齐、面向正面且在图像中具有相当均匀的照明条件的面

越多不一定越好

虽然人们普遍认为(在使用PCA时)保持更多的方差比保持更少的方差好,但事情要复杂得多,因为有两个因素:1)真实世界数据中的噪声和2)数据的维数。有时投影到较低的维度并失去方差实际上可以产生更好的结果

结论


因此,我的答案是,很难说事先保留一定数量的差异是否足够。应通过交叉验证确定维度的数量(因此保留特征向量的数量和保留的相关方差)。但最终,正如我上面提到的,除非你有一个“好”的数据集,否则特征脸不是一个好的人脸识别方法。使用“Fisherfaces”(即人脸图像上的LDA)或将这些方法与局部二进制模式(LBP)结合作为特征(而不是原始人脸像素)可能会稍微好一些。但是,严肃地说,人脸识别是一个难题,一般来说,最先进的技术还没有达到可以在现实世界系统中部署的阶段。

这不是不可能的,但对我来说,只有3个特征值可以实现70%的方差是有点罕见的。您有多少个培训样本(总维度是多少)?确保将数据库中的每个图像重塑为向量,规范化向量数据,然后将它们对齐为矩阵。特征值/特征向量由矩阵的协方差获得


理论上,70%的方差应足以形成具有相应特征向量的人类可识别人脸。但是,最好通过交叉验证来获得最佳特征值数:您可以尝试每次增加1个特征向量,观察人脸形成和识别精度。您甚至可以绘制交叉验证精度曲线,曲线上可能有一个锐角,然后相应的特征向量数有望应用于您的测试

光之炼金术士:首先感谢你花了这么多精力来回答这个问题。然而,当你说“你没有每个图像的特征向量”时,我感到困惑。因为我认为每个图像都与它自己的特征值和特征向量相关联。请解释一下?实际上,我有一个你描述的“不错”的数据集,这就是为什么我要使用PCA。@Sid:你的整个数据集只有一组特征向量。它们是从数据集中提取的特征向量计算出的协方差矩阵的特征向量。只有一组,而你说你“获得了每幅图像的特征向量/特征面”,给人的印象是你不知何故为每幅图像计算了一组特征向量。对于每个图像,您应该拥有一个向量,其中包含原始特征向量到这些特征向量上的投影。基本上,这个向量中的每个数字都与一个特征向量相关联,你可以得到主分量是协方差矩阵的特征向量,而不是投影特征向量。这是基础的改变。本质上,协方差矩阵的特征向量(即主分量)形成了一个新的正交基。假设与k个最大特征值相关联的k个特征值被放置为矩阵Uk的列。假设x是原始空间中特征向量的列向量。那么x_proj=Uk'*x。在这里,Uk列是主成分,x_proj是使用新基础表示的x。现在使用x_proj进行分类。要使用x_proj重建x的近似值,可以执行以下操作:x_approx=Uk*x_proj。注意,这里重建的是x的近似值(因为u只保留了前k个基向量)。基本上,这里的基础(特征向量/特征面)是面部的“构建块”。x_项目基本上为您提供了“混合比例/重量”。以这种方式将它们相乘,只需将特征向量/特征面线性组合,即可重建您的面部。这基本上是思考线性代数方法的基本方法。这也是为什么面必须对齐的原因。我假设你的特征向量是按特征值的降序排列的。然后,只需将投影矩阵设置为Uk,其中k列对应于k个最大特征值的特征向量。然后你的降维向量是x_proj=Uk'*(x-m),其中Uk'是Uk转置的,x是你的输入面,m是你训练数据的平均值。这样,您的x_项目将只有k个条目。基本上,特征脸方法只是对人脸图像执行PCA