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