姿态估计数据集概览#
支持的数据集格式#
Ultralytics YOLO 格式#
用于训练 YOLO 姿态模型的数据集标签格式如下:
- 每张图像对应一个文本文件:数据集中的每张图像都有一个对应的文本文件,文件名与图像文件相同,扩展名为“.txt”。
- 每个物体占一行:文本文件中的每一行对应图像中的一个物体实例。
- 每行包含物体信息:每一行包含有关该物体实例的以下信息:
- 物体类别索引:表示物体类别的整数(例如,0 表示 person,1 表示 car,依此类推)。
- 对象中心坐标:对象中心的 x 和 y 坐标,归一化到 0 到 1 之间。
- 对象宽度和高度:对象的宽度和高度,归一化到 0 到 1 之间。
- 对象关键点坐标:对象的关键点坐标,归一化到 0 到 1 之间。
以下是姿态估计任务的标签格式示例:
2D 关键点格式
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>带关键点可见性信息的格式(包含每个点的可见性)
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> ... <pxn> <pyn> <pn-visibility>在此格式中,<class-index> 是对象的类别索引,<x> <y> <width> <height> 是边界框的归一化坐标,<px1> <py1> <px2> <py2> ... <pxn> <pyn> 是关键点的归一化坐标。可见性通道是可选的,但对于标注了遮挡情况的数据集很有用。
数据集 YAML 格式#
Ultralytics 框架使用 YAML 文件格式定义数据集和模型配置,以训练姿态估计模型。以下是用于定义姿态数据集的 YAML 格式示例:
# 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.ziptrain、val 和 test 字段分别指向训练、验证和测试图像。每个字段都可以接受一个目录、多个目录的列表,或一个 *.txt 文件,其中每行列出一个图像路径(以 ./ 开头的路径相对于 *.txt 文件解析)。使用 *.txt 文件可以从目录中选取部分图像进行训练、跳过未标注图像,或将多个来源的图像合并到一个数据集划分中。
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 是一个类别名称字典。名称的顺序应与 YOLO 数据集文件中对象类别索引的顺序一致。
(可选)flip_idx 将每个关键点映射到其镜像位置,使水平翻转增强在人体或面部等对称骨架上保持左右一致。对于按 [左眼、右眼、鼻子、左嘴角、右嘴角] = [0, 1, 2, 3, 4] 编号的五个面部关键点,flip_idx 为 [1, 0, 2, 4, 3]:左右成对的 0-1 和 3-4 会互换,鼻子则保持原索引。
(可选)kpt_oks_sigmas 设置训练和验证时使用的自定义关键点 OKS sigma,例如 [0.26, 0.25, 0.25, ...]。列表长度必须等于 kpt_shape 中的关键点数量 N,且每个值都必须为正数。若未设置,对于 kpt_shape: [17, 3],将使用 COCO 的 17 个关键点 sigma;其他情况下则使用统一的 1/N。
用法#
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n-pose.pt") # 加载预训练模型(推荐用于训练)
# 训练模型
results = model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)支持的数据集#
本节介绍与 Ultralytics YOLO 格式兼容、可用于训练姿态估计模型的数据集。其中大多数数据集也托管在 Ultralytics Platform 上,你可以浏览图像和标注、查看数据集统计信息,并克隆数据集以进行云端训练。
COCO-Pose#
- 描述:COCO-Pose 是一个大规模人体姿态估计数据集,涵盖 COCO 2017 图像中包含关键点标注人物的图像。
- 标签格式:与上文所述的 Ultralytics YOLO 格式相同,包含人体姿态关键点。
- 类别数量:1(person)。
- 关键点:包含 17 种关键点类型,包括鼻子、眼睛、耳朵、肩膀、肘部、手腕、臀部、膝盖和脚踝,每个关键点都带有一个可见性维度。
- 用途:适合用于训练人体姿态估计模型。
- 补充说明:该数据集基于 COCO Keypoints 2017 挑战赛构建,包含 58,945 张图像,标注了 156,165 个人物。
- 了解 COCO-Pose 的更多信息
COCO8-Pose#
- 描述:Ultralytics COCO8-Pose 是一个小巧而灵活的姿态估计数据集,由 COCO train 2017 集的前 8 张图像组成,其中 4 张用于训练,4 张用于验证。
- 标签格式:与上文所述的 Ultralytics YOLO 格式相同,包含人体姿态关键点。
- 类别数量:1(person)。
- 关键点:包含 17 种关键点类型,包括鼻子、眼睛、耳朵、肩膀、肘部、手腕、臀部、膝盖和脚踝,每个关键点都带有一个可见性维度。
- 用途:适合用于测试和调试姿态估计模型,或试验新的关键点检测方法。
- 补充说明:COCO8-Pose 非常适合进行合理性检查和 CI 检查。
- 了解 COCO8-Pose 的更多信息
Dog-Pose#
- 描述:Ultralytics Dog-Pose 数据集包含 6,773 张训练图像和 1,703 张验证图像,用于犬类关键点估计。
- 标签格式:遵循 Ultralytics YOLO 格式,标注了适用于狗的解剖结构的多个关键点。
- 类别数量:1(dog)。
- 关键点:包含 24 个关键点,每个关键点都带有可见性维度,针对狗的姿态进行了设计,例如四肢、关节和头部位置。
- 用途:适合训练模型在从研究到实际应用等各种场景中估计狗的姿态。
- 补充说明:源图像来自 Stanford Dogs Dataset。
- 了解 Dog-Pose 的更多信息
手部关键点#
- 描述:Ultralytics Hand Keypoints 数据集包含 26,768 张图像,其中 18,776 张用于训练,7,992 张用于验证。
- 标签格式:与上文所述的 Ultralytics YOLO 格式相同,但包含人手的 21 个关键点和一个可见性维度。
- 类别数量:1(hand)。
- 关键点:21 个关键点。
- 用途:适用于人体手部姿态估计和手势识别。
- 补充说明:关键点标注使用 Google MediaPipe 生成,以确保标注一致。
- 了解手部关键点的更多信息
Tiger-Pose#
- 描述:Ultralytics Tiger-Pose 数据集包含 263 张图像,图像取自一个 YouTube 视频,其中 210 张用于训练,53 张用于验证。
- 标签格式:与上文所述的 Ultralytics YOLO 格式相同,包含用于动物姿态的 12 个关键点,不含可见性维度。
- 类别数量:1(tiger)。
- 关键点:12 个关键点。
- 用途:适用于动物姿态估计或任何非人体姿态估计任务。
- 补充说明:根据 AGPL-3.0 许可证发布。
- 了解 Tiger-Pose 的更多信息
添加你自己的数据集#
如果你有自己的数据集,并希望使用 Ultralytics YOLO 格式训练姿态估计模型,请确保数据集遵循上文“Ultralytics YOLO 格式”中指定的格式。将标注转换为所需格式,并在 YAML 配置文件中指定路径、类别数量和类别名称。
如果想完全跳过转换步骤,Ultralytics Platform 支持你上传原始图像、在浏览器中标注关键点,并直接使用生成的数据集进行训练。
转换工具#
Ultralytics 提供了一个便捷的转换工具,可将热门的 COCO 数据集格式的标签转换为 YOLO 格式:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_keypoints=True)此转换工具可用于将 COCO 数据集或任何采用 COCO 格式的数据集转换为 Ultralytics YOLO 格式。use_keypoints 参数用于指定是否在转换后的标签中包含关键点(用于姿态估计)。
常见问题#
姿态估计数据集的 Ultralytics YOLO 格式要求为每张图像创建一个对应的文本文件作为标签。文本文件的每一行都存储一个对象实例的信息:
- 对象类别索引
- 对象中心坐标(归一化的 x 和 y)
- 对象宽度和高度(归一化)
- 对象关键点坐标(归一化的 pxn 和 pyn)
对于 2D 姿态,关键点包含归一化的 x 和 y 坐标。添加可见性维度后,每个关键点还带有一个可见性标志。详情请参阅 Ultralytics YOLO 格式。
添加数据集的步骤:
-
将标注转换为 Ultralytics YOLO 格式。
-
创建 YAML 配置文件,指定数据集路径、类别数量和类别名称。
-
使用配置文件训练模型:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)完整步骤请参阅添加自己的数据集部分。
-
Ultralytics YOLO 中的数据集 YAML 文件用于定义训练所需的数据集和模型配置。文件会指定训练、验证和测试图像的路径、关键点形状、类别名称以及其他配置选项。这种结构化格式有助于简化数据集管理和模型训练。以下是 YAML 格式示例:
# 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.zip了解如何创建 YAML 配置文件,请参阅数据集 YAML 格式。