經過近一個月的工程實戰,把自己累積的經驗分享給大家,教你如何訓練一個收斂的,比opencv自帶的data效果好的xml。
openv有兩個訓練exe,一個是opencv_haartraining.exe,一個是opencv_traincascade.exe,后者是前者的新版本,一般我們都使用后者,或者有三個特征:HAAR、HOG、LBP,cascade訓練,如果你的opencv么有opencv_traincascade.exe,你可以自重新編譯一遍,就會生成opencv_traincascade.exe,(cmake是從新編譯opencv的神器哦,還有記得把對應的opencv lib和opencv_traincascade.exe放在一起哦)。不得不提的是opencv_createsamples.exe.這個是用來生成正樣本vec的。
這兩個exe的 的bat如下:
opencv_createsamples.exe -info name763.dat -vec zhengmian_763.vec -num 763 -w 50 -h 55
opencv_traincascade.exe -data DATAHOG -vec 763.vec -bg negname.dat -numPos 700 -numNeg 2100 -featureType HOG -w 50 -h 55 -numStages 20
好吧,具體命令什么的有很多人都講過了。這里不啰嗦了。講一下我實戰出來的注意事項吧:
1 關於正樣本,首先正樣本不是有些人說的,你實際有300個正樣本,在traincascade的時候可以寫成3000的,這種思路是沒有用的。在采集正樣本的時候你一定要注意保持所有樣本寬高比大致相同,如果你自己截圖,推薦使用光影魔術手。或者牛逼的你自己寫個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 減小正樣本的寬高。
經驗之談,不善之處,多提意見。