Übersicht über Datensätze zur Posenschätzung#
Unterstützte Datensatzformate#
Ultralytics-YOLO-Format#
Das für das Training von YOLO-Posenmodellen verwendete Format für Datensatzbeschriftungen sieht folgendermaßen 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.).
- Koordinaten des Objektmittelpunkts: Die x- und y-Koordinaten des Objektmittelpunkts, auf Werte zwischen 0 und 1 normiert.
- Objektbreite und -höhe: Die Breite und Höhe des Objekts, auf Werte zwischen 0 und 1 normiert.
- Koordinaten der Objekt-Keypoints: Die Keypoints des Objekts sind auf Werte zwischen 0 und 1 normiert.
Hier ist ein Beispiel für das Beschriftungsformat einer Posenschätzungsaufgabe:
Format mit 2D-Keypoints
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>Format mit Keypoint-Sichtbarkeit (enthält die Sichtbarkeit jedes Punkts)
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> ... <pxn> <pyn> <pn-visibility>In diesem Format ist <class-index> der Klassenindex des Objekts, <x> <y> <width> <height> sind die normierten Koordinaten der Bounding Box und <px1> <py1> <px2> <py2> ... <pxn> <pyn> sind die normierten Koordinaten der Keypoints. Der Sichtbarkeitskanal ist optional, aber für Datensätze nützlich, in denen Verdeckungen annotiert sind.
YAML-Format für Datensätze#
Das Ultralytics-Framework verwendet das YAML-Dateiformat, um den Datensatz und die Modellkonfiguration für das Training von Posenschätzungsmodellen festzulegen. Hier ist ein Beispiel für das YAML-Format zur Definition eines Posendatensatzes:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose
# Example usage: yolo train data=coco8-pose.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-pose ← 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-pose # 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)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes
names:
0: person
# Keypoint names per class
kpt_names:
0:
- nose
- left_eye
- right_eye
- left_ear
- right_ear
- left_shoulder
- right_shoulder
- left_elbow
- right_elbow
- left_wrist
- right_wrist
- left_hip
- right_hip
- left_knee
- right_knee
- left_ankle
- right_ankle
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.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-pose # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
kpt_shape: [17, 3] # required for pose datasets
names:
0: personnames ist ein Wörterbuch mit Klassennamen. Die Reihenfolge der Namen muss der Reihenfolge der Objektklassenindizes in den YOLO-Datensatzdateien entsprechen.
(Optional) flip_idx ordnet jedem Keypoint sein Spiegelbild zu, damit die Augmentierung durch horizontales Spiegeln links und rechts bei symmetrischen Skeletten wie dem menschlichen Körper oder Gesicht konsistent hält. Für fünf Gesichtsmerkmale mit den Indizes [linkes Auge, rechtes Auge, Nase, linker Mundwinkel, rechter Mundwinkel] = [0, 1, 2, 3, 4] lautet flip_idx [1, 0, 2, 4, 3]: Die Links-rechts-Paare 0–1 und 3–4 werden vertauscht, während die Nase ihren Index behält.
(Optional) kpt_oks_sigmas legt benutzerdefinierte OKS-Sigmas für jeden Keypoint fest, die während des Trainings und der Validierung verwendet werden, z. B. [0.26, 0.25, 0.25, ...]. Die Listenlänge muss der Anzahl der Keypoints N aus kpt_shape entsprechen, und alle Werte müssen positiv sein. Wenn keine Werte angegeben werden, kommen für kpt_shape: [17, 3] die Sigmas der 17 COCO-Keypoints zum Einsatz, andernfalls ein einheitlicher Wert 1/N.
Verwendung#
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-pose.pt") # ein vortrainiertes Modell laden (für das Training empfohlen)
# Das Modell trainieren
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)Unterstützte Datensätze#
Dieser Abschnitt stellt Datensätze vor, die mit dem Ultralytics-YOLO-Format kompatibel sind und zum Training von Modellen zur Posenschätzung verwendet werden können. Die meisten dieser Datensätze sind auch auf der Ultralytics Platform gehostet. Dort kannst du Bilder und Annotationen durchsuchen, Datensatzstatistiken einsehen und Datensätze für das Training in der Cloud klonen.
COCO-Pose#
- Beschreibung: COCO-Pose ist ein umfangreicher Datensatz zur menschlichen Posenschätzung. Er umfasst COCO-2017-Bilder, auf denen Personen mit annotierten Keypoints zu sehen sind.
- Beschriftungsformat: Entspricht dem oben beschriebenen Ultralytics-YOLO-Format und enthält Keypoints für menschliche Posen.
- Anzahl der Klassen: 1 (Person).
- Keypoints: 17 Keypoint-Typen, darunter Nase, Augen, Ohren, Schultern, Ellbogen, Handgelenke, Hüften, Knie und Knöchel. Für jeden Keypoint gibt es eine Sichtbarkeitsdimension.
- Verwendung: Geeignet zum Training von Modellen zur menschlichen Posenschätzung.
- Zusätzliche Hinweise: Der Datensatz basiert auf dem Wettbewerb COCO Keypoints 2017: 58.945 Bilder mit Annotationen für 156.165 Personen.
- Mehr über COCO-Pose erfahren
COCO8-Pose#
- Beschreibung: Der kleine, aber vielseitige Posenschätzungsdatensatz Ultralytics COCO8-Pose besteht aus den ersten 8 Bildern des COCO-Train-2017-Datensatzes: 4 Bilder für das Training und 4 für die Validierung.
- Beschriftungsformat: Entspricht dem oben beschriebenen Ultralytics-YOLO-Format und enthält Keypoints für menschliche Posen.
- Anzahl der Klassen: 1 (Person).
- Keypoints: 17 Keypoint-Typen, darunter Nase, Augen, Ohren, Schultern, Ellbogen, Handgelenke, Hüften, Knie und Knöchel. Für jeden Keypoint gibt es eine Sichtbarkeitsdimension.
- Verwendung: Geeignet zum Testen und Debuggen von Posenschätzungsmodellen sowie zum Experimentieren mit neuen Ansätzen zur Keypoint-Erkennung.
- Zusätzliche Hinweise: COCO8-Pose eignet sich ideal für Plausibilitätsprüfungen und CI-Prüfungen.
- Mehr über COCO8-Pose erfahren
Dog-Pose#
- Beschreibung: Der Datensatz Dog-Pose von Ultralytics umfasst 6.773 Trainingsbilder und 1.703 Validierungsbilder zur Keypoint-Erkennung bei Hunden.
- Beschriftungsformat: Entspricht dem Ultralytics-YOLO-Format und enthält Annotationen für mehrere Keypoints, die speziell auf die Anatomie von Hunden zugeschnitten sind.
- Anzahl der Klassen: 1 (Hund).
- Keypoints: 24 Keypoints mit jeweils einer Sichtbarkeitsdimension, abgestimmt auf Hundeposen wie Gliedmaßen, Gelenke und Kopfpositionen.
- Verwendung: Ideal zum Training von Modellen, die Hundeposen in verschiedenen Szenarien schätzen – von der Forschung bis hin zu Anwendungen in der Praxis.
- Zusätzliche Hinweise: Die Quellbilder stammen aus dem Stanford Dogs Dataset.
- Mehr über Dog-Pose erfahren
Hand-Keypoints#
- Beschreibung: Der Hand-Keypoints-Datensatz von Ultralytics umfasst 26.768 Bilder, davon 18.776 für das Training und 7.992 für die Validierung.
- Beschriftungsformat: Entspricht dem oben beschriebenen Ultralytics-YOLO-Format, enthält jedoch 21 Keypoints für eine menschliche Hand sowie eine Sichtbarkeitsdimension.
- Anzahl der Klassen: 1 (Hand).
- Keypoints: 21 Keypoints.
- Verwendung: Ideal für die Posenschätzung menschlicher Hände und die Gestenerkennung.
- Zusätzliche Hinweise: Die Keypoint-Annotationen werden mit Google MediaPipe erstellt, um eine einheitliche Beschriftung sicherzustellen.
- Mehr über Hand-Keypoints erfahren
Tiger-Pose#
- Beschreibung: Der Tiger-Pose-Datensatz von Ultralytics umfasst 263 Bilder aus einem YouTube-Video, davon 210 für das Training und 53 für die Validierung.
- Beschriftungsformat: Entspricht dem oben beschriebenen Ultralytics-YOLO-Format und enthält 12 Keypoints für Tierposen, jedoch keine Sichtbarkeitsdimension.
- Anzahl der Klassen: 1 (Tiger).
- Keypoints: 12 Keypoints.
- Verwendung: Ideal für Tierposen oder alle anderen Posen, die nicht auf Menschen bezogen sind.
- Zusätzliche Hinweise: Veröffentlicht unter der AGPL-3.0-Lizenz.
- Mehr über Tiger-Pose erfahren
Eigenen Datensatz hinzufügen#
Wenn du einen eigenen Datensatz hast und ihn mit dem Ultralytics-YOLO-Format zum Training von Posenschätzungsmodellen verwenden möchtest, achte darauf, 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.
Um den Konvertierungsschritt ganz zu überspringen, kannst du mit der Ultralytics Platform Rohbilder hochladen, Keypoints im Browser annotieren und direkt mit dem resultierenden Datensatz trainieren.
Konvertierungswerkzeug#
Ultralytics stellt ein praktisches Werkzeug bereit, mit dem sich Beschriftungen aus dem gängigen Format des COCO-Datensatzes in das YOLO-Format umwandeln lassen:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Mit diesem Konvertierungswerkzeug kannst du den COCO-Datensatz oder beliebige Datensätze im COCO-Format in das Ultralytics-YOLO-Format umwandeln. Der Parameter use_keypoints gibt an, ob die konvertierten Beschriftungen Keypoints für die Posenschätzung enthalten sollen.
Häufig gestellte Fragen#
Im Ultralytics-YOLO-Format für Posenschätzungsdatensätze wird jedes Bild mit einer zugehörigen Textdatei beschriftet. Jede Zeile der Textdatei enthält Informationen zu einer Objektinstanz:
- Klassenindex des Objekts
- Mittelpunktskoordinaten des Objekts (normierte x- und y-Werte)
- Breite und Höhe des Objekts (normiert)
- Koordinaten der Objekt-Keypoints (normierte pxn- und pyn-Werte)
Bei 2D-Posen umfassen die Keypoints normierte x- und y-Koordinaten. Mit einer Sichtbarkeitsdimension hat jeder Keypoint außerdem ein Sichtbarkeitskennzeichen. Weitere Informationen findest du unter Ultralytics-YOLO-Format.
coco-pose.yamlist im Paket enthalten und lädt die Bilder und Beschriftungen bei der ersten Verwendung herunter. Eine manuelle Vorbereitung ist daher nicht erforderlich:from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") # vortrainiertes Modell laden results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)Einzelheiten zum Datensatz findest du unter COCO-Pose; die Seite Training enthält die vollständige Liste der Argumente.
So fügst du deinen Datensatz hinzu:
-
Wandle deine Annotationen in das Ultralytics-YOLO-Format um.
-
Erstelle eine YAML-Konfigurationsdatei mit den Datensatzpfaden, der Anzahl der Klassen und den Klassennamen.
-
Verwende die Konfigurationsdatei, um dein Modell zu trainieren:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Eine vollständige Anleitung findest du im Abschnitt Eigenen Datensatz hinzufügen.
-
Die YAML-Datei des Datensatzes in Ultralytics YOLO legt den Datensatz und die Modellkonfiguration für das Training fest. Sie gibt die Pfade zu Trainings-, Validierungs- und Testbildern, die Formen der Keypoints, die Klassennamen und weitere Konfigurationsoptionen an. Dieses strukturierte Format vereinfacht die Verwaltung von Datensätzen und das Modelltraining. Hier ist ein Beispiel für das YAML-Format:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/pose/coco8-pose # Example usage: yolo train data=coco8-pose.yaml # parent # ├── ultralytics # └── datasets # └── coco8-pose ← 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-pose # 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) # Keypoints kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible) flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15] # Classes names: 0: person # Keypoint names per class kpt_names: 0: - nose - left_eye - right_eye - left_ear - right_ear - left_shoulder - right_shoulder - left_elbow - right_elbow - left_wrist - right_wrist - left_hip - right_hip - left_knee - right_knee - left_ankle - right_ankle # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-pose.zipWeitere Informationen zum Erstellen von YAML-Konfigurationsdateien findest du unter YAML-Format für Datensätze.
Ultralytics stellt ein Konvertierungswerkzeug bereit, mit dem sich Beschriftungen des COCO-Datensatzes einschließlich Keypoint-Informationen in das YOLO-Format umwandeln lassen:
from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)Mit diesem Werkzeug lassen sich COCO-Datensätze nahtlos in YOLO-Projekte integrieren. Einzelheiten findest du im Abschnitt Konvertierungswerkzeug und in der Anleitung zur Datenvorverarbeitung.