hans

hans

【機器學習】【Python】一、HoG + SVM 物體分類 ---- 《SVM物體分類和定位檢測》


----------【2018.09.07 更新】---

如果你看到了這篇文章,並且從 github 下載了代碼想走一遍整個流程。我強烈建議你把《SVM 物體分類和定位檢測》這一系列的 6 篇文章都仔細看一遍。內容不多,但會對你理解算法和代碼有很大的幫助。

----------【2018.01.22 更新】---- 降維算法 -----

看了一篇文章介紹 t-SNE 降維算法的,文章中給出的數據效果比 PCA 好點,大家可以嘗試看看。

文章地址

--------【2017.12.22 更新】---- 流程說明 ------

總結一下我用著最好的方法流程吧。

  1. 先 HoG 提取特徵 features。

  2. PCA 對 features 降維,然後用 PSO 優化參數 C 和 gamma。降維的目的是加快 PSO 運行速度,否則太慢,但分類效果降低。

  3. 用第一步拿到的 features 和第二步拿到的參數訓練一個初始 SVM 模型。

  4. Hard Negative Mining 優化 SVM 模型。

  5. 進行 滑窗 detection,最後 NMS 邊框回歸。

目前 2700 正樣本,2700 負樣本。測試集 1200 負樣本,700 正樣本。


** 最新代碼 Github 地址:** https://github.com/HansRen1024/SVM-classification-localization

最近在研究傳統方法的物體分類,使用的方法是 Hog + SVM,不過分類正確率不是很高。我寫一寫心得體會。

首先聲明我不會具體將原理。因為網上信息太多了,大家自己先看看大致了解了再看這篇文章。

ImageNet 上所有杯子數據集: [ https://pan.baidu.com/s?__biz=MjM5MTQzNzU2NA==&mid=2651656490&idx=1&sn=2d261af429e87be2240f3c2f133474e6&chksm=bd4c36b98a3bbfafc24ff22000c54efc173cf2fb471e94fdf9f7fd66a5325b00bd6b48e3aab2&mpshare=1&scene=1&srcid=0122sOEEObzptTmKC1krBwm5&pass_ticket=iOPmHbmsbPsOLP04XWnucMqmHkDfYpLtI9K3ivXfOtM%3D#rd)

一、HoG 特徵數計算#

先說一下兩個參數:

  1. pixels of a cell

  2. cells of a block

HoG 是對圖片進行滑框提取特徵的,block 就是這個框。block 裡有 cell,在 cell 中進行特徵提取。將 bolck 中所有 cell
的特徵整合在一起,就是這個 block 的特徵。再將所有 block 的特徵整合一起就是整張圖片的特徵了。

HoG 在 cell 中提取特徵的時候可以理解成是按角度來的,一般分 9 組,一組有 40 度,9 組一共 360 度。每一組就代表一個特徵值。那麼我們就可以計算整張圖的特徵數了。

對於一張 300 × 600 的圖片,我定義每個 cell 裡像素是 15 × 15, 每個 block 裡有 2 × 2 個 cell, 圖片一共有 10 × 20
個 block

一個 cell: 9 個特徵

一個 block: 4 × 9 = 36 個特徵

圖片一共有: 10 × 20 × 36 = 3600 個特徵

二、說明#

如果不對圖片進行處理而直接丟如 HoG 的話,背景等因素會對最後提取的特徵造成很大的不好影響。所以我提供的提取特徵值的代碼中包含兩部分,一部分是根據 xml 文件中 bbox 信息切割出物體進行特徵提取。另一部分是直接對整圖進行特徵提取。因為最後的特徵值數量和輸入圖片大小有關,所以要對切割後的圖片和整圖統一 resize 到固定大小。更多細節看代碼中註釋。

路徑說明:

./train/positive # 存放需要切圖的帶分類物體的訓練集

./test/positive # 存放帶分類物體的測試集

./train/positive_rest # 存放不需要切圖的帶分類物體的訓練集

./train/negative # 存放不帶分類物體的訓練集

./test/negative # 存放不帶分類物體的測試集

後記#

我是從 ILSVRC 拿的圖片,訓練集 8000 多張,正樣本和負樣本一種一半。測試集 2000 多張圖片,正負樣本各一半。後續我又做了 PCA,對正確率沒什麼影響,會增加模型的魯棒性。下一篇我文章我放出加上 PCA 的代碼。做 PCA 主要是後來我選擇 PSO 求解最優化 SVM 參數 C 和 gamma 需要把特徵降維,否則計算量太大。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。