在我之前的博客中介紹過隨機森林,隨機森林在機器學習中的應用十分廣泛,它屬於非傳統的機器學習算法,其他的諸如神經網絡,MRF,Adaboost,乃至現在大名鼎鼎的深度學習,越來越取代了傳統機器學習算法,如子空間學習,流程學習等的地位。果不其然,在衆多基於傳統機器學習的人臉對齊算法中,去年CPVR2014也出現了一篇論文,名曰《Face Alignment At 3000fps via Local Binary Features》,正是利用了隨機森林對特定點進行定位,取得了與SDM等算法同樣的效果,最關鍵的是,它快啊!!!所以本文專門說說LBF文獻中,隨機森林的作用。
(轉載請註明:http://blog.csdn.net/wsj998689aa/article/details/45204599,
作者:迷霧forest)
1. 隨機森林回顧
2. 隨機森林進行特徵點定位
先大概說說LBF算法的背景,LBF是中科大的幾位學者提出來的算法,發表在CVPR2014上,這個會議大家都知道,裏面的文章都是很靠譜的。LBF雖然沒有提供源碼但我們實現過,可以說效果與當前流行的其他算法如ESR,SDM基本保持一致,速度雖然說打不到3000fps,但也有300FPS,可以說實用意義很強。其算法思想是基於學習理論,將每個特徵點用一個標準隨機森林訓練,使得森林能夠記住各種姿態下的“特徵點走勢”,得到特徵點的稀疏編碼,再通過全局優化得到最終的標定結果。本文主要說一說我對隨機森林這塊的理解。
主要還是回答一下上面的幾個子問題。
1. 隨機森林的重點是挑選屬性進行節點分裂,LBF將候選屬性集定義爲“當前特徵點周圍圓形鄰域內的隨機撒點”,如下圖所示:
這樣做的目的很直白,就是通過比較各個隨機撒點(比如有500個)的信息增益值,挑選最小的那一個作爲分裂屬性,效果是使得初始的不準確特徵點一點一點的向真實位置靠近。與衆不同的地方在於,LBF將像素位置作爲候選屬性,這麼做很靈活。
2. 在文中給出的特徵是“pixel-difference feature”,看過它的引用文獻,發現這個特徵十分的簡單,就是兩個像素之間的灰度差,這恰好解釋了LBF快速的原因(SDM用的是sift特徵,大家想想吧!!),和其他人臉對齊算法一樣,始終要利用紋理信息。
3. 分裂的依據就是信息增益值,這裏舉個例子,比如隨機森林共有50棵樹,候選屬性個數爲500,每棵樹的訓練樣本個數爲1000,那麼在根節點上,我就要將這1000個樣本的當前特徵點與每個候選屬性進行計算,也就是得到了500 * 1000個pixel-difference feature,然後對每一組pixel-difference feature計算信息增益值,也就是說得到了500個信息增益值,然後挑選出最小的那個值所對應的候選屬性作爲當前節點的分裂屬性,進一步,有了分裂屬性,與事先設定的閾值(??)進行比較,將1000個樣本進行分類,共分爲兩類!至於論文中選擇的信息增益手段,是“maximum variance reduction”,這裏不多說,大家自己查查就知道了哈!
4. 葉子節點中存放的本來是訓練樣本,但是爲了之後的計算方便,要對訓練樣本與初始值做減法再做平均,於是存放的其實是偏移值。
5. 訓練與測試過程的流程如下,測試樣本在每棵決策樹中只能抵達一個葉子節點,累加所有葉子節點中的偏移量,得到的就是最終的結果。LBF別出心裁,採用了一個稀疏編碼完成這一過程。