Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
LektionAnfänger

Dataset-YAML-Datei schreiben

Schreibe die data.yaml-Datei, die Ultralytics auf deine Ordner verweist und deine Klassen benennt. Sorge dafür, dass die Pfade von überall aus aufgelöst werden können, und teste die Datei kurz mit yolo val.

Die Dataset-YAML-Datei bildet die Vereinbarung zwischen deinen Ordnern und jedem Ultralytics-Befehl. Ein falscher Pfad verhindert den gesamten Ablauf; eine falsche Klassenreihenfolge lässt alles laufen, aber jede Vorhersage erhält den falschen Namen – ohne jede Warnung.

In dieser Lektion schreibst du data.yaml für den Pillendatensatz, erfährst genau, wie Ultralytics die Pfade auflöst, damit die Datei auch auf dem Rechner eines Teammitglieds funktioniert, und bestätigst das mit einem einzeiligen Validierungslauf, der dir zugleich den Ausgangswert liefert, den dein Training übertreffen muss.

Lernergebnis

Du kannst eine data.yaml schreiben, deren Pfade sich aus jedem Arbeitsverzeichnis auflösen lassen, die Klassenindizes konsistent halten und anhand der Prüfzeile yolo val bestätigen, dass der Datensatz eingebunden ist.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Setze path auf das Stammverzeichnis des Datensatzes und train/val auf die relativ dazu angegebenen Bildordner.

  2. Führe names als Zuordnung von Index zu Name auf und stimme die Reihenfolge exakt auf die Beschriftungsdateien ab.

  3. Führe yolo val model=yolo26n.pt data=my_dataset/data.yaml aus und lies die Prüfzeile.

  4. Verwende für path vor dem Teilen einen absoluten Pfad und füge später nur neue Klassen hinzu.

Praxisnah

Datei schreiben#

Profilseite der Ultralytics Platform mit einer Liste der Datensätze eines Nutzers und einer Schaltfläche „New Dataset“

Datensätze auf der Ultralytics Platform enthalten ihre eigenen Klassen und Splits; beim Training wird mit einer URI wie data=ul://username/datasets/name darauf verwiesen. Auf deinem eigenen Rechner übernimmt die YAML-Datei diese Aufgabe. Speichere den folgenden Inhalt als my_dataset/data.yaml:

path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test  # optional held-out split

names:
  0: pill
SchlüsselErforderlichBedeutung
pathNeinStammverzeichnis des Datensatzes; train, val und test beziehen sich relativ darauf. Falls nicht angegeben, wird der Ordner der YAML-Datei verwendet.
train, valJaEin Bildordner, eine .txt-Datei mit einer Liste von Bildpfaden oder eine Liste aus beiden Typen
testNeinZurückgehaltene Testbilder, die nur mit split=test ausgewertet werden
namesJaKlassenindex → Name; die Länge legt die Anzahl der Klassen fest
downloadNeinURL oder Skript, mit dem der Datensatz abgerufen wird, wenn die Bilder fehlen

train und val verweisen auf Bildordner; die Beschriftungen werden gefunden, indem images durch labels ersetzt wird. Die coco8-YAML-Datei ist eine minimale funktionierende Vorlage, die VOC-YAML-Datei zeigt eine umfangreichere.

Beispiel: Funktion kurz testen#

Die Validierung mit dem vortrainierten Modell ist die schnellste durchgängige Prüfung. Dabei werden alle Bilder und Beschriftungen eingelesen, Probleme gemeldet und Metriken berechnet:

yolo val model=yolo26n.pt data=my_dataset/data.yaml
val: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399     0.0256    0.00251      0.001     0.0002

Lies die Ausgabe der Reihe nach:

  1. Scanning my_dataset/labels/val: der Ordner, den Ultralytics tatsächlich aufgelöst hat. Prüfe, ob es der gewünschte Ordner ist.
  2. 23 images, 0 backgrounds, 0 corrupt: Jedes Validierungsbild hat eine gültige Beschriftungsdatei. Nicht beabsichtigte Hintergrundbilder oder eine fehlerhafte Anzahl führen zurück zur vorherigen Lektion.
  3. 399 Instanzen: Die Beschriftungsdateien enthalten 399 Pillen.
  4. mAP50-95 von 0.0002: Das ist korrekt und kein Fehler. COCO enthält keine Pillenklasse, daher kann das vortrainierte Modell sie nicht finden. Dieser Wert nahe null ist dein Ausgangswert. Wenn deine Klassen in COCO vorhanden sind, etwa Personen oder Autos, liefert derselbe Befehl stattdessen einen aussagekräftigen Ausgangswert.

Pfade überall auflösen lassen#

Die meisten Fehler mit der Meldung „Bilder nicht gefunden“ sind Pfadfehler. Ultralytics löst path folgendermaßen auf:

datasets_dir ist eine Ultralytics-Einstellung; yolo settings gibt sie aus, und der Leitfaden zu den Einstellungen zeigt, wie du sie änderst. Integrierte Datensätze greifen auf diesen Ersatzwert zurück: coco8.yaml legt path: coco8 und eine download:-URL fest, sodass data=coco8.yaml aus jedem Ordner funktioniert.

Entscheidungsregeln:

  • Nur du, und immer aus dem Projektordner? Ein relativer path-Pfad ist in Ordnung.
  • Teammitglieder, Server, CI oder Notebooks in anderen Ordnern? Verwende einen absoluten path.
  • Die Daten liegen woanders und sollen selbst abgerufen werden? Füge download: mit einer ZIP-URL hinzu.

Klassenindizes sind verbindlich#

Die Ganzzahl am Anfang jeder Labelzeile ist ein Index in names. Ultralytics prüft den Wertebereich — Label class 1 exceeds dataset class count 1 —, aber nicht die Bedeutung. Wenn dein Annotationstool 0: forklift, 1: person exportiert hat und in deiner YAML-Datei 0: person, 1: forklift steht, ist das Training erfolgreich, die Validierungs-mAP sieht gut aus und jede Vorhersage hat trotzdem den falschen Namen. Verwende eine einzige maßgebliche Quelle für die Klassenliste, die vom Annotationstool, Konvertierungsskript, der YAML-Datei und deinem Bereitstellungscode gemeinsam genutzt wird.

Diese Fehler vermeiden#

Relativer Pfad zum falschen Ordner

Symptom: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val' mit einem Hinweis auf das Downloadverzeichnis des Datensatzes. Ursache: Du hast den Befehl in einem anderen Ordner ausgeführt, sodass der relative Pfad path nicht existierte und Ultralytics stattdessen unter datasets_dir gesucht hat. Lösung: Führe den Befehl im Projektordner aus oder verwende einen absoluten Pfad für path.

Namen umsortieren ist destruktiv

Einträge in names zu vertauschen oder zu löschen, ohne die Labels anzupassen, ändert unbemerkt die Bedeutung jedes Labels. Das Modell wird trainiert und sagt die falschen Klassen vorher, ohne einen Fehler auszugeben. Füge neue Klassen mit dem nächsten freien Index am Ende hinzu und nummeriere vorhandene Klassen niemals um.

Listen werden zu einem einzigen Messwert zusammengefasst

val: [images/val_day, images/val_night] führt beide Ordner zu einem einzigen Validierungsdatensatz zusammen und gibt einen Wert aus. Um Tag und Nacht getrennt auszuwerten – oder einen kuratierten Regressionstest neben einer aktuellen Produktionsstichprobe –, behältst du für jeden Datensatz eine eigene YAML-Datei und validierst sie einzeln. Ein test-Split, den du mit split=test nur einmal auswertest, wird unter Datensatz richtig aufteilen behandelt.

Trainingseinstellungen wie Augmentierung und Caching sind Argumente für train, keine YAML-Schlüssel; sie sind alle in der Konfigurationsreferenz aufgeführt.

Ausprobieren

Schreibe my_dataset/data.yaml und führe yolo val model=yolo26n.pt data=my_dataset/data.yaml aus. Notiere die Anzahl der Bilder, Hintergründe, beschädigten Dateien und Instanzen sowie die mAP50-95 des Basismodells. Verschiebe dann cd in einen anderen Ordner, führe den Befehl mit dem Pfad aus der YAML-Datei erneut aus, lies die Fehlermeldung und korrigiere die YAML-Datei, damit der Befehl von überall funktioniert. Gib die korrigierte YAML-Datei und beide Scan-Zeilen ab.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • yolo val meldet für deine YAML-Datei 23 Bilder, 0 Hintergründe und 0 beschädigte Dateien.

  • Du hast die mAP50-95 des vortrainierten Basismodells für den Datensatz notiert.

  • Deine YAML-Datei funktioniert von jedem Arbeitsverzeichnis aus, weil path absolut ist.

Lösung anzeigen
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val

names:
  0: pill
val: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
                   all         23        399     0.0256    0.00251      0.001     0.0002

Aus einem anderen Ordner schlug die relative Variante mit Dataset ... images not found fehl, weil my_dataset dort nicht existierte und auch die Ausweichoption datasets_dir keine Kopie enthielt. Der absolute path macht diese Suche überflüssig. Die mAP50-95 des Basismodells liegt bei etwa 0: Das vortrainierte Modell kennt keine Pillenklasse.

Wie es weitergeht

Die Daten sind eingebunden und der Ausgangswert ist dokumentiert. Als Nächstes trainierst du YOLO26 damit.