Объяснение таблицы результатов классификатора 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.