2014-11-17 46 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