You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
12 KiB
190 lines
12 KiB
2 years ago
|
---
|
||
|
comments: true
|
||
2 years ago
|
description: Learn how to use Ultralytics YOLOv8 for pose estimation tasks. Find pretrained models, learn how to train, validate, predict, and export your own.
|
||
|
keywords: Ultralytics, YOLO, YOLOv8, pose estimation, keypoints detection, object detection, pre-trained models, machine learning, artificial intelligence
|
||
2 years ago
|
---
|
||
|
|
||
1 year ago
|
# Pose Estimation
|
||
2 years ago
|
|
||
1 year ago
|
<img width="1024" src="https://user-images.githubusercontent.com/26833433/243418616-9811ac0b-a4a7-452a-8aba-484ba32bb4a8.png" alt="Pose estimation examples">
|
||
2 years ago
|
|
||
1 year ago
|
Pose estimation is a task that involves identifying the location of specific points in an image, usually referred to as keypoints. The keypoints can represent various parts of the object such as joints, landmarks, or other distinctive features. The locations of the keypoints are usually represented as a set of 2D `[x, y]` or 3D `[x, y, visible]`
|
||
|
coordinates.
|
||
|
|
||
|
The output of a pose estimation model is a set of points that represent the keypoints on an object in the image, usually along with the confidence scores for each point. Pose estimation is a good choice when you need to identify specific parts of an object in a scene, and their location in relation to each other.
|
||
|
|
||
|
<p align="center">
|
||
|
<br>
|
||
1 year ago
|
<iframe width="720" height="405" src="https://www.youtube.com/embed/Y28xXQmju64?si=pCY4ZwejZFu6Z4kZ"
|
||
|
title="YouTube video player" frameborder="0"
|
||
|
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||
1 year ago
|
allowfullscreen>
|
||
|
</iframe>
|
||
|
<br>
|
||
|
<strong>Watch:</strong> Pose Estimation with Ultralytics YOLOv8.
|
||
|
</p>
|
||
2 years ago
|
|
||
|
!!! tip "Tip"
|
||
|
|
||
2 years ago
|
YOLOv8 _pose_ models use the `-pose` suffix, i.e. `yolov8n-pose.pt`. These models are trained on the [COCO keypoints](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco-pose.yaml) dataset and are suitable for a variety of pose estimation tasks.
|
||
2 years ago
|
|
||
2 years ago
|
## [Models](https://github.com/ultralytics/ultralytics/tree/main/ultralytics/cfg/models/v8)
|
||
2 years ago
|
|
||
1 year ago
|
YOLOv8 pretrained Pose models are shown here. Detect, Segment and Pose models are pretrained on the [COCO](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml) dataset, while Classify models are pretrained on the [ImageNet](https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/ImageNet.yaml) dataset.
|
||
2 years ago
|
|
||
1 year ago
|
[Models](https://github.com/ultralytics/ultralytics/tree/main/ultralytics/cfg/models) download automatically from the latest Ultralytics [release](https://github.com/ultralytics/assets/releases) on first use.
|
||
2 years ago
|
|
||
2 years ago
|
| Model | size<br><sup>(pixels) | mAP<sup>pose<br>50-95 | mAP<sup>pose<br>50 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
|
||
2 years ago
|
|------------------------------------------------------------------------------------------------------|-----------------------|-----------------------|--------------------|--------------------------------|-------------------------------------|--------------------|-------------------|
|
||
2 years ago
|
| [YOLOv8n-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-pose.pt) | 640 | 50.4 | 80.1 | 131.8 | 1.18 | 3.3 | 9.2 |
|
||
|
| [YOLOv8s-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-pose.pt) | 640 | 60.0 | 86.2 | 233.2 | 1.42 | 11.6 | 30.2 |
|
||
|
| [YOLOv8m-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-pose.pt) | 640 | 65.0 | 88.8 | 456.3 | 2.00 | 26.4 | 81.0 |
|
||
|
| [YOLOv8l-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-pose.pt) | 640 | 67.6 | 90.0 | 784.5 | 2.59 | 44.4 | 168.6 |
|
||
|
| [YOLOv8x-pose](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose.pt) | 640 | 69.2 | 90.2 | 1607.1 | 3.73 | 69.4 | 263.2 |
|
||
|
| [YOLOv8x-pose-p6](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-pose-p6.pt) | 1280 | 71.6 | 91.2 | 4088.7 | 10.04 | 99.1 | 1066.4 |
|
||
2 years ago
|
|
||
|
- **mAP<sup>val</sup>** values are for single-model single-scale on [COCO Keypoints val2017](http://cocodataset.org)
|
||
|
dataset.
|
||
|
<br>Reproduce by `yolo val pose data=coco-pose.yaml device=0`
|
||
|
- **Speed** averaged over COCO val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/)
|
||
|
instance.
|
||
|
<br>Reproduce by `yolo val pose data=coco8-pose.yaml batch=1 device=0|cpu`
|
||
|
|
||
|
## Train
|
||
|
|
||
|
Train a YOLOv8-pose model on the COCO128-pose dataset.
|
||
|
|
||
|
!!! example ""
|
||
|
|
||
|
=== "Python"
|
||
2 years ago
|
|
||
2 years ago
|
```python
|
||
|
from ultralytics import YOLO
|
||
2 years ago
|
|
||
2 years ago
|
# Load a model
|
||
|
model = YOLO('yolov8n-pose.yaml') # build a new model from YAML
|
||
|
model = YOLO('yolov8n-pose.pt') # load a pretrained model (recommended for training)
|
||
|
model = YOLO('yolov8n-pose.yaml').load('yolov8n-pose.pt') # build from YAML and transfer weights
|
||
2 years ago
|
|
||
2 years ago
|
# Train the model
|
||
2 years ago
|
results = model.train(data='coco8-pose.yaml', epochs=100, imgsz=640)
|
||
2 years ago
|
```
|
||
|
=== "CLI"
|
||
2 years ago
|
|
||
2 years ago
|
```bash
|
||
|
# Build a new model from YAML and start training from scratch
|
||
2 years ago
|
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.yaml epochs=100 imgsz=640
|
||
2 years ago
|
|
||
|
# Start training from a pretrained *.pt model
|
||
2 years ago
|
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.pt epochs=100 imgsz=640
|
||
2 years ago
|
|
||
|
# Build a new model from YAML, transfer pretrained weights to it and start training
|
||
2 years ago
|
yolo pose train data=coco8-pose.yaml model=yolov8n-pose.yaml pretrained=yolov8n-pose.pt epochs=100 imgsz=640
|
||
2 years ago
|
```
|
||
|
|
||
2 years ago
|
### Dataset format
|
||
|
|
||
1 year ago
|
YOLO pose dataset format can be found in detail in the [Dataset Guide](../datasets/pose/index.md). To convert your existing dataset from other formats (like COCO etc.) to YOLO format, please use [JSON2YOLO](https://github.com/ultralytics/JSON2YOLO) tool by Ultralytics.
|
||
2 years ago
|
|
||
2 years ago
|
## Val
|
||
|
|
||
|
Validate trained YOLOv8n-pose model accuracy on the COCO128-pose dataset. No argument need to passed as the `model`
|
||
1 year ago
|
retains it's training `data` and arguments as model attributes.
|
||
2 years ago
|
|
||
|
!!! example ""
|
||
|
|
||
|
=== "Python"
|
||
2 years ago
|
|
||
2 years ago
|
```python
|
||
|
from ultralytics import YOLO
|
||
2 years ago
|
|
||
2 years ago
|
# Load a model
|
||
|
model = YOLO('yolov8n-pose.pt') # load an official model
|
||
|
model = YOLO('path/to/best.pt') # load a custom model
|
||
2 years ago
|
|
||
2 years ago
|
# 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 contains map50-95 of each category
|
||
|
```
|
||
|
=== "CLI"
|
||
2 years ago
|
|
||
2 years ago
|
```bash
|
||
|
yolo pose val model=yolov8n-pose.pt # val official model
|
||
|
yolo pose val model=path/to/best.pt # val custom model
|
||
|
```
|
||
|
|
||
|
## Predict
|
||
|
|
||
|
Use a trained YOLOv8n-pose model to run predictions on images.
|
||
|
|
||
|
!!! example ""
|
||
|
|
||
|
=== "Python"
|
||
2 years ago
|
|
||
2 years ago
|
```python
|
||
|
from ultralytics import YOLO
|
||
2 years ago
|
|
||
2 years ago
|
# Load a model
|
||
|
model = YOLO('yolov8n-pose.pt') # load an official model
|
||
|
model = YOLO('path/to/best.pt') # load a custom model
|
||
2 years ago
|
|
||
2 years ago
|
# Predict with the model
|
||
|
results = model('https://ultralytics.com/images/bus.jpg') # predict on an image
|
||
|
```
|
||
|
=== "CLI"
|
||
2 years ago
|
|
||
2 years ago
|
```bash
|
||
2 years ago
|
yolo pose predict model=yolov8n-pose.pt source='https://ultralytics.com/images/bus.jpg' # predict with official model
|
||
2 years ago
|
yolo pose predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg' # predict with custom model
|
||
|
```
|
||
|
|
||
|
See full `predict` mode details in the [Predict](https://docs.ultralytics.com/modes/predict/) page.
|
||
|
|
||
|
## Export
|
||
|
|
||
2 years ago
|
Export a YOLOv8n Pose model to a different format like ONNX, CoreML, etc.
|
||
2 years ago
|
|
||
|
!!! example ""
|
||
|
|
||
|
=== "Python"
|
||
2 years ago
|
|
||
2 years ago
|
```python
|
||
|
from ultralytics import YOLO
|
||
2 years ago
|
|
||
2 years ago
|
# Load a model
|
||
2 years ago
|
model = YOLO('yolov8n-pose.pt') # load an official model
|
||
1 year ago
|
model = YOLO('path/to/best.pt') # load a custom trained model
|
||
2 years ago
|
|
||
2 years ago
|
# Export the model
|
||
|
model.export(format='onnx')
|
||
|
```
|
||
|
=== "CLI"
|
||
2 years ago
|
|
||
2 years ago
|
```bash
|
||
2 years ago
|
yolo export model=yolov8n-pose.pt format=onnx # export official model
|
||
2 years ago
|
yolo export model=path/to/best.pt format=onnx # export custom trained model
|
||
|
```
|
||
|
|
||
1 year ago
|
Available YOLOv8-pose export formats are in the table below. You can predict or validate directly on exported models, i.e. `yolo predict model=yolov8n-pose.onnx`. Usage examples are shown for your model after export completes.
|
||
2 years ago
|
|
||
2 years ago
|
| Format | `format` Argument | Model | Metadata | Arguments |
|
||
|
|--------------------------------------------------------------------|-------------------|--------------------------------|----------|-----------------------------------------------------|
|
||
|
| [PyTorch](https://pytorch.org/) | - | `yolov8n-pose.pt` | ✅ | - |
|
||
|
| [TorchScript](https://pytorch.org/docs/stable/jit.html) | `torchscript` | `yolov8n-pose.torchscript` | ✅ | `imgsz`, `optimize` |
|
||
|
| [ONNX](https://onnx.ai/) | `onnx` | `yolov8n-pose.onnx` | ✅ | `imgsz`, `half`, `dynamic`, `simplify`, `opset` |
|
||
2 years ago
|
| [OpenVINO](https://docs.openvino.ai/latest/index.html) | `openvino` | `yolov8n-pose_openvino_model/` | ✅ | `imgsz`, `half` |
|
||
2 years ago
|
| [TensorRT](https://developer.nvidia.com/tensorrt) | `engine` | `yolov8n-pose.engine` | ✅ | `imgsz`, `half`, `dynamic`, `simplify`, `workspace` |
|
||
2 years ago
|
| [CoreML](https://github.com/apple/coremltools) | `coreml` | `yolov8n-pose.mlpackage` | ✅ | `imgsz`, `half`, `int8`, `nms` |
|
||
2 years ago
|
| [TF SavedModel](https://www.tensorflow.org/guide/saved_model) | `saved_model` | `yolov8n-pose_saved_model/` | ✅ | `imgsz`, `keras` |
|
||
|
| [TF GraphDef](https://www.tensorflow.org/api_docs/python/tf/Graph) | `pb` | `yolov8n-pose.pb` | ❌ | `imgsz` |
|
||
|
| [TF Lite](https://www.tensorflow.org/lite) | `tflite` | `yolov8n-pose.tflite` | ✅ | `imgsz`, `half`, `int8` |
|
||
|
| [TF Edge TPU](https://coral.ai/docs/edgetpu/models-intro/) | `edgetpu` | `yolov8n-pose_edgetpu.tflite` | ✅ | `imgsz` |
|
||
|
| [TF.js](https://www.tensorflow.org/js) | `tfjs` | `yolov8n-pose_web_model/` | ✅ | `imgsz` |
|
||
|
| [PaddlePaddle](https://github.com/PaddlePaddle) | `paddle` | `yolov8n-pose_paddle_model/` | ✅ | `imgsz` |
|
||
2 years ago
|
| [ncnn](https://github.com/Tencent/ncnn) | `ncnn` | `yolov8n-pose_ncnn_model/` | ✅ | `imgsz`, `half` |
|
||
2 years ago
|
|
||
2 years ago
|
See full `export` details in the [Export](https://docs.ultralytics.com/modes/export/) page.
|