用boosting構建簡單的目標分類器
原文
boosting提供了一個簡單的框架,用來構建魯棒性的目標檢測算法。這里提供了必要的函數來實現它:100% MATLAB實現,作為教學工具希望讓它簡單易得。當然,用作實時應用還遠遠不夠。
配置
下載數據集
下載LabelMe工具箱
解壓并修改initpath.m
中的路徑
修改parameters.m
中images和annotations的路徑
函數說明
初始化
initpath.m
- 添加必要的path。運行前務必調用它。
paameters.m
- 包含眾多用于配置分類器和數據集的參數。
Boosting工具
demoGentleBoost.m
- GentleBoost的一個簡單的例子,在二維空間使用stumps(決策樁)作為弱分類器
腳本
createDatabases.m
- 從LabelMe數據集創建訓練和測試數據
createDictinary.m
- 從目標對象中創建一個濾波模版字典(??不理解,源碼看不懂)
computeFeatures.m
- 預先計算所有圖像的特征并存儲。正樣本是目標外界矩形框crop出來的,負樣本是從背景中稀疏取得的
trainDetector.m
- 從LabelMe數據集創建訓練和測試數據
runDetector.m
- 在測試圖像上運行檢測器
特征和弱分類器
convCrossConv.m
- 弱分類器:用一個局部的模版。。。(不懂。。。不理解作者原文的英文都是什么確切含義)
檢測器
singleScaleBoostedDetector.m
- 在測試圖的單尺度上運行強分類器,算出bboxes和scores
LabelMe工具箱
LabelMe - 包含了用于操作數據集的工具函數
例子
配置
首先運行initpath.m
并修改parameters.m
中的文件夾路徑
Boosting
先運行demoGentleBoost.m
此Demo會先讓你手動創建二維樣本散點(鼠標左鍵:正樣本;鼠標右鍵:負樣本)。由于弱分類器是決策樁,它只能區分平行于坐標軸的數據。如果你把弱分類器設定為帶方向的直線,那么結果中兩個類別的邊界將會很有趣。
然而,決策樁(stumps)在目標檢測中很常用,因為它們能被用來有效地做特征選擇。此Demo也會顯示決策樁的缺陷(限制)。在目標檢測中通過使用非常多的特征,能夠補償其中的一些缺陷。
數據庫的大概模樣
下面是從LabelMe數據庫中隨機選取的一些圖像。包含car(側視)和scene(前視),它們都經過了尺度歸一化處理。createDatabases.m
展示了這些數據是如何被創建的。
如果你下載了整個數據集,那么第一件事就是修改parameters.m
中的路徑。然后運行createDatabase.m
來讀取annotation文件并創建一個結構體(后續用于查詢工具)。關于這個查詢工具是如何工作的,詳情請看LabelMe Toolbox
運行檢測器
訓練自己的分類器之前,嘗試運行runDetector.m
。如果一切順利,輸出類似下圖:
例如,訓練出來的分類器在汽車側視圖上的檢測結果:
訓練自己的分類器
要訓練自己的分類器,需要準備自己的訓練和測試數據。如果你想從LabelMe數據集里選取圖像用作訓練和測試,那你只需要修改parameters.m
中的object的名字。同時,在parameters.m
中你還可以修改訓練參數,比如訓練圖像數量,模版(patch)尺寸,目標尺寸(scale of object),負樣本數量等。
createDictinary.m
會創建“模版詞匯表”(??vocabulary of patches),用于特征計算
computeFeatures.m
會預先為所有訓練圖像計算特征
trainDetector.m
會使用Gentle Boosting[1]創建分類器
這里面每一個程序都會增加信息到data
這個結構體變量,比如預計算的特征,用于訓練的圖像列表,特征字典,分類器參數
最后,使用runDetector.m
,你可以運行新訓練的分類器。
多尺度分類器
為了構造多尺度分類器,你需要逐尺度處理,比如:
scalingStep = 0.8;
for scale = 1:Nscales
img = imresize(img, scalingStep, 'bilinear');
[Score{scale}, boundingBox{scale}, boxScores{scale}] = singleScaleBoostedDetector(img, data);
end
參考文獻
[1] Friedman, J. H., Hastie, T. and Tibshirani, R., "Additive Logistic Regression: a Statistical View of Boosting." (Aug. 1998)
[2] A. Torralba, K. P. Murphy and W. T. Freeman. (2004). "Sharing features: efficient boosting procedures for multiclass object detection". Proceedings of the 2004 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). pp 762- 769.
文章列表