毫升 |使用特征脸的人脸识别(PCA 算法)
1991 年, Turk 和 Pentland提出了一种人脸识别方法,该方法使用降维和线性代数概念来识别人脸。这种方法在计算上成本较低且易于实现,因此用于当时的各种应用,例如手写识别、唇读、医学图像分析等。
PCA(Principal Component Analysis)是Pearson在1901年提出的一种降维技术。它使用特征值和特征向量来降维并将训练样本/数据投影到小特征空间上。让我们更详细地看一下算法(从人脸识别的角度)。
训练算法:
- 让我们考虑一组m个维度为N*N 的图像(训练图像)。
- 我们首先将这些图像转换为大小为N 2 的向量,使得:
- 现在我们计算所有这些人脸向量的平均值并从每个向量中减去它
- 现在我们取所有的人脸向量,得到一个大小为N 2 * M 的矩阵。
- 现在,我们通过将A乘以 A T 来找到协方差矩阵。 A 具有维度N 2 * M ,因此A T具有维度M * N 2 。当我们相乘时,这给了我们N 2 * N 2 的矩阵,这给了我们N 2 个大小的 N 2 个特征向量,这在计算上不是很有效。所以我们通过乘以 A T和A来计算我们的协方差矩阵。这给了我们M * M矩阵,它有M 个(假设 M << N 2 )个大小为M 的特征向量。
在这一步中,我们使用以下公式计算上述协方差矩阵的特征值和特征向量。
在哪里,
和从上面的说法可以得出结论和C具有相同的特征值,它们的特征向量通过等式相关 .因此,协方差矩阵的M个特征值(和特征向量)给出的M个最大本征值(值和特征向量)
- 现在我们计算这个缩减协方差矩阵的特征向量和特征值,并将它们映射到通过使用公式 .
- 现在我们选择 K 个特征向量对应于 K 个最大特征值(其中 K < M)。这些特征向量的大小为N 2 。
- 在这一步中,我们使用了我们在上一步中得到的特征向量。我们取归一化的训练人脸(人脸-平均人脸) 并以最好的 K 个特征向量的线性组合表示每个人脸向量(如下图所示)。
这些被称为EigenFaces 。- 在这一步中,我们取特征脸的系数,并以这些系数的向量的形式表示训练人脸。
- 在这一步中,我们取特征脸的系数,并以这些系数的向量的形式表示训练人脸。
测试/检测算法:
- 给定一个未知的人脸y ,我们需要先对人脸进行预处理,使其在图像中居中,并与训练人脸具有相同的尺寸
- 现在,我们从平均人脸中减去人脸 .
- 现在,我们将归一化向量投影到特征空间以获得特征面的线性组合。
- 从上面的投影,我们生成系数的向量,使得
- 我们将上一步生成的向量从训练图像中减去,得到训练向量和测试向量之间的最小距离
- 如果这低于容差水平T r ,然后从训练图像中识别出 l 人脸,否则该人脸与训练集中的任何人脸都不匹配。
好处:
- 易于实现且计算成本较低。
- 无需了解(例如面部特征)所需的图像(ID 除外)。
限制:
- 训练/测试需要适当的居中面。
- 该算法对图像中的光照、阴影和面部比例敏感。
- 该算法需要面部的前视图才能正常工作。
参考 :
- Turk 和 Pentland 1991 年关于人脸识别的论文