人脸识别是机器学习和机器视觉领域非常重要的一个研究方向,而特征脸算法是人脸识别里非常经典的一个算法,EigenFaces 是基于PCA (principal component analysis) 即主分量分析的。
一张尺寸为
w×h
的人脸图像
Ii
可以看成是一个
D×1
的列向量,
x∈RD
,其中
D=w×h
, 那么,给定一个训练集
S
, 含有
利用PCA 分析:
1: 先求训练集
S
的均值向量
2: 向量去均值: Φi=xi−x¯
3: 求协方差矩阵 C=1m∑mi=1ΦiΦTi , 如果我们定义 A=[Φ1,Φ2,...,Φm] , A∈RD×m , 那么 C=AAT
4: 特征值分解: Cui=γiui
我们知道协方差矩阵是一个高维矩阵 C∈RD×D . 如果直接进行特征分解,无疑是非常消耗资源也很费时的。特征脸算法做了一个非常巧妙的变换,我们先来看 ATA 的特征值分解,因为 ATA∈Rm×m ,比起 C 来说,维度要小得多。我们可以得到:
AATAvi=λiAvi 即:
CAvi=λiAvi 所以我们看到:
Cui=λiuiui=Avi
换句话说, AAT 与 ATA 有相同的特征值,而特征向量满足如下关系:
ui=Avi
严格说来, AAT∈RD×D , 最多可以有 D 个 特征值与特征向量。
而
所以通过这种变换, 可以非常快速地求得 AAT 的特征向量 ui=Avi 。
5: 将特征值从大到小排序,截取前面 K 个特征值及对应的特征向量。我们可以用特征向量的线性组合来表示原来的去均值向量,即:
wj=ΦTiuj
如果定义, Ω=[w1,w2,...,wK] , U=[u1,u2,...,uK] , 那么可以得到
Ω=ΦTiU , 我们看到,通过引入 Eigenfaces, 我们将高维向量 Φi 映射到低维向量 Ω 。
做人脸识别的时候,我们可以先将训练集中的每个subject的人脸图像映射到低维空间
Ω1,Ω2,...Ωq
,
q
表示subject 的个数。给定一个测试样本
进而确定测试样本属于哪个subject。