Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
Grundlagen der Computer Vision·Eine Aufgabe auswählen·Lektion 3/10
LektionAnfänger

Objektdetektion verstehen

Lies die Ausgabe eines Detektors aus – Klasse, Box, Konfidenz – und lege anhand der Kosten der einzelnen Fehler die Schwellenwerte für Konfidenz und IoU fest.

Die meisten produktiven Bildverarbeitungssysteme basieren auf Detektion und ergänzender Logik: Zähler, Tracker, Zonenwarnungen und Unschärfe zur Wahrung der Privatsphäre. Wenn sich eines dieser Systeme unerwartet verhält, liegt die Ursache meist nicht am Modell, sondern an einem Schwellenwert, den niemand bewusst festgelegt hat. Wenn du genau weißt, was ein Detektor zurückgibt und welche beiden Stellschrauben diese Liste beeinflussen, kannst du fast alles debuggen, was darauf aufbaut.

Lernergebnis

Lies YOLO26-Detektionen im Code aus und wähle conf und iou anhand der Kosten eines übersehenen Objekts im Vergleich zu einem Fehlalarm.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Jede Detektion besteht aus einer Klasse, einer Box und einem Konfidenzwert.

  2. conf verwirft schwache Boxen (Standardwert 0.25); iou legt fest, wann NMS zwei Boxen als Duplikate behandelt (Standardwert 0.7).

  3. Sind übersehene Objekte kostspielig? Verringere conf. Sind Fehlalarme sichtbar? Erhöhe den Wert.

  4. Verschwinden benachbarte Objekte? Erhöhe iou.

  5. Der Konfidenzwert ordnet Boxen nach ihrer Rangfolge; er ist keine kalibrierte Wahrscheinlichkeit.

Praxisnah

Was ein Detektor zurückgibt#

Detektionen von Ultralytics YOLO an einer Uferpromenade: Personen, zwei Radfahrer, ein Hund und zwei Autos, jeweils mit Klasse und Konfidenzwert beschriftet

Jede Beschriftung in diesem Bild entspricht einer Ausgabezeile: einem Klassennamen, einem Konfidenzwert und der Box um das Objekt. Ein Detektionsmodell gibt genau diese Liste zurück:

  • Klasse – ein ganzzahliger Index, der über result.names einem Namen zugeordnet wird (0 ist person, 5 ist bus).
  • Box – vier Zahlen, die das Objekt lokalisieren; xyxy gibt die Koordinaten der linken oberen und rechten unteren Ecke in Pixeln an.
  • Konfidenz – ein Wert zwischen 0 und 1, mit dem Detektionen sortiert und gefiltert werden.

Zählen, Warnmeldungen, Tracking und Unschärfe sind Funktionen, die du auf Basis dieser Ausgabezeilen programmierst.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]

for box in result.boxes:
    name = result.names[int(box.cls)]
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{name:8} conf={float(box.conf):.2f} box=({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
bus      conf=0.88 box=(0, 230, 803, 751)
person   conf=0.87 box=(49, 398, 240, 902)
person   conf=0.86 box=(223, 405, 345, 861)
person   conf=0.85 box=(670, 395, 810, 880)
person   conf=0.65 box=(0, 553, 60, 871)

Zeile für Zeile: Die Busbox beginnt bei x=0, weil der Bus am linken Bildrand angeschnitten ist; drei Personen erhalten Werte zwischen 0.85 und 0.87; die vierte Person, die am linken Rand abgeschnitten ist, erreicht nur 0.65 – das Modell sieht nur den halben Körper. Eine geringe Konfidenz bei angeschnittenen Objekten ist normal; hier macht sich ein Schwellenwert oft zuerst bemerkbar.

Jede Box liegt in vier Formaten vor; verwende das Format, das dein nachgelagerter Code erwartet:

AttributFormatTypische Verwendung
boxes.xyxyEckpixel (x1, y1, x2, y2)Zuschneiden, Zeichnen, Überlappungsregeln
boxes.xywhMittelpunkt in Pixeln sowie Breite und HöheGrößenfilter, Bewegung
boxes.xyxynAuf 0–1 normierte EckkoordinatenRegeln, die bei geänderter Auflösung weiterhin gelten
boxes.xywhnAuf 0–1 normierter Mittelpunkt und normierte GrößeYOLO-Labeldateien

Von Kandidaten zur endgültigen Liste#

Intern bewertet das Modell viele Boxkandidaten pro Objekt. Zwei Filter wandeln sie in die angezeigte Liste um:

Konfidenzfilter. conf verwirft Boxen unterhalb eines Schwellenwerts; der Standardwert für Vorhersagen ist 0.25. Im Busbild ändert sich die Anzahl schnell:

confBoxen auf bus.jpg
0.107
0.255
0.505
0.754

Duplikatfilter. Nichtmaximale Unterdrückung (NMS) behält die Box mit der höchsten Konfidenz und verwirft andere Boxen derselben Klasse, die sie um mehr als iou überlappen (Standardwert 0.7). Die Überlappung wird als Schnittmenge über Vereinigung gemessen: die gemeinsame Fläche geteilt durch die Gesamtfläche.

Schnittmenge über Vereinigung bei einem Vogel: überlappende vorhergesagte Boxen und Referenzboxen sowie passende Masken; die IoU entspricht ihrer Überlappungsfläche geteilt durch ihre Vereinigungsfläche

iouBoxen auf bus.jpgAuswirkung
0.35Strikt: Überlappende Boxen werden zusammengeführt
0.75Standard
0.958Tolerant: Beinahe-Duplikate bleiben erhalten

Wähle die Schwellenwerte anhand der Fehlerkosten#

Wenn …Dann …
Ein übersehenes Objekt ist teuer (Sicherheitswarnungen, Defekte)Senke conf und nimm einige Fehlalarme in Kauf
Ein Fehlalarm ist für Nutzer sichtbar (Suche, Verschlagwortung)Erhöhe conf
Du meldest die AnzahlTeste verschiedene Werte für conf mit Validierungsbildern und behalte den Wert mit dem kleinsten Zählfehler bei
Echte Nachbarn verschwinden in MenschenmengenErhöhe iou, z. B. von 0.7 auf 0.8
Dasselbe Objekt erhält zwei BoxenSenke iou
Die Klassen unterscheiden sich im SchwierigkeitsgradVerwende beim Vorhersagen den niedrigsten benötigten Wert für conf und filtere anschließend die einzelnen Klassen im Code

Die Überwachung der Sicherheit in Lagerhallen ist der klassische Anwendungsfall für einen niedrigen Schwellenwert; im Vorhersagemodus findest du alle Argumente für die Inferenz.

Stolperfallen#

Konfidenz als Wahrscheinlichkeit verstehen

Symptom: „Das Modell ist zu 88 % sicher, dass dies ein Bus ist“ und Schwellenwerte, die nach Gefühl gewählt werden. Lösung: Betrachte die Konfidenz als Rangwert. Bei YOLO26 deckt ein Wert sowohl „da ist ein Objekt“ als auch „es gehört zu dieser Klasse“ ab und ist nicht kalibriert – wähle den Schwellenwert anhand von Validierungsdaten, nicht anhand der Bedeutung des Zahlenwerts.

Fehlt einer von zwei Nachbarn? Prüfe NMS

Wenn zwei Personen Schulter an Schulter stehen, überlappen sich ihre Boxen stark, und NMS kann eine tatsächliche Person als „Duplikat“ entfernen. Erhöhe iou, dann erscheint die zweite Box wieder. YOLO26 enthält außerdem einen End-to-End-Kopf, der ganz ohne NMS auskommt. Übergib nms=False, um ihn zu verwenden.

Anhand eines einzelnen Bildes abstimmen

Symptom: Ein Schwellenwert, der auf dem Demobild perfekt aussieht, versagt bei der echten Kamera. Lösung: Teste verschiedene Schwellenwerte auf einem Validierungssatz von der Einsatzkamera. Ein einzelnes Bild zeigt dir nur, was die Regler bewirken.

Vier Arten, falschzuliegen#

FehlerWas ist fehlerhaft?Typische Lösung
Richtige Klasse, ungenaue BoxLokalisierungEngere, einheitliche Regeln für Boxen; höherer Wert für imgsz bei kleinen Objekten
Gute Box, falsche KlasseKlassifizierungMehr Beispiele für das verwechselte Klassenpaar oder die Klassen zusammenführen
Überhaupt keine BoxTrefferquoteMehr Beispiele für diese Bedingungen: Beleuchtung, Größe, Verdeckung
Box auf dem HintergrundPräzisionBilder mit schwierigen Negativbeispielen, die das Modell in die Irre geführt haben

Zwei Listen machen die Fehlerdiagnose einfach: echte positive Treffer mit niedriger Konfidenz (das Modell ist sich bei echten Objekten unsicher) und falsche positive Treffer mit hoher Konfidenz (das Modell ist sich bei der falschen Sache sicher). Sie weisen auf unterschiedliche Lösungen hin.

Ausprobieren

Führe die Lösung mit conf=0.05 aus und öffne das gespeicherte Bild. Markiere jede Box unter 0.5 als richtig oder falsch positiv und notiere, warum jeder falsch positive Treffer zustande kam. Notiere anschließend den Wert für conf, den du für einen Fußgängerzähler mit dieser Kamera einsetzen würdest, und begründe ihn in einem Satz.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • Du hast eine Liste aller Boxen unter 0.5 in bus.jpg, die jeweils als richtig oder falsch positiv gekennzeichnet und mit einer Begründung versehen sind.

  • Du hast einen Wert für conf für einen Fußgängerzähler notiert und festgehalten, vor welchem Fehler dieser Wert schützt.

  • Du kannst anhand der IoU-Tabelle erklären, warum eine Erhöhung von iou einen unterdrückten Nachbarn wieder sichtbar macht.

Lösung anzeigen
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", conf=0.05, save=True, verbose=False)[0]

for box in sorted(result.boxes, key=lambda b: -float(b.conf)):
    name, conf = result.names[int(box.cls)], float(box.conf)
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{conf:.2f} {name:10} ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
0.88 bus        (0, 230, 803, 751)
0.87 person     (49, 398, 240, 902)
0.86 person     (223, 405, 345, 861)
0.85 person     (670, 395, 810, 880)
0.65 person     (0, 553, 60, 871)
0.18 person     (0, 600, 40, 871)
0.12 stop sign  (0, 252, 35, 326)
0.08 handbag    (43, 732, 78, 812)
0.07 skateboard (669, 822, 808, 881)
0.06 handbag    (225, 634, 291, 705)

Jede Box unter 0.5 ist ein falsch positiver Treffer. Der Wert 0.18 für person dupliziert die Person mit dem Wert 0.65, die am linken Bildrand abgeschnitten ist. Der Wert 0.12 für stop sign gehört zu einem echten Verkehrsschild mit der falschen Klasse. Die Handtaschen und das Skateboard liegen auf Händen und Schuhen. Alle echten Objekte erzielen mehr als 0.6. Daher behält conf=0.5 für einen Fußgängerzähler alle vier Personen bei und verwirft alle Fehlalarme – so wird eine doppelte Zählung vermieden. Überprüfe den Wert vor dem Einsatz anhand eines Validierungsdatensatzes der echten Kamera: Die abgeschnittene Person mit dem Wert 0.65 zeigt, wie nah echte Objekte am Schwellenwert liegen können.

Wie es weitergeht

Als Nächstes: Wann ein Rechteck nicht ausreicht und du die genaue Form des Objekts brauchst.