傳統機器學習方法
機器學習----人臉對齊的算法-ASM.AAM..CLM.SDM
OpenCV實現人臉對齊
http://baijiahao.baidu.com/s?id=1597935437209282228&wfr=spider&for=pc
【LBF算法】Face Alignment at 3000 FPS via Regressing Local Binary Features.
有牛人改編的C++代碼。
https://github.com/yulequan/face-alignment-in-3000fps
https://github.com/luoyetx/face-alignment-at-3000fps
matlab代碼https://github.com/jwyang/face-alignment
這些代碼不一定完全實現了論文所說的效果,但是都可用
Face Alignment at 3000 FPS通俗易懂講解一 隨機森林的生成
https://blog.csdn.net/rongrongyaofeiqi/article/details/53898334
https://blog.csdn.net/u010333076/article/details/50637321
關鍵筆記
2、樣本划分
因為要訓練10個決策樹,所以將樣本划分為10個小樣本。這里划分的方式如圖所示。對每一個小樣本(642個)訓練出一個決策樹,就有了10個決策樹。
3、決策樹與隨機森林
對第一個小樣本的某一個標記點生成決策樹。
樹的深度為5,所以一共有31個節點。
比如在0-641編號(642訓練集)的每張圖的一個關鍵點的固定半徑(第一級會在較大的范圍內取值,如實例中第一級的半徑為0.4,第二級到第七級是0.3、0.2、0.1、0.15、0.12、0.08、0.05)內,隨機生成M=500個點(如實例中第一級的500,第二級到第七級是500、500、300、300、200、200、200),並記錄其坐標。
組成一個500×642的輸入矩陣,每一列代表的是一個樣本內的500個像素差值;每一行代表的是642個樣本中,每個樣本間隨機選擇的一個像素差值。
決策樹的閾值確定:最大方差衰減
max(分裂前的樣本方差總和-分裂后左樣本集的方差-分裂后右樣本集的方差) 即argmax (Var-Var_Left-Var_right)
① 一個決策樹的生成
首先找根節點的分類閾值。找閾值,分裂。
500×642矩陣每一行,隨機選任意一個樣本的像素差值做分類閾值,用這個分類閾值將第一行642個樣本分成兩類:大於分類閾值的樣本 和 小於分類閾值的樣本,分別放在左右子集。
計算642個樣本的方差,左子集的方差,右子集的方差。
依次對500行,即計算矩陣的每一行,隨機產生閾值,分類,計算方差。
得到500個 (var_overall - var_lc - var_rc),選擇其中最大的值,作為根節點的分裂閾值。
根據根節點的閾值真正分裂這642個,分為左右兩類
葉節點的分類閾值同理
對根節點分類出來的左右子集的樣本再分別計算方差,確定決策樹的其他節點。確定一棵樹的分裂節點和葉子節點。更具體的,假如左節點有79個樣本,那么對這79個樣本的這個關鍵點固定半徑內隨機生成500點,組成一個500×79的輸入矩陣,每一列代表的是一個樣本內的500個像素差值;每一行代表的是79個樣本中,每個樣本間隨機選擇的一個像素差值。選擇500個 ( var_overall - var_lc - var_rc)最大的值,作為此左節點的分裂閾值。將這左節點的樣本再次分別左右子節點…知道完成31個節點。
一個標記點的第一個決策樹生成。
② 一個隨機森林的生成
然后對剩下的樣本輸入訓練第二個決策樹(如384-1025編號的樣本),循環知道所有樣本都處理,得到隨機森林的結構。
一個標記點的隨機森林生成。
③ 所有特征點隨機森林的生成
同樣的樣本,對所有標記點訓練相應的隨機森林,得到68個隨機森林。
所有標記點的隨機森林生成。
④ 級聯的隨機森林。
訓練時共七級,分別對每一級生成68個標記點的隨機森林。區別在於,級數越高,生成的隨機點離關鍵點的固定半徑越小。級數越高,隨機點的個數也會不一樣。級別越高,對人臉的定位效果越好。
所有層級的隨機森林生成。
每個節點會記錄節點的閾值,是否被分裂、是否是葉節點等信息。
先看b,隨機森林的三棵樹,樣本經過三棵樹后分別落在了第1,2,3個葉子節點上,於是三棵樹的LBF就是1000,0100,0010.連接起來就是100001000010.
然后看a,把27個特征點的lbf都連接起來形成總的LBF就是Φ了。
接下來是訓練w:之前已經得到了wΦ(I,S)以及Φ(I,S),現在想求w,這還不容易嗎,直接算呀。不過作者又調皮了,他說他不想求w,
而是想求一個總的大W=[w1,w2,w3,…,w27].怎么求呢?得做二次回歸。至於為什么要這么做下面會介紹。目標函數:
后面加了個L2項,因為W是炒雞sparse的,防止過擬合。做線性回歸即可得到W。
現在解釋一下為啥不直接用w1w2w3…而是要再回歸出來一個W:原因有兩個:
1. 再次回歸W可以去除原先小wi葉子節點上的噪聲,因為隨機森林里的決策樹都是弱分類器嘛噪聲多多滴;
2.大W是全局回歸(之前的一個一個小w也就是一個一個特征點單獨的回歸是local回歸),全局回歸可以有效地實施一個全局形狀約束以減少局部誤差以及模糊不清的局部表現。
這樣一來,測試的時候每輸入一張圖片I,先用隨機森林Φ求出它的LBF,然后在用W乘一下就得到了下一個stage的shape,然后迭代幾次就得到了最終的shape。所以效率十分的快。
深度學習方法
2017 世界最大人臉對齊數據集 ICCV 2017:距離解決人臉對齊已不遠
http://www.sohu.com/a/194035320_473283
https://github.com/1adrianb/face-alignment
2018 Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network
https://github.com/YadiraF/PRNet
2017 Pose-Invariant Face Alignment (PIFA)
人臉對齊與人臉姿態估計
人臉姿態估計,顧名思義,給定一張人臉圖像,確定其姿態,姿態由什么構成呢?很簡單(pitch,yaw,roll)三種角度,分別代表上下翻轉,左右翻轉,平面內旋轉的角度。
目前,人臉姿態估計有多種方法,可以分為基於模型的方法,基於表觀的方法,基於分類的方法。我之前做過 這方面的調研,調研的結果很明顯,基於模型的方法得到的效果最好,因為其得到的人臉姿態是連續的,而另外兩種,是離散的,並且很耗時間。
人臉姿態估計算法一般當做很多人臉對齊相關論文的副產品被提出,近期,比較“出名”的人臉對齊論文主要來自於CVPR,ICCV等,如下:
《Supervised Descent Method and its Applications to Face Alignment》,這篇論文提供了demo,並且附加了人臉姿態估計功能,估計精度還不錯。
《Face Alignment at 3000 FPS via Regressing Local Binary Features》,這篇文章是最新的人臉對齊算法,基於隨機森林的算法,速度比較快,精度基本和上一篇持平。
《Face Alignment by Explicit Shape Regression》這篇文章很出名,作者也和上一篇是同一人。
還有經典的人臉對齊鼻祖算法ASM,AAM,想必大家也都知道,這里不再多說,因為咱這篇博客的主題是人臉姿態估計嘛!~
基於模型的估計方法的前提是,手頭必須具備兩樣東西,一個是人臉特征點(眼鏡,嘴巴,鼻子等處的像素位置),另外一個,是需要自己制作一個3維的,正面的“標准模型”。
這個模型的好壞很重要,人臉的特征點精度可以不高,因為后面的姿態估計算法可以采用魯棒方法予以彌補,但是標准模型一旦有問題,勢必會導致姿態估計的精度偏低。
算法最重要的還是思想,其余諸如流程什么的,都是實現思想的手段而已。人臉姿態估計的思想:旋轉三維標准模型一定角度,直到模型上“三維特征點”的“2維投影”,與待測試圖像上的特征點(圖像上的特征點顯然是2維)盡量重合。這時候我們腦海中就應該浮現出一種詭異的場景:在幽暗的燈光中,一個發着淡藍色光芒的人皮面具一點點的“自我調整”,突然一下子“完美無缺”的“扣在了你的臉上”。這就是人臉姿態估計的思想。
想到了什么沒?這貌似聽起來像是某種數學中常常介紹的一種方法。是的,大部分論文中也經常利用這種方式來建立模型。這個方法就叫做“非線性最小二乘”。
我們也可以利用非線性最小二乘方法來建立我們的模型,模型公式如下:
其中,(α,β,γ)代表人臉姿態三個旋轉角度, N代表着一張人臉上標定特征點的個數,qi代表着待測試人臉特征點,pi代表對應着的三維通用標准模型特征點,R代表旋轉矩陣, t為空間偏移向量,s為伸縮因子。R的具體形式是如下三個矩陣相乘:
給出了人臉姿態估計的模型,我們可以發現,這個公式的形式,剛好對應於剛剛提出的人臉姿態估計算法思想。數學是奇妙的!
更奇妙的在下面.....
這個公式看起來很直觀,很好的解釋了人臉姿態估計的內涵,但是,這個公式怎么求解?
對了,別忘記,這是“爛大街的”非線性最小二乘算法,從牛頓爺爺開始,就有着大把的優化方法,梯度下降,牛頓高斯,信賴域,馬誇爾特等等等等等用於解決它,等到下一篇博客,我會盡量用通俗的語言,為大家介紹姿態估計的下一個重要階段:迭代求精。
附圖(姿態估計效果圖):