首页
/ Ultralytics Dog-Pose 数据集实战指南:用 YOLO26 训练 24 关键点犬类姿态估计模型

Ultralytics Dog-Pose 数据集实战指南:用 YOLO26 训练 24 关键点犬类姿态估计模型

2026-09-05 13:09:31作者:凤尚柏Louis

本文以 Ultralytics 仓库中的 Dog-Pose 数据集文档为核心,系统讲解这一专为犬类关键点估计打造的数据集:8,476 张图片、每只狗 24 个关键点、YOLO 格式标签与内置下载机制。读完本文,你将掌握 dog-pose.yaml 的完整配置、Python/CLI 两种训练方式、关键参数校验逻辑(kpt_shapekpt_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.pyget_label_files 中实现——通过 img2label_pathsimages/ 替换为 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,源码层面有两处硬性约束值得注意:

  1. 配置解析阶段ultralytics/data/utils.py 中的 check_det_dataset 会校验所有数据集键的类型,其中 kpt_shape 必须是 list(见 ultralytics/data/utils.py#L59DATASET_KEY_TYPES)。
  2. 标签校验阶段ultralytics/data/dataset.py#L187-L192verify_args 明确检查 nkpt > 0ndim 必须是 2 或 3,否则抛出 "'kpt_shape' in data.yaml missing or incorrect" 错误——这意味着如果自建设计姿态数据集时写错维度(例如只写了 [24]),训练在缓存标签前就会直接失败。

kpt_names 列表则让可视化、结果解读(如 Results.plots 绘制的骨架连线)拥有可读的部位名,而非单纯的索引编号。

自动下载机制

文档 FAQ 中提到“数据集在首次使用时会自动下载”,其实现链路可以确认:check_det_datasetultralytics/data/utils.py#L551)会依次执行——

  1. 若传入裸名称(如 dog-pose),自动尝试补全为 dog-pose.yaml 并在内置配置目录中查找;
  2. 读取 YAML 后校验 trainvalnames/nc 等必需键,缺失即报 SyntaxError
  3. path 解析为绝对路径(相对路径挂到 DATASETS_DIR 下),把 train/val/test 目录逐一拼接为绝对路径;
  4. 若本地目录不存在且 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.yamlscales.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.pyMosaic 类:将 4 或 9 张图片组合进一张画布(n=4n=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_datasetutils.py#L551)对 train/val/names 键的强制检查,这两点是自建同类姿态数据集时最值得对照的参考点。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
504
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384