姿态估计
姿态估计是一项任务,涉及识别图像中特定点的位置,通常称为关键点。关键点可以代表对象的各个部分,如关节、地标或其他独特特征。关键点的位置通常表示为一组2D [x, y]
或3D [x, y, visible]
坐标。
姿态估计模型的输出是一组点,表示图像中对象上的关键点,通常还附带每个点的置信度分数。当你需要识别场景中对象的特定部分及其相互位置时,姿态估计是一个不错的选择。
观看: 使用Ultralytics YOLO进行姿态估计。 |
观看: 使用Ultralytics HUB进行姿态估计。 |
Tip
YOLO11 pose 模型使用 -pose
后缀,例如 yolo11n-pose.pt
。这些模型在 COCO关键点 数据集上进行了训练,适用于各种姿态估计任务。
在默认的YOLO11姿态模型中,有17个关键点,每个关键点代表人体的不同部位。以下是每个索引与其对应的身体关节的映射:
0: 鼻子 1: 左眼 2: 右眼 3: 左耳 4: 右耳 5: 左肩 6: 右肩 7: 左肘 8: 右肘 9: 左手腕 10: 右手腕 11: 左髋 12: 右髋 13: 左膝 14: 右膝 15: 左脚踝 16: 右脚踝
模型
此处展示了YOLO11预训练的姿态估计模型。检测、分割和姿态模型在 COCO 数据集上进行了预训练,而分类模型在 ImageNet 数据集上进行了预训练。
模型 在首次使用时会自动从Ultralytics的最新 发布版本 下载。
模型 | 尺寸 (像素) |
mAP姿态 50-95 |
mAP姿态 50 |
速度 CPU ONNX (毫秒) |
速度 T4 TensorRT10 (毫秒) |
参数 (百万) |
FLOPs (十亿) |
---|---|---|---|---|---|---|---|
YOLO11n-pose | 640 | 50.0 | 81.0 | 52.4 ± 0.5 | 1.7 ± 0.0 | 2.9 | 7.6 |
YOLO11s-pose | 640 | 58.9 | 86.3 | 90.5 ± 0.6 | 2.6 ± 0.0 | 9.9 | 23.2 |
YOLO11m-pose | 640 | 64.9 | 89.4 | 187.3 ± 0.8 | 4.9 ± 0.1 | 20.9 | 71.7 |
YOLO11l-pose | 640 | 66.1 | 89.9 | 247.7 ± 1.1 | 6.4 ± 0.1 | 26.2 | 90.7 |
YOLO11x-pose | 640 | 69.5 | 91.1 | 488.0 ± 13.9 | 12.1 ± 0.2 | 58.8 | 203.3 |
- mAPval 值是在 COCO关键点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
复现。
训练
在COCO8-pose数据集上训练一个YOLO11-pose模型。
Example
```bash
从YAML构建新模型并从头开始训练
yolo pose train data=coco8-pose.yaml model=yolo11n-pose.yaml epochs=100 imgsz=640
从预训练的*.pt模型开始训练
yolo pose train data=coco8-pose.yaml model=yolo11n-pose.pt epochs=100 imgsz=640
从YAML构建新模型,转移预训练权重并开始训练
``` yolo pose train data=coco8-pose.yaml model=yolo11n-pose.yaml pretrained=yolo11n-pose.pt epochs=100 imgsz=640
### 数据集格式
YOLO姿态数据集格式详情可在[数据集指南](../datasets/pose/index.md)中找到。如需将现有数据集从其他格式(如COCO等)转换为YOLO格式,请使用Ultralytics的[JSON2YOLO](https://github.com/ultralytics/JSON2YOLO)工具。
## 验证
在COCO8-pose数据集上验证训练好的YOLO11n-pose模型的[准确性](https://www.ultralytics.com/glossary/accuracy)。无需参数,因为`model`保留了训练时的`data`和参数作为模型属性。
!!! 示例
=== "Python"
```python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-pose.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置已记住
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # 包含每个类别的map50-95的列表
```
=== "CLI"
```bash
yolo pose val model=yolo11n-pose.pt # 验证官方模型
yolo pose val model=path/to/best.pt # 验证自定义模型
```
## 预测
使用训练好的YOLO11n-pose模型对图像进行预测。
!!! 示例
=== "Python"
```python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-pose.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义模型
# 使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg") # 对图像进行预测
```
=== "CLI"
```bash
yolo pose predict model=yolo11n-pose.pt source='https://ultralytics.com/images/bus.jpg' # 使用官方模型进行预测
yolo pose predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg' # 使用自定义模型进行预测
```
在[预测](../modes/predict.md)页面查看完整的`predict`模式详情。
## 导出
将YOLO11n Pose模型导出为ONNX、CoreML等不同格式。
!!! 示例
=== "Python"
```python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-pose.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义训练模型
# 导出模型
model.export(format="onnx")
```
=== "CLI"
```bash
yolo export model=yolo11n-pose.pt format=onnx # 导出官方模型
yolo export model=path/to/best.pt format=onnx # 导出自定义训练模型
```
下表列出了可用的YOLO11-pose导出格式。您可以使用`format`参数导出到任何格式,例如`format='onnx'`或`format='engine'`。您可以直接在导出的模型上进行预测或验证,例如`yolo predict model=yolo11n-pose.onnx`。导出完成后,将显示您的模型的使用示例。
| 格式 | `format` 参数 | 模型 | 元数据 | 参数 |
| ------------------------------------------------- | ----------------- | ----------------------------------------------- | -------- | -------------------------------------------------------------------- |
| [PyTorch](https://pytorch.org/) | - | `yolo11n-pose.pt` | ✅ | - |
| [TorchScript](../integrations/torchscript.md) | `torchscript` | `yolo11n-pose.torchscript` | ✅ | `imgsz`, `optimize`, `batch` |
| [ONNX](../integrations/onnx.md) | `onnx` | `yolo11n-pose.onnx` | ✅ | `imgsz`, `half`, `dynamic`, `simplify`, `opset`, `batch` |
| [OpenVINO](../integrations/openvino.md) | `openvino` | `yolo11n-pose_openvino_model/` | ✅ | `imgsz`, `half`, `int8`, `batch` |
| [TensorRT](../integrations/tensorrt.md) | `engine` | `yolo11n-pose.engine` | ✅ | `imgsz`, `half`, `dynamic`, `simplify`, `workspace`, `int8`, `batch` |
| [CoreML](../integrations/coreml.md) | `coreml` | `yolo11n-pose.mlpackage` | ✅ | `imgsz`, `half`, `int8`, `nms`, `batch` |
| [TF SavedModel](../integrations/tf-savedmodel.md) | `saved_model` | `yolo11n-pose_saved_model/` | ✅ | `imgsz`, `keras`, `int8`, `batch` |
| [TF GraphDef](../integrations/tf-graphdef.md) | `pb` | `yolo11n-pose.pb` | ❌ | `imgsz`, `batch` |
| [TF Lite](../integrations/tflite.md) | `tflite` | `yolo11n-pose.tflite` | ✅ | `imgsz`, `half`, `int8`, `batch` |
| [TF Edge TPU](../integrations/edge-tpu.md) | `edgetpu` | `yolo11n-pose_edgetpu.tflite` | ✅ | `imgsz` |
| [TF.js](../integrations/tfjs.md) | `tfjs` | `yolo11n-pose_web_model/` | ✅ | `imgsz`, `half`, `int8`, `batch` |
| [PaddlePaddle](../integrations/paddlepaddle.md) | `paddle` | `yolo11n-pose_paddle_model/` | ✅ | `imgsz`, `batch` |
| [NCNN](../integrations/ncnn.md) | `ncnn` | `yolo11n-pose_ncnn_model/` | ✅ | `imgsz`, `half`, `batch` |
在[导出](../modes/export.md)页面查看完整的`export`详情。
## 常见问题
### Ultralytics YOLO11的姿态估计是什么,它是如何工作的?
Ultralytics YOLO11的姿态估计涉及识别图像中的特定点,称为关键点。这些关键点通常代表对象的关节或其他重要特征。输出包括每个点的`[x, y]`坐标和置信度分数。YOLO11-pose模型专门为此任务设计,并使用`-pose`后缀,例如`yolo11n-pose.pt`。这些模型在[COCO关键点](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco-pose.yaml)等数据集上进行了预训练,可用于各种姿态估计任务。更多信息,请访问[姿态估计页面](#pose-estimation)。
### 如何在自定义数据集上训练YOLO11-pose模型?
在自定义数据集上训练YOLO11-pose模型涉及加载模型,无论是通过YAML文件定义的新模型还是预训练模型。然后,您可以使用指定的数据集和参数开始训练过程。
```python
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-pose.yaml") # 从YAML构建新模型
model = YOLO("yolo11n-pose.pt") # 加载预训练模型(推荐用于训练)
# 训练模型
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)
有关训练的详细信息,请参阅训练部分。
如何验证训练好的YOLO11-pose模型?
验证YOLO11-pose模型涉及使用训练期间保留的相同数据集参数评估其准确性。以下是一个示例:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-pose.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义模型
# 验证模型
metrics = model.val() # 无需参数,数据集和设置已记住
我可以将 YOLO11-pose 模型导出为其他格式吗,如何操作?
是的,您可以将 YOLO11-pose 模型导出为多种格式,如 ONNX、CoreML、TensorRT 等。这可以通过 Python 或命令行界面(CLI)来完成。
from ultralytics import YOLO
# 加载一个模型
model = YOLO("yolo11n-pose.pt") # 加载官方模型
model = YOLO("path/to/best.pt") # 加载自定义训练的模型
# 导出模型
model.export(format="onnx")
更多详情请参阅导出部分。
Ultralytics YOLO11-pose 模型有哪些可用,它们的性能指标是什么?
Ultralytics YOLO11 提供了多种预训练的姿态模型,如 YOLO11n-pose、YOLO11s-pose、YOLO11m-pose 等。这些模型在大小、准确性(mAP)和速度上有所不同。例如,YOLO11n-pose 模型实现了 mAPpose50-95 为 50.4,mAPpose50 为 80.1。如需完整列表和性能详情,请访问模型部分。