Jak obliczyć mAP (średnia średnia precyzja) dla zadania wykrywania dla liderów Pascal VOC? http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4
Tam powiedział - na stronie 11 : http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
Średnia precyzja (AP). Do oceny VOC2007 zastosowano interpolowaną średnią precyzję (Salton i Mcgill 1986) do oceny zarówno klasyfikacji, jak i wykrywania. Dla danego zadania i klasy krzywa precyzji / przywołania jest obliczana na podstawie wyników rankingu metody. Odwołanie jest zdefiniowane jako odsetek wszystkich pozytywnych przykładów powyżej rangi. Precyzja to proporcja wszystkich przykładów powyżej tej rangi, które pochodzą z klasy pozytywnej. AP podsumowuje kształt krzywej precyzji / przywołania i jest zdefiniowany jako średnia precyzja na zbiorze jedenastu równomiernie rozmieszczonych poziomów przywołania [0,0,1, ..., 1]:
AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)
Precyzja na każdym poziomie przywołania r jest interpolowana poprzez przyjęcie maksymalnej precyzji zmierzonej dla metody, dla której odpowiadające przywołanie przekracza r
pinterp(r) = max p(r˜)
:, gdzie p (r˜) jest zmierzoną precyzją przy przywołaniu
Informacje o mAP: http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision
Czy to oznacza, że:
Możemy obliczyć precyzji i Recall :
- A) Dla wielu różnych
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
obliczamy prawdziwe / fałszywe wartości dodatnie / ujemne
Gdzie
True positive = Number_of_detection with IoU > {0, 0.1,..., 1}
, jak powiedziano tutaj: /datascience//a/16813/37736, a następnie obliczamy:Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
- A) Dla wielu różnych
B) Lub dla wielu różnych progów algorytmów wykrywania obliczamy:
Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
Gdzie
True positive = Number_of_detection with IoU > 0.5
powiedziano tutaj: /programming//a/43168882/1558037
C) Lub dla wielu różnych progów algorytmów wykrywania obliczamy:
Precision = Intersect / Detected_box
Recall = Intersect / Object
Jak pokazano tutaj? https://en.wikipedia.org/wiki/Precision_and_recall
- Następnie obliczamy AP (średnia precyzja) jako średnią z 11 wartości
Precision
w punktach gdzieRecall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
, tjAP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)
(Zasadniczo dla każdego punktu, na przykład 0,3, otrzymujemy MAKS. Precyzji dla Przywołania <= 0,3, zamiast wartości Precyzji w tym momencie Przywołania = 0,3)
- A kiedy obliczamy AP tylko dla 1 klasy obiektów na wszystkich obrazach - otrzymujemy AP (średnia precyzja) dla tej klasy, na przykład tylko dla
air
.
AP jest więc całką (obszar pod krzywą): /stats//a/157019/111998
Ale gdy obliczamy AP dla wszystkich klas obiektów na wszystkich obrazach - otrzymujemy mAP (średnia średnia precyzja) dla wszystkich 88.6
zbiorów danych obrazów, na przykład dla R4D_faster_rcnn: http://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4
Pytania:
- Czy to prawda, a jeśli nie, to jak obliczyć mAP dla Pascal VOC Challenge?
- I który z 3 wzorów (A, B lub C) jest poprawny do obliczania dokładności i przywołania, w ust. 1?
Krótka odpowiedź:
- mAP = AVG (AP dla każdej klasy obiektów)
- AP = AVG (Precyzja dla każdego z 11 przywołań {precyzja = 0, 0,1, ..., 1})
- Krzywa PR = Precyzja i przywołanie (dla każdego progu znajdującego się w obwiedniach prognozy)
- Precyzja = TP / (TP + FP)
- Recall = TP / (TP + FN)
- TP = liczba wykrytych IoU> 0,5
- FP = liczba wykrytych IoU <= 0,5 lub wykrytych więcej niż jeden raz
- FN = liczba obiektów, które nie zostały wykryte lub wykryte z IoU <= 0,5
Na moim githubie znajduje się ładne i szczegółowe wyjaśnienie z łatwym w użyciu kodem:
https://github.com/rafaelpadilla/Object-Detection-Metrics
Z pewnością wam to pomoże.
źródło