天天看點

人臉識别經典算法三:Fisherface(LDA)

Fisherface是由Ronald Fisher發明的,想必這就是Fisherface名字由來。Fisherface所基于的LDA(Linear Discriminant Analysis,線性判别分析)理論和特征臉裡用到的PCA有相似之處,都是對原有資料進行整體降維映射到低維空間的方法,LDA和PCA都是從資料整體入手而不同于LBP提取局部紋理特征。如果閱讀本文有難度,可以考慮自學斯坦福公開課機器學習或者補充線代等數學知識。

同時作者要感謝cnblogs上的大牛JerryLead,本篇博文基本摘自他的線性判别分析(Linear Discriminant Analysis)[1]。

1、資料集是二類情況

通常情況下,待比對人臉要和人臉庫内的多張人臉比對,是以這是一個多分類的情況。出于簡單考慮,可以先介紹二類的情況然後拓展到多類。假設有二維平面上的兩個點集x(x是包含橫縱坐标的二維向量),它們的分布如下圖(1)(分别以藍點和紅點表示資料):

人臉識别經典算法三:Fisherface(LDA)

原有資料是散布在平面上的二維資料,如果想用一維的量(比如到圓點的距離)來合理的表示而且區分開這些資料,該怎麼辦呢?一種有效的方法是找到一個合适的向量w(和資料相同維數),将資料投影到w上(會得到一個标量,直覺的了解就是投影點到坐标原點的距離),根據投影點來表示和區分原有資料。以數學公式給出投影點到到原點的距離:​y=wTx。圖(1)給出了兩種w方案,w以從原點出發的直線來表示,直線上的點是原資料的投影點。直覺判斷右側的w更好些,其上的投影點能夠合理的區分原有的兩個資料集。但是計算機不知道這些,是以必須要有确定的方法來計算這個w。

首先計算每類資料的均值(中心點):

人臉識别經典算法三:Fisherface(LDA)

這裡的i是資料的分類個數,Ni代表某個分類下的資料點數,比如u1代表紅點的中心,u2代表藍點的中心。

資料點投影到w上的中心為:

人臉識别經典算法三:Fisherface(LDA)

如何判斷向量w最佳呢,可以從兩方面考慮:1、不同的分類得到的投影點要盡量分開;2、同一個分類投影後得到的點要盡量聚合。從這兩方面考慮,可以定義如下公式:

人臉識别經典算法三:Fisherface(LDA)

J(w)代表不同分類投影中心的距離,它的值越大越好。

人臉識别經典算法三:Fisherface(LDA)

上式稱之為散列值(scatter matrixs),代表同一個分類投影後的散列值,也就是投影點的聚合度,它的值越小代表投影點越聚合。

結合兩個公式,第一個公式做分子另一個做分母:

人臉識别經典算法三:Fisherface(LDA)

上式是w的函數,值越大w降維性能越好,是以下面的問題就是求解使上式取最大值的w。

把散列函數展開:

人臉識别經典算法三:Fisherface(LDA)

可以發現除w和w^T外,剩餘部分可以定義為:

人臉識别經典算法三:Fisherface(LDA)

其實這就是原資料的散列矩陣了,對不對。對于固定的資料集來說,它的散列矩陣也是确定的。

另外定義:

人臉識别經典算法三:Fisherface(LDA)

Sw稱為Within-class scatter matrix。

回到

人臉識别經典算法三:Fisherface(LDA)

并用上面的兩個定義做替換,得到:

人臉識别經典算法三:Fisherface(LDA)
人臉識别經典算法三:Fisherface(LDA)

展開J(w)的分子并定義SB,SB稱為Between-class scatter。

人臉識别經典算法三:Fisherface(LDA)

這樣就得到了J(w)的最終表示:

人臉識别經典算法三:Fisherface(LDA)

上式求極大值可以利用拉格朗日乘數法,不過需要限定一下分母的值,否則分子分母都變,怎麼确定最好的w呢。可以令

人臉識别經典算法三:Fisherface(LDA)

,利用拉格朗日乘數法得到:

人臉識别經典算法三:Fisherface(LDA)

其中w是矩陣,是以求導時可以把

人臉識别經典算法三:Fisherface(LDA)

當做

人臉識别經典算法三:Fisherface(LDA)

。(這點我也不懂)

上式兩邊同乘以

人臉識别經典算法三:Fisherface(LDA)

可以得到:

人臉識别經典算法三:Fisherface(LDA)

可以發現w其實就是矩陣

人臉識别經典算法三:Fisherface(LDA)

的特征向量了對不對。

通過上式求解w還是有些困難的,而且w會有多個解,考慮下式:

人臉識别經典算法三:Fisherface(LDA)

将其帶入下式:

人臉識别經典算法三:Fisherface(LDA)

其中λw是以w為變量的數值,因為(u1-u2)^T和w是相同維數的,前者是行向量後者列向量。繼續帶入以前的公式:

人臉識别經典算法三:Fisherface(LDA)

由于w擴大縮小任何倍不影響結果,是以可以約去兩遍的未知常數λ和λw(存疑):

人臉識别經典算法三:Fisherface(LDA)

到這裡,w就能夠比較簡單的求解了。

2、資料集是多類的情況

這部分是本博文的核心。假設有C個人的人臉圖像,每個人可以有多張圖像,是以按人來分,可以将圖像分為C類,這節就是要解決如何判别這C個類的問題。判别之前需要先處理下圖像,将每張圖像按照逐行逐列的形式擷取像素組成一個向量,和第一節類似設該向量為x,設向量維數為n,設x為列向量(n行1列)。

和第一節簡單的二維資料分類不同,這裡的n有可能成千上萬,比如100x100的圖像得到的向量為10000維,是以第一節裡将x投影到一個向量的方法可能不适用了,比如下圖:

人臉識别經典算法三:Fisherface(LDA)

圖(2)

平面内找不到一個合适的向量,能夠将所有的資料投影到這個向量而且不同類間合理的分開。是以我們需要增加投影向量w的個數(當然每個向量維數和資料是相同的,不然怎麼投影呢),設w為:

人臉識别經典算法三:Fisherface(LDA)

w1、w2等是n維的列向量,是以w是個n行k列的矩陣,這裡的k其實可以按照需要随意選取,隻要能合理表征原資料就好。x在w上的投影可以表示為:

人臉識别經典算法三:Fisherface(LDA)

是以這裡的y是k維的列向量。

像上一節一樣,我們将從投影後的類間散列度和類内散列度來考慮最優的w,考慮圖(2)中二維資料分為三個類别的情況。與第一節類似,μi依然代表類别i的中心,而Sw定義如下:

人臉識别經典算法三:Fisherface(LDA)

其中:

人臉識别經典算法三:Fisherface(LDA)

代表類别i的類内散列度,它是一個nxn的矩陣。

所有x的中心μ定義為:

人臉識别經典算法三:Fisherface(LDA)

類間散列度定義和上一節有較大不同:

人臉識别經典算法三:Fisherface(LDA)

代表的是每個類别到μ距離的加和,注意Ni代表類别i内x的個數,也就是某個人的人臉圖像個數。

上面的讨論都是投影之間的各種資料,而J(w)的計算實際是依靠投影之後資料分布的,是以有:

人臉識别經典算法三:Fisherface(LDA)
人臉識别經典算法三:Fisherface(LDA)
人臉識别經典算法三:Fisherface(LDA)
人臉識别經典算法三:Fisherface(LDA)

分别代表投影後的類别i的中心,所有資料的中心,類内散列矩陣,類間散列矩陣。與上節類似J(w)可以定義為:

人臉識别經典算法三:Fisherface(LDA)
人臉識别經典算法三:Fisherface(LDA)

回想我們上節的公式J(w),分子是兩類中心距,分母是每個類自己的散列度。現在投影方向是多元了(好幾條直線),分子需要做一些改變,我們不是求兩兩樣本中心距之和(這個對描述類别間的分散程度沒有用),而是求每類中心相對于全樣本中心的散列度之和。得到:

人臉識别經典算法三:Fisherface(LDA)

最後化為:

人臉識别經典算法三:Fisherface(LDA)

還是求解矩陣的特征向量,然後根據需求取前k個特征值最大的特征向量。

另外還需注意:

由于SB中的(μi-μ)秩為1,是以SB的至多為C(矩陣的秩小于等于各個相加矩陣的和)。又因為知道了前C-1個μi後,最後一個μc可以用前面的μi來線性表示,是以SB的秩至多為C-1,是以矩陣的特征向量個數至多為C-1。因為C是資料集的類别,是以假設有N個人的照片,那麼至多可以取到N-1個特征向量來表征原資料。(存疑)

如果你讀過前面的一篇文章PCA理論分析,會知道PCA裡求得的特征向量都是正交的,但是這裡的

人臉識别經典算法三:Fisherface(LDA)

并不是對稱的,是以求得的K個特征向量不一定正交,這是LDA和PCA最大的不同。

如前所述,如果在一個人臉集合上求得k個特征向量,還原為人臉圖像的話就像下面這樣:

人臉識别經典算法三:Fisherface(LDA)

得到了k個特征向量,如何比對某人臉和資料庫内人臉是否相似呢,方法是将這個人臉在k個特征向量上做投影,得到k維的列向量或者行向量,然後和已有的投影求得歐式距離,根據門檻值來判斷是否比對。具體的方法在人臉識别經典算法一:特征臉方法(Eigenface)裡有,可前往檢視。需要說明的是,LDA和PCA兩種方法對光照都是比較敏感的,如果你用光照均勻的圖像作為依據去判别非均勻的,那基本就慘了。

參考文獻:

[1]Jerry Lead 線性判别分析(Linear Discriminant Analysis)(一)

[2]http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html

繼續閱讀