2014-01-13 42 views
2

我訓練了一個新的哈爾級聯使用2000 裁剪面部圖像(只包含臉部)和3321負面隨機圖像。訓練哈爾級聯花了很少時間

我用命令:

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999 maxFalseAlarmRate 0.5 -numPos 2000 -numNeg 3321 -w 80 -h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024 

我很擔心,因爲經過訓練只有34分鐘。結果也不是很好。

我應該使用更多的樣本嗎?使用上述參數僅用30分鐘來訓練分類器是否正常?我應該改變它們以獲得更好的結果嗎?

我正在使用OpenCV 2.4.7在windows8上工作。我正在研製一款8GN內存的相對強大的機器。

在此先感謝,

Gil。

回答

2

我可能遲到了我的答案。但爲了別人的緣故,我會把它貼出來;

首先,我很驚訝培訓花費了很少的時間。特別是因爲你的樣品非常大。 80x40真的很大!我自己通常訓練樣本的最大尺寸爲20像素左右。在你的情況下22x11會很好。隨着樣本量的增加,訓練時間幾乎逐漸增加。

接下來,2000個正面應該工作得很好。也就是說,如果它們不是太相似。最好是讓樣本具有與您想要在行動中發現一樣大的差異。刪除非常相似的樣本。它們對探測器的質量有負面影響。

然後,3000底片有點偏低。大約6000個底片給了我很好的結果。但是在那裏,最好有負面因素,這是非常不同的。具有很多細節的負面效果也會更好。明亮的藍色天空的圖片不會很好地工作。如果您無法輕鬆獲得許多底片,也可以展示您擁有的旋轉版本。

最後,我越想越多,我相信你做錯了什麼。在34分鐘內爲2000個80x40樣本提供20個階段??沒門!該矢量文件中是否真的擁有所有2000個正數?

問候並祝你好運!

2

檢查你是否真的有20階段級聯。如果您的階段數量少於預期,請檢查是否因爲您用完了正面樣本。一般來說,你不應該爲每個階段使用所有的正面樣本。根據您的命中率,您可能會拒絕每個階段的一些正面樣本,這些樣本需要補充以進行下一階段的培訓。所以你希望你的numPos少於你擁有的陽性樣本總數。

首先,您需要分析您的檢測結果。你是否因過多的誤報,太多的假陰性或兩者而受苦?

一般來說,如果你的結果不好,你可以做幾件事情。

首先,確保您的負片圖像相當大,並且它們包含通常與您感興趣的對象(在您的情況下爲臉部)相關的背景。培訓師爲每個階段自動生成負樣本。它使用已有的階段對負面圖像運行檢測。無論它檢測到什麼,它都被定義爲誤報,並且這些被用作下一階段的否定。

更多的數據通常是一個好主意。所以,如果你有15K的積極,嘗試添加更多。如果您的探測器錯過了很多面孔,這可能非常有幫助。

如果您看到太多的錯誤警報,那麼您應該嘗試降低分類器的整體虛警率。既然你有這麼多的數據,你可以嘗試通過增加階段的數量來做到這一點。或者,您可以降低每個階段的最大誤報率。這意味着每個階段都必須更加複雜,並且需要更長時間的訓練。

您還可以嘗試不同的功能。你現在可以選擇哈爾,LBP和HOG。 LBP和HOG的訓練時間和記憶比哈爾少得多。但是,HOG可能不太適合臉型。

+0

謝謝@迪瑪,我的級聯確實有20個階段,這是否意味着訓練階段沒有任何問題或錯誤終止? – GilLevi

+0

聽起來像它。聽起來很奇怪,可能需要34分鐘。下一步就是試用你的探測器,看看會發生什麼。 :) – Dima

+0

感謝@迪瑪,我測試了它,結果並不是那麼好。也許我應該使用更多的樣本?我有大約15K的積極和多少130K的消極。你怎麼看? – GilLevi