OpenCV Haar分类器结果表说明

时间:2014-11-17 11:32:52

标签: opencv haar-classifier

我正在尝试创建一个哈尔分类器来识别对象,但我似乎无法弄清楚每个阶段产生的结果表代表什么。

E.g。 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>

E.g。 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在每种情况下所指的是什么。有人可以解释他们的立场和意义吗?

1 个答案:

答案 0 :(得分:18)

OpenCV source中搜索“HR”会将我们转到this文件。 CvCascadeBoost::isErrDesired内的第1703-1707行打印表格:

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;

所以HR和FA代表命中率和误报。从概念上讲:hitRate =正确分类的阳性样本的百分比。 falseAlarm =阴性样本的百分比被错误地归类为阳性。

阅读CvCascadeBoost::train的代码,我们可以看到以下while循环

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

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

只是看着这个,并且不太了解提升的具体细节,我们可以做出有根据的猜测,即训练有效,直到错误足够低,如falseAlarm所测量。