Übersicht über Datensätze zur Instanzsegmentierung#
Instanzsegmentierung ist eine Computer-Vision-Aufgabe, bei der einzelne Objekte in einem Bild erkannt und abgegrenzt werden. Dieser Leitfaden gibt einen Überblick über die Datensatzformate, die Ultralytics YOLO für Instanzsegmentierungsaufgaben unterstützt, und erläutert, wie du diese Datensätze für das Training deiner Modelle vorbereitest, konvertierst und verwendest.
Unterstützte Datensatzformate#
Ultralytics-YOLO-Format#
Das Datensatz-Beschriftungsformat für das Training von YOLO-Segmentierungsmodellen sieht wie folgt aus:
- Eine Textdatei pro Bild: Zu jedem Bild im Datensatz gehört eine Textdatei mit demselben Namen wie die Bilddatei und der Erweiterung „.txt“.
- Eine Zeile pro Objekt: Jede Zeile in der Textdatei entspricht einer Objektinstanz im Bild.
- Objektinformationen pro Zeile: Jede Zeile enthält die folgenden Informationen zur Objektinstanz:
- Objektklassenindex: Eine Ganzzahl, die die Klasse des Objekts angibt (z. B. 0 für Person, 1 für Auto usw.).
- Polygonkoordinaten des Objekts: Die
(x, y)-Punkte, die die Maske des Objekts umreißen und auf Werte zwischen 0 und 1 normalisiert sind.
Das Format einer einzelnen Zeile in der Segmentierungsdatensatzdatei sieht wie folgt aus:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>In diesem Format ist <class-index> der Klassenindex des Objekts und <x1> <y1> <x2> <y2> ... <xn> <yn> sind die normalisierten Polygonkoordinaten der Segmentierungsmaske des Objekts (die Werte liegen relativ zu Bildbreite und -höhe in [0, 1]). Die Koordinaten sind durch Leerzeichen getrennt.
Hier siehst du ein Beispiel für das YOLO-Datensatzformat für ein einzelnes Bild mit zwei Objekten: eines besteht aus einem Segment mit 3 Punkten, das andere aus einem Segment mit 5 Punkten.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- Die Länge der einzelnen Zeilen muss nicht gleich sein.
- Jede Segmentierungsbeschriftung muss mindestens 3
(x, y)Punkte enthalten:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - Jedes Objekt benötigt ein Polygon. Zeilen im Detect-Format (
<class-index> <x_center> <y_center> <width> <height>) enthalten keines, und ein Segmentierungsdatensatz, bei dem die Anzahl der Boxen und Polygone nicht übereinstimmt, wird beim Laden der Labels mit einemValueErrorzurückgewiesen.
YAML-Format für Datensätze#
Das Ultralytics-Framework verwendet ein YAML-Dateiformat, um den Datensatz und die Modellkonfiguration für das Training von Segmentierungsmodellen festzulegen. Hier ist ein Beispiel für das YAML-Format zum Definieren eines Segmentierungsdatensatzes:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipDie Felder train, val und test verweisen auf die Trainings-, Validierungs- und Testbilder. Jedes Feld akzeptiert ein Verzeichnis, eine Liste von Verzeichnissen oder eine *.txt-Datei, in der pro Zeile ein Bildpfad steht (Pfade, die mit ./ beginnen, werden relativ zur Datei *.txt aufgelöst). Eine *.txt-Datei ist hilfreich, wenn du mit einer Teilmenge eines Verzeichnisses trainieren, nicht beschriftete Bilder überspringen oder Bilder aus mehreren Quellen zu einem Split zusammenführen möchtest.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames ist ein Wörterbuch mit Klassennamen. Die Reihenfolge der Namen muss der Reihenfolge der Objektklassenindizes in den YOLO-Datensatzdateien entsprechen.
Verwendung#
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-seg.pt") # ein vortrainiertes Modell laden (für das Training empfohlen)
# Das Modell trainieren
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Unterstützte Datensätze#
Ultralytics YOLO unterstützt verschiedene Datensätze für Aufgaben der Instanzsegmentierung. Hier ist eine Liste der am häufigsten verwendeten Datensätze. Die meisten dieser Datensätze werden auch auf der Ultralytics Platform gehostet. Dort kannst du Bilder und Annotationen durchsuchen, Datensatzstatistiken einsehen und Datensätze für das Cloud-Training klonen.
- Carparts-seg: Ein spezialisierter Datensatz für die Segmentierung von Autoteilen, ideal für Anwendungen in der Automobilindustrie. Er umfasst verschiedene Fahrzeuge mit detaillierten Annotationen einzelner Fahrzeugteile.
- COCO: Ein umfassender Datensatz für die Objekterkennung, Segmentierung und Bildbeschreibung mit über 200K beschrifteten Bildern aus zahlreichen Kategorien.
- COCO8-seg: Eine kompakte Teilmenge von COCO mit 8 Bildern, die für schnelle Tests des Trainings von Segmentierungsmodellen entwickelt wurde und sich ideal für CI-Prüfungen und die Validierung von Arbeitsabläufen im Repository
ultralyticseignet. - COCO128-seg: Ein kleinerer Datensatz für Aufgaben der Instanzsegmentierung, der eine Teilmenge von 128 COCO-Bildern mit Segmentierungsannotationen enthält.
- Crack-seg: Ein Datensatz für die Segmentierung von Rissen in verschiedenen Oberflächen. Er ist wichtig für die Instandhaltung von Infrastruktur und die Qualitätskontrolle und bietet detaillierte Bilder, mit denen Modelle zum Erkennen struktureller Schwachstellen trainiert werden können.
- Package-seg: Ein Datensatz zur Segmentierung verschiedener Arten von Verpackungsmaterialien und -formen. Er eignet sich besonders für Logistik und Lagerautomatisierung und unterstützt die Entwicklung von Systemen zur Handhabung und Sortierung von Paketen.
Eigenen Datensatz hinzufügen#
Wenn du einen eigenen Datensatz hast und ihn zum Trainieren von Segmentierungsmodellen im Ultralytics-YOLO-Format verwenden möchtest, stelle sicher, dass er dem oben unter „Ultralytics-YOLO-Format“ beschriebenen Format entspricht. Wandle deine Annotationen in das erforderliche Format um und gib die Pfade, die Anzahl der Klassen und die Klassennamen in der YAML-Konfigurationsdatei an. Bewahre images/ und labels/ als separate Ordner auf derselben Ebene mit übereinstimmender Unterordnerstruktur auf. Wenn du Labeldateien .txt im Bilderordner ablegst, kann das dazu führen, dass das Modell Labels übersieht.
Beschriftungsformate übertragen oder konvertieren#
COCO-Datensatzformat in YOLO-Format konvertieren#
Mit dem folgenden Codebeispiel kannst du Labels ganz einfach aus dem beliebten COCO-Datensatzformat in das YOLO-Format umwandeln:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Mit diesem Umwandlungswerkzeug kannst du den COCO-Datensatz oder jeden Datensatz im COCO-Format in das Ultralytics-YOLO-Format umwandeln.
Denke daran, genau zu prüfen, ob der Datensatz, den du verwenden möchtest, mit deinem Modell kompatibel ist und den erforderlichen Formatkonventionen entspricht. Korrekt formatierte Datensätze sind entscheidend für das erfolgreiche Training von Segmentierungsmodellen.
Automatische Annotation#
Automatische Annotation ist eine wichtige Funktion, mit der du mithilfe eines vortrainierten Erkennungsmodells einen Segmentierungsdatensatz erstellen kannst. Damit kannst du schnell und präzise zahlreiche Bilder annotieren, ohne sie manuell beschriften zu müssen, und sparst so Zeit und Aufwand.
Segmentierungsdatensatz mit einem Erkennungsmodell erstellen#
Um deinen Datensatz mit dem Ultralytics-Framework automatisch zu annotieren, kannst du die Funktion auto_annotate wie unten gezeigt verwenden:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
data | str | erforderlich | Pfad zum Verzeichnis mit den Zielbildern für die Annotation oder Segmentierung. |
det_model | str | 'yolo26x.pt' | Pfad zum YOLO-Erkennungsmodell für die anfängliche Objekterkennung. |
sam_model | str | 'sam_b.pt' | Pfad zum SAM-Modell für die Segmentierung (unterstützt SAM-, SAM 2-, MobileSAM- und SAM 3-Gewichte). |
device | str | '' | Rechengerät (z. B. 'cuda:0', 'cpu' oder '' zur automatischen Geräteerkennung). |
conf | float | 0.25 | Konfidenzschwelle der YOLO-Erkennung, um unsichere Erkennungen herauszufiltern. |
iou | float | 0.45 | IoU-Schwelle für Non-Maximum Suppression, um überlappende Boxen herauszufiltern. |
imgsz | int | 640 | Eingabegröße für die Größenanpassung von Bildern (bei Bedarf auf das nächste Vielfache von 32 aufgerundet). |
max_det | int | 300 | Höchstzahl der Erkennungen pro Bild zur effizienten Speichernutzung. |
classes | list[int] | None | Liste der zu erkennenden Klassenindizes (z. B. [0, 1] für Person und Fahrrad). |
output_dir | str | None | Speicherverzeichnis für Annotationen (standardmäßig ein Verzeichnis neben <data>_auto_annotate_labels). |
Die Funktion auto_annotate erwartet den Pfad zu deinen Bildern sowie optionale Argumente zur Angabe der vortrainierten Erkennungsmodelle, z. B. YOLO26, YOLO11 oder andere Modelle, und der Segmentierungsmodelle, z. B. SAM, SAM 2, MobileSAM oder SAM 3, außerdem das Gerät, auf dem die Modelle ausgeführt werden sollen, und das Ausgabeverzeichnis zum Speichern der annotierten Ergebnisse.
Durch die Nutzung vortrainierter Modelle kann die automatische Annotation den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze erheblich verringern. Diese Funktion ist besonders hilfreich für Forschende und Entwickler, die mit großen Bildsammlungen arbeiten, da sie sich so auf die Modellentwicklung und -bewertung statt auf manuelle Annotation konzentrieren können.
Datensatzannotationen visualisieren#
Vor dem Training deines Modells ist es oft hilfreich, die Annotationen deines Datensatzes zu visualisieren, um ihre Korrektheit zu prüfen. Ultralytics stellt dafür eine Hilfsfunktion bereit. Sie liest ausschließlich Box-Labels im Erkennungsformat (<class-index> <x_center> <y_center> <width> <height>) und kann daher keine Segmentierungs-Polygon-Labeldateien einlesen:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Definiere die Zuordnungstabelle mit allen annotierten Klassenbezeichnungen.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Pfad zum Eingabebild.
"path/to/annotations.txt", # Pfad zur Annotationsdatei des Bildes.
label_map,
)Diese Funktion zeichnet Begrenzungsrahmen, beschriftet Objekte mit Klassennamen und passt die Textfarbe an, um die Lesbarkeit zu verbessern. So kannst du Annotationsfehler vor dem Training erkennen und korrigieren.
Segmentierungsmasken in das YOLO-Format umwandeln#
Wenn du Graustufenmaskenbilder hast, bei denen jeder Pixelwert dem Klassenindex + 1 entspricht (0 steht für den Hintergrund), kannst du sie mit folgendem Befehl in das YOLO-Segmentierungsformat umwandeln:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# Für Datensätze wie COCO mit 80 Klassen
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)Dieses Hilfsprogramm wandelt die Maskenbilder in das YOLO-Segmentierungsformat um und speichert sie im angegebenen Ausgabeverzeichnis.
Häufig gestellte Fragen#
Ultralytics YOLO unterstützt mehrere Datensatzformate für die Instanzsegmentierung. Das wichtigste ist das eigene Ultralytics-YOLO-Format. Für jedes Bild in deinem Datensatz ist eine entsprechende Textdatei mit den Objektinformationen erforderlich, die in mehrere Zeilen unterteilt ist (eine Zeile pro Objekt) und den Klassenindex sowie normalisierte Polygonkoordinaten aufführt. Ausführlichere Anweisungen zum YOLO-Datensatzformat findest du unter Übersicht über Datensätze für die Instanzsegmentierung.
Mit den Ultralytics-Werkzeugen lassen sich Annotationen aus dem COCO-Format ganz einfach in das YOLO-Format umwandeln. Dazu kannst du die Funktion
convert_cocoaus dem Modulultralytics.data.converterverwenden:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)Dieses Skript wandelt die Annotationen deines COCO-Datensatzes in das erforderliche YOLO-Format um, sodass sich der Datensatz zum Trainieren deiner YOLO-Modelle eignet. Weitere Informationen findest du unter Label-Formate übertragen oder umwandeln.
Um eine YAML-Datei für das Training von YOLO-Modellen mit Ultralytics vorzubereiten, musst du die Datensatzpfade und Klassennamen festlegen. Hier ist ein Beispiel für eine YAML-Konfiguration:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipPasse die Pfade und Klassennamen an deinen Datensatz an. Weitere Informationen findest du im Abschnitt YAML-Format für Datensätze.
Mit der automatischen Annotation in Ultralytics YOLO kannst du mithilfe eines vortrainierten Erkennungsmodells Segmentierungsannotationen für deinen Datensatz erstellen. Dadurch wird der Bedarf an manueller Beschriftung erheblich reduziert. Du kannst die Funktion
auto_annotatewie folgt verwenden:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # oder sam_model="mobile_sam.pt"Diese Funktion automatisiert den Annotationsprozess und macht ihn dadurch schneller und effizienter. Weitere Informationen findest du in der Referenz zur automatischen Annotation.