close

reference from : http://htedsv.com/?tag=opencv

 

最近在做人臉檢測的Haartraining訓練分類器,發現訓練到最後誤檢率很低時分類器總是卡到某一層就不在繼續進行,像是進入了閉環。

程式碼與參數輸入應該是沒有任何問題的,所以我從網上找這方面的資料,最後在OpenCV的中文論壇看到一個帖,終於找到原因了。具體如下:

 

1、問題出現在取負樣本的那個函數 icvGetHaarTrainingDataFromBG中;

當剩下所有的negtive樣本在臨時的cascade Classifier中evaluate的結果都是0(也就是拒絕了),隨機取樣本的數目到幾百萬都是找不到誤檢測的neg樣本了,因而沒法跳出迴圈!

 

2、解決方法是,增大負樣本數目,增大負樣本之間的變化!

P.S. 因為負樣本原則應該是無強大而且多樣性越大越好,這在現實中是不可行的,所以我們採集的負樣本一般無論從數量上還是多樣性上都很難滿足要求,

所以出現上述 問題就很正常了,不過此時的分類器已經完全額、可以使用,因為它的誤檢率已經很低,從實用性上時沒有任何問題的。

另外,帖中還提到:

負樣本不需要做成和正樣本一樣大小的,所以你搜集個幾千張各種照片就夠用了,比如網頁素材庫啊什麼的,只要保證你的負樣本裡不包含檢測目標就行了。

 

另外訓練的時候,負樣本不要一下子都加進去,不夠了再加,否則會在找負樣本上耗費很多時間。

也就是說,訓練的時候如果發現很慢了,就ctrl+c停下來,修改bg_data.list,提供新的bg圖像。

呵呵,現在感覺Haartraining太工程化了,到最後有點重複操作,所以覺得沒必要在很多問題上深究,會用就行了。

arrow
arrow
    全站熱搜

    honoyang 發表在 痞客邦 留言(1) 人氣()