Как рассчитать mAP (среднее значение точности) для задачи обнаружения для таблиц лидеров Vascal Pascal? http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4
Там сказано - на странице 11 : http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
Средняя точность (AP). Для задачи VOC2007 интерполированная средняя точность (Salton and Mcgill 1986) использовалась для оценки как классификации, так и обнаружения. Для заданной задачи и класса кривая точности / отзыва вычисляется из ранжированного результата метода. Напомним, определяется как доля всех положительных примеров, ранжированных выше данного ранга. Точность - это доля всех примеров выше того ранга, которые относятся к положительному классу. AP суммирует форму кривой точности / отзыва и определяется как средняя точность для набора из одиннадцати одинаково разнесенных уровней отзыва [0,0.1, ..., 1]:
AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)
Точность на каждом уровне возврата r интерполируется путем взятия максимальной точности, измеренной для метода, для которого соответствующий отзыв превышает r:,
pinterp(r) = max p(r˜)
где p (r˜) - измеренная точность при вызове ˜r.
О mAP: http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision
Значит ли это, что:
Мы рассчитываем точность и вспомним :
- А) Для многих разных
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
мы рассчитываем истинные / ложные положительные / отрицательные значения
Где
True positive = Number_of_detection with IoU > {0, 0.1,..., 1}
, как сказано здесь: /datascience//a/16813/37736 и тогда мы рассчитаем:Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
- А) Для многих разных
Б) Или для множества различных порогов алгоритмов обнаружения мы вычисляем:
Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
Где,
True positive = Number_of_detection with IoU > 0.5
как здесь сказано: /programming//a/43168882/1558037
В) или для множества различных порогов алгоритмов обнаружения мы вычисляем:
Precision = Intersect / Detected_box
Recall = Intersect / Object
Как показано здесь? https://en.wikipedia.org/wiki/Precision_and_recall
- Затем мы вычисляем AP (среднюю точность) как среднее из 11 значений
Precision
в точках, гдеRecall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
, т.е.AP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)
(Как правило, для каждой точки, например 0,3, мы получаем MAX Precision for Recall <= 0,3 вместо значения Precision в этой точке Recall = 0,3)
- И когда мы вычисляем AP только для 1-го класса объекта на всех изображениях - тогда мы получаем AP (среднюю точность) для этого класса, например, только для
air
.
Таким образом, AP является интегралом (область под кривой): /stats//a/157019/111998
Но когда мы вычисляем AP для всех классов объектов на всех изображениях - тогда мы получаем mAP (среднюю среднюю точность) для набора данных всех изображений, например, 88.6
для R4D_faster_rcnn: http://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4
Вопросов:
- Правильно ли это, а если нет, то как рассчитать mAP для Pascal VOC Challenge?
- И какая из 3 формул (A, B или C) является правильной для расчета точности и отзыва в пункте 1?
Короткий ответ:
- mAP = AVG (AP для каждого класса объектов)
- AP = AVG (точность для каждого из 11 повторных вызовов {точность = 0, 0,1, ..., 1})
- PR-кривая = точность и повторный вызов (для каждого порогового значения, которое находится в ограниченных ячейках прогнозов)
- Точность = TP / (TP + FP)
- Напомним = TP / (TP + FN)
- TP = количество обнаружений с IoU> 0,5
- FP = количество обнаружений с IoU <= 0,5 или обнаружено более одного раза
- FN = количество объектов, которые не обнаружены или обнаружены с IoU <= 0,5
На моем github есть хорошее и подробное объяснение с простым в использовании кодом:
https://github.com/rafaelpadilla/Object-Detection-Metrics
Конечно, это поможет вам, ребята.
источник