Link to this sectionÜbersicht über semantische Segmentierungsdatensätze#
Semantische Segmentierung weist jedem Pixel in einem Bild ein Klassen-Label zu. Im Gegensatz zur Instanzsegmentierung unterscheidet die semantische Segmentierung nicht zwischen einzelnen Objekten derselben Klasse. Das Trainingsziel ist eine dichte Klassen-Map, 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.
Link to this sectionUnterstützte Datensatzformate#
Zwei Label-Formate werden unterstützt. Der Datensatz-Lader wählt den Pfad basierend darauf aus, ob die Datensatz-YAML einen masks_dir-Schlüssel definiert.
Link to this sectionPNG-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 Datensatzes. - Der Pixelwert
255wird als Ignore-Label behandelt und bei der Berechnung von Verlust und Metriken ausgeschlossen. - Maskendateien sollten denselben Dateinamenstamm wie die zugehörige Bilddatei verwenden, zum Beispiel
frankfurt_000000_000294.png. - Masken werden standardmäßig als
.pngaufgelöst; falls sie 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 Wert masks_dir aus der Datensatz-YAML ersetzt den images-Pfadbestandteil, um Masken zu finden.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Zum Beispiel wird ein Bild unter images/train/aachen_000000_000019.png mit einer Maske unter masks/train/aachen_000000_000019.png gepaart, wenn masks_dir: masks gesetzt ist.
Link to this sectionYOLO Polygon-Labelformat#
Wenn dein Datensatz bereits Ultralytics YOLO Polygon-Label enthält (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ... Zeilen), kannst du semantische Segmentierung direkt damit trainieren – eine Konvertierung in PNG-Masken ist nicht erforderlich. Siehe das Instanzsegmentierungs-Datensatzformat für das zeilenweise Layout.
Dieser Pfad wird automatisch ausgewählt, wenn die Datensatz-YAML masks_dir weglässt. 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 angehängt für Pixel, die von keinem Polygon abgedeckt werden. Das Modell wird mitN + 1Ausgangskanälen erstellt, wobei der letzte Kanal der Hintergrund ist. - 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 sind, als0. Es wird keine zusätzliche Hintergrundklasse zunameshinzugefügt. - Pixel, die durch Augmentierungs-Padding (z. B. zufälliger Zuschnitt) hinzugefügt werden, verwenden weiterhin
255als Ignore-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.
Link to this sectionDatensatz-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 zu den Trainingsbildern relativ zu path oder ein absoluter Pfad. |
val | Pfad zu den Validierungsbildern relativ zu path oder ein absoluter Pfad. |
test | Optionaler Pfad zu Testbildern. |
masks_dir | Verzeichnisname, der für semantische Masken verwendet wird. Lass diesen Schlüssel weg, um zum YOLO Polygon-Labelformat zu wechseln. |
names | Zuordnung von Klassen-ID zu Klassennamen. |
label_mapping | Optionale Zuordnung von Quell-Datensatz-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 den zusammenhängenden Trainingsklassen-IDs übereinstimmen. Cityscapes und ADE20K enthalten Mappings, die ursprüngliche Label-IDs in YOLO semantische Segmentierungs-Trainings-IDs konvertieren und ungenutzte Labels ignorieren.
Link to this sectionVerwendung#
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)Link to this sectionUnterstützte Datensätze#
Ultralytics bietet YAML-Dateien für semantische Segmentierungsdatensätze für diese Datensätze an:
- Cityscapes: Datensatz für semantische Segmentierung von städtischen Straßenszenen mit 19 Trainingsklassen.
- Cityscapes8: Ein Cityscapes-Teilset mit 8 Bildern für schnelle Tests und CI-Prüfungen.
- ADE20K: Szenenanalyse-Datensatz mit 150 semantischen Klassen.
Link to this sectionHinzufügen deines eigenen Datensatzes#
Link to this sectionOption A – PNG-Masken#
- Speichere deine Bilder in Split-Ordnern wie
images/trainundimages/val. - Speichere eine einkanalige Maske pro Bild in den gespiegelten Maskenordnern, z. B.
masks/trainundmasks/val. - Stelle sicher, dass die Masken-Pixelwerte Klassen-IDs sind. Verwende
255für Pixel, die ignoriert werden sollen. - Erstelle eine Datensatz-YAML mit
path,train,val,masks_dirundnames. - Füge
label_mappingnur hinzu, wenn deine Masken-IDs eine Konvertierung in zusammenhängende Trainings-IDs benötigen.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
2: buildingLink to this sectionOption B – Polygon-Label#
- Lege Bilder und
.txtPolygon-Dateien genau so an wie für die Instanzsegmentierung. - Erstelle eine Datensatz-YAML mit
path,train,valundnames– lassmasks_dirweg. - Füge keinen "background"-Eintrag zu
nameshinzu. Bei Mehrklassen-Datensätzen fügt der Lader automatisch einen hinzu; bei Einzelklassen-Datensätzen 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: carLink to this sectionFAQ#
Link to this sectionWas ist der Unterschied zwischen semantischen Segmentierungsmasken und Instanzsegmentierungs-Labels?#
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.
Link to this sectionWelcher Pixelwert wird während des Trainings ignoriert?#
Der Pixelwert 255 wird als Ignore-Label verwendet. Diese Pixel werden bei der Verlust- und Metrikberechnung übersprungen, was für leere Regionen, ungelabelte Pixel oder Klassen außerhalb des Trainings-Label-Sets nützlich ist.
Link to this sectionMüssen Maskendateinamen mit Bilddateinamen übereinstimmen?#
Ja. Jede semantische Maske sollte denselben Dateinamenstamm wie das entsprechende Bild haben. Der Datensatz-Lader ersetzt den Verzeichnisbestandteil images durch masks_dir und sucht nach passenden Maskendateien.
Link to this sectionKann ich ursprüngliche Datensatz-Label-IDs direkt verwenden?#
Ja, wenn sie bereits mit deinen names Klassen-IDs übereinstimmen. Wenn der Quelldatensatz nicht zusammenhängende IDs verwendet oder Labels enthält, die ignoriert werden sollten, füge einen label_mapping-Abschnitt hinzu, um Quell-Pixelwerte in Trainings-IDs zu konvertieren.
Link to this sectionKann ich meinen Instanzsegmentierungsdatensatz verwenden, um semantische Segmentierung zu trainieren?#
Ja. Instanzsegmentierungsdatensätze verwenden Ultralytics YOLO Polygon-Label (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ... Zeilen), und dieselben Dateien können für semantische Segmentierung wiederverwendet werden – lass einfach masks_dir in der Datensatz-YAML weg. Der Lader konvertiert Polygone während des Ladens in Masken pro Bild. Bei Mehrklassen-Datensätzen (N > 1) wird eine zusätzliche background-Klasse angehängt und das Modell mit N + 1 Ausgangskanälen erstellt. Bei Einzelklassen-Datensätzen (N == 1) bleibt das Training bei 1 Klasse – die Maske zeigt deine deklarierte Klasse als 1 und nicht abgedeckte Pixel als 0.