AAM(Active Appreance Model)算法用於人臉識別總結

Blog:http://blog.csdn.net/colourfulcloud/article/details/9774017

這是我在做人臉識別項目的時候主要用到的一個算法。在這裏把我對AAM用於人臉識別的流程的理解寫一下,方便大家學習也希望大家發現不對的地方指正微笑。本文爲原創,轉載請說明出處,謝謝~

 

AAM(Active Appearance Model)主動外觀模型主要分爲兩個階段,模型建立階段和模型匹配階段。其中模型建立階段包括了對訓練樣本分別建立形狀模型(Shape Model)和紋理模型(Texture Model),然後將兩個模型進行結合,形成AAM模型。模型匹配階段是指在視頻序列中將已建立好的AAM模型在當前幀圖像中尋找最匹配的目標的過程。


 

1樣本選取與標定

1.1樣本採集

要建立AAM模型,就需要採集目標的樣本,建立樣本庫。一般來說,樣本越多,AAM模型的效果越好,但建立模型的時間越長;樣本的差異性越大,AAM模型所能處理的人臉的範圍越廣,但準確性會相對下降,因而需要根據經驗值選取所要採用的樣本數。

1.2樣本取點

在採集了樣本後,我們得到的只是一系列包括了我們所需要的目標信息的圖像。而我們要建立關於人臉的AAM模型,就需要把目標從樣本中提取出來而去除背景等的影響。而我們提取目標的方法就是在樣本中手動把人臉的輪廓標定出來。

1.3樣本數據處理

在手動標定了樣本中的點後,通過程序把樣本的點的位置{x,y}保存爲向量的形式m1=x1,y1,x2,y2,x3,y3,……,x68,y68}。於是從n個樣本中我們得到了m1到mn這n個向量作爲輸入數據。

 

2形狀模型(Shape Model)

對輸入數據我們首先建立活動形狀模型ASM。建立ASM模型包括Procrustes變換和PCA降維兩個步驟。

2.1 Procrustes變換

要建立ASM模型,需要對樣本的人臉進行歸一化。由於每個樣本的拍攝角度,人臉角度,人臉遠近等因素,樣本中的人臉的位置,大小均不相同。Procrustes變換的主要思想是將觀測對象的中心平移到原點,然後將對象的大小伸縮到固定大小並將對象旋轉到正確位置。

每一個樣本的對象都有四個參數,重心的x座標和y座標,對象大小和對象旋轉的角度。對於每兩個樣本,首先將兩個樣本的對象的重點都移動到同一位置,然後將兩個樣本的對象通過放大縮小操作伸縮到一樣大小,最後通過兩個對象相應的特徵點的位置來計算出兩個對象的旋轉角度的差別,然後旋轉對象,使相應點的距離的平方和最小,從而使使兩個對象的角度一致。

對樣本的對象兩兩進行Procrustes變換,最終所有對象都移動到固定的初始位置,大小、角度也一致。然後對轉換後的所有樣本求平均,就得到了一個平均的形狀模型。

2.2 PCA降維

在得到平均形狀模型後,我們得到了68*2*n個參數,改變這些參數就可以在平均形狀模型上進行改變,因而這些參數代表了平均形狀模型的特徵。

但得到的這些參數是多維的,存在着大量的數據冗餘,因而需要利用PCA進行降維。

PCA(Principal component analysis)即主元分析,是一種對數據進行分析的技術,它可以有效的找出數據中最“主要”的元素和結構,去除噪音和冗餘,將原有的複雜數據降維,揭示隱藏在複雜數據背後的簡單結構。它的優點是簡單,而且無參數限制,可以方便的應用於各個場合。

從線形代數的角度來看,PCA的目標就是使用另一組基去重新描述得到的數據空間。而新的基要能儘量揭示原有的數據間的關係,而這個基即最重要的“主元”。PCA的目標就是找到這樣的“主元”,最大程度的去除冗餘和噪音的干擾。

PCA的流程如下:

(1) 採集數據形成m*n的矩陣。m爲觀測數據的維數,n爲觀測樣本的個數。

(2) 在每個觀測變量(矩陣行向量)上減去該觀測變量的平均值得到矩陣X。

(3) 對XXT進行特徵值分解(SVD分解),取特徵向量組成P的行向量以及對應的特徵根。

最終我們得到68*2*n個按照權值從大到小排列的特徵量,通過設定閥值選取前p(p<<68*2*n)個特徵量,也就是最能代表形狀模型的p個特徵,來作爲形狀模型的參數。因而我們可以通過調整這p個特徵量方便地改變形狀模型。

 

3紋理模型(Texture Model)

紋理模型(Texture Model)描述了目標的紋理特徵。紋理模型的輸入數據和形狀模型一樣,在這裏可以看做是n張圖片,每張圖片上有一個點集。

3.1 Delaunay三角劃分

Delaunay三角劃分將空間點連接爲三角形,使得所有三角形中最小的角最大的一個技術。三角劃分的要點是任何三角形的外接圓都不包括任何其他頂點,即外接圓性質。

一個實現Delaunay三角劃分的算法如下:

(1)  添加外部三角形,並從它的一個頂點(在這裏會產生一個確定的外部起點)處開始;

(2)  加入一個內部點;在三角形的外接圓內搜索該點,去掉包含該點的三角劃分;

(3)  重新構造三角圖,在剛剛去掉的三角形外接圓內包括新的點;

(4)  返回第二步,直到沒有新的點加入。


Delaunay三角劃分使每一張圖上的點集劃分爲一系列的三角形,如上圖,爲下一步進行三角映射作準備。

 

3.2三角映射

使用Delaunay三角劃分後,每一個樣本都可以劃分爲一系列三角形,而不同樣本間這些三角形是對應的。要得到平均紋理模型,就需要把樣本中的目標的紋理通過分片仿射投影到同一個樣本上,而這種分片仿射就是三角映射。

我們先設定一個樣本爲平均臉,既然在樣本中的點與平均臉的所有三角形都是一一對應的,我們就可以根據三角形中每一點的位置計算其對應平均臉中某一點的位置,然後把該點的像素值複製到平均臉對應點的位置上。在這裏因爲三角形的形狀不同,因而肯定需要捨棄一部分點,也要填補一部分的點,可以根據鄰近的像素點決定判決準則。最終每一個樣本都可以轉化到平均臉上,然後把這n個臉求平均,就得到了平均紋理模型。

3.3 PCA降維

在求出平均紋理模型後,我們同樣得到了很多可以控制這個模型的參數,因而我們同樣需要對這些結果進行PCA降維,從而提取出對平均紋理模型影響最大的前q個參數。我們可以通過調整這q個參數改變紋理模型。

 

4組合模型(Combine Model)

在得到形狀模型和紋理模型後,我們就可以對這兩個模型進行加權組合,得到組合模型,也就是AAM模型。同時我們也得到了p+q個參數,這些參數就是用來改變AAM模型的特徵的。雖然前面進行過兩次PCA降維使參數維數大大降低,但兩個模型結合後,某些參數還是會受到別的參數的影響,因而我們需要再一次進行PCA降維,最終得到r個參數(r<p+q),我們可以調整這r個參數,利用AAM模型變化出形態各異的人臉。

 

5搜索模型(Search Model)

AAM模型建立以後,我們就可以實際在視頻序列中跟蹤人臉。初始時記AAM模型的r個參數爲向量 ,然後對輸入的圖像,首先假設某個位置有人臉,得到人臉的實際參數c,然後我們通過不斷地調整 使c和 之間的距離最小,若這個最小值小於某個閥值,就可以認爲當前位置出現人臉,我們就能夠在視頻中檢測到了人臉。

當然,若在每一幀都遍歷圖像尋找目標顯然效率過低,因而在後續的幀中,算法都只從上一幀的領域開始搜索目標,若搜索失敗,則再擴大搜索範圍,直至遍歷整幅圖像,這種算法可以大大提高算法的速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章