opencv老是卡在某一層(ZZ)

最近在做人臉檢測的Haartraining訓練分類器,發現訓練到最後誤檢率很低時分類器總是卡到某一層就不在繼續進行,像是進入了死循環,程序代碼與參數輸入應該是沒有任何問題的,所以我從網上找這方面的資料,最後在OpenCV的中文論壇看到一個帖,終於找到原因了。具體如下:

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

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

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

P.S. 因爲負樣本原則應該是無強大而且多樣性越大越好,這在現實中是不可行的,所以我們採集的負樣本一般無論從數量上還是多樣性上都很難滿足要求,所以出現上述問題就很正常了,不過此時的分類器已經完全額、可以使用,因爲它的誤檢率已經很低,從實用性上時沒有任何問題的。

另外,帖中還提到:

負樣本不需要做成和正樣本一樣大小的,所以你搜集個幾千張各種照片就夠用了,比如網頁素材庫啊什麼的,只要保證你的負樣本里不包含檢測目標就行了。另外訓練的時候,負樣本不要一下子都加進去,不夠了再加,否則會在找負樣本上耗費很多時間。

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

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


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/onlyyouandme/archive/2009/10/24/4722690.aspx

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