Zum Inhalt springen

Überblick über Datensätze zur Instanzsegmentierung

Die Instanzsegmentierung ist eine Aufgabe der Computer Vision, bei der einzelne Objekte innerhalb eines Bildes identifiziert und abgegrenzt werden. Dieser Leitfaden bietet einen Überblick über die von Ultralytics YOLO unterstützten Dataset-Formate für Instanzsegmentierungsaufgaben sowie Anweisungen zur Vorbereitung, Konvertierung und Verwendung dieser Datasets für das Training Ihrer Modelle.

Unterstützte Datensatzformate

Ultralytics YOLO Format

Das für das Training von YOLO-Segmentierungsmodellen verwendete Datensatz-Labelformat ist wie folgt:

  1. Eine Textdatei pro Bild: Jedes Bild im Datensatz hat eine entsprechende Textdatei mit dem gleichen 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 über die Objektinstanz:
    • Objektklassenindex: Eine ganze Zahl, die die Klasse des Objekts darstellt (z. B. 0 für Person, 1 für Auto usw.).
    • Begrenzungskoordinaten des Objekts: Die Begrenzungskoordinaten um den Maskenbereich, normalisiert auf einen Wert zwischen 0 und 1.

Das Format für eine einzelne Zeile in der Segmentierungsdatensatzdatei ist wie folgt:

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

In diesem Format <class-index> ist der Index der Klasse für das Objekt, und <x1> <y1> <x2> <y2> ... <xn> <yn> sind die Begrenzungskoordinaten der Segmentierungsmaske des Objekts. Die Koordinaten sind durch Leerzeichen getrennt.

Hier ist ein Beispiel für das YOLO-Datensatzformat für ein einzelnes Bild mit zwei Objekten, die aus einem 3-Punkte-Segment und einem 5-Punkte-Segment 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 Segmentierungsbezeichnung muss eine haben Minimum von 3 xy-Punkten: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Datensatz YAML-Format

Das Ultralytics-Framework verwendet ein YAML-Dateiformat, um die Datensatz- und Modellkonfiguration für das Training von Segmentierungsmodellen zu definieren. Hier ist ein Beispiel für das YAML-Format, das zur Definition eines Segmentierungsdatensatzes verwendet wird:

# 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 train und val Felder geben die Pfade zu den Verzeichnissen an, die die Trainings- bzw. Validierungsbilder enthalten.

names ist ein Dictionary mit Klassennamen. Die Reihenfolge der Namen sollte mit der Reihenfolge der Objektklassenindizes in den YOLO-Datensatzdateien übereinstimmen.

Nutzung

Beispiel

from ultralytics import YOLO

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

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt 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:

  • COCO: Ein umfassender Datensatz für Objekterkennung, Segmentierung und Bildunterschriftung mit über 200.000 beschrifteten Bildern aus einer Vielzahl von Kategorien.
  • COCO8-seg: Ein kompakter 8-Bild-Ausschnitt von COCO, der für schnelle Tests des Segmentierungsmodelltrainings entwickelt wurde und sich ideal für CI-Prüfungen und Workflow-Validierung eignet. ultralytics Repository.
  • COCO128-seg: Ein kleinerer Datensatz für Instanzsegmentierungs-Aufgaben, der eine Teilmenge von 128 COCO-Bildern mit Segmentierungsanmerkungen enthält.
  • Carparts-seg: Ein spezialisierter Datensatz, der sich auf die Segmentierung von Autoteilen konzentriert und ideal für Automobilanwendungen ist. Er umfasst eine Vielzahl von Fahrzeugen mit detaillierten Anmerkungen zu einzelnen Fahrzeugkomponenten.
  • Crack-seg: Ein Datensatz, der auf die Segmentierung von Rissen in verschiedenen Oberflächen zugeschnitten ist. Er ist unerlässlich für die Instandhaltung der Infrastruktur und die Qualitätskontrolle und bietet detaillierte Bilder für das Training von Modellen zur Erkennung von strukturellen Schwächen.
  • Package-seg: Ein Datensatz, der der Segmentierung verschiedener Arten von Verpackungsmaterialien und -formen gewidmet ist. Er ist besonders nützlich für die Logistik- und Lagerautomatisierung und unterstützt die Entwicklung von Systemen für die Handhabung und Sortierung von Paketen.

Hinzufügen Ihres eigenen Datensatzes

Wenn Sie Ihr eigenes Dataset haben und es für das Training von Segmentierungsmodellen im Ultralytics YOLO-Format verwenden möchten, stellen Sie sicher, dass es dem oben unter „Ultralytics YOLO-Format“ angegebenen Format entspricht. Konvertieren Sie Ihre Annotationen in das erforderliche Format und geben Sie die Pfade, die Anzahl der Klassen und die Klassennamen in der YAML-Konfigurationsdatei an.

Labelformate portieren oder konvertieren

COCO-Datensatzformat zu YOLO-Format

Sie können Labels einfach aus dem populären COCO-Datensatzformat in das YOLO-Format konvertieren, indem Sie den folgenden Code-Schnipsel verwenden:

Beispiel

from ultralytics.data.converter import convert_coco

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

Dieses Konvertierungstool kann verwendet werden, um den COCO-Datensatz oder einen beliebigen Datensatz im COCO-Format in das Ultralytics YOLO-Format zu konvertieren.

Denken Sie daran, nochmals zu überprüfen, ob das Dataset, das Sie verwenden möchten, mit Ihrem Modell kompatibel ist und die erforderlichen Formatkonventionen einhält. Korrekt formatierte Datasets sind entscheidend für das Trainieren erfolgreicher Objekterkennungsmodelle.

Automatische Annotation

Die automatische Annotation ist eine wesentliche Funktion, mit der Sie einen Segmentierungsdatensatz mithilfe eines vortrainierten Erkennungsmodells erstellen können. Sie ermöglicht es Ihnen, schnell und genau eine große Anzahl von Bildern ohne manuelle Beschriftung zu annotieren, wodurch Sie Zeit und Aufwand sparen.

Segmentierungsdatensatz mithilfe eines Erkennungsmodells generieren

Um Ihr Dataset mit dem Ultralytics Framework automatisch zu annotieren, können Sie das folgende verwenden: auto_annotate Funktion, wie unten gezeigt:

Beispiel

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argument Typ Standard Beschreibung
data str erforderlich Pfad zum Verzeichnis mit den Zielbildern für Annotation oder Segmentierung.
det_model str 'yolo11x.pt' YOLO-Erkennungsmodellpfad für die anfängliche Objekterkennung.
sam_model str 'sam_b.pt' SAM-Modellpfad für die Segmentierung (unterstützt SAM, SAM2-Varianten und mobile_sam-Modelle).
device str '' Rechengerät (z. B. 'cuda:0', 'cpu' oder '' für automatische Geräteerkennung).
conf float 0.25 YOLO-Erkennungsschwellenwert für die Filterung schwacher Erkennungen.
iou float 0.45 IoU-Schwellenwert für Non-Maximum Suppression, um überlappende Boxen zu filtern.
imgsz int 640 Eingangsgröße für die Größenänderung von Bildern (muss ein Vielfaches von 32 sein).
max_det int 300 Maximale Anzahl von Erkennungen pro Bild für Speichereffizienz.
classes list[int] None Liste der zu erkennenden Klassenindizes (z. B. [0, 1] für Personen & Fahrräder).
output_dir str None Speicherverzeichnis für Anmerkungen (standardmäßig './labels' relativ zum Datenpfad).

Die auto_annotate Funktion nimmt den Pfad zu Ihren Bildern entgegen, zusammen mit optionalen Argumenten zur Angabe der vortrainierten Erkennungsmodelle, d. h. YOLO11, YOLOv8 oder andere Modelle und Segmentierungsmodelle, d.h. SAM, SAM2 oder MobileSAMdas Gerät, auf dem die Modelle ausgeführt werden sollen, und das Ausgabeverzeichnis zum Speichern der annotierten Ergebnisse.

Durch die Nutzung der Leistungsfähigkeit vortrainierter Modelle kann die automatische Annotation die Zeit und den Aufwand, die für die Erstellung hochwertiger Segmentierungsdatensätze erforderlich sind, erheblich reduzieren. Diese Funktion ist besonders nützlich für Forscher und Entwickler, die mit großen Bildersammlungen arbeiten, da sie sich auf die Modellentwicklung und -bewertung anstatt auf die manuelle Annotation konzentrieren können.

Annotationen des Datensatzes visualisieren

Vor dem Training Ihres Modells ist es oft hilfreich, Ihre Datensatz-Annotationen zu visualisieren, um sicherzustellen, dass sie korrekt sind. Ultralytics stellt dafür eine Hilfsfunktion zur Verfügung:

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, beschriftet Objekte mit Klassennamen und passt die Textfarbe für eine bessere Lesbarkeit an. So können Sie vor dem Training Annotationsfehler erkennen und korrigieren.

Konvertieren von Segmentierungsmasken in das YOLO-Format

Wenn Sie Segmentierungsmasken im Binärformat haben, können Sie diese 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 Dienstprogramm konvertiert binäre Maskenbilder in das YOLO-Segmentierungsformat und speichert sie im angegebenen Ausgabeverzeichnis.

FAQ

Welche Datensatzformate unterstützt Ultralytics YOLO für die Instanzsegmentierung?

Ultralytics YOLO unterstützt verschiedene Datensatzformate für die Instanzsegmentierung, wobei das primäre Format das eigene Ultralytics YOLO-Format ist. Jedes Bild in Ihrem Datensatz benötigt eine entsprechende Textdatei mit Objektinformationen, die in mehrere Zeilen segmentiert sind (eine Zeile pro Objekt), wobei der Klassenindex und die normalisierten Begrenzungskoordinaten aufgeführt sind. Detailliertere Anweisungen zum YOLO-Datensatzformat finden Sie in der Übersicht über Instanzsegmentierungsdatensätze.

Wie kann ich COCO-Datensatz-Annotationen in das YOLO-Format konvertieren?

Die Konvertierung von Anmerkungen im COCO-Format in das YOLO-Format ist mit den Ultralytics-Tools unkompliziert. Sie können die convert_coco Funktion aus dem ultralytics.data.converter Modul:

from ultralytics.data.converter import convert_coco

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

Dieses Skript konvertiert Ihre COCO-Datensatzannotationen in das erforderliche YOLO-Format, wodurch es sich für das Training Ihrer YOLO-Modelle eignet. Weitere Informationen finden Sie unter Labelformate portieren oder konvertieren.

Wie bereite ich eine YAML-Datei für das Training von Ultralytics YOLO-Modellen vor?

Um eine YAML-Datei für das Training von YOLO-Modellen mit Ultralytics vorzubereiten, müssen Sie 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

Stellen Sie sicher, dass Sie die Pfade und Klassennamen entsprechend Ihrem Datensatz aktualisieren. Weitere Informationen finden Sie im Abschnitt Dataset YAML Format.

Was ist die Auto-Annotation-Funktion in Ultralytics YOLO?

Die automatische Annotation in Ultralytics YOLO ermöglicht es Ihnen, Segmentierungsannotationen für Ihren Datensatz mithilfe eines vortrainierten Erkennungsmodells zu generieren. Dies reduziert den Bedarf an manueller Beschriftung erheblich. Sie können die auto_annotate Funktion wie folgt:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")  # or sam_model="mobile_sam.pt"

Diese Funktion automatisiert den Annotationsprozess und macht ihn schneller und effizienter. Weitere Details finden Sie in der Auto-Annotate-Referenz.



📅 Vor 1 Jahr erstellt ✏️ Vor 1 Monat aktualisiert

Kommentare