Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
Grundlagen der Computer Vision·Datensätze und Labels·Lektion 6/10
LektionAnfänger

Datensätze, die die Realität abbilden

Prüfe einen echten Datensatz auf Abdeckungslücken, bevor du weitere Bilder labelst, und leite daraus mit schwierigen Negativbeispielen einen Erfassungsplan ab.

Die meisten enttäuschenden Bildverarbeitungsmodelle sind keine schlechten Modelle – es sind gute Modelle, die mit einem Datensatz trainiert wurden, der nicht dem Einsatzort entspricht. Der COCO-Detektor aus der vorherigen Lektion fand auf einer Drohnenaufnahme keine Boote, weil Boote in COCO von der Seite fotografiert sind. Ein fünfminütiges Audit deckt solche Lücken auf, bevor du Geld für Labels ausgibst.

Lernergebnis

Führe eine Abdeckungsprüfung für einen YOLO-Datensatz durch und leite aus den Kennzahlen einen priorisierten Erfassungsplan ab.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Nimm die Bilder der tatsächlich eingesetzten Kameras auf, bevor du irgendetwas labelst.

  2. Berücksichtige gezielt Beleuchtung, Wetter, Verdeckung und Kameraperspektive.

  3. Kennzahlen der Prüfung: Bilder pro Aufteilung, Instanzen pro Klasse, Hintergrundbilder, Boxgrößen, Auflösungen und Helligkeit.

  4. Füge 0–10 % Hintergrundbilder hinzu, ausgewählt als schwierige Negativbeispiele aus deiner Umgebung.

  5. Leere Felder im Raster aus Klassen und Bedingungen zeigen dir, was du noch erfassen musst.

Praxisnah

Modelle lernen den Datensatz, nicht die Welt#

Ein Modell interpoliert zwischen den Beispielen, die es gesehen hat. Trainierst du es mit sonnigen Straßen am Tag und setzt es nachts in einer nebligen Garage ein, versagt es – nicht, weil Autos anders aussehen, sondern weil das Modell noch nie ein Auto unter diesen Bedingungen gesehen hat. Diese Abweichung heißt Domänenverschiebung. Mit der Validierung lässt sie sich nicht aufdecken, wenn die Validierungsbilder aus derselben verzerrten Sammlung stammen:

Die Lösung ist strukturell, nicht algorithmisch: Erfasse gezielt Bilder aus der späteren Einsatzumgebung, bevor du sie labelst. Der Leitfaden zur Datenerfassung und Annotation beschreibt die praktische Umsetzung.

Einen echten Datensatz prüfen#

Datensatzseite für medical-pills auf der Ultralytics Platform: ein Raster mit Bildern von Blisterpackungen und blauen Pillen-Boxen, die Klassen- und Bildanzahlen sowie die Leiste für die Aufteilungen in Trainings-, Validierungs- und Testdaten

Der oben gezeigte Datensatz medical-pills – Nahaufnahmen von Blisterpackungen, bei denen jede Pille mit einer Box markiert ist – eignet sich gut für eine Prüfung. Die Ultralytics Platform zeigt die wichtigsten Kennzahlen auf der Datensatzseite an. Das folgende Skript berechnet die Zahlen, die Aufschluss über die Abdeckung geben, anhand der mit ultralytics ausgelieferten Kopie:

from collections import Counter
from pathlib import Path

from PIL import Image, ImageStat
from ultralytics.data.utils import check_det_dataset

data = check_det_dataset("medical-pills.yaml")  # downloads the dataset on first use

for split in ("train", "val"):
    images = sorted(Path(data[split]).glob("*.jpg"))
    labels = [Path(str(p).replace("/images/", "/labels/")).with_suffix(".txt") for p in images]
    rows = [line.split() for f in labels if f.exists() for line in f.read_text().splitlines()]
    classes = Counter(data["names"][int(r[0])] for r in rows)
    backgrounds = sum(not f.exists() or not f.read_text().strip() for f in labels)
    areas = sorted(float(r[3]) * float(r[4]) for r in rows)  # box area as a share of the image
    sizes = Counter(Image.open(p).size for p in images)
    brightness = [ImageStat.Stat(Image.open(p).convert("L")).mean[0] for p in images]
    print(f"{split}: {len(images)} images, {backgrounds} backgrounds, {dict(classes)}, sizes {dict(sizes)}")
    print(f"  boxes: median {areas[len(areas) // 2]:.1%} of the image, {sum(a < 0.01 for a in areas)} of {len(areas)} under 1%")
    print(f"  brightness: {min(brightness):.0f} to {max(brightness):.0f} (0 = black, 255 = white)")
train: 92 images, 0 backgrounds, {'pill': 1623}, sizes {(1920, 1080): 92}
  boxes: median 1.4% of the image, 320 of 1623 under 1%
  brightness: 171 to 198 (0 = black, 255 = white)
val: 23 images, 0 backgrounds, {'pill': 399}, sizes {(1920, 1080): 23}
  boxes: median 1.4% of the image, 79 of 399 under 1%
  brightness: 171 to 198 (0 = black, 255 = white)

Lies die Ergebnisse als Abdeckungsbericht, mit einem Befund pro Zeile:

BefundBedeutungMaßnahme
Eine Auflösung, 1920×1080Eine Kamera, ein AufbauErfasse Bilder von jedem Kameramodell, das du einsetzen wirst
Helligkeit nur zwischen 171 und 198Helles, gleichmäßiges Studiolicht, keine dunklen AufnahmenErfasse dunkle, von hinten beleuchtete und gemischt beleuchtete Aufnahmen, bevor du das Modell an einer Apothekentheke einsetzt
0 HintergrundbilderDas Modell sieht nie eine Szene ohne PillenFüge leere Blisterpackungen, andere Tabletten und leere Theken als schwierige Negativbeispiele hinzu
Die mittlere Box ist 1,4 % der Bildfläche groß; jede fünfte Box ist kleiner als 1 %Kleine ObjekteWähle imgsz groß genug und beziehe gezielt Aufnahmen aus größerer Entfernung ein
Eine Klasse, pillKeine PillensortenFür das Zählen ausreichend; füge nur dann Klassen hinzu, wenn eine Entscheidung sie erfordert

Nichts davon schlägt sich im Validierungsergebnis nieder, weil die Validierungsdaten all diese Merkmale teilen.

Die vier Dimensionen der Abdeckung#

DimensionWas erfasst werden sollteTypischer Fehler bei fehlender Abdeckung
BeleuchtungMorgendämmerung, Mittag, Abenddämmerung, Nacht, Blendung, Gegenlicht, flackernde LeuchtstofflampenDie Trefferquote bricht bei Schichtwechseln oder direkter Sonneneinstrahlung ein
Wetter und AtmosphäreRegen, Nebel, Schnee, Staub, Kondensation auf der LinseFehlalarme bei Wassertropfen, Erkennungsfehler bei Dunst
Verdeckung und BildunordnungTeilweise verdeckte Ziele, überfüllte Szenen, Objekte, die am Bildrand abgeschnitten sindObjekte werden übersehen, sobald sie nicht vollständig sichtbar sind
Kamera und PerspektiveObjektiv, Montagehöhe und -winkel, Auflösung, Komprimierung, BewegungsunschärfeFunktioniert mit der Pilotkamera, versagt am nächsten Standort

Die Perspektive ist die Dimension, die im Beispiel mit dem Yachthafen fehlte: Dieselbe Klasse aus einem neuen Blickwinkel, und die Trefferquote sank auf null.

Schwierige Negativbeispiele und Hintergrundbilder#

Ein Detektor muss auch lernen, was nicht das Ziel ist. Schwierige Negativbeispiele sehen dem Ziel auf den ersten Blick ähnlich: bei einem Gabelstaplerdetektor etwa ein Hubwagen, eine Scherenhebebühne, die Spiegelung eines Gabelstaplers auf einem polierten Boden oder ein Sicherheitsplakat mit dem Bild eines Gabelstaplers.

Im YOLO-Format ist ein Hintergrundbild einfach ein Bild ohne Labeldatei – es gibt nichts einzuzeichnen. Die Trainingstipps von Ultralytics empfehlen etwa 0–10 % Hintergrundbilder, um Fehlalarme zu verringern; COCO selbst enthält ungefähr 1 %. Fülle diesen Anteil mit schwierigen Negativbeispielen aus deiner eigenen Umgebung statt mit beliebigen leeren Bildern. Mit Datenerweiterung lassen sich Helligkeit und Winkel variieren, aber sie kann keinen Hubwagen erzeugen, den das Modell noch nie gesehen hat.

Stolperfallen#

Kennzeichnen, bevor die Stichprobe gezogen wird

Symptom: 10.000 gekennzeichnete Bilder, alle bei Tageslicht und alle von der Pilotkamera. Lösung: Nimm ein paar Wochen lang Bilder von den Einsatzkameras unter dem gesamten Spektrum an Bedingungen auf, prüfe die Abdeckung und erst dann bezahlst du für die Kennzeichnung. Synthetische Daten können eine bekannte Lücke schließen, ersetzen aber keine echten Aufnahmen.

Nicht darauf vertrauen, dass die Validierung Lücken in der Abdeckung aufdeckt

Symptom: Hoher mAP auf der Validierung, schlechte Ergebnisse am ersten neuen Standort. Lösung: Bedenke, dass die Validierung dieselben blinden Flecken wie der Datensatz hat. Nimm zehn zufällige Trainingsbilder und zehn Produktionsbilder und bitte ein Teammitglied, sie auseinanderzuhalten. Gelingt das, liegt eine Domänenverschiebung vor.

Für einen Stichprobenplan mit Zielzahlen pro Bedingung geht es weiter mit Hochwertige, repräsentative Daten sammeln in Leistungsstarke YOLO-Datensätze erstellen.

Ausprobieren

Führe das Audit-Skript für deinen eigenen Datensatz (ändere den YAML-Pfad) oder für medical-pills aus. Übertrage die Ausgabe in eine Matrix aus Klassen und Bedingungen: Die Zeilen stehen für Klassen, die Spalten für die Bedingungen, die beim Einsatz relevant sind (Beleuchtung, Kamera, Verdeckung, Wetter); jede Zelle enthält Zählwerte oder Schätzungen. Liste die leeren Zellen auf, sortiert danach, wie häufig die jeweilige Bedingung im Produktivbetrieb auftritt, und nenne zwei Kategorien schwieriger Negativbeispiele, die du sammeln wirst.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • Dir liegen die Audit-Ergebnisse für einen echten Datensatz vor: Bilder, Hintergründe, Klassen, Boxgrößen, Auflösungen und Helligkeit.

  • Du hast eine Matrix aus Klassen und Bedingungen, in der die leeren Zellen danach sortiert sind, wie häufig sie im Produktivbetrieb auftreten.

  • Dein Plan führt mindestens zwei Kategorien schwieriger Negativbeispiele aus der Einsatzumgebung auf.

Lösung anzeigen

Für medical-pills, das unter gemischter Ladenbeleuchtung auf einer Apothekentheke eingesetzt wird, füllst du die Matrix anhand des Audits (Helligkeit 171–198, eine Quelle mit 1920×1080, keine Hintergründe) und eines kurzen Durchblätterns der Bilder aus. Dabei sind dieselben Packungen auf derselben hellen Fläche zu sehen, ohne Hände:

KlasseHelles StudiolichtGedämpftes oder warmes LadenlichtGegenlicht / BlendungTeilweise von einer Hand verdecktHandykamera
pill2,0220000
Hintergrund000—0

Nach Priorität geordneter Sammelplan:

  1. Gedämpftes oder warmes Ladenlicht — die übliche Beleuchtung an der Theke, derzeit mit null Bildern.
  2. Teilweise von einer Hand verdeckt — das passiert bei fast jeder echten Interaktion.
  3. Handykamera — ein zweiter Sensor und eine andere Auflösung.
  4. Gegenlicht / Blendung — Folienpackungen spiegeln Fenster und Deckenleuchten.

Schwierige Negativbeispiele: leere Blisterpackungen (dieselbe Folie, keine Tabletten) und andere runde Gegenstände auf der Theke — Münzen, Knöpfe, Süßigkeiten. Füge sie als Hintergrundbilder hinzu; sie sollten etwa 5–10 % des Datensatzes ausmachen.

Wie es weitergeht

Als Nächstes: Diese Daten so beschriften, dass alle Annotierenden dasselbe erfassen – und Dateien finden, bei denen das nicht der Fall ist.