Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
Grundlagen der Computer Vision·Metriken lesen·Lektion 9/10
LektionAnfänger

Erkennungsmetriken richtig interpretieren

Führe die Validierung aus, lies Precision, Recall, mAP50-95, AP pro Klasse und die Konfusionsmatrix gemeinsam und wähle anhand eines Zielwerts einen Schwellenwert für den Einsatz aus.

Eine einzelne Zahl ist beruhigend: mAP 0.83, fertig. Doch derselbe mAP-Wert kann eine Klasse verbergen, die in der Hälfte der Fälle versagt, durchgehend zu ungenaue Boxen oder einen Schwellenwert, der jede Minute jemanden alarmiert. Du führst eine echte Validierung aus und liest sie Zeile für Zeile, bis sie dir zeigt, was du beheben und wo du den Schwellenwert setzen musst.

Lernergebnis

Führe die Validierung aus, ermittle anhand der AP pro Klasse die Engpassklasse, wähle einen Konfidenzschwellenwert anhand eines Precision- oder Recall-Zielwerts und entscheide, ob du das Modell einsetzt, weiterentwickelst oder den Ansatz überdenkst.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Precision: Anteil der gezeichneten Boxen, die korrekt sind. Recall: Anteil der realen Objekte, die gefunden werden.

  2. Gib mAP50-95 an; mAP50 lässt ungenaue Boxen durchgehen.

  3. Lies die AP pro Klasse ab; der Durchschnitt verbirgt die schwächste Klasse.

  4. Die Werte in den Spalten P und R gelten für einen Betriebspunkt, nicht für deinen Einsatzschwellenwert.

  5. Wähle den Schwellenwert anhand eines Zielwerts: Precision ≥ X oder Recall ≥ Y.

Praxisnah

So wird jede Vorhersage bewertet#

Bei der Validierung wird jede vorhergesagte Box mit der Ground Truth abgeglichen. Eine Vorhersage ist ein richtig positives Ergebnis (TP), wenn sie die richtige Klasse hat und ihre IoU mit einer noch nicht zugeordneten Ground-Truth-Box einen Schwellenwert überschreitet; andernfalls ist sie ein falsch positives Ergebnis (FP). Jedes nicht zugeordnete Ground-Truth-Objekt ist ein falsch negatives Ergebnis (FN).

MesswertFormelBeantwortete Frage
PrecisionTP / (TP + FP)Wenn das Modell eine Box zeichnet, wie oft liegt es richtig?
RecallTP / (TP + FN)Wie viele der realen Objekte hat das Modell gefunden?
F12 × P × R / (P + R)Eine Zahl, die beides ausgleicht

Wenn du den Konfidenzschwellenwert senkst, kommen Boxen hinzu: Recall steigt und Precision sinkt. Die Precision-Recall-Kurve zeigt diesen Zielkonflikt über alle Schwellenwerte hinweg; die Fläche darunter ist die durchschnittliche Präzision (AP) für eine Klasse. mAP50 mittelt die AP über alle Klassen bei einer IoU von 0.5, wobei auch merklich ungenaue Boxen zählen. mAP50-95 mittelt über zehn IoU-Schwellenwerte von 0.5 bis 0.95 und belohnt daher präzise Boxen; in den Modelltabelle von Ultralytics ist dies der wichtigste Kennwert.

Validierung ausführen#

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml")

print(f"precision={metrics.box.mp:.3f} recall={metrics.box.mr:.3f}")
print(f"mAP50={metrics.box.map50:.3f} mAP50-95={metrics.box.map:.3f}")
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all          4         17      0.551      0.962      0.943      0.669
                person          3         10      0.551        0.8      0.848      0.387
                   dog          1          1       0.36          1      0.995      0.597
                 horse          1          2       0.36          1      0.995      0.696
              elephant          1          2      0.656      0.969      0.828      0.545
              umbrella          1          1      0.543          1      0.995      0.895
          potted plant          1          1      0.833          1      0.995      0.895

Lies die Ausgabe von oben nach unten:

  • Instanzen 17, Bilder 4. COCO8 ist ein Schnelltest. Vier Bilder reichen nicht für eine Einsatzentscheidung; betrachte alle Zahlen als Beispiele.
  • mAP50 0.943 gegenüber mAP50-95 0.669. Die meisten Objekte werden gefunden, aber viele Boxen sind ungenau. Eine große Abweichung bedeutet, dass die Lokalisierung und nicht die Erkennung die Schwachstelle ist.
  • person AP50-95 0.387. Die häufigste Klasse ist die schwächste. Das ist dein Engpass.
  • P 0.551, R 0.962. Diese Werte werden bei der einzelnen Konfidenz abgelesen, die den F1-Wert über alle Klassen hinweg maximiert – hier also bei einem niedrigen Schwellenwert – und nicht bei 0.25, mit dem du Vorhersagen triffst. Bezeichne sie nicht als „Precision des Modells“.

AP pro Klasse und der Schwellenwert für den Einsatz#

Derselbe Lauf enthält die AP pro Klasse sowie Precision und Recall für jeden Konfidenzschwellenwert. So kannst du einen Schwellenwert anhand eines Zielwerts statt nach Gefühl auswählen:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml", plots=False, verbose=False)
box = metrics.box

# Per-class AP from the same run: the average hides the weakest class
for i, c in enumerate(box.ap_class_index):
    print(f"{model.names[int(c)]:13} AP50={box.ap50[i]:.3f}  AP50-95={box.ap[i]:.3f}")

# Precision and recall at every confidence threshold for one class
row = list(box.ap_class_index).index(0)  # class 0 = person
for conf in (0.1, 0.25, 0.5, 0.75):
    j = int(conf * (len(box.px) - 1))
    print(f"person @ conf {conf:.2f}: precision {box.p_curve[row, j]:.2f}, recall {box.r_curve[row, j]:.2f}")
                   all          4         17      0.551      0.962      0.943      0.669
person        AP50=0.848  AP50-95=0.387
dog           AP50=0.995  AP50-95=0.597
horse         AP50=0.995  AP50-95=0.696
elephant      AP50=0.828  AP50-95=0.545
umbrella      AP50=0.995  AP50-95=0.895
potted plant  AP50=0.995  AP50-95=0.895
person @ conf 0.10: precision 0.63, recall 0.80
person @ conf 0.25: precision 1.00, recall 0.54
person @ conf 0.50: precision 1.00, recall 0.40
person @ conf 0.75: precision 1.00, recall 0.14

Der Schwellenwert ist jetzt eine Entscheidungsregel und keine Gefühlssache:

Zielwert aus deiner EntscheidungsregelAuswahlBei diesem Lauf
Höchstens 5 % der Alarme dürfen falsch sein (Precision ≥ 0.95)Der niedrigste Schwellenwert, der das erfüllt, damit möglichst viel Recall erhalten bleibt0.25: Precision 1.00, Recall 0.54
Höchstens 1 von 5 Personen übersehen (Recall ≥ 0.80)Der höchste Schwellenwert, der das erfüllt, damit möglichst viel Precision erhalten bleibt0.10: Precision 0.63, Recall 0.80

Beides ist hier nicht gut genug: Hohe Precision kostet die Hälfte der Personen, hohe Recall ein Drittel der Alarme. Das spricht für „weiterentwickeln“ und nicht für ein Problem mit dem Schwellenwert. Die Validierung speichert außerdem BoxPR_curve.png, BoxP_curve.png, BoxR_curve.png, BoxF1_curve.png und confusion_matrix.png im Laufordner, sodass du denselben Zielkonflikt in den Diagrammen ablesen kannst; der Leitfaden zu Leistungsmetriken erläutert die einzelnen Diagramme.

Was als Nächstes zu beheben ist#

Die Konfusionsmatrix zeigt dir, womit eine schwache Klasse verwechselt wird. Wenn die AP von forklift niedrig ist und Gabelstapler als pallet_jack vorhergesagt werden, liegt eine Klassenverwechslung und kein Lokalisierungsproblem vor: Füge Beispiele hinzu, die den visuellen Unterschied zeigen, oder fasse die Klassen zusammen, falls kein nachgelagerter Code sie getrennt benötigt. Der Leitfaden zu Erkenntnissen aus der Modellbewertung führt durch den Arbeitsablauf.

Drei Möglichkeiten zur Verbesserung von mAP: Datenqualität, Modelloptimierung und Annotationsprozess

Die meisten Verbesserungsmöglichkeiten liegen im ersten und dritten Feld: bessere Daten und bessere Labels für die Engpassklasse. Ändere das Modell oder die Trainingseinstellungen erst, nachdem die Datenprüfungen aus den vorherigen drei Lektionen bestanden sind.

Nachweis anhand eines eingefrorenen TestsatzesMaßnahme
Jede geschäftskritische Klasse erfüllt ihr Precision- und Recall-ZielEinsetzen und überwachen
Eine Klasse oder Bedingung verfehlt ihr ZielWeiterentwickeln: gezielt Daten und Labels für diese Lücke ergänzen
Alle Klassen verfehlen ihre Ziele deutlich oder die Klassen überschneiden sich visuellAufgabenbeschreibung, Klassen oder Kameraaufstellung überdenken

Stolperfallen#

Die AP pro Klasse ist aussagekräftiger als der Durchschnitt

Ein mAP von 0,83 kann eine Klasse mit einem Wert von 0,40 verbergen. Wenn diese Klasse den geschäftlichen Nutzen ausmacht, hast du kein Modell mit 0,83 – sondern ein fehlerhaftes Modell mit einem schmeichelhaften Durchschnittswert.

Nur mAP50 angeben

Symptom: Ein Modell, das „0,94 erreicht“, zeichnet Boxen, die für Messungen oder Zuschnitte zu ungenau sind. Lösung: Gib mAP50-95 an und interpretiere den Abstand zu mAP50 als Hinweis auf die Lokalisierungsgenauigkeit.

Einem winzigen oder undichten Validierungssatz vertrauen

Symptom: Perfekt wirkende Werte auf Grundlage einiger Dutzend Bilder oder nahezu identischer Bilder aus dem Trainingssatz. Lösung: Erweitere die Validierung auf einige Hundert Instanzen pro wichtiger Klasse und führe vor der Auswertung von Kennzahlen die Prüfung auf nahezu identische Bilder aus der vorherigen Lektion durch.

Ausprobieren

Führe beide Skripte oben aus. Verfasse eine ein Absatz lange Auswertung für einen mit diesem Modell erstellten Personenzähler: Nenne die Engpassklasse und ihre AP50-95, erläutere, was die Abweichung zwischen mAP50 und mAP50-95 aussagt, gib den Schwellenwert an, den du bei Precision ≥ 0.95 einsetzen würdest, und nenne den dafür in Kauf genommenen Recall sowie deine Entscheidung: einsetzen, weiterentwickeln oder überdenken.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • In deiner Auswertung nennst du die Engpassklasse samt ihrer AP50-95.

  • Deine Auswertung nennt einen Schwellenwert für den produktiven Einsatz, das Ziel, für das er ermittelt wurde, und den Recall oder die Präzision, die du dafür einbüßt.

  • Deine Auswertung endet mit einer Entscheidung: produktiv einsetzen, weiterentwickeln oder neu überdenken – gestützt auf die Zahlen.

Lösung anzeigen

Auswertung: Personenzähler auf yolo26n.pt, COCO8-Validierung

Der Engpass ist person mit AP50-95 0.387 gegenüber einem Gesamtwert von 0.669. Diese Klasse hat auch die meisten Instanzen (10 von 17) und ist damit sowohl die schwächste als auch die wichtigste für einen Personenzähler. Der AP50-Wert liegt bei 0.848: Das Modell findet also die meisten Personen, zeichnet aber ungenaue Begrenzungsrahmen. Für das Zählen ist das weniger wichtig als für Aufgaben, bei denen Position oder Größe gemessen werden.

Für eine Präzision von ≥ 0.95 ist conf 0.25 der niedrigste qualifizierende Schwellenwert. Dabei beträgt die Präzision 1.00, aber der Recall liegt nur bei 0.54: Der Zähler würde fast die Hälfte der Personen übersehen. Für einen Recall von ≥ 0.80 bräuchten wir conf 0.10; dann wäre ein Drittel der Zählungen falsch.

Entscheidung: weiterentwickeln. Sammle und beschrifte Personenaufnahmen von der Einsatzkamera – insbesondere kleine, verdeckte und am Bildrand befindliche Personen – und validiere das Modell anschließend erneut mit einem eingefrorenen Testsatz aus einigen Hundert Personen. Vier Validierungsbilder reichen nicht aus, um eine Entscheidung über den produktiven Einsatz zu treffen.

Wie es weitergeht

Letzte Lektion: Führe YOLO26 mit deinen eigenen Bildern aus und prüfe die Ausgabe anhand deiner Aufgabenspezifikation.