Ultralytics Dog-Pose 数据集实战指南:用 YOLO26 训练 24 关键点犬类姿态估计模型
本文以 Ultralytics 仓库中的 Dog-Pose 数据集文档为核心,系统讲解这一专为犬类关键点估计打造的数据集:8,476 张图片、每只狗 24 个关键点、YOLO 格式标签与内置下载机制。读完本文,你将掌握 dog-pose.yaml 的完整配置、Python/CLI 两种训练方式、关键参数校验逻辑(kpt_shape、kpt_names)的源码实现,以及 Mosaic 数据增强在姿态训练中的作用,可以独立复现从数据下载到模型训练、验证的完整流程。
数据集简介
Dog-Pose 数据集由 Ultralytics Dog-Pose dataset 文档 定义,是面向犬类关键点估计(dog keypoint estimation)的高质量数据集:
- 规模:共 8,476 张图片,其中 6,773 张训练图、1,703 张703 张验证图,且每张图都配有对应 YOLO 格式标签文件;
- 关键点:每只狗标注 24 个关键点,每个关键点含 3 维信息——
(x, y, visibility),即归一化坐标加可见性标记,因此适合研究遮挡场景下的姿态估计; - 下载体积:约 337 MB;
- 应用方向:动物行为分析、宠物监控、兽医研究等场景的犬类姿态估计模型开发与验证。
数据集结构与 YAML 配置
目录布局
数据集下载解压后的标准结构为:
datasets/dog-pose/
├── images/{train,val}
└── labels/{train,val}
图片与标签按训练/验证集分别存放,标签路径由图片路径经固定规则映射得到。这一映射关系在 ultralytics/data/dataset.py 的 get_label_files 中实现——通过 img2label_paths 把 images/ 替换为 labels/ 得到标签文件路径,这也是 YOLO 数据集格式的通用约定。
dog-pose.yaml 全量解析
数据集配置定义在仓库文件 dog-pose.yaml,官方文档中给出的完整内容如下,逐项说明:
# 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: dog-pose # dataset root dir
train: images/train # train images (relative to 'path') 6773 images
val: images/val # val images (relative to 'path') 1703 images
# Keypoints
kpt_shape: [24, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
# Classes
names:
0: dog
# Keypoint names per class
kpt_names:
0:
- front_left_paw
- front_left_knee
- front_left_elbow
- rear_left_paw
- rear_left_knee
- rear_left_elbow
- front_right_paw
- front_right_knee
- front_right_elbow
- rear_right_paw
- rear_right_knee
- rear_right_elbow
- tail_start
- tail_end
- left_ear_base
- right_ear_base
- nose
- chin
- left_ear_tip
- right_ear_tip
- left_eye
- right_eye
- withers
- throat
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/dog-pose.zip
各字段的作用:
| 字段 | 取值 | 说明 |
|---|---|---|
path |
dog-pose |
数据集根目录,相对路径会解析到 DATASETS_DIR 下 |
train / val |
images/train / images/val |
相对 path 的图片目录,分别为 6,773 / 1,703 张 |
kpt_shape |
[24, 3] |
关键点数量与维度;第 2 位为 3 表示每个关键点含 x, y, visible |
names |
0: dog |
单类数据集,仅 dog 一类 |
kpt_names |
24 个部位名 | 四肢 12 点(左右前/后肢的爪、膝、肘)、尾巴 2 点、头部 8 点(耳基/耳尖/鼻/下巴/双眼)、背部 2 点(withers、throat) |
download |
资产包 URL | 数据本地缺失时自动下载解压 |
关于 kpt_shape,源码层面有两处硬性约束值得注意:
- 配置解析阶段:ultralytics/data/utils.py 中的
check_det_dataset会校验所有数据集键的类型,其中kpt_shape必须是 list(见 ultralytics/data/utils.py#L59 的DATASET_KEY_TYPES)。 - 标签校验阶段:ultralytics/data/dataset.py#L187-L192 的
verify_args明确检查nkpt > 0且ndim必须是 2 或 3,否则抛出"'kpt_shape' in data.yaml missing or incorrect"错误——这意味着如果自建设计姿态数据集时写错维度(例如只写了[24]),训练在缓存标签前就会直接失败。
kpt_names 列表则让可视化、结果解读(如 Results.plots 绘制的骨架连线)拥有可读的部位名,而非单纯的索引编号。
自动下载机制
文档 FAQ 中提到“数据集在首次使用时会自动下载”,其实现链路可以确认:check_det_dataset(ultralytics/data/utils.py#L551)会依次执行——
- 若传入裸名称(如
dog-pose),自动尝试补全为dog-pose.yaml并在内置配置目录中查找; - 读取 YAML 后校验
train、val、names/nc等必需键,缺失即报SyntaxError; - 将
path解析为绝对路径(相对路径挂到DATASETS_DIR下),把train/val/test目录逐一拼接为绝对路径; - 若本地目录不存在且 YAML 含
download字段,则下载 zip 包并解压到datasets/目录。
因此训练时只需写 data="dog-pose.yaml",无需手动下载解压。
训练 YOLO26 Pose 模型
官方文档给出的标准用法:在 Dog-Pose 数据集上以 640 输入尺寸训练 yolo26n-pose 模型 100 个 epoch。
Python API
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-pose.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="dog-pose.yaml", epochs=100, imgsz=640)
CLI
# Start training from a pretrained *.pt model
yolo pose train data=dog-pose.yaml model=yolo26n-pose.pt epochs=100 imgsz=640
完整参数清单可参考仓库的 Training 模式文档。补充两个实操要点:
- 模型规模选择:
yolo26n-pose对应模型配置 yolo26-pose.yaml 中scales.n(depth 0.50 / width 0.25 / max_channels 1024),注释标注为约 3.75M 参数、10.7 GFLOPs,是轻量档位;同文件还提供s/m/l/x四档复合缩放,可按算力需求切换(如yolo26m-pose.pt)。注意模型 YAML 中kpt_shape默认为[17, 3](COCO 人体姿态预训练值),训练时由数据集 YAML 的[24, 3]覆盖头部关键点输出维度。 - 训练后验证:
model.train结束后返回 metrics 对象;也可单独运行yolo pose val data=dog-pose.yaml model=best.pt在 1,703 张验证图上复测 mAP 等指标,相关任务文档见 Pose Estimation 任务页。
训练中的 Mosaic 增强
文档“Sample Images and Annotations”一节展示了一张由多张 Dog-Pose 图片拼合的训练批次图,并解释了 Mosaic(马赛克)增强的价值:把多张图拼成一张训练图,让每个 batch 覆盖更多样的目标尺寸、长宽比与场景上下文,从而提升泛化能力并缓解过拟合。
这一机制在仓库中的实现是 ultralytics/data/augment.py 的 Mosaic 类:将 4 或 9 张图片组合进一张画布(n=4 或 n=9),并对实例与标签做拼接、裁剪(apply_instances / _cat_labels),随机选取参与拼图的索引由 get_indexes 完成。对姿态任务而言,拼图会把不同狗的姿态、姿态比例混入同一张图,模型在单步训练中即可见到更宽的尺度分布——这正是文档配图想表达的训练效果。
数据标注格式与引用说明
每张标注图的标签文件遵循 YOLO 姿态格式:每行为 class x_center y_center width height 加上 24 组 x y visibility(共 72 个数值),坐标相对图像尺寸归一化。visibility 取值 0 表示该关键点未标注/不可见,3 维标注方式与 kpt_shape: [24, 3] 严格对应。
若在你的研究或开发工作中使用了 Dog-Pose 数据集,官方文档要求引用以下论文(源自 docs/en/datasets/pose/dog-pose.md 的 Citations 一节):
@inproceedings{khosla2011fgvc,
title={Novel dataset for Fine-Grained Image Categorization},
author={Aditya Khosla and Nityananda Jayadevaprakash and Bangpeng Yao and Li Fei-Fei},
booktitle={First Workshop on Fine-Grained Visual Categorization (FGVC), IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2011}
}
@inproceedings{deng2009imagenet,
title={ImageNet: A Large-Scale Hierarchical Image Database},
author={Jia Deng and Wei Dong and Richard Socher and Li-Jia Li and Kai Li and Li Fei-Fei},
booktitle={IEEE Computer Vision and Pattern Recognition (CVPR)},
year={2009}
}
数据集原始图像来自 Stanford Vision Lab 的 ImageNetDogs 项目(Research-Only 许可),该许可限定其用于研究目的,商用前建议自行确认许可边界。
常见问题(FAQ)
Q1:Dog-Pose 数据集是什么,如何配合 YOLO26 使用? 数据集含 6,773 张训练图与 1,703 张验证图,每图标注 24 个犬类关键点,专为训练和验证犬类姿态估计模型设计,适用于动物行为分析、宠物监控、兽医研究等场景,其 3 维(x, y, visibility)标注覆盖遮挡情形。
Q2:如何用 Ultralytics 训练一个 YOLO26 模型?
加载预训练权重 yolo26n-pose.pt,然后调用 model.train(data="dog-pose.yaml", epochs=100, imgsz=640);CLI 等价命令见上文。完整参数列表见 Training 文档。
Q3:该数据集的优势是什么? 8,476 张图覆盖多种犬种与姿态,24 个关键点 × 3 维标注提供了真实场景的覆盖度,可直接用于宠物监控、行为分析等落地任务的姿态模型训练。
Q4:Mosaic 如何帮助训练过程? 它把多张 Dog-Pose 图拼进一张训练图,每步训练可见更多样的姿态、尺寸与背景,减少过拟合并提升对新尺度、新场景的泛化能力。
Q5:YAML 文件在哪,如何使用?
位于 dog-pose.yaml,定义了路径、类别、24 关键点配置与下载 URL;训练命令中直接引用 data=dog-pose.yaml 即可,数据集会在首次使用时自动下载解压。
小结
Dog-Pose 数据集为犬类姿态估计提供了“开箱即用”的完整闭环:YAML 声明式配置、24 关键点 3 维标注、自动下载解压、预训练权重微调。结合源码可以确认的关键约束是——kpt_shape 的第二维必须是 2 或 3(dataset.py#L187-L192),以及数据集校验链 check_det_dataset(utils.py#L551)对 train/val/names 键的强制检查,这两点是自建同类姿态数据集时最值得对照的参考点。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00