霍夫森林是隨機森林和霍夫投票在計算機視覺中的應用,可以用在物體檢測,跟蹤和動作識別。
09年cvpr上提出霍夫森林的文章——Class-Specific Hough Forests for Object Detection
關於hough變換,請看我之前的一篇博客Hough直線檢測
關於隨機森林,請看我的另一篇博客Random Forest隨機森林算法
下面這張圖闡釋了檢測原理

Hough Forests(HF)分類器是 Random Forests(RF)算法與廣義霍夫變換的結合。簡單地說,HF是在RF的學習框架基礎上,結合了位置偏移信息d=(x,y),d是被檢測的圖像塊patch到目標中心的位移向量。因此,HF的訓練樣本集合比RF的樣本集合多了一項位移信息,令S={xi, yi,di},其中xi為圖像描述符,列如patch的顏色直方圖、HoG描述子等等;yi∈{1,…K}是類別標簽,K是分類數,一般取yi的取值有兩個,即0和1,分別代表背景和目標;di是樣本i到目標中心的位移向量,di的作用就是用來在hough image中找到object的。
與RF分類器—樣,HF分類器是決策樹F={t1,t2,…,Tr}的集合,r是F中決策樹的裸數。
下面分訓練和檢測兩個步驟說明
訓練
訓練時,每棵決策樹由樣本數據集合S的一個隨機子集訓練。決策樹以遞歸的方式構建,按照指定的分割法則尋找最優分割函數分割到達節點的數據。到達節點的數據包括了xi,yi, di,即圖像描述符向量,標簽,和相對目標中心的位移信息。HF定義了兩種節點分割法則:基於優化類別標簽y的信息增益或基於偏移向量d誤差的最小化。基於優化信息增益的優化分割函數與RF的優化准則相同,目標是最小化分類誤差,通過分類的信息熵的最小化實現。節點的信息增益定義為:

其中Ir和Il分別是樣本S以分割函數分割后,落在左右子樹上的子集。H()釆用信息熵
![]()
基於偏移向量誤差最小化的優化函數通過最小化左右子樹偏移向量的方差來優化誤差
![]()
這里的
和
分別是落在左右子樹的偏移向量的均值。節點分割時在兩個優化准則中隨機選擇一個對當前節點進行分割。遞歸構建的過程在決策樹生長達到最大深度時或節點上的樣本全都屬於同一類別時或樣本個數少於指定數時停止。然后統計每個葉節點上的分類信息,包括每個類別k的概率pk和屬於類別k的偏移向量集合d。
檢測
HF分類器的檢測過程與RF算法相同,按照分類器的每個節點的分割法則迭代判斷圖像塊,最終到達圖像塊隸屬的葉節點,得到的分類結果可表示為
![]()
是圖像塊Xi在第t棵樹上隸屬的葉節點。最后在Hough圖像中用分類結果進行投票,將xi在分類器F的每棵樹上的隸屬節點
的pk累加到Hough圖像中位置為
的像素值上(I為圖像塊Pi的位置),這便是用節點的概率信息和偏移向量對測試圖像的目標中心投票的過程。最后Hough圖像上的投票結果通過非極大值抑制得到檢測結果。
這樣說完了大家可能還不清楚是怎么一回事,舉個例子大家應該就能明白,以上面的圖為列,現在我的目標是要檢測那個行人,好,我對整個人隨機截取小patch,例如16*16的小圖像塊,這些小圖像塊附帶有它們各自偏離行人中心的向量d,然后提取每個小圖像塊的描述子xi,這些就是正樣本,即y=1;然后在圖像其他區域提取16*16的小圖像塊,然后提取每個小圖像塊的描述子xi,這些就是負樣本,即y=0,注意負樣本沒有偏移向量d,或者說d=0。好了,現在正負樣本都有了,就用這些樣本按之前說的規則生成許多樹,這些樹構成森林。
得到的每個樹的葉節點可能是這樣的

在檢測階段,對待檢測圖像提取許多許多16*16的小圖像塊,把這些一個一個小圖像塊丟進之前訓練好的森林里,每個小圖像塊在森林的每棵樹上會掉到一個葉節點上,這時就會得到它屬於目標的概率p以及它相對目標中心的偏移向量d的預測,設小圖像塊自身在待檢測圖像中的位置為I,這些預測值的意義就是在hough image里,在I-d的位置為目標中心的概率為p(打個比方,其實不是概率),每個樹上的結果累加后平均,就是這個小圖像塊得到的結果。所有的小圖像塊投票完畢之后,哪個位置的分最高,那個位置就最有可能是目標。比如上面圖中頭部圖像塊就可能掉進了之前訓練的代表頭部的葉節點里,好,我找到了一個頭;然后我又找到了一個腳。。。所有的組合起來,它們各自預測的偏移向量都指向一個地方,即行人的中心,它的投票數最多,這樣行人就檢測出來了。
到這里我覺得大家應該大致明白了算法是怎么回事了,下面來討論算法的細節。
特征描述子
前面說過,這個小圖像塊的特征描述子可以是HoG特征、LBP特征、顏色直方圖等等。
用HoG的話可以這樣來弄
這里的 HOG 計算方式有別於原始 HOG 特征計算方法。對於一個以關鍵點為中心的 16×16 圖像塊的梯度信息,我們在每個 5×5 鄰域內計算 9 個方向的梯度方向直方圖,5×5 鄰域重疊 2 個像素,一個 16×16 像素的圖像塊重共分 4
×4 個子塊,最終形成 4×4×9=144 維的 HOG 特征向量,直方圖的統計值以梯度幅度大小加權。具體計算方法如下:
計算所有像素點的梯度:

方向梯度為:

分別計算各個像素點在[-π/2,π/2]梯度方向上 9 個均勻區間內的幅值:

對其進行 L2-Norm 歸一化,這一過程主要消除光照帶來的影響。

LBP算子
在3*3領域提取uniform LBP即可,59維。
Lab顏色直方圖
對每個固定大小的圖像塊統計 Lab 空間下的顏色直方圖。具體方法是,首先將原始圖像塊轉化為 CIE-Lab 顏色空間模型表示。為了降低特征維度,分別對 L、a、b 三個通道進行量化,將L通道[0,100]均勻量化為 10 個區間。因為 Lab 空間在靠近 0 的地方,顏色變化較為明顯,所以對 a、b通道采用非均勻量化。靠近 0 的地方,量化區間較小,反之則較大。量化區間為:[-128,-85]、[-85,-50]、[-50,-25]、[-25,-10],[-10,0]、[0,10] 、[10,25]、 [25,50]、 [50,85]、 [85,127]。一般情況下,忽略亮度信息 L,僅根據像素的 a,b 值投票至顏色直方圖。當色階 a、b 和亮度 L 均小於一定閾值時,認為該像素色彩色調不明顯,而亮度信息較重要,此時忽略該像素 a、b 值,投票至顏色直方圖的對應 L 柱條,整個顏色直方圖由 10×10 維 a、b柱條加 10 維 L亮度柱條組成,共110 維。
Hough 森林訓練過程如下:
Step1:多特征提取后可得每個 patch 的表達: P (xi , ci,di),其中 pos Pi(xi , 1,di) ,neg Pi(xi ,0,0)
,其中xi為多特征提取后串聯所得的總特征向量,共 144+59+110=313 維。
Step2:Hough 森林通過生成隨機的二值測試來分裂節點:
每次分裂生成 2000 種特征選擇方法,不同的特征在各自的維度中進行比較,例如 144 維 HOG 特征中選擇 2 維進行比較。其中,特征種類 f、維數 p、q、閾值τ均為隨機選取。
原論文中是這樣的
這里有很大的優化空間
在霍夫森林訓練過程中,每棵樹在做二叉測試的時候只選取了兩個點的像素值作為比較,兩個點的像素值所代表的信息是非常有限的,選用Haar-like特征能夠獲得所選取點鄰域附近更多的信息,通過判斷兩個Harr-like響應值的大小決定樹的左右走向。
Step3:計算最小化類別不確定性和最小化偏移向量不確定性,選擇 2000 次分裂中的最優分類。
最優的分裂將形成一個子節點,子節點中儲存了最優的特征種類 f、維數 p、q、閾值τ 。當滿足一定條件時,當前子節點為葉節點,該節點不再分裂。每個葉節點 L 存儲了一個圖像塊屬於每一物體類別 c 的概率p(c|L) ,這個概率是由到達該葉節點的圖像塊中屬於該類的圖像塊與總的圖像元素數目的比值決定的。此外,節點 L 還存儲了DL,即測試圖像塊相對於樣本中心的偏移量。
Step4:當所有的子節點成為葉節點后,樹停止生長,訓練得到一顆隨機樹。


版權聲明:
