Übersicht über semantische Segmentierungsdatensätze#
Semantic Segmentation weist jedem Pixel in einem Bild ein Klassenlabel zu. Im Gegensatz zur Instanzsegmentierung trennt die semantische Segmentierung keine einzelnen Objekte derselben Klasse. Das Trainingsziel ist eine dichte Klassenkarte, in der jedes Pixel eine Klassen-ID speichert.
Dieser Leitfaden erklärt das Datensatzformat, das von Ultralytics YOLO Modellen für semantische Segmentierung verwendet wird, und listet die integrierten Datensatzkonfigurationen auf, die für das Training und die Validierung verfügbar sind.
Unterstützte Datensatzformate#
Es werden zwei Label-Formate unterstützt. Der Dataset-Loader wählt PNG-Masken aus, wenn das Dataset-YAML einen masks_dir-Schlüssel definiert oder wenn im Stammverzeichnis des Datasets neben den Bildern bereits ein masks/-Ordner existiert; andernfalls greift er auf YOLO-Polygon-Labels zurück.
PNG-Maskenformat#
Datensätze für semantische Segmentierung verwenden eine Bilddatei und eine Maskendatei pro Stichprobe. Die Maske ist ein einkanaliges Bild, meist PNG, bei dem jeder Pixelwert der Klassenindex für das entsprechende Bildpixel ist.
- Pixelwerte
0,1,2, ... repräsentieren Klassen-IDs aus dernames-Zuordnung des Datasets. - Der Pixelwert
255wird als Ignorier-Label behandelt und von der Verlust- und Metrikberechnung ausgeschlossen. - Maskendateien sollten denselben Dateinamenstamm wie die dazugehörige Bilddatei verwenden, zum Beispiel
frankfurt_000000_000294.png. - Masken werden standardmäßig als
.pngaufgelöst; falls diese fehlen, werden auch andere unterstützte Bildformate akzeptiert. Verwende verlustfreie Formate wie.pngoder.tiff, da verlustbehaftete Komprimierung (z. B..jpg) die Pixelwerte der Klassen-ID beschädigt.
Das Standard-Layout speichert Bilder und Masken in parallelen Ordnern. Der masks_dir-Wert aus dem Dataset-YAML ersetzt die Pfadkomponente images, um Masken zu finden.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Ein Bild unter images/train/aachen_000000_000019.png wird beispielsweise mit einer Maske unter masks/train/aachen_000000_000019.png gepaart, wenn masks_dir: masks.
YOLO Polygon-Labelformat#
Wenn dein Dataset bereits Ultralytics YOLO-Polygon-Labels enthält (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ...-Zeilen), kannst du die semantische Segmentierung direkt damit trainieren – es ist keine PNG-Maskenkonvertierung erforderlich. Im Dataset-Format für die Instanzsegmentierung findest du Informationen zum zeilenbasierten Layout.
Dieser Pfad wird automatisch ausgewählt, wenn das Dataset-YAML masks_dir weghlässt und im Stammverzeichnis des Datasets neben deinen Bildern kein masks/-Ordner existiert – entferne oder benenne übrig gebliebene masks/-Ordner um, da der Loader sonst in den PNG-Masken-Modus wechselt und dort nach Masken sucht. Verhalten:
- Polygone werden beim Laden in eine semantische Maske pro Bild umgewandelt und nach Fläche sortiert, sodass kleinere Objekte in Überlappungsbereichen die größeren überschreiben.
- Mehrklassen (
N > 1innames): Eine zusätzlichebackground-Klasse wird nach deinen deklarierten Klassen für Pixel angehängt, die von keinem Polygon abgedeckt werden. Das Modell wird mitN + 1-Ausgabekanälen erstellt und der letzte Kanal ist der Hintergrund. - Einzelklasse (
N == 1innames): Wird weiterhin als 1 Klasse trainiert. Die Maske ist binär, wobei deine deklarierte Klasse als1angezeigt wird und Pixel, die von keinem Polygon abgedeckt werden, als0. Es wird keine zusätzliche Hintergrundklasse zunameshinzugefügt. - Pixel, die durch Augmentierungs-Padding (z. B. zufälliges Zuschneiden) hinzugefügt wurden, verwenden weiterhin
255als Ignorier-Label.
Nutze diesen Pfad, wenn deine Daten bereits als Instanz-Polygone gelabelt sind und du ein Modell für semantische Segmentierung aus denselben Dateien erstellen möchtest.
Datensatz-YAML-Format#
Datensätze für semantische Segmentierung werden mit YAML-Dateien konfiguriert. Die Hauptfelder sind:
| Schlüssel | Beschreibung |
|---|---|
path | Stammverzeichnis des Datensatzes. |
train | Pfad des Trainingsbildes relativ zu path oder ein absoluter Pfad. |
val | Pfad des Validierungsbildes relativ zu path oder ein absoluter Pfad. |
test | Optionaler Pfad zu Testbildern. |
masks_dir | Verzeichnisname für semantische Masken. Lass diesen Schlüssel weg (ohne einen masks/-Ordner im Stammverzeichnis des Datasets), um zum YOLO-Polygon-Label-Format zu wechseln. |
names | Zuordnung von Klassen-ID zu Klassennamen. |
label_mapping | Optionale Zuordnung von Quelldataset-IDs zu Trainings-IDs oder ignore_label. |
# 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.zipVerwende label_mapping, wenn die Quell-Masken-IDs nicht bereits mit zusammenhängenden Trainingsklassen-IDs übereinstimmen. Cityscapes und ADE20K enthalten Zuordnungen, die ursprüngliche Label-IDs in YOLO-Trainings-IDs für die semantische Segmentierung konvertieren und nicht verwendete Labels ignorieren.
Verwendung#
Trainiere ein YOLO26 Modell für semantische Segmentierung mit Python oder CLI:
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 für diese Datasets bereit. Auf der Task-Seite zur semantischen Segmentierung findest du die vollständige Benchmark-Tabelle für vortrainierte Modelle.
- Cityscapes: Datensatz zur semantischen Segmentierung von städtischen Straßenszenen mit 19 Trainingsklassen.
- Cityscapes8: Ein Cityscapes-Subset mit 8 Bildern für schnelle Tests und CI-Prüfungen.
- ADE20K: Szenen-Parsing-Datensatz mit 150 semantischen Klassen.
Hinzufügen deines eigenen Datensatzes#
Option A – PNG-Masken#
- Speichere deine Bilder in Split-Ordnern wie
images/trainundimages/val. - Speichere pro Bild eine einkanalige Maske in den gespiegelten Maskenordnern, wie
masks/trainundmasks/val. - Stelle sicher, dass die Pixelwerte der Masken Klassen-IDs sind. Verwende
255für Pixel, die ignoriert werden sollen. - Erstelle ein Dataset-YAML mit
path,train,val,masks_dirundnames. - Füge
label_mappingnur hinzu, wenn deine Masken-IDs in zusammenhängende Trainings-IDs konvertiert werden müssen.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
2: buildingOption B – Polygon-Label#
- Ordne Bilder und
.txt-Polygondateien genau wie bei der Instanzsegmentierung an. - Erstelle ein Dataset-YAML mit
path,train,valundnames– lassmasks_dirweg. - Stelle sicher, dass im Stammverzeichnis deines Datasets neben deinen Bildern kein
masks/-Ordner existiert – allein seine Anwesenheit schaltet den Loader in den PNG-Masken-Modus, selbst ohnemasks_dirim YAML. - Füge
nameskeinen „Hintergrund“-Eintrag hinzu. Bei Mehrklassen-Datasets hängt der Loader automatisch einen an; bei Einheitsklassen-Datasets bleibt das Training bei 1 Klasse – deine deklarierte Klasse wird zu1in der Maske und nicht abgedeckte Pixel werden zu0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carDie Ultralytics Platform bietet ein Polygon-Annotationstool für semantische Aufgaben sowie SAM-gestützte Smart-Annotation – annotiere direkt im Browser und exportiere oder trainiere mit dem resultierenden Dataset mit Polygon-Labels, ohne dieses Layout manuell einrichten zu müssen.
FAQ#
Semantische Segmentierungsmasken sind dichte Pixel-Maps. Jedes Pixel speichert eine Klassen-ID, und es gibt eine Maskenbilddatei pro Trainingsbild. Instanzsegmentierungs-Labels in Ultralytics YOLO verwenden Textdateien mit Polygon-Koordinaten, eine Zeile pro Objektinstanz.
Der Pixelwert
255wird als Ignorier-Label verwendet. Diese Pixel werden während der Verlust- und Metrikberechnung übersprungen, was für leere Regionen, unannotierte Pixel oder Klassen außerhalb des Trainings-Label-Sets nützlich ist.Ja. Jede semantische Maske sollte denselben Dateinamenstamm wie das entsprechende Bild haben. Der Dataset-Loader ersetzt die Verzeichniskomponente
imagesdurchmasks_dirund sucht nach passenden Maskendateien. Dabei greift er auf andere unterstützte Bildformate zurück (.jpg,.tiffusw.), falls keine.png-Maske gefunden wird – allerdings werden nur verlustfreie Formate empfohlen, da der Fallback dies nicht erzwingt.Ja, wenn sie bereits mit deinen
names-Klassen-IDs übereinstimmen. Wenn das Quelldataset nicht zusammenhängende IDs verwendet oder Labels enthält, die ignoriert werden sollen, füge einenlabel_mapping-Abschnitt hinzu, um Quellpixelwerte in Trainings-IDs zu konvertieren.Ja. Instanzsegmentierungs-Datasets verwenden Ultralytics YOLO-Polygon-Labels (eine
.txtpro Bild mit<class-index> <x1> <y1> <x2> <y2> ...-Zeilen), und dieselben Dateien können für die semantische Segmentierung wiederverwendet werden – lasse dazu einfachmasks_diraus dem Dataset-YAML weg und stelle sicher, dass im Stammverzeichnis deines Datasets neben den Bildern keinmasks/-Ordner existiert (allein seine Anwesenheit löst den PNG-Masken-Modus aus, selbst wennmasks_dirnicht gesetzt ist). Der Loader konvertiert Polygone dann im Flug in Pro-Bild-Masken. Für Mehrklassen-Datasets (N > 1) wird eine zusätzlichebackground-Klasse angehängt und das Modell mitN + 1-Ausgabekanälen erstellt. Für Einheitsklassen-Datasets (N == 1) bleibt das Training bei 1 Klasse – die Maske zeigt deine deklarierte Klasse als1und nicht abgedeckte Pixel als0.Ultralytics enthält einsatzbereite Dataset-YAML-Dateien für Cityscapes (19 Klassen städtischer Szenen), das leichtgewichtige Cityscapes8-Subset für Pipeline-Tests und ADE20K (150 Szenenanalyse-Klassen). Jede Seite dokumentiert die genaue Klassenliste, die Download-Schritte und ein verifiziertes Trainingsbeispiel.