Cascade Opencv -- train new model

前言

Haar與Adaboost結合即經典的VJ人臉檢測,後續衍生很多特徵如LBP、HOG、SURF同Cascade(即Adaboost)結合進行對象檢測;Adaboost和Cascade的算法流程圖如下兩圖描述:


opencv將參數存儲於xml文件中,在檢測時直接load即可;因爲需要檢測新的物體(電錶中的某個螺絲),所以直接需要重新訓練。

編譯訓練環境

unbuntu 13.04 32bit

opencv2.4.11

1. 準備

新建工作目錄,./traincascade/

1.1 工具

編譯opencv後,生成可執行文件,opencv_createsamples 和opencv_traincascade ,並複製到./traincascade/目錄下。

1.2 樣本

因正樣本最後完全包含待檢測對象,所以使用手動鼠標劃取ROI。寬高約爲sampSize=260*200;獲得550個尺寸在posSize附近的圖像,然後
標準化至sampSize;並存儲於./traincascade/pos文件夾內。

反樣本使用random方式,隨機生成一定的反例(不包含待檢測對象);寬高也爲sampSize,並存儲於neg文件夾內。

最後新建./traincascade/data文件夾用於存儲訓練後生成的cascade.xml

1.3 信息

正例信息,需要包含正例的目錄文件名以及對象在圖像中的位置,因爲正例圖像中全部爲待檢測對象,所以位置可以直接設定爲0,0,width,height。

ls ./pos/*.jpg > metre.info

然後使用.jpg 1 0 0 260 200 替換.jpg

反例信息,僅需要包含反例的目錄文件名

ls ./neg/*.jpg > bg.txt

2. 訓練

2.1 生成 *.vec

opencv_createsamples -info metre.info -num 550 -w 65 -h 50 -vec metre.vec

-w,-h根據數據庫中的數據來確定,此處爲260*200縮小4倍,-num後的參數550爲pos文件夾內正樣本的最大數量。

2.2 生成*.xml

opencv_traincascade -data data -vec metre.vec -bg bg.txt -numStages 10 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -numPos 500 -numNeg 500 -w 65 -h 50
-numStages爲cascade訓練的層數,-numPos 500小於opencv_createsamples生成*.vec時的數目550,一般約定爲0.9
最後生成的cascad.xml在data目錄下。

3. 測試

使用opencv提供的人臉檢測sample,載入xml,然後測試訓練後得到的xml文件能否正常工作。

4. 總結

檢測結果並不理想,所以就不在這裏貼圖了,需要進行參數修正和樣本整理。另一種思路是繼續研究latent svm即cascade dmp

參考

【1】 TRAINCASCADE AND CAR DETECTION USING OPENCV

【2】 Coding Robin

【3】 OpenCV haartraining

【4】 How to train cascade properly

【5】 about traincascade paremeters, samples, and other...

【6】 haar training OpenCV assertion failed










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章