2014-11-17 50 views
7

我想創建一個Haar分類器來識別對象,但是我似乎無法弄清楚每個階段產生的結果表代表什麼。OpenCV Haar分類器結果表說明

例如1

===== TRAINING 1-stage ===== 
<BEGIN 
POS count : consumed 700 : 700 
NEG count : acceptanceRatio 2500 : 0.452161 
Precalculation time: 9 
+----+---------+---------+ 
| N | HR | FA | 
+----+---------+---------+ 
| 1|  1|  1| 
+----+---------+---------+ 
| 2|  1|  1| 
+----+---------+---------+ 
| 3|  1|  1| 
+----+---------+---------+ 
| 4|  1|  1| 
+----+---------+---------+ 
| 5|  1| 0.7432| 
+----+---------+---------+ 
| 6|  1| 0.6312| 
+----+---------+---------+ 
| 7|  1| 0.5112| 
+----+---------+---------+ 
| 8|  1| 0.6104| 
+----+---------+---------+ 
| 9|  1| 0.4488| 
+----+---------+---------+ 
END> 

例如2

===== TRAINING 2-stage ===== 
<BEGIN 
POS count : consumed 500 : 500 
NEG count : acceptanceRatio 964 : 0.182992 
Precalculation time: 49 
+----+---------+---------+ 
| N | HR | FA | 
+----+---------+---------+ 
| 1|  1|  1| 
+----+---------+---------+ 
| 2|  1|  1| 
+----+---------+---------+ 

我不知道是什麼NHRFA指的是在每一種情況下。有人能解釋他們的立場和意義嗎?

回答

11

OpenCV source中搜索「HR」會將我們導向this文件。行1703年至1707年裏CvCascadeBoost::isErrDesired打印表:

cout << "|"; cout.width(4); cout << right << weak->total; 
cout << "|"; cout.width(9); cout << right << hitRate; 
cout << "|"; cout.width(9); cout << right << falseAlarm; 
cout << "|" << endl; 
cout << "+----+---------+---------+" << endl; 

所以,人力資源和FA代表的命中率和誤報。概念上:hitRate =正確分類的陽性樣本的百分比。 falseAlarm =負面樣本的%被錯誤地分類爲正面。

讀碼CvCascadeBoost::train,我們可以看到下面的while循環

cout << "+----+---------+---------+" << endl; 
cout << "| N | HR  | FA  |" << endl; 
cout << "+----+---------+---------+" << endl; 

do 
{ 
    [...] 
} 
while(!isErrDesired() && (weak->total < params.weak_count)); 

只看這一點,不知道太多關於提升的細節,我們可以做出猜測培訓工作,直到錯誤如falseAlarm測量的那樣足夠低。

+0

只有一個關於%的問題。當它打印1時是1%還是100%,而0.7432是0.7%還是74%? – Colin747

+2

這裏1是100%,0.7432是74.32% –

+0

預計算時間的單位是多少?分鐘還是小時? – speedious