Ultralytics YOLO27:
Get Started

Ü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:

  1. Eine Textdatei pro Bild: Zu jedem Bild im Datensatz gehört eine Textdatei mit demselben Namen wie die Bilddatei und der Erweiterung „.txt“.
  2. Eine Zeile pro Objekt: Jede Zeile in der Textdatei entspricht einer Objektinstanz im Bild.
  3. 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
Tipp
  • 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 einem ValueError zurü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/cfg/datasets/coco8-seg.yaml
# 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.zip

Die 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.

Bildpfade in einer `*.txt`-Datei
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: person

names ist ein Wörterbuch mit Klassennamen. Die Reihenfolge der Namen muss der Reihenfolge der Objektklassenindizes in den YOLO-Datensatzdateien entsprechen.

Verwendung#

Beispiel
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 ultralytics eignet.
  • 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:

Beispiel
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:

Beispiel
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentTypStandardBeschreibung
datastrerforderlichPfad zum Verzeichnis mit den Zielbildern für die Annotation oder Segmentierung.
det_modelstr'yolo26x.pt'Pfad zum YOLO-Erkennungsmodell für die anfängliche Objekterkennung.
sam_modelstr'sam_b.pt'Pfad zum SAM-Modell für die Segmentierung (unterstützt SAM-, SAM 2-, MobileSAM- und SAM 3-Gewichte).
devicestr''Rechengerät (z. B. 'cuda:0', 'cpu' oder '' zur automatischen Geräteerkennung).
conffloat0.25Konfidenzschwelle der YOLO-Erkennung, um unsichere Erkennungen herauszufiltern.
ioufloat0.45IoU-Schwelle für Non-Maximum Suppression, um überlappende Boxen herauszufiltern.
imgszint640Eingabegröße für die Größenanpassung von Bildern (bei Bedarf auf das nächste Vielfache von 32 aufgerundet).
max_detint300Höchstzahl der Erkennungen pro Bild zur effizienten Speichernutzung.
classeslist[int]NoneListe der zu erkennenden Klassenindizes (z. B. [0, 1] für Person und Fahrrad).
output_dirstrNoneSpeicherverzeichnis 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_coco aus dem Modul ultralytics.data.converter verwenden:

    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.zip

    Passe 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_annotate wie 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.

Kommentare