Wie berechnet man den mAP (Mean Average Precision) für die Erkennungsaufgabe der Pascal VOC-Bestenlisten? http://host.robots.ox.ac.uk:8080/leaderboard/displaylb.php?challengeid=11&compid=4
Dort heißt es - auf Seite 11 : http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
Durchschnittliche Präzision (AP). Für die VOC2007-Herausforderung wurde die interpolierte Durchschnittsgenauigkeit (Salton und Mcgill 1986) verwendet, um sowohl die Klassifizierung als auch die Erkennung zu bewerten. Für eine gegebene Aufgabe und Klasse wird die Genauigkeits- / Rückrufkurve aus der eingestuften Ausgabe einer Methode berechnet. Rückruf ist definiert als der Anteil aller positiven Beispiele, die über einem bestimmten Rang stehen. Präzision ist der Anteil aller Beispiele oberhalb dieses Ranges, die aus der positiven Klasse stammen. Der AP fasst die Form der Genauigkeits- / Rückrufkurve zusammen und ist definiert als die mittlere Genauigkeit bei einem Satz von elf gleichmäßig verteilten Rückrufebenen [0,0.1, ..., 1]:
AP = 1/11 ∑ r∈{0,0.1,...,1} pinterp(r)
Die Genauigkeit bei jedem Rückrufpegel r wird interpoliert, indem die für eine Methode gemessene maximale Genauigkeit genommen wird, bei der der entsprechende Rückruf r: überschreitet
pinterp(r) = max p(r˜)
, wobei p ( r p) die gemessene Genauigkeit bei Rückruf ˜r ist
Über mAP: http://0agr.ru/wiki/index.php/Precision_and_Recall#Average_Precision
Heißt das also:
Wir berechnen Präzision und Rückruf :
- A) Für viele verschiedene
IoU
> {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
berechnen wir True / False Positive / Negative Werte
Wo
True positive = Number_of_detection with IoU > {0, 0.1,..., 1}
, wie hier gesagt: /datascience//a/16813/37736 und dann berechnen wir:Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
- A) Für viele verschiedene
B) Oder für viele verschiedene Schwellenwerte von Erkennungsalgorithmen berechnen wir:
Precision = True positive / (True positive + False positive)
Recall = True positive / (True positive + False negative)
Wo
True positive = Number_of_detection with IoU > 0.5
wie hier gesagt: /programming//a/43168882/1558037
C) Oder für viele verschiedene Schwellenwerte von Erkennungsalgorithmen berechnen wir:
Precision = Intersect / Detected_box
Recall = Intersect / Object
Wie hier gezeigt? https://en.wikipedia.org/wiki/Precision_and_recall
- Dann berechnen wir AP (Average Precision) als Durchschnitt von 11 Werten
Precision
an den Punkten, an denenRecall = {0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}
, dhAP = 1/11 ∑ recall∈{0,0.1,...,1} Precision(Recall)
(Im Allgemeinen erhalten wir für jeden Punkt, z. B. 0,3, ein Maximum der Genauigkeit für den Rückruf <= 0,3 anstelle des Werts für die Genauigkeit an diesem Punkt. Rückruf = 0,3.)
- Und wenn wir AP nur für 1 Objektklasse auf allen Bildern berechnen - dann erhalten wir AP (durchschnittliche Genauigkeit) für diese Klasse zum Beispiel nur für
air
.
AP ist also ein Integral (Bereich unter der Kurve): /stats//a/157019/111998
Wenn wir jedoch die AP für alle Objektklassen aller Bilder berechnen, erhalten wir die mAP (mittlere durchschnittliche Genauigkeit) für alle 88.6
Bilddatensätze , z. B. für R4D_faster_rcnn: http://host.robots.ox.ac.uk:8080/leaderboard /displaylb.php?challengeid=11&compid=4
Fragen:
- Ist es richtig und wenn nicht, wie wird der mAP für Pascal VOC Challenge berechnet?
- Und welche der drei Formeln (A, B oder C) ist für die Berechnung von Präzision und Rückruf in Absatz 1 richtig?
Kurze Antwort:
- mAP = AVG (AP für jede Objektklasse)
- AP = AVG (Präzision für jeden der 11 Rückrufe {Präzision = 0, 0,1, ..., 1})
- PR-Kurve = Präzision und Rückruf (für jeden Schwellenwert, der in den gebundenen Feldern für Vorhersagen enthalten ist)
- Präzision = TP / (TP + FP)
- Rückruf = TP / (TP + FN)
- TP = Anzahl der Erkennungen mit IoU> 0,5
- FP = Anzahl der Erkennungen mit IoU <= 0,5 oder mehrmals erkannt
- FN = Anzahl der Objekte, die nicht erkannt oder mit IoU <= 0,5 erkannt wurden
Es gibt eine nette und detaillierte Erklärung mit einem einfach zu verwendenden Code auf meinem Github:
https://github.com/rafaelpadilla/Object-Detection-Metrics
Sicher wird es euch helfen.
quelle