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.
Praxisnah
Datei schreiben#

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üssel | Erforderlich | Bedeutung |
|---|---|---|
path | Nein | Stammverzeichnis des Datensatzes; train, val und test beziehen sich relativ darauf. Falls nicht angegeben, wird der Ordner der YAML-Datei verwendet. |
train, val | Ja | Ein Bildordner, eine .txt-Datei mit einer Liste von Bildpfaden oder eine Liste aus beiden Typen |
test | Nein | Zurückgehaltene Testbilder, die nur mit split=test ausgewertet werden |
names | Ja | Klassenindex → Name; die Länge legt die Anzahl der Klassen fest |
download | Nein | URL 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.yamlval: 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.0002Lies die Ausgabe der Reihe nach:
Scanning my_dataset/labels/val: der Ordner, den Ultralytics tatsächlich aufgelöst hat. Prüfe, ob es der gewünschte Ordner ist.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.399Instanzen: Die Beschriftungsdateien enthalten 399 Pillen.- 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#
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.
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.
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.
Lösung anzeigen
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: 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.0002Aus 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.