天天看點

【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器

<a href="http://people.csail.mit.edu/torralba/shortCourseRLOC/boosting/boosting.html">原文</a>

boosting提供了一個簡單的架構,用來建構魯棒性的目标檢測算法。這裡提供了必要的函數來實作它:100% MATLAB實作,作為教學工具希望讓它簡單易得。當然,用作實時應用還遠遠不夠。

解壓并修改<code>initpath.m</code>中的路徑

修改<code>parameters.m</code>中images和annotations的路徑

初始化

<code>initpath.m</code> - 添加必要的path。運作前務必調用它。

<code>paameters.m</code> - 包含衆多用于配置分類器和資料集的參數。

Boosting工具

<code>demoGentleBoost.m</code> - GentleBoost的一個簡單的例子,在二維空間使用stumps(決策樁)作為弱分類器

腳本

<code>createDatabases.m</code> - 從LabelMe資料集建立訓練和測試資料

<code>createDictinary.m</code> - 從目标對象中建立一個濾波模版字典(??不了解,源碼看不懂)

<code>computeFeatures.m</code> - 預先計算所有圖像的特征并存儲。正樣本是目标外界矩形框crop出來的,負樣本是從背景中稀疏取得的

<code>trainDetector.m</code> - 從LabelMe資料集建立訓練和測試資料

<code>runDetector.m</code> - 在測試圖像上運作檢測器

特征和弱分類器

<code>convCrossConv.m</code> - 弱分類器:用一個局部的模版。。。(不懂。。。不了解作者原文的英文都是什麼确切含義)

檢測器

<code>singleScaleBoostedDetector.m</code> - 在測試圖的單尺度上運作強分類器,算出bboxes和scores

LabelMe工具箱

配置

首先運作<code>initpath.m</code>并修改<code>parameters.m</code>中的檔案夾路徑

Boosting

先運作<code>demoGentleBoost.m</code>

此Demo會先讓你手動建立二維樣本散點(滑鼠左鍵:正樣本;滑鼠右鍵:負樣本)。由于弱分類器是決策樁,它隻能區分平行于坐标軸的資料。如果你把弱分類器設定為帶方向的直線,那麼結果中兩個類别的邊界将會很有趣。

然而,決策樁(stumps)在目标檢測中很常用,因為它們能被用來有效地做特征選擇。此Demo也會顯示決策樁的缺陷(限制)。在目标檢測中通過使用非常多的特征,能夠補償其中的一些缺陷。

【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器

資料庫的大概模樣

下面是從LabelMe資料庫中随機選取的一些圖像。包含car(側視)和scene(前視),它們都經過了尺度歸一化處理。<code>createDatabases.m</code>展示了這些資料是如何被建立的。

【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器

運作檢測器

訓練自己的分類器之前,嘗試運作<code>runDetector.m</code>。如果一切順利,輸出類似下圖:

【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器
【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器

例如,訓練出來的分類器在汽車側視圖上的檢測結果:

【譯】用boosting建構簡單的目标分類器用boosting建構簡單的目标分類器

訓練自己的分類器

要訓練自己的分類器,需要準備自己的訓練和測試資料。如果你想從LabelMe資料集裡選取圖像用作訓練和測試,那你隻需要修改<code>parameters.m</code>中的object的名字。同時,在<code>parameters.m</code>中你還可以修改訓練參數,比如訓練圖像數量,模版(patch)尺寸,目标尺寸(scale of object),負樣本數量等。

<code>createDictinary.m</code>會建立“模版詞彙表”(??vocabulary of patches),用于特征計算

<code>computeFeatures.m</code>會預先為所有訓練圖像計算特征

<code>trainDetector.m</code>會使用Gentle Boosting[1]建立分類器

這裡面每一個程式都會增加資訊到<code>data</code>這個結構體變量,比如預計算的特征,用于訓練的圖像清單,特征字典,分類器參數

最後,使用<code>runDetector.m</code>,你可以運作新訓練的分類器。

多尺度分類器

為了構造多尺度分類器,你需要逐尺度處理,比如:

[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.