我正在尝试创建一个哈尔分类器来识别对象,但我似乎无法弄清楚每个阶段产生的结果表代表什么。
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|
+----+---------+---------+
我不确定N
,HR
和FA
在每种情况下所指的是什么。有人可以解释他们的立场和意义吗?
答案 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所测量。