Як обчислити mAP (середню середню точність) для завдання виявлення для лідерів Pascal VOC? 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
Чи означає це, що:
Ми обчислюємо точність та відкликання :
- A) Для багатьох різних
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
обчислюємо значення True / False Positive / Negative
Де
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)
- A) Для багатьох різних
B) Або для багатьох різних порогових алгоритмів виявлення ми обчислюємо:
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
C) Або для багатьох різних порогових алгоритмів виявлення ми обчислюємо:
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 точності для нагадування <= 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
Запитання:
- Це правильно, а якщо це не так, то як обчислити карту для 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