天天看點

行人檢測之初相見

現狀,大緻分為兩類:

(1)基于背景模組化的方法

分割出前景,提取其中的運動目标。進一步提取特征,分類判别。

缺點:

1)在存在下雨、下雪、刮風、樹葉晃動、燈光忽明忽暗等場合,該方法的魯棒性不高,抗幹擾能力較差。

2)且背景模組化方法的模型過于複雜,對參數較為敏感。

(2)基于統計學習的方法

根據大量訓練樣本建構行人檢測分類器。

1)提取的特征一般有目标的灰階、邊緣、紋理、形狀、梯度直方圖等資訊,

2)分類器包括神經網絡、SVM,adaboost等

該方法存在難點:

(a)行人的姿态、服飾各不相同;

(b)提取的特征在特征空間中的分布不夠緊湊;

(c)分類器的性能受訓練樣本的影響較大;

(d)離線訓練時的負樣本無法涵蓋所有真實應用場景的情況;

HOG算子

梯度直方圖特征(HOG)

Hog特征結合SVM分類器已經被廣泛應用于圖像識别中,尤其在行人檢測中獲得了極大的成功。

HOG特征是一種局部區域描述符,它通過計算局部區域上的梯度方向直方圖來構成人體特征,

能夠很好地描述人體的邊緣。它對光照變化和小量的偏移不敏感。

行人檢測HOG+SVM,總體思路:

1)提取正負樣本hog特征

2)投入svm分類器訓練,得到model

3)由model生成檢測子

4)利用檢測子檢測負樣本,得到hardexample

5)提取hardexample的hog特征并結合第一步中的特征一起投入訓練,得到最終檢測子。

為什麼opencv自帶的hog檢測子是3781維的?

opencv裡的HOGDescriptor這個結構的構造函數HOGDescriptor(Size winSize,Size blocksize,Size blockStride,Size cellSize,…),

opencv預設的參數winSize(64,128),blockSize(16,16),blockStride(8,8),cellSize(8,8),

很顯然hog是将一個特征視窗win劃分為很多的塊block,在每一個塊裡又劃分為很多的細胞單元cell(即胞元),hog特征向量既是把這些所有的cell對應的小特征串起來得到一個高維的特征向量

視窗中塊的數目是((64-16)/8+1)((128-16)/8+1) = 715 =105個塊,

塊大小為16x16,胞元大小為8x8,

那麼一個塊中的胞元cell數目是 (16/8)*(16/8) =4個胞元

每一個胞元對應的向量就是9維,每個bin對應該9維向量的一個數

n= 105x4x9 = 3780

我們利用hog+svm檢測行人,最終的檢測方法是最基本的線性判别函數,wx + b = 0,剛才所求的3780維向量其實就是w,而加了一維的b就形成了opencv預設的3781維檢測算子,

而檢測分為train和test兩部分,

在train期間我們需要提取一些列訓練樣本的hog特征使用svm訓練最終的目的是為了得到我們檢測的w以及b,在test期間提取待檢測目标的hog特征x

HOG特征隻關注物體的邊緣和形狀資訊,對目标的表觀資訊并沒有有效記錄,是以很難處理遮擋問題,而且由于梯度的性質,該特征對噪點敏感。

行人檢測中的一大難題是遮擋問題,為了解決這一問題,出現了采用部件檢測的方法,把人體分為頭肩,軀幹,四肢等部分,對這些部分分别進行檢測,然後将結果組合起來,使用的典型特征依然是HOG,采用的分類器有SVM和AdaBoost