OpenCV Haar Classifier 结果表说明
Posted
技术标签:
【中文标题】OpenCV Haar Classifier 结果表说明【英文标题】:OpenCV Haar Classifier result table explanation 【发布时间】:2015-01-14 07:27:10 【问题描述】:我正在尝试创建一个 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|
+----+---------+---------+
我不确定N
、HR
和FA
在每种情况下指的是什么。有人能解释一下它们代表什么以及它们的含义吗?
【问题讨论】:
【参考方案1】:在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 所衡量。
【讨论】:
只有一个关于 % 的问题。当它打印1
时,是 1% 还是 100%,0.7432
分别是 0.7% 或 74%?
这里 1 是 100%,0.7432 是 74.32%
预计算时间的单位是什么?分钟还是小时?
@monusuri 预计算时间以秒为单位。如果您给它更多内存以加快处理速度,则实际上需要更多的预计算时间来加载该内存。在我的情况下,预计算 60 秒,处理一个小时左右。
显然再输入几个字符会杀死 OpenCV 开发人员:|感谢您的回答顺便说一句以上是关于OpenCV Haar Classifier 结果表说明的主要内容,如果未能解决你的问题,请参考以下文章