淺談隨機森林在人臉對齊上的應用~

       在我之前的博客中介紹過隨機森林,隨機森林在機器學習中的應用十分廣泛,它屬於非傳統的機器學習算法,其他的諸如神經網絡,MRF,Adaboost,乃至現在大名鼎鼎的深度學習,越來越取代了傳統機器學習算法,如子空間學習,流程學習等的地位。果不其然,在衆多基於傳統機器學習的人臉對齊算法中,去年CPVR2014也出現了一篇論文,名曰《Face Alignment At 3000fps via Local Binary Features》,正是利用了隨機森林對特定點進行定位,取得了與SDM等算法同樣的效果,最關鍵的是,它快啊!!!所以本文專門說說LBF文獻中,隨機森林的作用。

(轉載請註明http://blog.csdn.net/wsj998689aa/article/details/45204599, 作者:迷霧forest)


1. 隨機森林回顧

       隨機森林由N棵決策樹組成,每一棵決策樹都具有不同的初始訓練樣本,在訓練過程中,還需要一個屬性候選集,訓練樣本子集根據候選集合中的屬性,依據分裂依據進行進一步分類,這一步俗稱“分裂”,直至滿足人爲設定的收斂條件。

       我個人認爲,分裂的想法十分重要,它使得決策樹成功記憶住如何從頭開始,一步一步將樣本正確分類。於是在測試的過程中,測試樣本完全是按照這種記憶力將自己的類別確定下來。

       不得不說,這是一種傻瓜式的策略,只要訓練樣本足夠多,不斷的學習,肯定能把這玩意學會!那麼現在有個問題,我在特徵點定位的時候,怎麼能和隨機森林搭上關係呢?或者說,如何利用隨機森林建立模型解決人臉對齊問題?我覺得問題可以分解爲如下幾個子問題。

在應用隨機森林做特徵點標記的時候
1、候選屬性集是什麼?
2、特徵是什麼?
3、分裂依據是什麼?
4、葉子節點內存放的是什麼?
5、測試過程是什麼樣?

《Face Alignment At 3000fps via Local Binary Features》一文給出了精彩的回答。

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別出心裁,採用了一個稀疏編碼完成這一過程。




3. 一點想法

      特徵方面,LBF用的只是灰度差值作爲特徵,這種特徵判別性很弱,很容易受到遮擋和噪聲的影響,多虧了隨機森林一級一級的訓練,以及足夠多的樣本可以防止算法陷入過擬合才把這個特徵的弱勢掩蓋下去,如果我們在這個特徵基礎上再加上空間距離,算法性能可能會更好,不信大家試一試看。


後記: 說點這段時間自己的感想,現在在人臉對齊這塊深度學習做的不錯,深度學習我個人愚見是“一點記憶,瘋狂學習”(隨機森林是“全憑記憶,從不學習”)。其實我對傳統的機器學習算法更加情有獨鍾,漂亮的嚴謹的公式推理,複雜的理論背景,子空間學習啊,概率圖模型啊,各種優化算法啊!!!這纔是人類智慧的集中體現啊,可是不得不面對現實,現在的機器學習已經是深度學習爲代表的傻瓜式學習算法的天下嘍~ 歡迎大家來噴~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章