第二章 HOG 區域特徵描述子與各種基於 HOG 之人形分類器
2.1 梯度方向直方圖(HOG)
本研究採用的梯度方向直方圖(Histograms of Oriented Gradients,HOG),是在 2005 年由 N. Dalal 與 B. Triggs 等人提出的一種用來進行人形偵測的特徵描述子,
11
其概念是以 36 個維度向量來代表一個影像區塊(Block)內物體的輪廓與外觀的資訊。
區塊的形狀分為兩種,分別為圓形(Circle-HOG)與矩形(Rectangular-HOG)。C-HOG 與 R-HOG 效果差異不大,但是 R-HOG 在實作上比較方便。因此本研究採用 R-HOG 進行系統實作。在不同應用的情況之下,區塊的長寬可以介於 12x12 至 64x128 之 間,其長寬比例可以為 1:1、1:2 與 2:1,即區塊之間的移動步數若為 1 個 Pixel,那 麼在一張偵測視窗中的區塊數量最大為 291997 個。
我們的人形偵測系統中採用 1:1 大小的區塊,並且區塊大小固定為 16x16。其 中在一張影像畫格(Frame)中包含若干個偵測視窗,一個偵測視窗中包含若干個區 塊,一個區塊中包含四個單元(Cell),如圖 2-1 所示。
Frame
Detecting Window 128
64 640
480
1:1
Block 16
16
Cells 8
8
圖 2-1 HOG 名詞示意圖
計算一個 Block 的 36 維向量(36D Vector)稱為一個 HOG 的計算。共需經過五 個步驟,分別是:梯度分量、梯度大小、梯度方向、累積直方圖與直方圖正規化,
將在底下分別介紹。
Step.1 梯度分量(Gradient Components)
計算 HOG 特徵向量的第一個步驟是計算區塊內每個像素的水平方向梯度分量 Gx與垂直方向的梯度分量 Gy。即經由公式(2-1),使用遮罩 [-1, 0, 1]與[-1, 0, 1]T進 行影像旋積(Convolution Operation),如圖 2-2 所示,即可計算出 Gx與 Gy。若影像
12
的色階為 8-bit,則 Gx與 Gy值的範圍將會落在-255 與+255 之間。雖然 HOG 原作 者也有測試過其他較複雜的遮罩去計算 Gx與 Gy的值,例如 Sobel 等。但經實驗所 表現的效果很差,所以得到結論為遮罩越簡單效果越好。
( , ) ( 1, ) ( 1, ) ( , ) ( , 1) ( , 1)
x y
G x y f x y f x y G x y f x y f x y
(2-1)
-1 0 +1 Gy
Gx -1 0 +1
圖 2-2 水平與垂直方向分量 Convolution 遮罩
Step.2 梯度大小(Gradient Magnitude)
接著進行第二個步驟的計算,使用步驟一所計算完成的水平與垂直方向的梯 度分量 Gx與 Gy,並使用公式(2-2)進行梯度大小的計算。其計算方式為平方相加後 開根號,若影像的色階為 8-bit,將 Gx與 Gy的最大值+255 帶入公式(2-2),可以計 算得到梯度大小的最大值為 360.62,即梯度大小結果值的範圍將會落在 0~360.62 之間。
2 2
( , ) x( , ) y( , ) f x y G x y G x y
(2-2)
Step.3 梯度方向(Gradient Orientation)
接著進行第三個步驟的計算,使用步驟一所計算完成的水平與垂直方向的梯 度分量 Gx與 Gy,並使用公式(2-3)進行梯度方向的計算。依照該公式計算完畢的結 果為徑度(Radian),將結果換算為角度(Degree)後,因為 HOG 使用的是 Unsigned
13
Gradient,所以換算成角度後若其為負角度則加上 180 度,使其結果介於 0~180 度 之間。Signed Gradient 與 Unsigned Gradient 的示意圖如圖 2-3 所示。
1
( , )
Unsigned gradient
Signed gradient
圖 2-3 Signed Gradient 與 Unsigned Gradient 示意圖
Step.4 累積直方圖(Accumulated Histogram)
經過步驟二與步驟三的計算之後會得到梯度大小與梯度方向。梯度方向以 20 度的範圍作為 1 個區間(Bin)來做分割,Unsigned Gradient 的範圍為 0~180 度之間,
因此共有 9 個角度區間,如圖 2-4 所示。
X Y
0°
20°
unsigned gradient 40°
60°
80°
120°100°
140°
14
將每一個區塊區分為 4 個單元(Cell),每個 Cell 中的每個像素位置均有其對應 的梯度大小與方向,依序將其梯度大小累積至其梯度方向區間,1 個 Cell 中的每個 像素位置全部累積完畢之後可以得到一個直方圖,如圖 2-5 的圖中是使用一個像素 進行累積示意,一個 Cell 累積完畢的直方圖也可稱為一個 9 維的向量(9D Vector) 或 9 維的直方圖(9D Histogram)。一共 4 個單元,將 4 個單元所累積出的 4 組 9 維 向量串接(Concatenate)為 36 維向量。如圖 2-6 所示。
9D Vector Bins Magnitude
Accumulation
1 2 3 4 5 6 7 8 9
偵測視窗 (Detecting Window)
64
16
128 16
區塊 (16x16 Block)
Cell 1 Cell 2
Cell 3 Cell 4
8
8
Magnitude = 74.8 Orientation = 172.96 172.96 => Bin 9
74.8
0
………
圖 2-5 HOG 之 9D Vector 累積示意圖
15 偵測視窗
(Detecting Window) 64
16
128 16
區塊 (16x16 Block)
Cell 1 Cell 2
Cell 3 Cell 4
9D Vector 1~4
9D Vector 1~4 Concatenated into 36D Vector.
圖 2-6 HOG 之 9D Vector 與 36D Vector 示意圖
Step.5 直方圖正規化(L2-Normalization)
將步驟四累積完成的直方圖,即 36 維向量,進行正規化(Normalization)使其 每維向量數值均介於 0 到 1 之間。HOG 原作者在此步驟測試了四種方法:L2-norm、
L1-norm、L1-sqrt、L2-Hys,結論是 L2-norm、L1-sqrt、L2-Hys 三種方法的效果都 很好,而 L1-norm 表現出一點不可靠性,但相對於沒有正規化,四種方法都很有 效。我們使用 L2-norm,如公式(2-4)。其中(||v||2)2 = v02
+v12+…+v352
,𝜀:𝐸𝑃𝑆𝐼𝐿𝑂𝑁,
是一個極小的常數(a small constant),其存在意義是為了避免分母為 0 的情形發生。
在我們的程式中將其定義為 0.000001。
2 2
2
, 0 ~ 35 ( )
i i
v v i
v
(2-4)
16
經過五個步驟的計算之後得到的經過正規化的 36 維向量,也就是一次完整的 HOG 計算,即為一個區塊的 HOG 特徵。圖 2-7 是為了將 HOG 視覺化,實際由偵 測視窗中的一些區塊所實際計算出的 HOG 繪製成直方圖的示意圖。
…… ……
圖 2-7 HOG 視覺化直方圖繪製示意圖
在純軟體程式中我們藉由撰寫 C 語言模組化程式的方式,將一個 HOG 的計算 以一個 oneHOG 主模組實現,主模組函式名稱為 compute_oneHOG_36D_vector(),
其函式模組架構圖如圖 2-8 所示。圖 2-9 與圖 2-10 分別為 oneHOG 主模組測試專 案函式呼叫架構圖與流程圖。
oneHOG主模組
梯度計算子模組
梯度分量子模組
梯度大小子模組
梯度方向子模組
直方圖統計子模組
直方圖累加子模組
直方圖正規化子模組
圖 2-8 oneHOG 主模組與子模組架構圖
17
main()
oneHOG_vote_histograms() block_vote_36D_vector() L2normalization_36D_vector()
36D Vector,
即oneHOG
間並填入Block寬高與像素 End
輸入BMP為4的倍數?
18