用opencv的traincascade.exe训练行人的HAAR、LBP和HOG特征的xml
opencv中有兩個函數可以訓練分類器opencv_haartraining.exe和opencv_traincascade.exe,前者只能訓練haar特征,后者可以用HAAR、LBP和HOG特征訓練分類器。這兩個函數都可以在opencv\build\x86\vc10\bin文件夾下找到,opencv_haartraining.exe訓練的adaboost級聯分類器有很多了,本文主要講opencv_haartraining.exe訓練的LBP和HOG特征的分類器。
訓練的過程包過四步:
首先是樣本的準備、其次是對樣本進行處理、再次生成樣本描述文件、最后一步是訓練分類器。
1、樣本的準備
以行人訓練為例,首先正樣本是各種各樣的行人的照片,負樣本就是非人照片。樣本個數最好在上千個,個數太少訓練出來的分類器不能準確的檢測行人,網上對正負樣本的個數比例不盡相同,有的說3:1有的說7:3,具體的還是要自己去實驗,我用的正樣本有2000個負樣本1200個。把正負樣本分別放在不同的文件夾下,可以命名為pos、neg。同時也要把opencv自帶的訓練函數和正負樣本一起放到一個文件夾下,例如放到E盤的boost文件夾下。如圖
這樣就準備好了正負樣本了。
ps:對正負樣本的幾點說明。。。
正負樣本都要轉化成灰度圖,而且對于正樣本用haar特征訓練是規格化成20*20或其他大小,最好不要太大,過多的haar特征會影響分類器的訓練時間;對于LBP特征正樣本要規格化為24*24大小,而對于HOG要規格化成64*64. 負樣本對尺寸沒有統一要求,在訓練對應的分類器時,選擇的負樣本尺寸一定要大于等于正樣本規定的尺寸。 ? ? ? ? ? ? ? ? ? a,正樣本就是人的圖片就行了,盡量包含少的背景。 ? ? b,,負樣本有兩點要求:一,不能包含正樣本且盡可能多的提供場景的背景圖;二,負樣本盡可能的多,而且要多樣化,和正樣本有一定的差距但是差別也不要太大,否則容易在第一級就全部被分類器reject,訓練時不能顯示負樣本的個數,從而導致卡死。
2、對樣本進行處理
以下的處理過程都是在命令行下進行的,在計算機【開始】里面輸入“cmd”就可以進入命令行了。。。。。。
然后進入你剛才新建的包含以上樣本的文件夾下 ?首先進入E盤 直接輸入E:就可以了,其次輸入“cd boost”就可以進入剛才的文件夾下。輸入“CD..”可以返回上一程
輸入dir /b >pos.txt 可以在pos文件夾下生成正樣本描述文件,文件是txt文件,包含的內容是正樣本中圖片的對應序號和格式。把其中的格式jpg改成jpg 1 0 0 24 24
后面的0 0 24 24是你規格化圖片的大小,即矩形框的大小,和你自己規格化的正樣本圖片大小要保持一致。全部替換以后,再把最后一行的pos.txt刪除就可以了。對于負樣本,以上生成方式一樣,不需要對txt文件的圖片格式進行修改,只需要刪除最后一行的neg.txt即可。這樣正負樣本就處理好了。。。
3、生成樣本描述文件
對正負樣本進行以上預處理之后,就可以創建正樣本vec文件了。
命令行進入opencv_createsamples.exe文件夾下,依次輸入:opencv_createsamples.exe -info pos\pos.txt -vec pos.vec -bg neg\neg.txt -num 2000 -w 24 -h 24 回車之后文件夾下就會出現pos.vec文件。
以上參數的含義如下:
-vec <vec_file_name>:訓練好的正樣本的輸出文件名。
-img<image_file_name>:源目標圖片(例如:一個公司圖標)
-bg<background_file_name>:背景描述文件。
-num<number_of_samples>:要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor<background_color>:背景色(假定當前圖片為灰度圖)。背景色制定了透明色。對于壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh 和bgcolor+bgthresh 中間的像素被認為是透明的。
-bgthresh<background_color_threshold>
-inv:如果指定,顏色會反色
-randinv:如果指定,顏色會任意反色
-maxidev<max_intensity_deviation>:背景色最大的偏離度。
-maxangel<max_x_rotation_angle>,
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>:最大旋轉角度,以弧度為單位。
-show:如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本圖片,而創建過程
繼續。這是個有用的debug 選項。
-w<sample_width>:輸出樣本的寬度(以像素為單位)
-h<sample_height>:輸出樣本的高度(以像素為單位)
4、訓練分類器
在以上準備工作都做好的情況下,就可以進行訓練分類器了。
在cmd命令行下輸入:opencv_traincascade.exe -data xml -vec pos.vec -bg neg\neg.txt -numpos 1800 -numneg 1200 -numstages 20 -featureType LBP -w 24 -h 24
講一下我實戰出來的注意事項吧:
1 關于正樣本,首先正樣本不是有些人說的,你實際有300個正樣本,在traincascade的時候可以寫成3000的,這種思路是沒有用的。在采集正樣本的時候你一定要注意保持所有樣本寬高比大致相同,如果你自己截圖,推薦使用光影魔術手?;蛘吲1频哪阕约簩憘€gui截圖工具。為了避免出現opencv error,在用opencv_traincascade.exe的時候,-numPos要稍微低于實際的正樣本數目,比如你有2100個你就可以將numpos設為1900-2000,
2 ?無論正樣本負樣本,圖片命名時不要用特殊字符,你就規規矩矩的命名pos1.jpg 。。。。。等等,特殊字符包括(),會出現opencv error,或者無法識別。
3 正負樣本比例1:2.5~1:3,曾經有篇文章中說,為了減小false positive ,可以加大負樣本數目。
4 當出現內存不夠的情況時,有幾種方法:1 你可以在64為pc上跑,2 減小正負樣本的數目。3 減小正樣本的寬高。
? ? ? ?經驗之談,不善之處,多提意見。
總結
以上是生活随笔為你收集整理的用opencv的traincascade.exe训练行人的HAAR、LBP和HOG特征的xml的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Random Forests
- 下一篇: 采用opencv_cascadetrai