HOG特徵(Histogram of Gradient)學習總結

通訊程式猿發表於2016-03-25

最近在做的專案有用到HOG+SVM這一方面的知識,參考相關論文和網上一些博文在此對HOG特徵進行下總結。

參考資料:
HOG的經典論文:Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. IEEE, 2005, 1: 886-893.(2016:Google Citation: 14046)
下載連結:https://hal.inria.fr/file/index/docid/548512/filename/hog_cvpr2005.pdf
較為詳細的博士論文:Dalal N. Finding people in images and videos[D]. Institut National Polytechnique de Grenoble-INPG, 2006.(Google Citation: 337)
下載連結:https://tel.archives-ouvertes.fr/tel-00390303/document

其他論文:
P. Felzenszwalb, D. McAllester, D. Ramaman. A Discriminatively Trained, Multiscale, Deformable Part Model. Proceedings of the IEEE CVPR 2008.

P. Felzenszwalb, R. Girshick, D. McAllester, D. Ramanan. Object Detection with Discriminatively Trained Part Based Models. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 32, No. 9, September 2010

採用級聯結構對HOG檢測進行加速:Zhu Q, Yeh M C, Cheng K T, et al. Fast human detection using a cascade of histograms of oriented gradients[C]//Computer Vision and Pattern Recognition, 2006 IEEE Computer Society Conference on. IEEE, 2006, 2: 1491-1498.(Google Citation: 1270)

關於HOG特徵的三線性插值論文:
[Wang, 2009] X. Wang, X. Han, and S. Yan. A HOG-LBP human de­tec­tor with par­tial oc­clu­sion han­dling [A]. In Proc. of ICCV[C], 2009.(Google Citation: 965)
[Pang, 2011] Y. Pang, Y. Yuan, X. Li, et al. Efficient HOG human detection [J]. Signal Processing, 2011, 91: 773-781.(Google Citation: 105)

比較好的博文:
http://blog.sina.com.cn/s/blog_60e6e3d50101bkpn.html
http://blog.csdn.net/icvpr/article/details/8454527
對經典文章的翻譯:http://blog.csdn.net/masibuaa/article/details/14056807
從理論到OpenCV實現:http://blog.csdn.net/zhazhiqiang/article/details/21047207
重新解讀HoG 和PHoG (pyramid HoG):http://blog.csdn.net/cheng1988shu/article/details/8332795

行人資料集:INRIA Person dataset
Download:http://pascal.inrialpes.fr/data/human/
INRIA Person dataset

概述

CVPR2005這篇文章中,HOG是用來做行人檢測的。作者研究了行人檢測的特徵集問題,區域性歸一化的HOG描述子相比於現存的特徵集(包括小波)有更好的表現。相比於邊緣方向直方圖(Edge Orientation Histograms)、SIFT描述子、形狀上下文(Shape Contexts),HOG是在網格密集的大小統一的細胞單元(dense grid of uniformly spaced cells)上進行計算,而且為了提高效能,還採用了重疊的區域性對比度歸一化(overlapping local contrast normalizations)。作者用行人檢測(行人是大部分可見的並且基本上是直立的)進行測試,為了保證速度和簡潔性,使用線性SVM作為分類器。

作者在文中提到他們的非正式實驗表明,即使截止到05年最好的基於特徵點的方法,在行人檢測方面比本論文的方法的錯檢率也要高上至少1-2個數量級,主要是因為這些基於特徵點的檢測器不能可靠地檢測行人結構。HOG有個優點,提取的邊緣和梯度特徵能很好的抓住區域性形狀的特點,且因是對影象做了Gamma校正和採用cell方式進行梯度方向量化,在區域性進行提取,所以對幾何和光學變化都有很好的不變性,變換或旋轉對於足夠小的區域影響很小。對於行人檢測,在粗糙空域取樣(coarse spatial sampling)、精細方向取樣(fine orientation sampling)和強區域性灰度歸一化(strong local photometric normalization)這些條件下,只要行人大體上能夠保持直立的姿勢,就容許有一些細微的肢體動作,這些細微的動作可以被忽略而不影響檢測效果。綜上,HOG特徵很適合於做影象中的人體檢測。

1 Overview of the Method

An overview of our feature extraction and object detection chain
HOG方法是基於對稠密網格中歸一化的區域性方向梯度直方圖的計算。此方法的基本觀點是:區域性目標的外表和形狀可以被區域性梯度或邊緣方向的分佈很好的描述,即使我們不知道對應的梯度和邊緣的位置。在實際操作中,將影象分為小的元胞(cells),在每個元胞內累加計算出一維的梯度方向(或邊緣方向)直方圖。為了對光照和陰影有更好的不變性,需要對直方圖進行對比度歸一化,這可以通過將元胞組成更大的塊(blocks)並歸一化塊內的所有元胞來實現。歸一化的塊描述符就叫作HOG描述子。將檢測視窗中的所有塊的HOG描述子組合起來就形成了最終的特徵向量,然後使用SVM分類器進行行人檢測。如上圖描述了特徵提取和目標檢測流程。檢測視窗劃分為重疊的塊,對這些塊計算HOG描述子,形成的特徵向量放到線性SVM中進行目標/非目標的二分類。檢測視窗在整個影象的所有位置和尺度上進行掃描,並對輸出的金字塔進行非極大值抑制來檢測目標。

2 Gamma/Colour Normalization

標準化gamma空間和顏色空間。為了減少光照因素的影響,首先需要將整個影象進行規範化(歸一化)。在影象的紋理強度中,區域性的表層曝光貢獻的比重較大,所以,這種壓縮處理能夠有效地降低影象區域性的陰影和光照變化。

f(I)=Iγ
f(I)=I^\gamma

gamma<1在高灰度值區域內,動態範圍變小,影象對比度降低,影象整體灰度值變大,顯得亮一些;gamma>1在低灰度值區域內,動態範圍變小,影象對比度降低,影象整體灰度值變小,變得暗淡。
gamma校正
作者在他的博士論文裡有提到,對於涉及大量的類內顏色變化,如貓,狗和馬等動物,沒標準化的RGB圖效果更好,而牛,羊的圖做gamma顏色校正後效果更好。是否用gamma校正得分析具體的訓練集情況。

3 Image Smoothing

對於灰度影象,一般為了去除噪點,所以會先利用離散高斯平滑模板進行平滑:高斯函式在不同平滑的尺度下進行對灰度影象進行平滑操作。Dalal等實驗表明moving from σ=0 to σ=2 reduces the recall rate from 89% to 80% at 104

10^{−4}
FPPW,即不做高斯平滑人體檢測效果最佳,使得漏檢率縮小了約一倍。不做平滑操作,可能原因:HOG特徵是基於邊緣的,平滑會降低邊緣資訊的對比度,從而減少影象中的有用資訊。

4 Gradient Computation

梯度公式

式中Gx(x,y),Gy(x,y)

G_x(x,y),G_y(x,y)
分別表示輸入影象在畫素點(x,y)處的水平方向梯度和垂直方向梯度。則G(x,y),α(x,y)
G(x,y),\alpha(x,y)
分別為畫素點(x,y)的梯度幅值和梯度方向。Dalal等人利用許多一階微分模板進行求梯度近似值,但在實驗中表明模板[-1,0,1]效果最好。

首先用[-1,0,1]梯度運算元對原影象做卷積運算,得到水平方向(以向右為正方向)的梯度分量,然後用[1,0,-1]T梯度運算元對原影象做卷積運算,得到豎直方向(以向上為正方向)的梯度分量。然後再用以上公式計算該畫素點的梯度大小和方向。

%matlab code
hx = [-1,0,1];hy = -hx';
gradscalx = imfilter(double(img),hx);
gradscaly = imfilter(double(img),hy);

梯度圖

5 Spatial / Orientation Binning

這一步驟的目的是為區域性影象區域提供一個指示函式量化梯度方向的同時能夠保持對影象中人體物件的姿勢和外觀的弱敏感性。
將影象分成若干個“單元格cell”,例如每個cell為8

*
8的畫素大小。假設採用9個bin的直方圖來統計這8
*
8個畫素的梯度資訊,即將cell的梯度方向0~180度(或0~360度,考慮了正負,signed)分成9個方向塊。如下圖所示:如果這個畫素的梯度方向是20-40度,直方圖第2個bin即的計數就加1,這樣,對cell內每個畫素用梯度方向在直方圖中進行加權投影,將其對映到對應的角度範圍塊內,就可以得到這個cell的梯度方向直方圖了,就是該cell對應的9維特徵向量(因為有9個bin)。這邊的加權投影所用的權值為當前點的梯度幅值。例如說:某個畫素的梯度方向是在,其梯度幅值是4,那麼直方圖第2個bin的計數就不是加1了,而是加4。這樣就得到關於梯度方向的一個加權直方圖。
梯度直方圖統計

採用梯度幅值量級本身得到的檢測效果最佳,而使用二值的邊緣權值表示會嚴重降低效果。採用梯度幅值作為權重,可以使那些比較明顯的邊緣的方向資訊對特徵表達影響增大,這樣比較合理,因為HOG特徵主要就是依靠這些邊緣紋理。

根據Dalal等人的實驗,在行人目標檢測中,在無符號方向角度範圍並將其平均分成9份(bins)能取得最好的效果,當bin的數目繼續增大效果改變不明顯,故一般在人體目標檢測中使用bin數目為9範圍0~180度的度量方式。

6 Tri-linear interpolation

在計算每個cell的梯度直方圖時,可以用三線性插值來提高計算速率。對於每個cell裡的點,我們認為都是一個三維向量(x,y,θ)

(x,y,\theta)
,如下圖所示某一待處理畫素點它位於block中的C0單元中, 利用該點與四個cell中的中心畫素點 (圖中4個圓點,(x1,y1),...,(x4,y4)
(x_1,y_1),...,(x_4,y_4)
) 的距離計算權值, 將待處理畫素點的梯度幅值分別加權累加到C0、C1、 C2、 C3中相應的直方圖上,與θ相鄰的兩個bin上(θ1,θ2)。
這裡寫圖片描述
這裡寫圖片描述
參見上圖,以(x,y,θ)對cell0的梯度直方圖即h(x1,y1,θ1)的加權投影為例,三線性插值公式如下:
這裡寫圖片描述
這樣不斷累加更新得到最終的h(x1,y1,θ1),...,h(x4,y4,θ4)
h(x_1,y_1,\theta_1),...,h(x_4,y_4,\theta_4)
,就是我們所要4個cell的梯度直方圖。

7 Normalization and Descriptor Blocks

由於區域性光照的變化以及前景-背景對比度的變化,使得梯度強度的變化範圍非常大。這就需要對梯度強度做歸一化。歸一化能夠進一步地對光照、陰影和邊緣進行壓縮,使特徵向量空間對光照,陰影和邊緣變化具有魯棒性。本文的做法是:把各個細胞單元組合成大的、空間上連通的區域(blocks)。這樣,一個block內所有cell的特徵向量串聯起來便得到該block的HOG特徵。這些區間是互有重疊的,這就意味著:每一個單元格的特徵會以不同的結果多次出現在最後的特徵向量中。歸一化之後的塊描述符(向量)就稱之為HOG描述符。
BLOCK結構
通常使用的HOG結構大致有三種:矩形HOG(簡稱為R-HOG),圓形HOG和中心環繞HOG。它們的單位都是Block(即塊)。Dalal的試驗證明矩形HOG和圓形HOG的檢測效果基本一致,而環繞形HOG效果相對差一些。
Block層次結構
如上圖,一般一個塊(Block)都由若干單元(Cell)組成,一個單元都有如干個畫素點組成。
假設行人檢測的引數設定是:2×2 cell/block、8×8畫素/cell、9個直方圖通道(9 bins),一個塊的特徵向量長度為:2×2×9。

對block塊內的HOG特徵向量進行歸一化。一般採用的歸一化函式有以下四種:
歸一化方式
在人體檢測系統中進行HOG計算時一般使用L2-norm,Dalal的文章也驗證了對於人體檢測系統使用L2-norm的時候效果最好。

8 Classifier

計算一個樣本的HOG特徵維度,例如:
detection window:64×128; 8×8 pixels/cell; bin=9;2×2cells/block; blockstride=1cell;
block number:15×7=105;Length of HOG feature vector: 2×2×9×15×7=3780
最後就是把這麼一個3780維的特徵向量輸入給SVM做訓練分類。

9 Visualizing Object Detection Features

關於HOG特徵視覺化的程式如下:

基於OpenCV的C++程式,效果圖如下,通過該程式可以幫助理解HOG特徵。
下載連結:http://download.csdn.net/detail/u011285477/9472067
這裡寫圖片描述

用MATLAB實現的HOG特徵視覺化程式碼,視覺效果不錯。
這裡寫圖片描述
下載連結:http://web.mit.edu/vondrick/ihog/index.html#code
相關資料:Vondrick C, Khosla A, Malisiewicz T, et al. Hoggles: Visualizing object detection features[C]//Proceedings of the IEEE International Conference on Computer Vision. 2013: 1-8.(Google Citation: 98)

10 Multi-Scale Object Localisation

這裡寫圖片描述
上圖右上角是對SVM分類結果的置信度做個對映得到檢測評分。檢測過程就是用固定大小的視窗對多個尺度的影象進行滑窗檢測,將多個尺度計算得到的矩形框都還原成原圖尺寸,再進行非極大值抑制(NMS,Non-maximum Suppression)處理。在物體檢測非極大值抑制應用十分廣泛,主要目的是為了消除多餘的框,找到最佳的檢測框的位置,大致思想如下圖所示。
NMS

11 Conclusions

HOG的優點:
- 核心思想是所檢測的區域性物體外形能夠被梯度或邊緣方向的分佈所描述,HOG能較好地捕捉區域性形狀資訊,對幾何和光學變化都有很好的不變性;
- HOG是在密集取樣的影象塊中求取的,在計算得到的HOG特徵向量中隱含了該塊與檢測視窗之間的空間位置關係。

矩形HOG和SIFT有些相似的地方,關於SIFT具體看這篇博文SIFT特徵提取分析

HOG的缺陷:
- 很難處理遮擋問題,人體姿勢動作幅度過大或物體方向改變也不易檢測(這個問題後來在DPM中採用可變形部件模型的方法得到了改善);
- 跟SIFT相比,HOG沒有選取主方向,也沒有旋轉梯度方向直方圖,因而本身不具有旋轉不變性(較大的方向變化),其旋轉不變性是通過採用不同旋轉方向的訓練樣本來實現的;
- 跟SIFT相比,HOG本身不具有尺度不變性,其尺度不變性是通過縮放檢測視窗影象的大小來實現的;
- 此外,由於梯度的性質,HOG對噪點相當敏感,在實際應用中,在Block和Cell劃分之後,對於得到各個像區域中,有時候還會做一次高斯平滑去除噪點。