Ultralytics YOLO27:

Überblick über Datensätze für die Instanzsegmentierung#

Die Instanzsegmentierung ist eine Aufgabe der Computer Vision, bei der einzelne Objekte in einem Bild identifiziert und abgegrenzt werden. Dieser Leitfaden bietet einen Überblick über die von Ultralytics YOLO für Instanzsegmentierungsaufgaben unterstützten Datensatzformate sowie Anleitungen zum Vorbereiten, Konvertieren und Verwenden dieser Datensätze für das Training deiner Modelle.

Unterstützte Datensatzformate#

Ultralytics-YOLO-Format#

Das beim Training von YOLO-Segmentierungsmodellen verwendete Format für Datensatzbeschriftungen lautet wie folgt:

  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 einzelnen 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 eine Person, 1 für ein Auto usw.).
    • Objektpolygonkoordinaten: Die (x, y)-Punkte, die die Maske des Objekts umreißen, normalisiert auf Werte zwischen 0 und 1.

Das Format einer einzelnen Zeile in der Segmentierungsdatensatzdatei lautet wie folgt:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

In diesem Format ist <class-index> der Index der Objektklasse, und <x1> <y1> <x2> <y2> ... <xn> <yn> sind die normalisierten Polygonkoordinaten der Segmentierungsmaske des Objekts (die Werte liegen in [0, 1] relativ zur Bildbreite und -höhe vor). Die Koordinaten werden durch Leerzeichen getrennt.

Hier ist ein Beispiel für das YOLO-Datensatzformat eines einzelnen Bildes mit zwei Objekten, die aus einem Segment mit 3 Punkten und einem Segment mit 5 Punkten bestehen.

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 jeder Zeile 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 Segment-Datensatz, bei dem die Anzahl der Boxen und die Anzahl der Polygone voneinander abweichen, wird beim Laden der Labels mit einem ValueError abgelehnt.

YAML-Format für Datensätze#

Das Ultralytics-Framework verwendet das YAML-Dateiformat, um den Datensatz und die Modellkonfiguration für das Training von Segmentierungsmodellen zu definieren. Hier ist ein Beispiel für das YAML-Format zur Definition 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, die pro Zeile einen Bildpfad enthält (Pfade, die mit ./ beginnen, werden relativ zur *.txt-Datei aufgelöst). Eine *.txt-Datei ist nützlich, um mit einer Teilmenge eines Verzeichnisses zu trainieren, nicht beschriftete Bilder zu überspringen oder Bilder aus mehreren Quellen zu einem Datensatzabschnitt zusammenzuführen.

Bildpfade als `*.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 sollte mit der Reihenfolge der Objektklassenindizes in den YOLO-Datensatzdateien übereinstimmen.

Verwendung#

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Unterstützte Datensätze#

Ultralytics YOLO unterstützt verschiedene Datensätze für Instanzsegmentierungsaufgaben. Hier ist eine Liste der am häufigsten verwendeten Datensätze. Die meisten dieser Datensätze werden auch auf der Ultralytics Platform gehostet, wo du die Bilder und Annotationen durchsuchen, Datensatzstatistiken anzeigen und sie für das Cloud-Training klonen kannst.

  • Carparts-seg: Ein spezialisierter Datensatz zur Segmentierung von Fahrzeugteilen, der sich ideal für Anwendungen im Automobilbereich eignet. Er umfasst verschiedene Fahrzeuge mit detaillierten Beschriftungen einzelner Fahrzeugkomponenten.
  • COCO: Ein umfassender Datensatz für Objekterkennung, Segmentierung und Bildbeschreibung mit mehr als 200.000 beschrifteten Bildern aus einer Vielzahl von Kategorien.
  • COCO8-seg: Eine kompakte Teilmenge von COCO mit 8 Bildern für schnelle Tests des Trainings von Segmentierungsmodellen, ideal für CI-Prüfungen und die Validierung von Arbeitsabläufen im Repository ultralytics.
  • COCO128-seg: Ein kleinerer Datensatz für Aufgaben der Instanzsegmentierung, der eine Teilmenge von 128 COCO-Bildern mit Segmentierungsbeschriftungen enthält.
  • Crack-seg: Ein Datensatz zur Segmentierung von Rissen in verschiedenen Oberflächen. Er ist für die Instandhaltung von Infrastruktur und die Qualitätskontrolle von großer Bedeutung und stellt detaillierte Bilder zum Trainieren von Modellen bereit, die strukturelle Schwachstellen erkennen.
  • Package-seg: Ein Datensatz zur Segmentierung verschiedener Arten und Formen von Verpackungsmaterialien. Er eignet sich besonders für die Logistik und die Automatisierung von Lagerhäusern 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 im Ultralytics-YOLO-Format für das Training von Segmentierungsmodellen verwenden möchtest, stelle sicher, dass er dem oben unter „Ultralytics-YOLO-Format“ angegebenen Format entspricht. Konvertiere deine Beschriftungen in das erforderliche Format 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 sich die Beschriftungsdateien .txt im Bildordner befinden, kann das dazu führen, dass das Modell Beschriftungen nicht erkennt.

Beschriftungsformate übertragen oder konvertieren#

COCO-Datensatzformat in YOLO-Format konvertieren#

Du kannst Beschriftungen aus dem beliebten COCO-Datensatz mithilfe des folgenden Codeausschnitts problemlos in das YOLO-Format konvertieren:

Beispiel
from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Mit diesem Konvertierungswerkzeug kannst du den COCO-Datensatz oder jeden Datensatz im COCO-Format in das Ultralytics-YOLO-Format konvertieren.

Denke daran, zu überprüfen, ob der Datensatz, den du verwenden möchtest, mit deinem Modell kompatibel ist und die erforderlichen Formatkonventionen einhält. Korrekt formatierte Datensätze sind entscheidend für das erfolgreiche Training von Segmentierungsmodellen.

Automatische Beschriftung#

Die automatische Beschriftung ist eine wichtige Funktion, mit der du mithilfe eines vortrainierten Erkennungsmodells einen Segmentierungsdatensatz erstellen kannst. Sie ermöglicht es dir, eine große Anzahl von Bildern schnell und präzise zu beschriften, ohne sie manuell kennzeichnen zu müssen, und spart dadurch Zeit und Aufwand.

Segmentierungsdatensatz mit einem Erkennungsmodell erstellen#

Um deinen Datensatz mithilfe des Ultralytics-Frameworks automatisch zu beschriften, 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")
ArgumentTypStandardwertBeschreibung
datastrerforderlichPfad zu dem Verzeichnis mit den Zielbildern für 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 Gewichte von SAM, SAM 2, MobileSAM und SAM 3).
devicestr''Rechengerät (z. B. „cuda:0“, „cpu“ oder „“ für die automatische Geräteerkennung).
conffloat0.25Konfidenzschwellenwert der YOLO-Erkennung zum Herausfiltern unsicherer Erkennungen.
ioufloat0.45IoU-Schwellenwert für die Unterdrückung nichtmaximaler Werte zum Herausfiltern überlappender Boxen.
imgszint640Eingabegröße für die Größenanpassung von Bildern (muss ein Vielfaches von 32 sein).
max_detint300Maximale Anzahl von 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 (Standard: benachbartes Verzeichnis zu <data>_auto_annotate_labels).

Die Funktion auto_annotate übernimmt 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, sowie das Gerät, auf dem die Modelle ausgeführt werden sollen, und das Ausgabeverzeichnis zum Speichern der beschrifteten Ergebnisse.

Durch die Nutzung der Leistungsfähigkeit vortrainierter Modelle kann die automatische Beschriftung den Zeit- und Arbeitsaufwand für die Erstellung hochwertiger Segmentierungsdatensätze erheblich reduzieren. Diese Funktion ist besonders nützlich für Forschende und Entwickler, die mit großen Bildsammlungen arbeiten, da sie sich dadurch auf die Modellentwicklung und -bewertung statt auf die manuelle Beschriftung konzentrieren können.

Datensatzbeschriftungen visualisieren#

Vor dem Training deines Modells ist es oft hilfreich, die Beschriftungen deines Datensatzes zu visualisieren, um ihre Richtigkeit sicherzustellen. Ultralytics stellt dafür eine Hilfsfunktion bereit:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Diese Funktion zeichnet Begrenzungsrahmen, versieht Objekte mit Klassennamen und passt die Textfarbe zur besseren Lesbarkeit an. So kannst du Beschriftungsfehler vor dem Training erkennen und korrigieren.

Segmentierungsmasken in das YOLO-Format konvertieren#

Wenn du Segmentierungsmasken im Binärformat hast, kannst du sie mit folgendem Befehl in das YOLO-Segmentierungsformat konvertieren:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Dieses Hilfswerkzeug konvertiert binäre Maskenbilder in das YOLO-Segmentierungsformat und speichert sie im angegebenen Ausgabeverzeichnis.

FAQ#

  • Ultralytics YOLO unterstützt mehrere Datensatzformate für die Instanzsegmentierung, wobei das primäre Format das eigene Ultralytics-YOLO-Format ist. Jedes Bild in deinem Datensatz benötigt eine zugehörige Textdatei mit den Objektinformationen in mehreren Zeilen (eine Zeile pro Objekt), die den Klassenindex und normalisierte Begrenzungskoordinaten enthält. Ausführlichere Anleitungen zum YOLO-Datensatzformat findest du unter Überblick über Datensätze für die Instanzsegmentierung.

  • Das Konvertieren von Beschriftungen im COCO-Format in das YOLO-Format ist mit den Ultralytics-Werkzeugen unkompliziert. Du kannst 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 konvertiert die Beschriftungen deines COCO-Datensatzes in das erforderliche YOLO-Format, sodass du ihn zum Training deiner YOLO-Modelle verwenden kannst. Weitere Informationen findest du unter Beschriftungsformate übertragen oder konvertieren.

  • Um eine YAML-Datei für das Training von YOLO-Modellen mit Ultralytics vorzubereiten, musst du die Datensatzpfade und Klassennamen definieren. 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

    Stelle sicher, dass du die Pfade und Klassennamen entsprechend deinem Datensatz aktualisierst. Weitere Informationen findest du im Abschnitt YAML-Format für Datensätze.

  • Mit der automatischen Beschriftung in Ultralytics YOLO kannst du mithilfe eines vortrainierten Erkennungsmodells Segmentierungsbeschriftungen 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")  # or sam_model="mobile_sam.pt"

    Diese Funktion automatisiert den Beschriftungsprozess und macht ihn schneller und effizienter. Weitere Informationen findest du in der Referenz zur automatischen Beschriftung.

Kommentare