Ultralytics COCO-Pose 数据集解析:从 58,945 张图像的 17 关键点标注到 YOLO26-pose 实战训练
【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics
导读
COCO-Pose 是 Ultralytics 项目在人体姿态估计(Pose Estimation)任务上使用的主力训练与基准数据集。它以微软 COCO Keypoints 2017 为基础,将 58,945 张图像中 156,165 个标注人物组织为标准的 17 关键点 YOLO 格式。本文基于仓库中该数据集的官方文档与其配套源码(数据集 YAML、任务文档、模型配置),完整讲解 COCO-Pose 的数据规模、目录与标注结构、数据集 YAML 各字段语义、评测指标,并给出用yolo26n-pose.pt在 Python 与 CLI 下训练、验证、推理的端到端方案。读完本文,你可以理解 COCO-Pose 与普通 COCO 检测数据集的区别,并独立完成从数据自动下载到 YOLO26-pose 模型训练的完整流程。
数据集概览与在项目中的定位
COCO-Pose 将 COCO(Common Objects in Context)数据集改造为适合关键点/姿态估计任务的形式:从 COCO Keypoints 2017 挑战赛中选取了 58,945 张图像,以 17 关键点(keypoint)schema 对其中的人物进行标注,共覆盖 156,165 个标注人物、1,710,498 个独立关键点。它是项目内用于训练与基准测试关键点模型(如 YOLO26-pose)的标准数据集。
在 Ultralytics 仓库中,COCO-Pose 与用于快速冒烟测试的迷你版 COCO8-Pose 形成"大训练集 + 小验证集"搭配:COCO8-Pose 仅取 COCO train2017 前 8 张图像(4 训练 / 4 验证,约 1 MB),格式与 COCO-Pose 完全一致(同为 17 关键点、单 person 类、相同flip_idx),适合先跑通训练管线再切换到完整 COCO-Pose。
| 属性 | COCO-Pose | COCO8-Pose |
|---|---|---|
| 图像总数 | 58,945(train 56,599 + val 2,346) | 8(train 4 + val 4) |
| 标注人物 | 156,165 | 少量(验证用) |
| 关键点 schema | 17 个 | 17 个 |
| 类别 | person(1 类) | person(1 类) |
| 下载体积 | 约 20.2 GB(首次使用) | 约 1 MB |
| 用途 | 正式训练与基准 | 管线排错与快速实验 |
对应的配置文件分别位于 ultralytics/cfg/datasets/coco-pose.yaml 与 ultralytics/cfg/datasets/coco8-pose.yaml,两者共享完全相同的 17 关键点与flip_idx定义,这保证了"小数据验证 → 大数据训练"的无缝迁移。
17 关键点标注体系与关键特性
每个 person 标注使用 17 种关键点类型,按索引顺序依次为:鼻子(nose,0)、左眼(1)、右眼(2)、左耳(3)、右耳(4)、左肩(5)、右肩(6)、左肘(7)、右肘(8)、左腕(9)、右腕(10)、左髋(11)、右髋(12)、左膝(13)、右膝(14)、左踝(15)、右踝(16)。这一索引顺序在 姿态估计任务文档 中被明确列出,并在 coco-pose.yaml 的kpt_names中以 YAML 列表形式完整复现。
标注格式上,每个关键点以(x, y, visibility)三元组存储:
x、y:关键点在图像中的像素坐标;visibility(可见性标志):0表示该点未标注,1表示已标注但可能被遮挡,2表示已标注且可见。
因此在数据集的kpt_shape: [17, 3]中,17是关键点数量、3表示每点存储x, y, visible三个维度(若无需可见性标志,可写作 2)。这一维度约定同样出现在 yolo26-pose.yaml 模型配置中,说明数据集与模型的kpt_shape必须保持一致。
除标注格式外,COCO-Pose 还有以下几个关键特性:
- 标准化评测指标:沿用 COCO 的 Object Keypoint Similarity(OKS)等指标,用于姿态估计任务的模型横向对比,其评测通过标准 mAPpose50-95、mAPpose50 等呈现;
- 左右翻转支持:数据增强阶段做水平翻转时,需要将左右对称的关键点成对交换(如左眼↔右眼、左肩↔右肩),数据集 YAML 中的
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]正是这一映射(索引 0 鼻子保持不变,其余成对交换),COCO8-Pose 与之完全相同; - 下载体积提示:首次使用约需 20.2 GB(
train2017.zip+val2017.zip+ 标签文件)。7 GB 的test2017.zip不会被自动拉取,因为其图像的真值(ground truth)被官方保留,仅在向 CodaLab 的 test-dev2017 评测服务器提交时需要。
数据集目录结构:三个子集与自动下载脚本
从仓库 coco-pose.yaml 的头部注释可以看到推荐目录布局:数据集根目录为datasets/coco-pose(由path: coco-pose定义),训练与验证通过.txt文件索引图像列表。COCO-Pose 定义了下述三个子集:
- Train2017:56,599 张图像,来自 COCO 2017 train 集,用于训练姿态估计模型;
- Val2017:2,346 张图像,用于训练过程中的验证;
- Test-dev2017:完整 40,670 张 test2017 图像中的 20,288 张,其真值被官方保留。YAML 中
test: test-dev2017.txt指向该划分,仅用于向 COCO test-dev keypoints 评测服务器 提交。
由于只保留含关键点标注人物的图像,其标注划分比完整 COCO 的对应集合更小。与完整 COCO 检测集不同,这里的 person 是唯一类别,即names: {0: person}。
YAML 末尾还内嵌了可选的download脚本段,首次使用时可自动完成数据准备:
from pathlib import Path from ultralytics.utils import ASSETS_URL from ultralytics.utils.downloads import download dir = Path(yaml["path"]) # dataset root dir # 先下载 pose 专用标签(coco2017labels-pose.zip) urls = [f"{ASSETS_URL}/coco2017labels-pose.zip"] download(urls, dir=dir.parent) # 再下载 train2017(19G/118k 图)与 val2017(1G/5k 图),test2017 因真值保留不自动拉取 urls = [ "http://images.cocodataset.org/zips/train2017.zip", "http://images.cocodataset.org/zips/val2017.zip", ] download(urls, dir=dir / "images", threads=3)从上述脚本与配置可推断,Ultralytics 会自动将下载的图像与 COCO 关键点标签(以 COCO JSON 组织)解析并转换为 YOLO 格式的txt标签(每个关键点为class x1 y1 x2 y2 x3 y3 ...,即边界框后跟17 × 3个数值)。这种规模的数据准备适合在 GPU 算力托管的场景下进行,这也是文档中建议大规模训练使用 Ultralytics Platform 管理计算资源、监控训练任务的原因。
深入解读 coco-pose.yaml 数据集配置
以下为仓库中 ultralytics/cfg/datasets/coco-pose.yaml 的关键字段与语义:
# 路径:数据集根目录与三个划分(相对 path) path: coco-pose # 根目录,实际解析为 <父目录>/coco-pose(下载于此,约 20.2 GB) train: train2017.txt # 训练索引,56599 张 val: val2017.txt # 验证索引,2346 张 test: test-dev2017.txt # 测试划分,40670 中的 20288 张,提交至 CodaLab # 关键点结构 kpt_shape: [17, 3] # 关键点数 17;维度 3 表示 (x, y, visible) flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15] # 水平翻转时左右配对交换索引 # 类别与关键点名 names: 0: person # 唯一类别 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]字段说明要点:
path / train / val / test:三者的取值可以是目录、文件路径(如这里的train2017.txt图像列表)或路径列表;train、val、test均相对于path解析;kpt_shape:第一维是关键点数量,第二维是每点的坐标维度,2 对应(x, y),3 对应(x, y, visible)。COCO-Pose 的[17, 3]与 COCO8-Pose 配置 及 YOLO26-pose 模型配置 完全一致;flip_idx:数据增强执行水平翻转时用于交换左右成对关键点。相比类别翻转,姿态任务还必须保持身体左右对称点配对正确,否则训练会因标签错位而显著掉点;names、kpt_names:指定类别与每类关键点的可读名称,前者供检测/分类使用,后者用于关键点可视化与输出组织;download:一段 Python 脚本(或 URL),供 Ultralytics 数据准备逻辑在检测到数据缺失时自动执行。
如果需要将该配置用于自定义姿态数据,推荐先以 coco8-pose.yaml(约 1 MB、立即可下载)验证整套流程,再切换到完整的coco-pose.yaml。
COCO-Pose 预训练模型与性能基准
下表汇总了仓库在 COCO-Pose 上预训练的 YOLO26-pose 各尺寸模型指标(来源为 docs/macros/yolo-pose-perf.md,其中 mAPpose50-95(e2e) 为端到端模式下的指标):
| 模型 | 输入尺寸 (pixels) | mAPpose50-95(e2e) | mAPpose50(e2e) | CPU ONNX (ms) | T4 TensorRT10 (ms) | 参数量 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-pose | 640 | 57.2 | 83.3 | 40.3 ± 0.5 | 1.8 ± 0.0 | 2.9 | 7.5 |
| YOLO26s-pose | 640 | 63.0 | 86.6 | 85.3 ± 0.9 | 2.7 ± 0.0 | 10.4 | 23.9 |
| YOLO26m-pose | 640 | 68.8 | 89.6 | 218.0 ± 1.5 | 5.0 ± 0.1 | 21.5 | 73.1 |
| YOLO26l-pose | 640 | 70.4 | 90.5 | 275.4 ± 2.4 | 6.5 ± 0.1 | 25.9 | 91.3 |
| YOLO26x-pose | 640 | 71.6 | 91.6 | 565.4 ± 3.0 | 12.2 ± 0.2 | 57.6 | 201.7 |
指标口径(见 docs/en/tasks/pose.md):
- mAPval为 COCO Keypoints val2017 上的单模型单尺度验证结果,可通过
yolo val pose data=coco-pose.yaml device=0复现; - Speed为 COCO val 图像在 Amazon EC2 P4d 实例上的平均耗时,可通过
yolo val pose data=coco-pose.yaml batch=1 device=0|cpu复现; - Params 与 FLOPs为
model.fuse()之后的融合模型数值(合并 Conv 与 BatchNorm,并对端到端模型移除辅助的 one-to-many 检测头),预训练 checkpoint 保留完整训练结构,数值可能略高。
从 yolo26-pose.yaml 可以看到这些模型共享同一套骨架:以 P3/8–P5/32 三尺度特征输出,nc: 80(COCO 类别)经Pose26(P3, P4, P5)检测头产生关键点;end2end: True表明 YOLO26 使用端到端模式,而reg_max: 1指定 DFL bins。模型配置中的kpt_shape: [17, 3]再次印证了它正是为 COCO-Pose 这类 17 关键点数据所设计。缩放系数n/s/m/l/x通过[depth, width, max_channels]复合缩放控制模型大小(如 n 版 363 层、约 374 万参数)。
使用 COCO-Pose 训练 YOLO26-pose 模型
用 Python 训练
from ultralytics import YOLO # 加载模型:推荐加载预训练权重进行微调 model = YOLO("yolo26n-pose.pt") # load a pretrained model (recommended for training) # 在 COCO-Pose 上训练 100 个 epoch,输入尺寸 640 results = model.train(data="coco-pose.yaml", epochs=100, imgsz=640)用 CLI 训练
# 从预训练 *.pt 权重开始训练 yolo pose train data=coco-pose.yaml model=yolo26n-pose.pt epochs=100 imgsz=640数据量较小时(例如刚验证完 COCO8-Pose),也可以从模型 YAML 直接构建或先转存预训练权重:
# 从 YAML 构建新模型并从头训练 yolo pose train data=coco8-pose.yaml model=yolo26n-pose.yaml epochs=100 imgsz=640 # 从 YAML 构建模型并迁移预训练权重后训练 yolo pose train data=coco8-pose.yaml model=yolo26n-pose.yaml pretrained=yolo26n-pose.pt epochs=100 imgsz=640完整可调参数请查阅 Training 模式文档。值得说明的是,CLI 中的yolo pose train通过 入口模块 的任务分发将data=coco-pose.yaml等键值参数传给训练引擎,coco-pose.yaml的文件名会被解析为仓库配置目录下的数据集定义。
验证(Val)
COCO-Pose 数据规模较大,训练中通常使用其 val2017 划分评估模型。训练完成后无需重复指定数据集——model会保留训练时的data与参数作为模型属性:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") # 官方模型 model = YOLO("path/to/best.pt") # 自定义训练模型 metrics = model.val() # 无需参数,自动使用训练时的数据集与设置 metrics.box.map # box mAP50-95 metrics.pose.map # pose mAP50-95(对应 mAP^pose 50-95) metrics.pose.map50 # pose mAP50 metrics.pose.map75 # pose mAP75 metrics.pose.maps # 每个类别各自的 mAP50-95(P) 列表 metrics.pose.image_metrics # 逐图像 pose 指标字典(含 precision/recall/F1/TP/FP/FN)对应的 CLI 命令为:
yolo pose val model=yolo26n-pose.pt # 验证官方模型 yolo pose val model=path/to/best.pt # 验证自定义模型推理(Predict)
训练好的模型可用model.predict或yolo pose predict直接对图像、视频与实时流做姿态估计,每个检测到的人物实例输出 17 组关键点及其可见性:
from ultralytics import YOLO model = YOLO("yolo26n-pose.pt") results = model("https://ultralytics.com/images/bus.jpg") for result in results: xy = result.keypoints.xy # (N, 17, 2),像素坐标 xyn = result.keypoints.xyn # (N, 17, 2),归一化坐标 kpts = result.keypoints.data # (N, 17, 3),含可见性/置信度CLI 形式为yolo pose predict model=yolo26n-pose.pt source='https://ultralytics.com/images/bus.jpg'。关键点推理结果的字段结构在 任务文档的 Results 部分 有完整说明,其底层类型Keypoints与后处理实现在 推理结果模块 中定义。
评测指标:OKS 与 mAPpose
COCO-Pose 继承自 COCO,因此评测遵循 COCO 关键点挑战的标准协议。核心指标是Object Keypoint Similarity(OKS),用于度量预测关键点与真值标注的吻合程度:
$$ \mathrm{OKS} = \frac{\sum_i \exp(-d_i^2 / 2 s^2 \kappa_i^2) \cdot \delta(v_i > 0)}{\sum_i \delta(v_i > 0)} $$
其中d_i为第i个关键点的预测与真值欧氏距离,s为目标尺度,κ_i为各关键点的归一化常数(per-keypoint sigma),v_i为可见性标志(只有v > 0的标注关键点参与计算)。汇总各 OKS 阈值(0.50–0.95)即可得到 mAPpose50-95,这是表格中横比模型精度的主要数字。由于只有被标注(可见或遮挡但已标注)的关键点才计入 OKS,(x, y, visibility)三元组中的可见性字段直接参与评测,这正是标签质量影响模型成绩的关键环节之一。
应用场景
COCO-Pose 用于训练与评估关键点检测 / 姿态估计深度学习模型,其大规模标注与标准化评测使其成为人体姿态方向研究与工程实践的基石资源,典型应用包括运动分析、健身动作监测、医疗康复辅助、人机交互等。如需进一步了解模型在关键点检测之外的使用方式,可参考 Pose Estimation 任务文档;若需要自定义关键点数据,也可以参考仓库中同目录下的 Dog-Pose、Tiger-Pose、Hand Keypoints 等专门数据集。
引用与致谢
如果在研究或开发中使用 COCO-Pose 数据集,请按 COCO 惯例引用以下论文:
@misc{lin2015microsoft, title={Microsoft COCO: Common Objects in Context}, author={Tsung-Yi Lin and Michael Maire and Serge Belongie and Lubomir Bourdev and Ross Girshick and James Hays and Pietro Perona and Deva Ramanan and C. Lawrence Zitnick and Piotr Dollár}, year={2015}, eprint={1405.0312}, archivePrefix={arXiv}, primaryClass={cs.CV} }常见问题
COCO-Pose 数据集是什么?如何与 Ultralytics YOLO 姿态模型搭配使用?COCO-Pose 将 COCO Keypoints 2017 的图像与标注转换为 YOLO 关键点格式:58,945 张图像、17 关键点 schema。将任何 Ultralytics YOLO pose 模型指向它即可训练,即data=coco-pose.yaml;其余可调参数见 Training 模式文档。
如何用 YOLO26 在 COCO-Pose 上训练?加载yolo26n-pose.pt并调用model.train(data="coco-pose.yaml", epochs=100, imgsz=640),Python 与 CLI 的完整示例见上文"使用 COCO-Pose 训练 YOLO26-pose 模型"一节。
COCO-Pose 提供哪些评测指标?与原始 COCO 类似,核心是 OKS(Object Keypoint Similarity),用于评估预测关键点相对真值的精度,进而汇总为 mAPpose50-95、mAPpose50 等指标,实现不同模型间的公平比较。
数据集如何划分?COCO-Pose 提供两个含标注的划分:56,599 张 train2017 与 2,346 张 val2017。第三个划分 test-dev2017(完整 40,670 张 test2017 中的 20,288 张)真值保持私有,其 YAML 配置关联到 COCO test-dev keypoints 评测服务器。
关键特性与应用有哪些?COCO-Pose 使用 17 种人体关键点类型并继承 COCO 的标准化指标(含 OKS),适合运动分析、医疗健康与人机交互等人体姿态场景。各尺寸的预训练 YOLO26-pose 权重列表参见上文性能基准表。
【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考