Überblick über Datensätze für semantische Segmentierung
Semantische Segmentierung weist jedem Pixel in einem Bild ein Klassen-Label zu. Im Gegensatz zur Instanz-Segmentierung unterscheidet die semantische Segmentierung nicht zwischen einzelnen Objekten derselben Klasse. Das Trainingsziel ist eine dichte Klassenkarte, bei 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 Training und Validierung verfügbar sind.
Unterstützte Datensatzformate
Zwei Label-Formate werden unterstützt. Der Datensatz-Loader wählt den Pfad basierend darauf aus, ob das Datensatz-YAML einen masks_dir Schlüssel definiert.
PNG-Maskenformat
Datensätze für semantische Segmentierung verwenden eine Bilddatei und eine Maskendatei pro Stichprobe. Die Maske ist ein einkanaliges Bild, normalerweise im PNG-Format, bei dem jeder Pixelwert der Klassen-Index 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 Verlusten und Metriken ausgeschlossen. - Maskendateien sollten denselben Dateinamenstamm wie die zugehörige Bilddatei verwenden, zum Beispiel
frankfurt_000000_000294.png. - Unterstützte Maskenerweiterungen sind
.png,.PNG,.bmpund.tif.
Das Standard-Layout bewahrt Bilder und Masken in parallelen Ordnern. Der masks_dir Wert aus dem Datensatz-YAML ersetzt den images Pfad-Bestandteil, 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.
YOLO Polygon-Label-Format
Wenn dein Datensatz bereits über Ultralytics YOLO Polygon-Labels verfügt (eine .txt Datei pro Bild mit Zeilen im Format <class-index> <x1> <y1> <x2> <y2> ...), kannst du die semantische Segmentierung direkt damit trainieren – eine Konvertierung in PNG-Masken ist nicht erforderlich. Sieh dir das Datensatzformat für Instanz-Segmentierung für das zeilenbasierte Layout an.
Dieser Pfad wird automatisch ausgewählt, wenn das Datensatz-YAML masks_dir auslässt. Verhalten:
- Polygone werden beim Laden in eine semantische Maske pro Bild konvertiert, sortiert nach Fläche, sodass kleinere Objekte in Überlappungsbereichen größere ü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 + 1Ausgabekanä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 nicht von einem Polygon abgedeckt sind, als0. Es wird keine zusätzliche Hintergrundklasse zunameshinzugefügt. - Pixel, die durch Augmentierungs-Padding (z. B. zufälliger Ausschnitt) hinzugefügt wurden, verwenden weiterhin
255als Ignore-Label.
Verwende diesen Pfad, wenn deine Daten bereits als Instanz-Polygone beschriftet sind und du ein semantisches Segmentierungsmodell aus denselben Dateien erstellen möchtest.
Datensatz-YAML-Format
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 Trainingsbildern relativ zu path oder ein absoluter Pfad. |
val | Pfad zu Validierungsbildern relativ zu path oder ein absoluter Pfad. |
test | Optionaler Pfad zu Testbildern. |
masks_dir | Verzeichnisname für semantische Masken. Lasse diesen Schlüssel weg, um zum YOLO Polygon-Label-Format 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 Trainings-Klassen-IDs übereinstimmen. Cityscapes und ADE20K enthalten Zuordnungen, die ursprüngliche Label-IDs in YOLO semantische Segmentierungs-Trainings-IDs umwandeln und ungenutzte 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 YAML-Dateien für semantische Segmentierungs-Datensätze für diese Datensätze bereit:
- Cityscapes: Datensatz für semantische Segmentierung städtischer Straßenszenen mit 19 Trainingsklassen.
- Cityscapes8: Ein 8-Bilder-Subset von Cityscapes für schnelle Tests und CI-Prüfungen.
- ADE20K: Datensatz zur Szenenanalyse mit 150 semantischen Klassen.
Eigenen Datensatz hinzufügen
Option A – PNG-Masken
- Speichere deine Bilder in geteilten Ordnern wie
images/trainundimages/val. - Speichere eine einkanalige Maske pro Bild in den gespiegelten Maskenordnern, wie
masks/trainundmasks/val. - Stelle sicher, dass Maskenpixelwerte Klassen-IDs sind. Verwende
255für Pixel, die ignoriert werden sollen. - Erstelle ein Datensatz-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-Labels
- Lege Bilder und
.txtPolygon-Dateien genau wie für Instanz-Segmentierung an. - Erstelle ein Datensatz-YAML mit
path,train,valundnames– lassemasks_dirweg. - Füge
nameskeinen "background"-Eintrag hinzu. Bei Mehrklassen-Datensätzen fügt der Loader automatisch einen hinzu; bei Einzelklassen-Datensätzen bleibt das Training bei 1 Klasse – deine deklarierte Klasse wird zu1in der Maske und unbedeckte Pixel werden zu0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carFAQ
Was ist der Unterschied zwischen Masken für semantische Segmentierung und Labels für Instanz-Segmentierung?
Masken für semantische Segmentierung sind dichte Pixelkarten. Jedes Pixel speichert eine Klassen-ID, und es gibt ein Maskenbild pro Trainingsbild. Instanz-Segmentierungs-Labels in Ultralytics YOLO verwenden Textdateien mit Polygon-Koordinaten, eine Zeile pro Objektinstanz.
Welcher Pixelwert wird während des Trainings ignoriert?
Der Pixelwert 255 wird als Ignore-Label verwendet. Diese Pixel werden bei der Berechnung von Verlusten und Metriken übersprungen, was nützlich für leere Bereiche, unbeschriftete Pixel oder Klassen außerhalb des Trainings-Label-Sets ist.
Müssen Maskendateinamen mit Bilddateinamen übereinstimmen?
Ja. Jede semantische Maske sollte denselben Dateinamenstamm wie das entsprechende Bild haben. Der Datensatz-Loader ersetzt den images Verzeichnisbestandteil durch masks_dir und sucht nach passenden Maskendateien.
Kann 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 Bereich hinzu, um Quell-Pixelwerte in Trainings-IDs umzuwandeln.
Kann ich meinen Datensatz für Instanz-Segmentierung verwenden, um semantische Segmentierung zu trainieren?
Ja. Datensätze für Instanz-Segmentierung verwenden Ultralytics YOLO Polygon-Labels (eine .txt Datei 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 im Datensatz-YAML weg. Der Loader konvertiert Polygone im laufenden Betrieb in Masken pro Bild. Für Mehrklassen-Datensätze (N > 1) wird eine zusätzliche background-Klasse angehängt und das Modell mit N + 1 Ausgabekanälen erstellt. Für Einzelklassen-Datensätze (N == 1) bleibt das Training bei 1 Klasse – die Maske zeigt deine deklarierte Klasse als 1 und unbedeckte Pixel als 0.