对《浅谈PCA 人脸识别》的一点补充

上篇blog介绍了PCA在人脸识别中的应用,对于其中AATATA特征分解的关系没有具体说明:

PCA的算法:矩阵C=AATA的每一列是一张人脸注(将一张人脸图片用一个列向量表示,即对于128*128的图片,将视为16384维的列向量),A的列数就是图片的张数。算法就是求矩阵C的特征向量,每个向量称之为特征脸[1]。为了简单,只取其中部分的特征向量,这些特征向量对应于某些特征值,通常是前M个大的特征值。这样便得到了M个特征向量。接下来就是将每张图片在这M个特征向量上做投影,得到一个M维的权重向量w=(w1,…wM),一个人可能有多张图片,于是将对应于这个人的权重向量做一个平均作为这个人的权重向量。然后对于每个新来的人脸,先求得一个权重向量,然后与人脸库中每个人的权重向量做比较,如果小于某个阈值,则认为他是人脸库中的这个人;否则视为unknown。当然,文章中还给出了另外一个判断一张图像是否是人脸的方法,这里不再讨论。对于计算的时候我们实际上求的是ATA,至于二者的关系,可以参考文章[1],因为与后面讨论的关系不大,这里不细说了。

现把需要用到的推导记录如下:

已知:
C=AATRm×m,ARm×n
C的特征分解: C=QΛQT,向量形式: Cqi=λiqi

A的奇异值分解: A=UΣVT,因为V是正交阵,所以有:
A=UΣVTAV=UΣVTV=UΣ,向量形式: Avi=λiui.
因为A已知,所以只需要求得U,V中的一个,另一个可用式子AV=ΛU解出.

A=UΣVT代入C=AAT有:
AAT=UΣVTVΣTUT=UΣ2UT=QΛQT

此外,ATA=VΣUTUΣTVT=VΣ2VT

现在解释“为什么我们需要的是AAT,而实际中求的是ATA

ARm×n,对于面部图像,一般有mn,那么求 AATRm×m 的特征分解的计算开销要远大于求 ATARn×n 的特征分解。既然二者可以通过式子AV=ΛU相互求得,那么我们自然会选择计算开销相对小的ATA进行特征分解,再通过一步乘法计算得到AAT的特征分解.

你可能感兴趣的:(基础算法,人脸识别/聚类)