HOG特徵(Histogram of Gradient)學習總結
最近在做的專案有用到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 detector with partial occlusion handling [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/
概述
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
HOG方法是基於對稠密網格中歸一化的區域性方向梯度直方圖的計算。此方法的基本觀點是:區域性目標的外表和形狀可以被區域性梯度或邊緣方向的分佈很好的描述,即使我們不知道對應的梯度和邊緣的位置。在實際操作中,將影象分為小的元胞(cells),在每個元胞內累加計算出一維的梯度方向(或邊緣方向)直方圖。為了對光照和陰影有更好的不變性,需要對直方圖進行對比度歸一化,這可以通過將元胞組成更大的塊(blocks)並歸一化塊內的所有元胞來實現。歸一化的塊描述符就叫作HOG描述子。將檢測視窗中的所有塊的HOG描述子組合起來就形成了最終的特徵向量,然後使用SVM分類器進行行人檢測。如上圖描述了特徵提取和目標檢測流程。檢測視窗劃分為重疊的塊,對這些塊計算HOG描述子,形成的特徵向量放到線性SVM中進行目標/非目標的二分類。檢測視窗在整個影象的所有位置和尺度上進行掃描,並對輸出的金字塔進行非極大值抑制來檢測目標。
2 Gamma/Colour Normalization
標準化gamma空間和顏色空間。為了減少光照因素的影響,首先需要將整個影象進行規範化(歸一化)。在影象的紋理強度中,區域性的表層曝光貢獻的比重較大,所以,這種壓縮處理能夠有效地降低影象區域性的陰影和光照變化。
gamma<1在高灰度值區域內,動態範圍變小,影象對比度降低,影象整體灰度值變大,顯得亮一些;gamma>1在低灰度值區域內,動態範圍變小,影象對比度降低,影象整體灰度值變小,變得暗淡。
作者在他的博士論文裡有提到,對於涉及大量的類內顏色變化,如貓,狗和馬等動物,沒標準化的RGB圖效果更好,而牛,羊的圖做gamma顏色校正後效果更好。是否用gamma校正得分析具體的訓練集情況。
3 Image Smoothing
對於灰度影象,一般為了去除噪點,所以會先利用離散高斯平滑模板進行平滑:高斯函式在不同平滑的尺度下進行對灰度影象進行平滑操作。Dalal等實驗表明moving from σ=0 to σ=2 reduces the recall rate from 89% to 80% at
4 Gradient Computation
式中
首先用[-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
採用梯度幅值量級本身得到的檢測效果最佳,而使用二值的邊緣權值表示會嚴重降低效果。採用梯度幅值作為權重,可以使那些比較明顯的邊緣的方向資訊對特徵表達影響增大,這樣比較合理,因為HOG特徵主要就是依靠這些邊緣紋理。
根據Dalal等人的實驗,在行人目標檢測中,在無符號方向角度範圍並將其平均分成9份(bins)能取得最好的效果,當bin的數目繼續增大效果改變不明顯,故一般在人體目標檢測中使用bin數目為9範圍0~180度的度量方式。
6 Tri-linear interpolation
在計算每個cell的梯度直方圖時,可以用三線性插值來提高計算速率。對於每個cell裡的點,我們認為都是一個三維向量
參見上圖,以(x,y,θ)對cell0的梯度直方圖即h(x1,y1,θ1)的加權投影為例,三線性插值公式如下:
這樣不斷累加更新得到最終的
7 Normalization and Descriptor Blocks
由於區域性光照的變化以及前景-背景對比度的變化,使得梯度強度的變化範圍非常大。這就需要對梯度強度做歸一化。歸一化能夠進一步地對光照、陰影和邊緣進行壓縮,使特徵向量空間對光照,陰影和邊緣變化具有魯棒性。本文的做法是:把各個細胞單元組合成大的、空間上連通的區域(blocks)。這樣,一個block內所有cell的特徵向量串聯起來便得到該block的HOG特徵。這些區間是互有重疊的,這就意味著:每一個單元格的特徵會以不同的結果多次出現在最後的特徵向量中。歸一化之後的塊描述符(向量)就稱之為HOG描述符。
通常使用的HOG結構大致有三種:矩形HOG(簡稱為R-HOG),圓形HOG和中心環繞HOG。它們的單位都是Block(即塊)。Dalal的試驗證明矩形HOG和圓形HOG的檢測效果基本一致,而環繞形HOG效果相對差一些。
如上圖,一般一個塊(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)處理。在物體檢測非極大值抑制應用十分廣泛,主要目的是為了消除多餘的框,找到最佳的檢測框的位置,大致思想如下圖所示。
11 Conclusions
HOG的優點:
- 核心思想是所檢測的區域性物體外形能夠被梯度或邊緣方向的分佈所描述,HOG能較好地捕捉區域性形狀資訊,對幾何和光學變化都有很好的不變性;
- HOG是在密集取樣的影象塊中求取的,在計算得到的HOG特徵向量中隱含了該塊與檢測視窗之間的空間位置關係。
矩形HOG和SIFT有些相似的地方,關於SIFT具體看這篇博文SIFT特徵提取分析
HOG的缺陷:
- 很難處理遮擋問題,人體姿勢動作幅度過大或物體方向改變也不易檢測(這個問題後來在DPM中採用可變形部件模型的方法得到了改善);
- 跟SIFT相比,HOG沒有選取主方向,也沒有旋轉梯度方向直方圖,因而本身不具有旋轉不變性(較大的方向變化),其旋轉不變性是通過採用不同旋轉方向的訓練樣本來實現的;
- 跟SIFT相比,HOG本身不具有尺度不變性,其尺度不變性是通過縮放檢測視窗影象的大小來實現的;
- 此外,由於梯度的性質,HOG對噪點相當敏感,在實際應用中,在Block和Cell劃分之後,對於得到各個像區域中,有時候還會做一次高斯平滑去除噪點。
相關文章
- 影象特徵提取之HoG特徵特徵HOG
- Histogram總結Histogram
- HOG特徵演算法詳解HOG特徵演算法
- 利用HOG特徵進行人體檢測HOG特徵
- 學習總結
- mysqlimport學習總結MySqlImport
- Maven學習總結Maven
- MyBatis 學習總結MyBatis
- awk 學習總結
- JNI 學習總結
- tkinter學習總結
- SVG學習總結SVG
- vue學習總結Vue
- WorkFlow學習總結
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- 【TS】學習總結
- lua 學習總結
- vue 學習總結Vue
- HSF學習總結
- ElasticSearch 學習總結Elasticsearch
- BOM學習總結
- JavaWeb學習總結JavaWeb
- Storm學習總結ORM
- redis學習總結Redis
- JVM學習總結JVM
- Oracle學習總結Oracle
- Ajax學習總結
- WebRTC學習總結Web
- spark 學習總結Spark
- pandas 學習總結
- react學習總結React
- GCD 學習總結GC
- DOM學習總結
- numpy 學習總結
- ARKit學習總結