Объяснение таблицы результатов классификатора OpenCV Haar
Я пытаюсь создать классификатор 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 ответов
Поиск "HR" в источник OpenCV приводит нас к этой. Линии 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;
так HR и FA стоят для тарифа удара и ложной тревоги. Концептуально: hitRate = % положительных образцов, которые правильно классифицируются как таковые. falseAlarm = % отрицательных проб, неправильно классифицированных как положительные.
читать код CvCascadeBoost::train
, мы можем увидеть следующее пока петля
cout << "+----+---------+---------+" << endl;
cout << "| N | HR | FA |" << endl;
cout << "+----+---------+---------+" << endl;
do
{
[...]
}
while( !isErrDesired() && (weak->total < params.weak_count) );
просто глядя на это, и не зная много о специфике повышения, мы можем сделать обоснованное предположение, что обучение работает до тех пор, пока ошибка не будет достаточно низкой, как измеряется falseAlarm.