Ultralytics YOLO27:

Überblick über Datensätze für semantische Segmentierung#

Semantische Segmentierung weist jedem Pixel eines Bildes eine Klassenbezeichnung zu. Anders als bei der Instanzsegmentierung trennt die semantische Segmentierung einzelne Objekte derselben Klasse nicht voneinander. Das Trainingsziel ist eine dichte Klassenkarte, in der jedes Pixel eine Klassen-ID speichert.

Dieser Leitfaden erläutert das von den semantischen Segmentierungsmodellen von Ultralytics YOLO verwendete Datensatzformat und führt die integrierten Datensatzkonfigurationen auf, die für Training und Validierung verfügbar sind.

Unterstützte Datensatzformate#

Es werden zwei Bezeichnungsformate unterstützt. Der Datensatz-Loader wählt PNG-Masken aus, wenn die Dataset-YAML einen Schlüssel masks_dir definiert oder wenn im Stammverzeichnis des Datensatzes bereits ein Ordner masks/ neben deinen Bildern vorhanden ist. Andernfalls verwendet er YOLO-Polygonbezeichnungen.

PNG-Maskenformat#

Datensätze für semantische Segmentierung verwenden pro Beispiel eine Bilddatei und eine Maskendatei. Die Maske ist ein einkanaliges Bild, normalerweise im PNG-Format, in dem jeder Pixelwert dem Klassenindex des entsprechenden Bildpixels entspricht.

  • Die Pixelwerte 0, 1, 2, ... stehen für Klassen-IDs aus der Zuordnung names des Datensatzes.
  • Der Pixelwert 255 wird als Ignorierbezeichnung behandelt und bei der Berechnung von Verlust und Metriken ausgeschlossen.
  • Maskendateien sollten denselben Dateinamen ohne Erweiterung wie die zugehörige Bilddatei verwenden, zum Beispiel frankfurt_000000_000294.png.
  • Masken werden standardmäßig als .png aufgelöst; falls diese Datei fehlt, werden auch andere unterstützte Bildformate akzeptiert. Verwende verlustfreie Formate wie .png oder .tiff, da verlustbehaftete Komprimierung (z. B. .jpg) die Pixelwerte der Klassen-IDs verfälscht.

Das Standardlayout legt Bilder und Masken in parallelen Ordnern ab. Der Wert masks_dir aus der Dataset-YAML ersetzt den Pfadbestandteil images, um die Masken zu finden.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

Beispielsweise wird ein Bild unter images/train/aachen_000000_000019.png mit einer Maske unter masks/train/aachen_000000_000019.png verknüpft, wenn masks_dir: masks.

YOLO-Polygonbezeichnungsformat#

Wenn dein Datensatz bereits über Ultralytics YOLO-Polygonbezeichnungen verfügt (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ...-Zeilen), kannst du direkt damit ein Modell für semantische Segmentierung trainieren – eine Konvertierung in PNG-Masken ist nicht erforderlich. Das zeilenbasierte Layout findest du unter Datensatzformat für Instanzsegmentierung.

Dieser Pfad wird automatisch ausgewählt, wenn die Dataset-YAML masks_dir nicht enthält und im Stammverzeichnis des Datensatzes kein Ordner masks/ neben deinen Bildern vorhanden ist. Entferne alle übrig gebliebenen Ordner masks/ oder benenne sie um, da der Loader sonst in den PNG-Maskenmodus wechselt und stattdessen dort nach Masken sucht. Verhalten:

  • Polygone werden beim Laden in eine semantische Maske pro Bild umgewandelt und nach Fläche sortiert, sodass kleinere Objekte größere in Überlappungsbereichen überschreiben.
  • Mehrklassenmodus (N > 1 in names): Nach deinen deklarierten Klassen wird eine zusätzliche Klasse background für Pixel angefügt, die von keinem Polygon abgedeckt werden. Das Modell wird mit N + 1 Ausgabekanälen erstellt, wobei der letzte Kanal den Hintergrund darstellt.
  • Einklassenmodus (N == 1 in names): Das Training erfolgt weiterhin mit einer Klasse. Die Maske ist binär, wobei deine deklarierte Klasse als 1 und nicht von Polygonen abgedeckte Pixel als 0 dargestellt werden. Für names wird keine zusätzliche Hintergrundklasse hinzugefügt.
  • Durch Auffüllen bei der Datenaugmentierung hinzugefügte Pixel (z. B. bei einem zufälligen Zuschnitt) verwenden weiterhin 255 als Ignorierbezeichnung.

Verwende diesen Pfad, wenn deine Daten bereits als Instanzpolygone beschriftet sind und du aus denselben Dateien ein Modell für semantische Segmentierung erstellen möchtest.

YAML-Format für Datensätze#

Datensätze für semantische Segmentierung werden mit YAML-Dateien konfiguriert. Die wichtigsten Felder sind:

SchlüsselBeschreibung
pathStammverzeichnis des Datensatzes.
trainPfad zu den Trainingsbildern relativ zu path oder ein absoluter Pfad.
valPfad zu den Validierungsbildern relativ zu path oder ein absoluter Pfad.
testOptionaler Pfad zu den Testbildern.
masks_dirVerzeichnisname für semantische Masken. Lasse diesen Schlüssel weg (wenn im Stammverzeichnis des Datensatzes kein Ordner masks/ vorhanden ist), um zum YOLO-Polygonbezeichnungsformat zu wechseln.
namesZuordnung von Klassen-IDs zu Klassennamen.
label_mappingOptionale Zuordnung von IDs des Quelldatensatzes zu Trainings-IDs oder ignore_label.
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

Verwende label_mapping, wenn die Masken-IDs der Quelle nicht bereits mit fortlaufenden Trainingsklassen-IDs übereinstimmen. Cityscapes und ADE20K enthalten Zuordnungen, die ursprüngliche Label-IDs in YOLO-Trainings-IDs für semantische Segmentierung umwandeln und nicht verwendete Labels ignorieren.

Verwendung#

Trainiere ein Modell für semantische Segmentierung mit YOLO26 über Python oder die CLI:

Beispiel
from ultralytics import YOLO

# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Unterstützte Datensätze#

Ultralytics stellt Dataset-YAML-Dateien für die semantische Segmentierung dieser Datensätze bereit. Eine vollständige Benchmarktabelle der vortrainierten Modelle findest du auf der Aufgabenseite zur semantischen Segmentierung.

  • Cityscapes: Ein Datensatz zur semantischen Segmentierung urbaner Straßenszenen mit 19 Trainingsklassen.
  • Cityscapes8: Eine aus 8 Bildern bestehende Cityscapes-Teilmenge für schnelle Tests und CI-Prüfungen.
  • ADE20K: Ein Datensatz zur Szeneninterpretation mit 150 semantischen Klassen.

Eigenen Datensatz hinzufügen#

Option A – PNG-Masken#

  1. Speichere deine Bilder in Unterordnern für die jeweiligen Aufteilungen, etwa images/train und images/val.
  2. Speichere eine einkanalige Maske pro Bild in den entsprechenden Maskenordnern, etwa masks/train und masks/val.
  3. Stelle sicher, dass die Pixelwerte der Masken Klassen-IDs sind. Verwende 255 für Pixel, die ignoriert werden sollen.
  4. Erstelle eine Dataset-YAML mit path, train, val, masks_dir und names.
  5. Füge label_mapping nur hinzu, wenn deine Masken-IDs in fortlaufende Trainings-IDs umgewandelt werden müssen.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

Option B – Polygonbezeichnungen#

  1. Ordne Bilder und .txt-Polygondateien genau wie bei der Instanzsegmentierung an.
  2. Erstelle eine Dataset-YAML mit path, train, val und nameslasse masks_dir weg.
  3. Stelle sicher, dass im Stammverzeichnis des Datensatzes kein Ordner masks/ neben deinen Bildern vorhanden ist. Schon seine Existenz schaltet den Loader in den PNG-Maskenmodus, selbst wenn masks_dir nicht in der YAML enthalten ist.
  4. Füge keinen Eintrag „Hintergrund“ zu names hinzu. Bei Mehrklassen-Datensätzen fügt der Loader automatisch einen hinzu; bei Einklassen-Datensätzen bleibt das Training bei einer Klasse – deine deklarierte Klasse wird in der Maske zu 1, und nicht abgedeckte Pixel werden zu 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Die Ultralytics Platform stellt ein Werkzeug zur Polygonannotation für die semantische Aufgabe sowie eine durch SAM unterstützte intelligente Annotation bereit. Annotationsdaten können direkt im Browser erstellt und der resultierende polygonbeschriftete Datensatz exportiert oder zum Training verwendet werden, ohne dieses Layout manuell einzurichten.

FAQ#

  • Masken für semantische Segmentierung sind dichte Pixelkarten. Jedes Pixel speichert eine Klassen-ID, und pro Trainingsbild gibt es ein Maskenbild. Bezeichnungen für die Instanzsegmentierung in Ultralytics YOLO verwenden Textdateien mit Polygonkoordinaten, eine Zeile pro Objektinstanz.

  • Der Pixelwert 255 wird als Ignorierbezeichnung verwendet. Diese Pixel werden bei der Berechnung von Verlust und Metriken übersprungen, was für ungültige Bereiche, nicht beschriftete Pixel oder Klassen außerhalb der Trainingsbezeichnungen nützlich ist.

  • Ja. Jede semantische Maske sollte denselben Dateinamen ohne Erweiterung wie das zugehörige Bild haben. Der Datensatz-Loader ersetzt den Verzeichnisbestandteil images durch masks_dir und sucht nach passenden Maskendateien. Wird keine Maske .png gefunden, greift er auf andere unterstützte Bildformate (.jpg, .tiff usw.) zurück – empfohlen werden jedoch nur verlustfreie Formate, da der Fallback dies nicht erzwingt.

  • Ja, sofern sie bereits mit deinen Klassen-IDs names übereinstimmen. Wenn der Quelldatensatz nicht fortlaufende IDs verwendet oder zu ignorierende Labels enthält, füge einen Abschnitt label_mapping hinzu, um die Quellpixelwerte in Trainings-IDs umzuwandeln.

  • Ja. Datensätze für die Instanzsegmentierung verwenden Ultralytics YOLO-Polygonbezeichnungen (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ...-Zeilen), und dieselben Dateien können für die semantische Segmentierung wiederverwendet werden. Lasse einfach masks_dir in der Dataset-YAML weg und stelle sicher, dass im Stammverzeichnis des Datensatzes kein Ordner masks/ neben deinen Bildern vorhanden ist (seine Existenz aktiviert den PNG-Maskenmodus selbst dann, wenn masks_dir nicht gesetzt ist). Der Loader wandelt die Polygone anschließend während des Ladens in Masken pro Bild um. Bei Mehrklassen-Datensätzen (N > 1) wird eine zusätzliche Klasse background angefügt, und das Modell wird mit N + 1 Ausgabekanälen erstellt. Bei Einklassen-Datensätzen (N == 1) bleibt das Training bei einer Klasse – die Maske zeigt deine deklarierte Klasse als 1 und nicht abgedeckte Pixel als 0.

  • Ultralytics enthält einsatzbereite Dataset-YAML-Dateien für Cityscapes (19 Klassen für städtische Szenen), die kompakte Cityscapes8-Teilmenge zum Testen von Verarbeitungspipelines sowie ADE20K (150 Klassen zur Szenenanalyse). Auf jeder Seite findest du die genaue Klassenliste, Schritte zum Herunterladen und ein verifiziertes Trainingsbeispiel.

Kommentare