Durchschnittliche Präzision bei der Objekterkennung

8

Ich bin ziemlich verwirrt darüber, wie ich die AP- oder mAP-Werte berechnen kann, da es anscheinend einige verschiedene Methoden gibt. Ich möchte speziell die AP / mAP-Werte für die Objekterkennung erhalten.

Alles was ich sicher weiß ist:

Rückruf = TP / (TP + FN), Präzision = TP / (TP + FP)

Zum Beispiel, wenn ich nur 1 Klasse zum Auswerten habe und 500 Testbilder sage. Jedes Testbild kann eine andere Anzahl von Vorhersagen haben (Begrenzungsrahmenvorschläge), aber jedes Bild hat nur einen Grundwahrheitsbegrenzungsrahmen.

Bild 1: [Klasse, Wahrscheinlichkeit, x1, y1, x2, y2], [Klasse, Wahrscheinlichkeit, x3, y3, x4, y4], [Klasse, Wahrscheinlichkeit, x5, y5, x6, y6], [Klasse, Wahrscheinlichkeit, x7, y7, x8, y8], ...

Bild 2: [Klasse, Wahrscheinlichkeit, x1, y1, x2, y2], [Klasse, Wahrscheinlichkeit, x3, y3, x4, y4], ...

. . . (und so weiter)

* Nur ein Beispiel, ich habe das erfunden

Ich weiß, dass wir, um TP zu erhalten, die IOUs jeder Vorhersage finden und diejenigen über einem ausgewählten Schwellenwert wie 0,5 zählen müssen (wenn wir mehrere Vorhersagen mit IOUs über dem Schwellenwert haben, zählen wir nur einmal und behandeln die anderen als FP?).

Hier verwirrt es mich:

  1. Würde das TP + FP = Anzahl der Vorhersagen für jedes Bild sein?

  2. Da alle Testbilder keine Negative haben, ist TP + FN = 500?

  3. Wird es pro Bild oder pro Klasse berechnet?

  4. Könnte mir jemand eine Schritt-für-Schritt-Anleitung geben, um den AP / mAP anhand meines Beispiels zu erhalten? Ich finde, der zweideutigste Teil ist, ob wir es pro Bild oder pro Klasse machen (dh 500 Bilder auf einmal).

Die meisten Leitfäden / Papiere, die ich gefunden habe, sind sehr auf das Abrufen von Informationen ausgerichtet. Würde mich über Hilfe dabei freuen.

* Hinweis: Ich teste es an einem benutzerdefinierten Datensatz. Ich weiß, dass PASCAL VOC einen Code dafür hat, aber ich möchte den Code selbst schreiben, angepasst an meine eigenen Daten.

User1915
quelle
Mein Github-Repository enthält eine Erläuterung zu IOU, Präzision, Rückruf, durchschnittlicher Präzision und mAP. Es hat auch einen Code, der alle Objektdetektoren auswertet.
Rafael Padilla

Antworten:

7

Ich denke, die akzeptierte Antwort weist den falschen Weg zur Berechnung von mAP. Denn selbst für jede Klasse ist der AP das durchschnittliche Produkt. In meine Antwort werde ich weiterhin die Interpretation der IOU aufnehmen, damit die Anfänger keine Schwierigkeiten haben, sie zu verstehen.

einÖbpbt

einÖ=EINreein(bpbt)EINreein(bpbt)

M.M.

Index des Objekts, des Vertrauens, der Grundwahrheit

Begrenzungsrahmen 1, 0,8, 1

Begrenzungsrahmen 1, 0,7, 1

Begrenzungsrahmen 2, 0,1, 0

Begrenzungsrahmen 3, 0,9, 1

Und dann müssen Sie sie nach dem Vertrauen von hoch nach niedrig einstufen. Anschließend müssen Sie nur noch die PR-Kurve wie gewohnt berechnen und 11 interpolierte Präzisionsergebnisse an diesen 11 Rückrufpunkten ermitteln, die [0, 0,1, ..., 1] entsprechen. (Die detailliert berechneten Methoden finden Sie hier ) Erwähnenswert Für mehrere Erkennungen eines einzelnen Begrenzungsrahmens, z. B. des Begrenzungsrahmens 1 in meinem Beispiel, werden wir ihn höchstens einmal als richtig und alle anderen als falsch betrachten. Dann durchlaufen Sie 20 Klassen und berechnen deren Durchschnitt. Dann bekommst du deinen mAP.

Außerdem drehen wir diese Methode vorerst ein wenig, um unseren mAP zu finden. Anstatt 10 Rückrufpunkte zu verwenden, verwenden wir die wahre Zahl K einer bestimmten Klasse und berechnen die interpolierte Präzision. dh [0,1 / K, 2 / K ...]

Li haonan
quelle
Was für eine großartige einfache Erklärung
Amitai
6

Auf diese Weise berechnen PASCOL-VOC 2012 und MS-COCO mAP, Pseudocode wie folgt:

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

Um AP zu erhalten, müssen Sie zuerst die PR-Kurve glätten und dann die Fläche unter der Kurve berechnen. Um mAP zu erhalten, wiederholen Sie die obigen Schritte für alle Klassen und mitteln Sie sie.

Referenz:

Python-Version der PASCOL VOC 2012-Evaluierungsmetrik: https://github.com/Cartucho/mAP

Original PASCOL VOC 2012 Toolkit (in MATLAB): https://github.com/Cartucho/mAP

Original MSCOCO: http://cocodataset.org/#detection-eval

User1915
quelle
Was ist, wenn das vorhergesagte Feld zwei Grundwahrheitsobjekte überlappt? Für welches Objekt testen Sie die Überlappung?
Neugierig
1
AP = TP/(TP+FP)ist falsch. Stattdessen Precision = TP/(TP+FP).
Franck Dernoncourt
Das ist völlig falsch. Die durchschnittliche Genauigkeit wird stattdessen auf diese Weise berechnet: medium.com/@jonathan_hui/…
Neugierig
3

Victor Lavrenkos Vorlesung "Evaluation 12: Mean Average Precision" enthält eine Folie, in der sehr deutlich erklärt wird, was Average Precision (AP) und Mean Average Precision (mAP) für den Fall des Abrufs von Dokumenten sind:

Geben Sie hier die Bildbeschreibung ein

So wenden Sie die Folie auf die Objekterkennung an: relevantes Dokument = vorhergesagter Begrenzungsrahmen, dessen IoU gleich oder über einem bestimmten Schwellenwert liegt (normalerweise 0,5).

IoU = Schnittpunkt über Union, siehe Bild unten für eine visuelle Definition:

Geben Sie hier die Bildbeschreibung ein

Beispiel für eine IoU-Berechnung an einem tatsächlichen Bild:

Geben Sie hier die Bildbeschreibung ein

( Bildquelle )

Zu Ihrer Information: Mittlere durchschnittliche Präzision gegen mittleren wechselseitigen Rang

Franck Dernoncourt
quelle
0

Obwohl @ User1915 die Antwort selbst gefunden hat, möchte ich etwas für Interessierte hinterlassen.

Hier ist meine Antwort auf die obigen Fragen:

Frage 1: Würde TP + FP = Anzahl der Vorhersagen für jedes Bild sein?

Ja. ( Da die Anzahl der TP begrenzt ist, erhalten Sie umso weniger Genauigkeit, je mehr Vorhersagen Sie getroffen haben. )

F2: Da alle Testbilder keine Negative haben, ist TP + FN = 500?

Ja. ( Da es nur eine Grundwahrheitsbox pro Bild gibt )

F3: Wird es pro Bild oder pro Klasse berechnet?

Pro Klasse.

F4: Könnte mir jemand eine Schritt-für-Schritt-Anleitung geben, um den AP / mAP anhand meines Beispiels zu erhalten? Ich finde, der zweideutigste Teil ist, ob wir es pro Bild oder pro Klasse machen (dh 500 Bilder auf einmal).

Siehe den Beitrag von @ User1915 oben.

Antwort777
quelle