機器學習----人臉對齊的算法-ASM.AAM..CLM.SDM


引自:http://blog.csdn.net/linolzhang/article/details/55271815

人臉檢測 早已比較成熟,傳統的基於HOG+線性分類器 的方案檢測效果已經相當不錯,我們也不再過多討論,本節重點討論人臉特征點對齊,特征點對齊主要應用在確定關鍵點的位置上,並進一步用於人臉姿態或狀態的判斷(用在輔助駕駛、疲勞檢測、AR等)。

        

       下面介紹常用的人臉對齊算法

• ASM

        ASM(Active Shape Model)是指主觀形狀模型,即通過形狀模型 對 目標物體進行抽象。

        ASM 是一種 基於點分布模型(Point Distribution Model, PDM)的算法。在PDM中,外形相似的物體,例如 人臉、人手、心臟等的幾何形狀可以通過若干關鍵特征點(landmarks)的坐標依次串聯形成一個形狀向量來表示。

       基於ASM的人臉 通常通過 標定好的68個關鍵特征點 來進行描述:

 ASM算法 分為 訓練過程 和 搜索過程

一. ASM的訓練:

       1.1 搜集 T 個訓練樣本,樣本數量根據需要(假定 T=100)

             注:樣本只需要包含人臉圖像即可,大小和方向不需要限定(后續可以歸一化)

       1.2 手動標記n個臉部特征點(假定 n=68)

             需要配合標定軟件將結果坐標存到文本文檔。

 

       1.3 構建形狀向量

             將記錄下來的坐標點(坐標點二維位置信息x,y),按照順序連成向量,每一個樣本 描述為一個向量:

             

       1.4 進行歸一化和對齊(采用Procrustes方法)

             可以看作是通過簡單的 平移、旋轉、縮放,在不改變點分布模型的基礎上,將樣本中多個人臉歸一化到一個統一的標准。

             這個統一的標准即為 平均臉

            Procrusts歸一化方法一般為使用一個四元數旋轉角度a, 縮放尺度s,水平位移x,  垂直位移y 。這里僅把他看作一個變化T,具體過程為:

(1)將訓練集中的所有人臉模型對齊到第一個人臉模型(典型意義,可以自主選擇);

(2)計算 平均人臉模型 X0;

(3)將所有樣本模型對齊到平均人臉 X0,描述為: Xi = X0 + b (b為相對於平均臉的偏置);

        任意的一個臉可以由平均臉和參數b來進行描述,參數b描述了平均臉到人臉的細微變化。

(4)重復(2)(3),直至X0收斂 或者到一定時間停止。

       1.5 PCA降維

             PCA 降維主要作用是降低非關鍵維度的影響,減少數據量、提高效果,這個過程並不是必須的。

 

       1.6 為每個特征點構建局部特征

             局部特征 用於在 特征點附近進行搜索可以在特征點附近的矩形框搜索,也可以沿法線方向搜索),以迭代的方式尋找新的特征點匹配位置

             為防止光照變化,局部特征一般采用梯度特征描述(當然也可以通過顏色、紋理等,可以參考后續AAM算法)。

 

              

        對於第 i(<T)個樣本,上圖中的第k 個點(<n,圖中k=29),沿着垂直於其相鄰兩個點連線(圖中虛線)的垂直方向,兩個各選擇m個點,構成一個長度為2m+1的向量,對該向量所包含的像素灰度求導,得到一個局部紋理值 gik,對其他樣本中對應點執行同樣的操作,就得到第k個特征點對應的局部紋理 序列:

        { gi0, gi1, gi2, …gik…, gin }

        我們用 均值 和 方差 來描述第 k 個特征點對應的局部特征:

       

        特征點 與 樣本特征的比對采用 馬氏距離

        

 

二. ASM的搜索:

       1.1 初始化對齊人臉

             根據HOG人臉檢測結果的大致人臉位置,將前面計算得到的平均臉 X0 進行仿射變換,得到一個初始的特征點模型:

X = M ( X0 ) + b

       1.2 搜索特征點

a)針對每個特征點

      在特征點鄰域內進行 迭代搜索,通過局部特征點的特征匹配,獲取新的特征點位置;

      關於特征點搜索方式,有的方法沿着邊緣的法線方向提取,有的方法在特征點附近的矩形區域提取,這里先不展開討論。

      通過特征點選擇算法,選擇多個 候選點候選點 采用上面同樣的方法進行特征提取,然后與樣本特征點模型進行匹配,匹配采用前面提到的馬氏距離,距離最小的候選點即作為新的特征點中心。

b)采用 平均人臉模型 對匹配結果進行修正;

反復執行 (a)(b),直到收斂

      用初始模型在新的圖像中搜索目標形狀,使搜索中的特征點和相對應的特征點最為接近,持續優化 b,計算最接近模型。

 

        目前關於ASM 主要的工具包: 

1. Asmlib-OpenCV

    基於opencv2.0,比較老了,效果一般,起步學習用。

    鏈接地址:https://github.com/cxcxcxcx/asmlib-opencv

2. stasm

    准確度還可以,開源。

    鏈接地址:https://github.com/juan-cardelino/stasm

• AAM

        AAM 稱為 主動外觀模型(Active Appearance Model),AAM是在ASM的基礎上,進一步對紋理(將人臉圖像變換到平均形狀 而得到的形狀無關圖像)進行統計建模,並將形狀和紋理兩個統計模型進一步融合為 外觀模型。可以理解為:

        Appreance = Shape + Texture

        AAM 在對形狀和紋理特征統一量綱后,建模和搜索過程和ASM基本相同。

• CLM

        CLM 是有約束的局部模型(Constrained Local Model),它通過初始化平均臉的位置,然后讓每個平均臉上的特征點在其鄰域位置上進行搜索匹配來完成人臉點檢測。前面講到的ASM也屬於CLM的一種。

        CLM分別繼承 ASM和AAM的優點,在ASM的效率 與 AAM的效果之間做了平衡。拋棄了AAM的全局紋理方法,在ASM的基礎上,通過特征點周圍的局部紋理Patch,提高了ASM僅僅依靠灰度 帶來的匹配問題,引用一張老掉牙的圖 說明原理:

        

       CLM的關鍵在於約束(Constrains),有兩個層面的意思:

1)我們的眼睛、鼻子、嘴巴 相對位置是明確的,你不需要到鼻子上面找嘴巴(這肯定是怪物對不對?),這些Patch的位置稱為Shape Model;

2)對於每個Patch,對應一個Local Model,你只需要在限定的位置周圍(Local Region)進行查找匹配即可;

• SDM

       SDM 全名是 Supervised Descent Method,中文叫監督下降方法。

       SDM 方法提出的背景就是為了更好的解決非線性優化問題,那么什么是非線性優化問題呢?非線性優化問題 就是約束條件或者目標函數是非線性的。

       學界通常使用二階導數的方法進行優化,比如牛頓法。

       非線性最優化問題 通常有 2個難點:

(1)函數(方程)可能不可微,或者參數無法估計;

(2)Hessian不正定,或者維度太高導致計算量過大;


       SDM 與其他方法不同的地方在於:牛頓法 每次迭代的步長 Δx 是計算得到的:

               Δx =-Jf/H(參見上圖牛頓法公式),也就是以 雅可比矩陣 除以 Hessian矩陣作為下降方向。

       而SDM 每次的步長 Δx = R * x,R是通過對樣本訓練得到的

              也可以認為SDM的 步長 Δx 是通過樣本學習的到 Hessian矩陣的逆 與 Jacobian矩陣的乘積 Jf/H。

       OK,到這里我們知道了,SDM是一種優化方法,主要是用於目標函數的優化求解。和人臉對齊本身沒什么關系,But 作者用這個方法,很好的解決了關鍵點的回歸問題,取得了 State-Of-The-Art的效果。

       //下面我給出 SDM 的推導過程:

人臉特征點檢測的任務就是給定一張臉,然后標定出這張臉上的一些特征點。

landmark

如圖,左邊是手工標記的人臉特征點坐標,也就是人臉特征點任務中的最優解x,右邊是初始化時的特征點坐標,記做x0

建模

d(x)Rp1表示圖片中的p個特征點坐標,h是每個特征點處的非線性特征提取函數,本文使用的特征是SIFT特征,也就是每個特征點要提取128維的SIFT特征,所以h(d(x))R128p1。由人工標定的最優解為x,在x處提取的SIFT特征可以記為ϕ=h(d(x))。由此,人臉特征點檢測可以看做,求使得下列函數最小的Δx

 

f(x0+Δx)=h(d(x0+Δx))ϕ2

 

無論是牛頓法還是SDM,在這里需要做的是,得到一系列的方向和步長Δx 

xk+1=xk+Δxk

將特征點從初值 x0收斂到最小值x

 

對於這一問題,牛頓法的解答是:

 

xk=xk12H1JTh(ϕk1ϕ)

 

而SDM對此的解答是

 

xk=xk1+Rk1ϕk1+bk1

 

這里的Rkbk就代表了每次迭代的路徑,兩個值都要從訓練數據中得到。對比兩個式子可以發現,兩個式子的差異在於迭代步長的選擇,牛頓法是通過計算得到,而SDM是從訓練集中訓練得到。

SDM訓練

SDM需要從訓練集中得到Rkbk。訓練時,人臉圖片集為{di},與此對應的手工標定的特征點為{xi}。每張圖片的初始特征點為x0,這樣人臉特征點定位就變成了一個線性回歸問題,回歸問題的目標是從x0x迭代的步長Δxi=xixi0(訓練集中是已知的),這個回歸問題的輸入特征就是在x0處的SIFT特征ϕi0。這樣,套用線性回歸問題就可以得到目標函數: 

argminR0,b0diΔxiR0ϕi0b02

這樣就從訓練集中得到了R0b0。這里是得到了第一次迭代的系數R0b0,相同的方法可以得到第k次迭代的系數Rkbk 
argminRk,bkdiΔxkiRkϕikbk2

這樣,就可以從訓練集中得到每次迭代的參數Rkbk

 

結果

本文在當時取得了state-of-the-art的結果。與之前的方法相比,本文結果的RMS error提升明顯。

result

總結

這篇文章將人臉特征點檢測問題建模為一個回歸問題。通過訓練集得到每次迭代的步長參數,而在實際測試時,只需要根據當前特征點處的局部特征,不斷迭代就可以得到最終的特征點位置。

人臉特征點檢測問題需要關注兩個方面:一是特征點處的局部特征提取方法,二是回歸算法。比如MSRA在CVPR2014上發表的論文《Face Alignment at 3000FPS via Regressing Local Binary Features》,使用了一種名為LBF的局部特征提取方法,回歸模型使用了隨機森林。而在CVPR2014的另一篇論文《One Millisecond Face Alignment with an Ensemble of Regression Trees》使用了correlation baed feature selection(EF+CB),回歸模型使用了Ensemble of Regression Trees。這類方法可以統稱為shape regression approach。

特征點處的局部特征提取也可以看做是人臉的一種特征表示,現在的基於深度學習的方法可以看做是先使用神經網絡得到人臉特征表示,然后使用線性回歸得到點坐標。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM