姿态估计

YOLO pose estimation with human body keypoint detection

姿态估计是一项涉及识别图像中特定点(通常称为关键点)位置的任务。关键点可以代表物体的不同部分,例如关节、地标或其他独特的特征。关键点的位置通常表示为一组 2D [x, y] 或 3D [x, y, visible] 坐标。

姿态估计模型的输出是一组代表图像中物体关键点的点,通常还包括每个点的置信度分数。当你需要识别场景中物体的特定部分及其相互之间的位置关系时,姿态估计是一个很好的选择。



Watch: How to Run Real-Time Pose Estimation with Ultralytics YOLO26 | Tracking & Keypoints Extraction 🕺
提示

YOLO26 pose 模型使用 -pose 后缀,例如 yolo26n-pose.pt。这些模型在 COCO keypoints 数据集上进行训练,适用于各种姿态估计任务。

在默认的 YOLO26 姿态模型中,有 17 个关键点,每个点代表人体不同的部位。以下是每个索引与其对应身体关节的映射关系:

  1. 鼻子
  2. 左眼
  3. 右眼
  4. 左耳
  5. 右耳
  6. 左肩
  7. 右肩
  8. 左肘
  9. 右肘
  10. 左手腕
  11. 右手腕
  12. 左髋
  13. 右髋
  14. 左膝
  15. 右膝
  16. 左脚踝
  17. 右脚踝

模型

此处展示了 Ultralytics YOLO26 预训练姿态模型。检测、分割和姿态模型在 COCO 数据集上进行预训练,而分类模型在 ImageNet 数据集上进行预训练。

模型在首次使用时会自动从最新的 Ultralytics 发布版本下载。

模型尺寸
(像素)
mAP姿态
50-95(e2e)
mAP姿态
50(e2e)
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
参数
(M)
FLOPs
(B)
YOLO26n-pose64057.283.340.3 ± 0.51.8 ± 0.02.97.5
YOLO26s-pose64063.086.685.3 ± 0.92.7 ± 0.010.423.9
YOLO26m-pose64068.889.6218.0 ± 1.55.0 ± 0.121.573.1
YOLO26l-pose64070.490.5275.4 ± 2.46.5 ± 0.125.991.3
YOLO26x-pose64071.691.6565.4 ± 3.012.2 ± 0.257.6201.7
  • mAPval 值是在 COCO Keypoints val2017 数据集上进行的单模型、单尺度评估结果。
    通过 yolo val pose data=coco-pose.yaml device=0 进行复现
  • 速度指标是在 Amazon EC2 P4d 实例上对 COCO 验证集图像进行平均后的结果。
    通过 yolo val pose data=coco-pose.yaml batch=1 device=0|cpu 进行复现
  • 参数量 (Params)FLOPs 数值是针对执行 model.fuse() 后的融合模型而言的,该操作合并了 Conv 和 BatchNorm 层,并移除了端到端模型的辅助一对多检测头。预训练检查点保留了完整的训练架构,因此可能显示更高的数值。

训练

在 COCO8-pose 数据集上训练 YOLO26-pose 模型。COCO8-pose 数据集 是一个小型示例数据集,非常适合测试和调试你的姿态估计模型。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.yaml")  # build a new model from YAML
model = YOLO("yolo26n-pose.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-pose.yaml").load("yolo26n-pose.pt")  # build from YAML and transfer weights

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

See full train mode details in the Train page. Pose models can also be trained on cloud GPUs through Ultralytics Platform.

数据集格式

YOLO 姿态数据集格式可以在 Dataset Guide 中找到详细说明。要将你现有的其他格式(如 COCO 等)数据集转换为 YOLO 格式,请使用 Ultralytics 提供的 JSON2YOLO 工具。Ultralytics Platform 也支持姿态标注,并内置了针对人、手、脸及自定义关键点布局的骨骼模板。

对于自定义姿态估计任务,你也可以探索专门的数据集,例如用于动物姿态估计的 Tiger-Pose、用于手部追踪的 Hand Keypoints 或用于犬类姿态分析的 Dog-Pose

验证

在 COCO8-pose 数据集上验证已训练的 YOLO26n-pose 模型 accuracy。无需任何参数,因为 model 会保留其训练时的 data 和参数作为模型属性。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary for box with precision, recall, F1, TP, FP, and FN
metrics.pose.map  # map50-95(P)
metrics.pose.map50  # map50(P)
metrics.pose.map75  # map75(P)
metrics.pose.maps  # a list containing mAP50-95(P) for each category
metrics.pose.image_metrics  # per-image metrics dictionary for pose with precision, recall, F1, TP, FP, and FN

预测

使用已训练的 YOLO26n-pose 模型对图像进行预测。预测模式 允许你对图像、视频或实时流执行推理。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    xy = result.keypoints.xy  # x and y coordinates
    xyn = result.keypoints.xyn  # normalized
    kpts = result.keypoints.data  # x, y, visibility (if available)

See full predict mode details in the Predict page.

导出

将 YOLO26n 姿态模型导出为其他格式(如 ONNX、CoreML 等)。这使你能够在各种平台和设备上部署模型以进行 实时推理

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

可用的 YOLO26-pose 导出格式见下表。你可以使用 format 参数导出为任何格式,例如 format='onnx'format='engine'。你可以直接对导出的模型进行预测或验证,例如 yolo predict model=yolo26n-pose.onnx。模型导出完成后,系统会为你显示使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-pose.pt-
TorchScripttorchscriptyolo26n-pose.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-pose.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-pose_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-pose.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-pose.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-pose_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-pose.pbimgsz, batch, device
TF Litetfliteyolo26n-pose.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-pose_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-pose_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-pose_paddle_model/imgsz, batch, device
MNNmnnyolo26n-pose.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-pose_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-pose_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-pose_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-pose_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-pose_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-pose_deepx_model/imgsz, int8, data, optimize, device

See full export details in the Export page.

常见问题 (FAQ)

什么是 Ultralytics YOLO26 姿态估计,它是如何工作的?

Ultralytics YOLO26 姿态估计涉及识别图像中的特定点,即关键点。这些关键点通常代表物体的关节或其他重要特征。输出包括每个点的 [x, y] 坐标和置信度分数。YOLO26-pose 模型专门为此任务设计,并使用 -pose 后缀,例如 yolo26n-pose.pt。这些模型在 COCO keypoints 等数据集上进行过预训练,可用于各种姿态估计任务。更多信息,请访问 Pose Estimation Page

如何训练 YOLO26-pose 模型以适应自定义数据集?

在自定义数据集上训练 YOLO26-pose 模型需要加载一个模型,可以是 YAML 文件定义的新模型,也可以是预训练模型。然后,你可以使用指定的数据集和参数开始训练过程。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.yaml")  # build a new model from YAML
model = YOLO("yolo26n-pose.pt")  # load a pretrained model (recommended for training)

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

有关训练的详细信息,请参阅 Train Section。你也可以使用 Ultralytics Platform 进行无代码训练自定义姿态估计模型。

如何验证已训练的 YOLO26-pose 模型?

YOLO26-pose 模型的验证涉及使用训练期间保留的相同数据集参数来评估其准确性。以下是一个示例:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered

更多信息,请访问 Val Section

我可以将 YOLO26-pose 模型导出到其他格式吗?如果可以,怎么做?

是的,你可以将 YOLO26-pose 模型导出为各种格式,如 ONNX、CoreML、TensorRT 等。这可以通过 Python 或命令行界面 (CLI) 完成。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-pose.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

参考 Export Section 获取更多详细信息。导出的模型可以部署在边缘设备上,用于 实时应用,如健身追踪、体育分析或 机器人技术

有哪些可用的 Ultralytics YOLO26-pose 模型及其性能指标?

Ultralytics YOLO26 提供了各种预训练姿态模型,如 YOLO26n-pose、YOLO26s-pose、YOLO26m-pose 等。这些模型在大小、准确性 (mAP) 和速度上有所不同。例如,YOLO26n-pose 模型的 mAPpose50-95 达到 50.0,mAPpose50 达到 81.0。获取完整列表和性能详细信息,请访问 Models Section

评论