Posenschätzung mit Ultralytics YOLO#
Bei der Posenschätzung werden bestimmte Punkte in einem Bild lokalisiert, die üblicherweise als Keypoints bezeichnet werden. Die Keypoints können verschiedene Teile des Objekts darstellen, etwa Gelenke, Landmarken oder andere charakteristische Merkmale. Die Positionen der Keypoints werden üblicherweise als Satz von 2D-Koordinaten [x, y] dargestellt, optional mit einem Sichtbarkeitsindikator [x, y, visible].
Das Ergebnis eines Posenschätzungsmodells ist eine Reihe von Punkten, die die Keypoints eines Objekts im Bild darstellen, normalerweise zusammen mit den Konfidenzwerten für jeden Punkt. Posenschätzung eignet sich gut, wenn du bestimmte Teile eines Objekts in einer Szene und ihre relative Position zueinander erkennen musst.
Ansehen: So führst du mit Ultralytics YOLO26 eine Posenschätzung in Echtzeit aus | Verfolgung und Extraktion von Schlüsselpunkten 🕺
YOLO26-Pose-Modelle verwenden das Suffix -pose, z. B. yolo26n-pose.pt, und werden mit COCO-Keypoints vortrainiert.
Modelle#
Die mit dem Datensatz COCO-Keypoints vortrainierten YOLO26-Pose-Modelle sind unten aufgeführt.
Modelle werden bei der ersten Verwendung automatisch aus der neuesten Ultralytics-Version heruntergeladen.
| Modell | Größe (Pixel) | mAPpose 50-95(e2e) | mAPpose 50(e2e) | Geschwindigkeit CPU ONNX (ms) | Geschwindigkeit T4 TensorRT10 (ms) | Parameter (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-pose | 640 | 57.2 | 83.3 | 40.3 ± 0.5 | 1.8 ± 0.0 | 2.9 | 7.6 |
| YOLO26s-pose | 640 | 63.0 | 86.6 | 85.3 ± 0.9 | 2.7 ± 0.0 | 10.4 | 24.1 |
| YOLO26m-pose | 640 | 68.8 | 89.6 | 218.0 ± 1.5 | 5.0 ± 0.1 | 21.5 | 73.3 |
| YOLO26l-pose | 640 | 70.4 | 90.5 | 275.4 ± 2.4 | 6.5 ± 0.1 | 25.9 | 91.7 |
| YOLO26x-pose | 640 | 71.6 | 91.6 | 565.4 ± 3.0 | 12.2 ± 0.2 | 57.6 | 202.3 |
- Die Werte mAPval gelten für ein einzelnes Modell mit einer einzelnen Skalierung auf dem Datensatz COCO Keypoints val2017.
Mityolo pose val data=coco-pose.yaml device=0 nms=Falsereproduzieren - Geschwindigkeit: Durchschnitt über COCO-val-Bilder mit ONNX auf einer CPU und TensorRT10 auf einer NVIDIA-T4-GPU.
Mityolo pose val data=coco-pose.yaml batch=1 device=0|cpu nms=Falsereproduzieren - Die Werte für Parameter und FLOPs gelten für zusammengeführte Modelle nach dem Zusammenführen von Conv/BatchNorm und dem Entfernen des ungenutzten Erkennungszweigs. Vortrainierte Prüfpunkte behalten die vollständige Trainingsarchitektur bei und können daher höhere Werte aufweisen.
Vorläufige Ergebnisse für COCO-Keypoints findest du in der unveröffentlichten YOLO27-Vorschau.
Trainieren#
Trainiere YOLO26n-pose 100 Epochen lang mit einer Bildgröße von 640 auf dem Datensatz COCO8-pose. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite Konfiguration.
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-pose.yaml") # ein neues Modell aus YAML erstellen
model = YOLO("yolo26n-pose.pt") # ein vortrainiertes Modell laden (für das Training empfohlen)
model = YOLO("yolo26n-pose.yaml").load("yolo26n-pose.pt") # aus YAML erstellen und Gewichte übertragen
# Das Modell trainieren
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)Ausführliche Informationen zum Modus train findest du auf der Seite Trainieren. Pose-Modelle lassen sich auch mit dem Cloud-Training der Ultralytics Platform trainieren.
Datensatzformat#
Ausführliche Informationen zum YOLO-Pose-Datensatzformat findest du im Datensatzleitfaden. Um einen vorhandenen JSON-Datensatz mit COCO-Keypoints in das YOLO-Format umzuwandeln, verwende die integrierte Funktion convert_coco mit use_keypoints=True, wie im Leitfaden zur Umwandlung von COCO in YOLO beschrieben. Die Annotation in der Ultralytics Platform unterstützt ebenfalls Pose-Labels mit integrierten Skelettvorlagen für Personen, Hände, Gesichter und benutzerdefinierte Keypoint-Anordnungen.
Für spezielle Posenschätzungsaufgaben kannst du auch spezialisierte Datensätze erkunden, etwa Tiger-Pose zur Posenschätzung bei Tieren, Hand Keypoints zur Handverfolgung oder Dog-Pose zur Analyse der Körperhaltung von Hunden.
Validieren#
Validiere die Genauigkeit eines trainierten YOLO26n-pose-Modells. Es sind keine Argumente erforderlich, da das model die Trainings-data und Argumente als Modellattribute speichert: path/to/best.pt aus dem Beispiel zum Trainieren validiert anhand von COCO8-pose. Die offiziellen Gewichte speichern einen Trainingsdatensatzpfad, der auf deinem Rechner nicht vorhanden ist. Deshalb greifen sie mit einer Warnung auf den Standarddatensatz für die Aufgabe coco8-pose.yaml zurück. Übergib data, um anhand eines anderen Datensatzes zu validieren.
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-pose.pt") # Ein offizielles Modell laden
model = YOLO("path/to/best.pt") # Ein benutzerdefiniertes Modell laden
# Das Modell validieren
metrics = model.val() # Keine Argumente erforderlich, Datensatz und Einstellungen werden gespeichert
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # Eine Liste mit mAP50-95-Werten für jede Kategorie
metrics.box.image_metrics # Metrikwörterbuch pro Bild für die Box mit Präzision, Trefferquote, F1, TP, FP und FN
metrics.pose.map # map50-95(P)
metrics.pose.map50 # map50(P)
metrics.pose.map75 # map75(P)
metrics.pose.maps # eine Liste mit mAP50-95(P) für jede Kategorie
metrics.pose.image_metrics # Metrikwörterbuch pro Bild für die Pose mit Präzision, Trefferquote, F1, TP, FP und FNVorhersagen#
Verwende ein trainiertes YOLO26n-pose-Modell, um Vorhersagen für Bilder zu treffen.
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-pose.pt") # Ein offizielles Modell laden
model = YOLO("path/to/best.pt") # Ein benutzerdefiniertes Modell laden
# Mit dem Modell Vorhersagen erstellen
results = model("https://ultralytics.com/images/bus.jpg") # Eine Vorhersage für ein Bild erstellen
# Auf die Ergebnisse zugreifen
for result in results:
xy = result.keypoints.xy # x- und y-Koordinaten
xyn = result.keypoints.xyn # normalized
kpts = result.keypoints.data # x, y, Sichtbarkeit (falls verfügbar)Ausführliche Informationen zum Modus predict findest du auf der Seite Vorhersagen.
Ausgabe der Ergebnisse#
Die Posenschätzung gibt pro Bild ein Results-Objekt zurück. Die wichtigsten Vorhersagefelder sind result.keypoints für Posekoordinaten und result.boxes für die erkannten Instanzen, zu denen diese Keypoints gehören.
| Attribut | Typ | Form | Beschreibung |
|---|---|---|---|
result.keypoints | Keypoints | (N) | Schlüsselpunkte. |
result.keypoints.data | torch.float32 | (N,K,2/3) | x,y sowie optional Sichtbarkeit/Konfidenz. |
result.keypoints.xy | torch.float32 | (N,K,2) | Schlüsselpunkte in Pixelkoordinaten. |
result.keypoints.xyn | torch.float32 | (N,K,2) | Normalisierte Schlüsselpunkte. |
result.boxes | Boxes | (N) | Instanzboxen. |
Task-spezifische Results-Felder für alle Aufgaben findest du im Abschnitt Vorhersageergebnisse nach Aufgabe.
Keypoint-Indexzuordnung#
Die Standardmodelle YOLO26 Pose sagen die 17 COCO-Keypoints voraus. Der Index k in result.keypoints.xy[:, k] steht daher für:
- Nase
- Linkes Auge
- Rechtes Auge
- Linkes Ohr
- Rechtes Ohr
- Linke Schulter
- Rechte Schulter
- Linker Ellbogen
- Rechter Ellbogen
- Linkes Handgelenk
- Rechtes Handgelenk
- Linke Hüfte
- Rechte Hüfte
- Linkes Knie
- Rechtes Knie
- Linker Knöchel
- Rechter Knöchel
Exportieren#
Ein YOLO26n-pose-Modell in ein anderes Format wie ONNX, CoreML usw. exportieren.
from ultralytics import YOLO
# Ein Modell laden
model = YOLO("yolo26n-pose.pt") # Ein offizielles Modell laden
model = YOLO("path/to/best.pt") # Ein benutzerdefiniertes Modell laden
# Modell exportieren
model.export(format="onnx")Die verfügbaren Exportformate für YOLO26-pose sind in der Tabelle unten aufgeführt. Du kannst mit dem Argument format in jedes Format exportieren, zum Beispiel mit format='onnx' oder format='engine'. Du kannst direkt mit exportierten Modellen Vorhersagen treffen oder sie validieren, zum Beispiel mit yolo predict model=yolo26n-pose.onnx. Nach Abschluss des Exports werden Beispiele zur Verwendung deines Modells angezeigt.
| Format | Argument format | Modell | Metadaten | Argumente |
|---|---|---|---|---|
| PyTorch | - | yolo26n-pose.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-pose.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-pose.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-pose_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-pose.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-pose.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-pose.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-pose_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-pose.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-pose_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-pose.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-pose_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-pose.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-pose_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-pose_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-pose_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-pose_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-pose_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-pose_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-pose_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-pose_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-pose_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-pose_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None gibt standardmäßig Rohdaten für die externe NMS aus. Lege nms=False fest, um einen verfügbaren Kopf ohne NMS auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die obigen Einträge nms kennzeichnen Formate, die NMS mit nms=True integrieren können.
Ausführliche Informationen zu export findest du auf der Seite Export.
Häufig gestellte Fragen#
Bei der Posenschätzung mit Ultralytics YOLO26 werden bestimmte Punkte in einem Bild erkannt, die als Keypoints bezeichnet werden. Diese Keypoints stellen in der Regel Gelenke oder andere wichtige Merkmale des Objekts dar. Die Ausgabe umfasst die
[x, y]-Koordinaten und Konfidenzwerte für jeden Punkt. YOLO26-pose-Modelle wurden speziell für diese Aufgabe entwickelt und verwenden das Suffix-pose, zum Beispielyolo26n-pose.pt. Diese Modelle werden mit Datensätzen wie COCO-Keypoints vortrainiert und können für verschiedene Posenschätzungsaufgaben verwendet werden. Weitere Informationen findest du auf der Seite zur Posenschätzung.Um ein YOLO26-pose-Modell mit einem benutzerdefinierten Datensatz zu trainieren, musst du zunächst ein Modell laden – entweder ein neues, in einer YAML-Datei definiertes Modell oder ein vortrainiertes Modell. Anschließend kannst du den Trainingsprozess mit deinem angegebenen Datensatz und deinen Parametern starten.
Beispielfrom ultralytics import YOLO # Ein Modell laden model = YOLO("yolo26n-pose.yaml") # ein neues Modell aus YAML erstellen model = YOLO("yolo26n-pose.pt") # ein vortrainiertes Modell laden (für das Training empfohlen) # Das Modell trainieren results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Ausführliche Informationen zum Training findest du im Abschnitt Trainieren. Für einen Ansatz ohne Programmierung kannst du auch das Cloud-Training der Ultralytics Platform verwenden, um benutzerdefinierte Posenschätzungsmodelle zu trainieren.
Bei der Validierung eines YOLO26-pose-Modells wird seine Genauigkeit anhand derselben Datensatzparameter bewertet, die beim Training gespeichert wurden. Hier ein Beispiel:
Beispielfrom ultralytics import YOLO # Ein Modell laden model = YOLO("yolo26n-pose.pt") # Ein offizielles Modell laden model = YOLO("path/to/best.pt") # Ein benutzerdefiniertes Modell laden # Das Modell validieren metrics = model.val() # Keine Argumente erforderlich, Datensatz und Einstellungen werden gespeichertWeitere Informationen findest du im Abschnitt Val.
Ja, du kannst ein YOLO26-pose-Modell in verschiedene Formate wie ONNX, CoreML, TensorRT und weitere exportieren. Das geht mit Python oder über die Befehlszeilenschnittstelle (CLI).
Beispielfrom ultralytics import YOLO # Ein Modell laden model = YOLO("yolo26n-pose.pt") # Ein offizielles Modell laden model = YOLO("path/to/best.pt") # Ein benutzerdefiniertes Modell laden # Modell exportieren model.export(format="onnx")Weitere Informationen findest du im Abschnitt Export. Exportierte Modelle lassen sich auf Edge-Geräten für Echtzeitanwendungen wie Fitness-Tracking, Sportanalysen oder Robotik einsetzen.
Ultralytics YOLO26 bietet verschiedene vortrainierte Pose-Modelle, darunter YOLO26n-pose, YOLO26s-pose und YOLO26m-pose. Diese Modelle unterscheiden sich in Größe, Genauigkeit (mAP) und Geschwindigkeit. Die vollständige Liste mit mAP für COCO-Keypoints, Geschwindigkeit, Parametern und FLOPs pro Modell findest du im Abschnitt Modelle.