Übersicht zu Datensätzen für die semantische Segmentierung#
Bei der semantischen Segmentierung wird jedem Pixel eines Bildes eine Klassenbezeichnung zugewiesen. Anders als bei der Instanzsegmentierung werden bei der semantischen Segmentierung einzelne Objekte derselben Klasse nicht voneinander getrennt. Das Trainingsziel ist eine dichte Klassenmaske, in der jedes Pixel eine Klassen-ID speichert.
Dieser Leitfaden erläutert das Datensatzformat, das Ultralytics-YOLO-Modelle für semantische Segmentierung verwenden, und führt die integrierten Datensatzkonfigurationen für Training und Validierung auf.
Unterstützte Datensatzformate#
Es werden zwei Bezeichnungsformate unterstützt. Der Datensatzlader verwendet PNG-Masken, wenn in der YAML-Datei des Datensatzes ein Schlüssel masks_dir definiert ist oder wenn im Stammverzeichnis des Datensatzes neben deinen Bildern bereits ein Ordner masks/ vorhanden ist. Andernfalls greift er auf YOLO-Polygonbezeichnungen zurück.
PNG-Maskenformat#
Datensätze für die semantische Segmentierung verwenden pro Beispiel eine Bilddatei und eine Maskendatei. Die Maske ist ein einkanaliges Bild, üblicherweise im PNG-Format, in dem jeder Pixelwert dem Klassenindex des entsprechenden Bildpixels entspricht.
- Die Pixelwerte
0,1,2usw. stehen für Klassen-IDs aus der Zuordnungnamesdes Datensatzes. - Der Pixelwert
255gilt als Ignorierlabel und wird bei der Berechnung des Verlusts und der Metriken ausgeschlossen. - Maskendateien sollten denselben Basisnamen wie die zugehörige Bilddatei haben, zum Beispiel
frankfurt_000000_000294.png. - Standardmäßig werden Maskendateien als
.pngaufgelöst. Fehlt eine solche Datei, 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.
Beim Standardverzeichnislayout liegen Bilder und Masken in parallelen Ordnern. Der Wert masks_dir aus der YAML-Datei des Datensatzes ersetzt die Pfadkomponente 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 Ultralytics-YOLO-Polygonbezeichnungen enthält (eine .txt pro Bild mit <class-index> <x1> <y1> <x2> <y2> ...-Zeilen), kannst du die semantische Segmentierung direkt damit trainieren – eine Umwandlung in PNG-Masken ist nicht erforderlich. Das zeilenweise Layout findest du unter Datensatzformat für die Instanzsegmentierung.
Dieser Verarbeitungsweg wird automatisch ausgewählt, wenn in der YAML-Datei des Datensatzes masks_dir fehlt und sich im Stammverzeichnis des Datensatzes neben deinen Bildern kein Ordner masks/ befindet. Entferne alle übrig gebliebenen Ordner masks/ oder benenne sie um, da der Lader sonst auf den PNG-Maskenmodus zurückgreift und stattdessen dort nach Masken sucht. Das Verhalten:
- Polygone werden beim Laden in eine semantische Maske pro Bild umgewandelt und nach Fläche sortiert, sodass kleinere Objekte größere in überlappenden Bereichen überdecken.
- Mehrere Klassen (
N > 1innames): Für Pixel, die von keinem Polygon abgedeckt werden, wird nach den angegebenen Klassen eine zusätzliche Klassebackgroundangefügt. Das Modell wird mitN + 1Ausgabekanälen erstellt, wobei der letzte Kanal den Hintergrund darstellt. - Eine Klasse (
N == 1innames): Das Training erfolgt weiterhin mit einer Klasse. Die Maske ist binär: Die angegebene Klasse wird als1dargestellt, nicht von Polygonen abgedeckte Pixel als0. Zunameswird keine zusätzliche Hintergrundklasse hinzugefügt. - Pixel, die durch Auffüllen bei der Datenerweiterung hinzukommen (z. B. beim zufälligen Zuschneiden), verwenden weiterhin
255als Ignorierlabel.
Verwende diesen Verarbeitungsweg, wenn deine Daten bereits mit Instanzpolygonen beschriftet sind und du aus denselben Dateien ein Modell für die semantische Segmentierung trainieren möchtest.
YAML-Format für Datensätze#
Datensätze für die 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 die semantischen Masken. Lasse diesen Schlüssel weg (und stelle sicher, dass kein Ordner masks/ im Stammverzeichnis des Datensatzes 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 IDs der Quellmasken nicht bereits fortlaufenden Trainingsklassen-IDs entsprechen. Cityscapes und ADE20K enthalten Zuordnungen, die ursprüngliche Label-IDs in YOLO-Trainings-IDs für die semantische Segmentierung umwandeln und nicht verwendete Labels ignorieren.
Verwendung#
Trainiere ein YOLO26-Modell für semantische Segmentierung mit Python oder der CLI:
from ultralytics import YOLO
# Ein vortrainiertes Modell für semantische Segmentierung laden
model = YOLO("yolo26n-sem.pt")
# Mit dem Datensatz Cityscapes8 für semantische Segmentierung trainieren
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Unterstützte Datensätze#
Ultralytics stellt YAML-Dateien für Datensätze zur semantischen Segmentierung bereit. Die vollständige Benchmark-Tabelle für vortrainierte Modelle findest du auf der Seite zur semantischen Segmentierungsaufgabe.
- Cityscapes: Ein Datensatz zur semantischen Segmentierung städtischer Straßenszenen mit 19 Trainingsklassen.
- Cityscapes8: Eine Teilmenge von Cityscapes mit 8 Bildern für schnelle Tests und CI-Prüfungen.
- ADE20K: Ein Datensatz zur Szenenanalyse mit 150 semantischen Klassen.
Eigenen Datensatz hinzufügen#
Option A — PNG-Masken#
- Speichere deine Bilder in Unterordnern für die jeweiligen Teilmengen, zum Beispiel
images/trainundimages/val. - Speichere für jedes Bild eine einkanalige Maske in den entsprechenden Maskenordnern, zum Beispiel
masks/trainundmasks/val. - Stelle sicher, dass die Pixelwerte der Maske Klassen-IDs sind. Verwende
255für Pixel, die ignoriert werden sollen. - Erstelle eine YAML-Datei für den Datensatz mit
path,train,val,masks_dirundnames. - Füge
label_mappingnur hinzu, wenn die 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 — Polygon-Labels#
- Ordne Bilder und Polygondateien
.txtgenau wie bei der Instanzsegmentierung an. - Erstelle eine YAML-Datei für den Datensatz mit
path,train,valundnames— lassemasks_dirweg. - Stelle sicher, dass sich im Stammverzeichnis des Datensatzes neben deinen Bildern kein Ordner
masks/befindet — allein sein Vorhandensein versetzt den Lader in den PNG-Maskenmodus, auch wennmasks_dirnicht in der YAML-Datei steht. - Füge
nameskeinen Eintrag „Hintergrund“ hinzu. Bei Datensätzen mit mehreren Klassen fügt der Lader automatisch eine Klasse hinzu; bei Datensätzen mit nur einer Klasse bleibt das Training bei 1 Klasse — deine deklarierte Klasse wird in der Maske zu1, 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-Anmerkungstool für die semantische Aufgabe sowie eine durch SAM unterstützte intelligente Anmerkungsfunktion — annotiere direkt im Browser und exportiere den resultierenden polygonbeschrifteten Datensatz oder trainiere damit, ohne diese Verzeichnisstruktur manuell einrichten zu müssen.
Häufig gestellte Fragen#
Masken für die semantische Segmentierung sind dichte Pixelkarten. Jedes Pixel enthält eine Klassen-ID, und für jedes Trainingsbild gibt es ein Maskenbild. Labels für die Instanzsegmentierung in Ultralytics YOLO verwenden Textdateien mit Polygonkoordinaten, eine Zeile pro Objektinstanz.
Der Pixelwert
255wird als Ignorierlabel verwendet. Diese Pixel werden bei der Berechnung von Verlust und Metriken übersprungen. Das ist nützlich für ungültige Bereiche, nicht gelabelte Pixel oder Klassen außerhalb des Trainingslabelsatzes.Ja. Jede semantische Maske sollte denselben Dateistamm wie das zugehörige Bild haben. Der Datensatzlader ersetzt die Verzeichniskomponente
imagesdurchmasks_dirund sucht nach passenden Maskendateien. Wird keine Maske.pnggefunden, greift er auf andere unterstützte Bilddateierweiterungen zurück (.jpg,.tiffusw.) — empfohlen werden jedoch nur verlustfreie Formate, da dies beim Rückgriff nicht geprüft wird.Ja, sofern sie bereits deinen Klassen-IDs
namesentsprechen. Wenn der Quelldatensatz nicht fortlaufende IDs verwendet oder Labels enthält, die ignoriert werden sollen, füge einen Abschnittlabel_mappinghinzu, um die Quellpixelwerte in Trainings-IDs umzuwandeln.Ja. Datensätze für die Instanzsegmentierung verwenden Polygon-Labels von Ultralytics YOLO (eine
.txtpro Bild mit Zeilen<class-index> <x1> <y1> <x2> <y2> ...). Dieselben Dateien lassen sich auch für die semantische Segmentierung wiederverwenden — lasse einfachmasks_dirin der YAML-Datei des Datensatzes weg und stelle sicher, dass sich im Stammverzeichnis des Datensatzes neben deinen Bildern kein Ordnermasks/befindet (allein sein Vorhandensein löst den PNG-Maskenmodus aus, auch wennmasks_dirnicht gesetzt ist). Der Lader wandelt die Polygone dann während des Betriebs in Masken für jedes Bild um. Bei Datensätzen mit mehreren Klassen (N > 1) wird eine zusätzliche Klassebackgroundhinzugefügt, und das Modell wird mitN + 1Ausgabekanälen erstellt. Bei Datensätzen mit nur einer Klasse (N == 1) bleibt das Training bei 1 Klasse — die Maske zeigt deine deklarierte Klasse als1und nicht abgedeckte Pixel als0.Ultralytics enthält sofort nutzbare YAML-Dateien für die Datensätze Cityscapes (19 Klassen für urbane Szenen), die schlanke Teilmenge Cityscapes8 zum Testen von Abläufen und ADE20K (150 Klassen für die Szenenanalyse). Auf jeder Seite findest du die genaue Klassenliste, die Download-Schritte und ein überprüftes Trainingsbeispiel.