最近組里研究了SDM算法在人臉對齊中的應用,是CMU的論文《Supervised Descent Method and its Applications to Face Alignment》。因為思路簡潔巧妙有效,兩年下來引用率就有283+了,以后估計1k+,這么有影響力的文章是要學習學習。網上有了相關的原理介紹,例如:http://www.thinkface.cn/thread-2913-1-1.html。自己看了有所了解,但不能真正理解原理思路,還是直接看論文為妥。
1、問題
最小二乘問題中,用牛頓法求解是常用的辦法,但用在求解計算機視覺的問題的時候,會遇到一些問題,比如1)、Hessian矩陣最優在局部最優的時候才是正定的,其他地方可能就不是正定的了,這就意味着求解出來的梯度方向未必是下降的方向;2)、牛頓法要求目標函數是二次可微的,但實際中未必就一定能達到要求的了;3)、Hessian矩陣會特別的大,比如人臉對其中有66個特征點,每個特征點有128維度,那么展成的向量就能達到66x128= 8448,從而Hessian矩陣就能達到8448x8448,如此大維度的逆矩陣求解,是計算量特別大的(O(p^3)次的操作和O(p^2)的存儲空間)。因此避免掉Hessian矩陣的計算,Hessian不正定問題,大存儲空間和計算量,尋找這樣一種方法是這篇論文要解決的問題。
2、原理
大家都知道,梯度下降法的關鍵是找到梯度方向和步長,對於計算機視覺問題,牛頓法求解未必能常常達到好的下降方向和步長,如下圖所示:
(a)為牛頓法的下降量,收斂不能達到最理想的步長和方向。而(b)本文的SDM算法,對於不同的正面側面等情況都能得到很好的收斂方向和步長。既然Hessian矩陣的計算那么可惡,我們就直接計算梯度下降方向和步長嘛。
在開始討論之前,為方便討論,我們需要問題形式化,假設給定一張要測試的圖片(這里把圖像自左向右自上而下地展成了一維的向量,具有m個像素),
表示圖像中的p個標記點,這篇文章里面有66個標記點,如下圖黑人肖像所示。
表示一個非線性特征提取函數,例如 SIFT,那么
。
在訓練階段,已經知道了每張訓練圖片的真實的66個標記點,把這些點看做了是GroundTrue即參考點,如下圖(a)所示。在測試的場景中,會用一個檢測器把人臉檢測出來,然后給一個初始化的平均標記點,如下圖(b)所示:
那么人臉對齊問題是需要尋找一個梯度方向步長,使得下面的目標函數誤差最小:
其中是人工標定的66個標記點的SIFT特征向量,在訓練階段
和
都是知道的。
好了,用牛頓法求解上述問題,其迭代的公式為:
其中,H和J分別表示Hessian矩陣和雅克比矩陣。它可以被進一步的拆分為下面的迭代公式:
注意到,既然H和J難求,那就直接求它們的乘積,即可,於是上述的迭代公式又可以變為:
其中和
,這樣就轉化為了之求解
和
的問題。接下來就是怎么求解這兩個參數的問題了。
思路很簡單,就是用訓練數據告訴算法下一步該往哪里走,即用當前(及之前)的迭代誤差之和最小化,該問題也是一個最優化問題。如下公式所示:
d_i表示第i張訓練圖片,xki表示第i張圖片在第k次迭代后的標記點的位置。實際中這樣的迭代4-5次即可得到最優解,用貪心法求解。
至此,根據以上描述的迭代步驟,即可不斷地尋找到最優的人臉對齊擬合位置。SDM的流程圖如下所示:
3、實驗結果
a、真實結果和擬合結果比較圖:
SDM接近於真實的標記結果,擬合結果很好。(紅色的為Ground True,綠色的為SDM擬合結果)
b、SDM 和 Netown的迭代收斂比較圖:
牛頓迭代法出現迭代失敗的情況,而SDM均可以迭代至收斂。
c、LFPW數據集合的效果比較圖:
對灰度,戴眼鏡,側臉和遮擋都有很好的擬合效果。
d、指定跟蹤算法和SDM比較圖:
指定跟蹤器會出現過擬合的現象,而SDM表現則相當的穩定
4、參考資料
[1].http://www.thinkface.cn/thread-2913-1-1.html
[2].Supervised Descent Method and its Applications to Face Alignment.pdf
[3].SDM的項目的官方網址
5、源碼
下載網址:SDM(C++),SDM(Matlab)