Ü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 Zuordnungnamesdes Datensatzes. - Der Pixelwert
255wird 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
.pngaufgelöst; falls diese Datei fehlt, werden auch andere unterstützte Bildformate akzeptiert. Verwende verlustfreie Formate wie.pngoder.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 > 1innames): Nach deinen deklarierten Klassen wird eine zusätzliche Klassebackgroundfür Pixel angefügt, die von keinem Polygon abgedeckt werden. Das Modell wird mitN + 1Ausgabekanälen erstellt, wobei der letzte Kanal den Hintergrund darstellt. - Einklassenmodus (
N == 1innames): Das Training erfolgt weiterhin mit einer Klasse. Die Maske ist binär, wobei deine deklarierte Klasse als1und nicht von Polygonen abgedeckte Pixel als0dargestellt werden. Fürnameswird keine zusätzliche Hintergrundklasse hinzugefügt. - Durch Auffüllen bei der Datenaugmentierung hinzugefügte Pixel (z. B. bei einem zufälligen Zuschnitt) verwenden weiterhin
255als 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ü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 den Testbildern. |
masks_dir | Verzeichnisname 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. |
names | Zuordnung von Klassen-IDs zu Klassennamen. |
label_mapping | Optionale Zuordnung von IDs des Quelldatensatzes 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 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:
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#
- Speichere deine Bilder in Unterordnern für die jeweiligen Aufteilungen, etwa
images/trainundimages/val. - Speichere eine einkanalige Maske pro Bild in den entsprechenden Maskenordnern, etwa
masks/trainundmasks/val. - Stelle sicher, dass die Pixelwerte der Masken Klassen-IDs sind. Verwende
255für Pixel, die ignoriert werden sollen. - Erstelle eine Dataset-YAML mit
path,train,val,masks_dirundnames. - Füge
label_mappingnur 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: buildingOption B – Polygonbezeichnungen#
- Ordne Bilder und
.txt-Polygondateien genau wie bei der Instanzsegmentierung an. - Erstelle eine Dataset-YAML mit
path,train,valundnames– lassemasks_dirweg. - 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 wennmasks_dirnicht in der YAML enthalten ist. - Füge keinen Eintrag „Hintergrund“ zu
nameshinzu. 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 zu1, 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 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
255wird 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
imagesdurchmasks_dirund sucht nach passenden Maskendateien. Wird keine Maske.pnggefunden, greift er auf andere unterstützte Bildformate (.jpg,.tiffusw.) 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 Abschnittlabel_mappinghinzu, um die Quellpixelwerte in Trainings-IDs umzuwandeln.Ja. Datensätze für die Instanzsegmentierung verwenden Ultralytics YOLO-Polygonbezeichnungen (eine
.txtpro Bild mit<class-index> <x1> <y1> <x2> <y2> ...-Zeilen), und dieselben Dateien können für die semantische Segmentierung wiederverwendet werden. Lasse einfachmasks_dirin der Dataset-YAML weg und stelle sicher, dass im Stammverzeichnis des Datensatzes kein Ordnermasks/neben deinen Bildern vorhanden ist (seine Existenz aktiviert den PNG-Maskenmodus selbst dann, wennmasks_dirnicht 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 Klassebackgroundangefügt, und das Modell wird mitN + 1Ausgabekanälen erstellt. Bei Einklassen-Datensätzen (N == 1) bleibt das Training bei einer Klasse – die Maske zeigt deine deklarierte Klasse als1und nicht abgedeckte Pixel als0.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.