首页
/ Ultralytics YOLO26 姿态估计实战:基于 Tiger-Pose 数据集训练老虎 12 关键点模型

Ultralytics YOLO26 姿态估计实战:基于 Tiger-Pose 数据集训练老虎 12 关键点模型

2026-09-05 12:03:28作者:魏献源Searcher

本文以 Ultralytics 官方的 Tiger-Pose 姿态估计数据集为主线,完整讲解该数据集的结构、tiger-pose.yaml 配置含义、用 yolo26n-pose 预训练模型训练 12 关键点模型的具体步骤,以及训练完成后如何加载 best.pt 进行推理;并结合仓库源码说明 kpt_shapeflip_idxkpt_names 等关键配置在训练与数据增强中的实际作用。读完后你可以快速在小型数据集上跑通一条完整的 YOLO pose 训练—验证—推理流水线,并在替换为自己的关键点数据后平滑扩展。

数据集概述:为什么选 Tiger-Pose

Tiger-Pose 是 Ultralytics 面向姿态估计(pose estimation)任务发布的小型数据集,来源于一段老虎活动的视频帧,共包含 263 张图像,其中 210 张用于训练、53 张用于验证,下载体积约 49.8 MB。它的设计定位非常明确:

  • 作为姿态估计算法的测试与排错载体——数据集足够小,几轮训练即可跑完,适合在接触更大数据集(如 COCO)之前验证你的训练流程是否干净无错;
  • 作为多目标关键点标注格式的练习样本——每张图中可能含多只老虎,每只老虎带 12 个关键点,且不带可见性标记(visibility flag),正好覆盖 pose 数据集中 kpt_shape: [K, 2] 这一简化形式;
  • 作为流水线验证的中间跳板——官方建议先用它把 pipeline 训练干净,然后换成自己的动物/物体关键点数据,扩大规模继续训练。

Tiger-Pose 与 Ultralytics pose 任务的完整对接文档见 pose 任务文档数据集索引

目录结构与标注格式

数据集下载后的目录布局为 YOLO 格式关键点标注:

tiger-pose/
├── images/
│   ├── train/    # 210 张训练图
│   └── val/      # 53 张验证图
└── labels/
    ├── train/    # 与 images/train 一一对应的 .txt
    └── val/

每行标注为 YOLO 关键点格式:class_id cx cy w h kx1 ky1 kx2 ky2 ... kx12 ky12(坐标归一化到 0–1,关键点坐标后跟 12 对 x、y,因 kpt_shape 第二维为 2,故无可见性标志)。

tiger-pose.yaml 配置详解

数据集 YAML 是 YOLO 框架识别数据集的入口,仓库中内置的配置文件位于 ultralytics/cfg/datasets/tiger-pose.yaml,内容如下:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# Tiger Pose dataset by Ultralytics
# Example usage: yolo train data=tiger-pose.yaml

# Train/val/test sets as 1) dir, 2) file, or 3) list
path: tiger-pose                # 数据集根目录
train: images/train              # 训练图像(相对 path),210 张
val: images/val                  # 验证图像(相对 path),53 张

# Keypoints
kpt_shape: [12, 2]              # 关键点数量=12,维度=2(仅 x,y;若为 3 则含 visible)
flip_idx: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]  # 水平翻转时关键点的索引映射

# Classes
names:
  0: tiger

# Keypoint names per class
kpt_names:
  0:
    - nose
    - head
    - withers
    - tail_base
    - right_hind_hock
    - right_hind_paw
    - left_hind_paw
    - left_hind_hock
    - right_front_wrist
    - right_front_paw
    - left_front_wrist
    - left_front_paw

各配置项在源码中的实际作用:

  • kpt_shape: [12, 2] 是 pose 数据集的必填项pose 任务的训练器在加载数据集后强制校验该字段,缺失会直接抛出 KeyError(见 PoseTrainer.get_dataset);同时 data_kpt_shape 会被传入 PoseModel 构造函数,用于覆盖模型 YAML 中的默认关键点形状(见 nn/tasks.py 中 PoseModel 定义)。第二维取 2 表示无可见性标志,取 3 则表示 (x, y, visible),这也是 COCO-pose 类数据集的常见形式。
  • flip_idx 决定水平翻转增强后如何重排关键点。在 RandomFlip 增强实现中,图像与实例水平翻转后会执行 instances.keypoints = keypoints[:, flip_idx, :]——即用 flip_idx 重新索引关键点序列,使左右对称的关键点互换位置。Tiger-Pose 的 flip_idx0..11 的恒等映射,配合 kpt_names 可见:右侧关键点(right_hind_hock 等)与左侧关键点(left_hind_paw 等)在标注顺序上已按翻转对称关系排列,翻转图像后按此映射重排即可保持语义正确。
  • kpt_names 为每个类别提供 12 个关键点的语义名称(nose、head、withers、tail_base、四条腿的 hock/paw/wrist/paw)。PoseTrainer.set_model_attributes 会在训练启动时把 kpt_names 写入模型对象(train.py),使日志、绘图和结果对象中的关键点可以按名称而非索引呈现;若未提供,则会退化为 0..K-1 的数字名称。
  • path/train/val 支持三种写法:目录路径、图像列表文件、或列表。此处使用相对 path 的目录形式,YAML 注释中还给出了下载脚本/URL 字段(download),框架可据此自动下载数据集到 path 指向的位置。

训练 YOLO26n-pose 模型

在 Tiger-Pose 上训练 yolo26n-pose 的标准做法是加载官方预训练权重再微调。完整参数列表见 训练模式文档

Python 示例(100 个 epoch、图像尺寸 640):

from ultralytics import YOLO

# 加载预训练模型(推荐用于训练)
model = YOLO("yolo26n-pose.pt")

# 开始训练
results = model.train(data="tiger-pose.yaml", epochs=100, imgsz=640)

CLI 等价命令:

yolo pose train data=tiger-pose.yaml model=yolo26n-pose.pt epochs=100 imgsz=640

训练流程中的几个源码级要点:

  1. 任务路由model.train(data=...) 会根据数据配置将任务确定为 pose;底层由 PoseTrainer 继承自检测训练器 DetectionTrainer,专门处理关键点损失、验证与可视化,并在初始化时强制 task="pose"
  2. 关键点形状自动注入:训练器从 tiger-pose.yaml 读到 kpt_shape=[12, 2] 后,将其写入 PoseModel.kpt_shape。注意官方模型 YAML yolo26-pose.yaml 中默认 kpt_shape: [17, 3](COCO 17 关键点 + 可见性),而数据侧的 data_kpt_shape 会在实例化时覆盖该默认值——这就是同一个 yolo26n-pose.pt 既能用于 COCO 又能直接迁移到 12 关键点数据集的原因。
  3. Mosaic 增强:默认训练管线包含 mosaic 拼接增强,官方文档展示了 Tiger-Pose 训练批次经 mosaic 后的效果——把多张图拼成一张以提升每个批次中目标与场景的多样性,帮助模型泛化到不同尺度、宽高比与上下文的物体。

训练参数速查

参数 本文取值 说明
data tiger-pose.yaml 数据集 YAML,框架可自动下载
model yolo26n-pose.pt YOLO26-nano pose 预训练权重
epochs 100 训练轮数
imgsz 640 输入图像边长
task pose(CLI 中显式指定) 任务类型

更多可用参数(patienceoptimizeraugment 等)请参见 train 模式完整参数表

推理:加载 best.pt 并预测新图像/视频

训练完成后,产物保存在运行目录(默认 runs/pose/train*/weights/best.pt)。加载该 checkpoint 即可对新图像、视频甚至流媒体源做姿态预测,完整参数见 预测模式文档

from ultralytics import YOLO

# 加载在 Tiger-Pose 上训练得到的模型
model = YOLO("path/to/best.pt")

# 对图像/视频运行推理并可视化
results = model.predict(source="your_image_or_video", show=True)
# 使用训练好的模型运行推理
yolo pose predict model="path/to/best.pt" source="your_image_or_video" show=True

推理阶段的实现可参考 PosePredictor:它继承 DetectionPredictor,在 construct_result 中把原始预测张量最后 K*D 列 reshape 为模型 kpt_shape 对应的关键点形状(pred[:, 6:].view(N, *kpt_shape)),再用 ops.scale_coords 把归一化关键点坐标缩放回原图尺寸后写入 Results 对象——因此 Results.keypoints 的坐标与 orig_shape 对齐,可直接用于绘图或下游计算。

许可证与引用

  • Tiger-Pose 的标注数据由 Ultralytics 以 AGPL-3.0 许可发布(见仓库 LICENSE);
  • 数据集帧提取自一段网络视频,原始视频仍受其自身条款约束,在使用或再分发提取的帧之前应自行确认原始来源的使用条款。

常见问题

Tiger-Pose 适合用来做什么? 它是为姿态估计设计的 263 图小型数据集(210 训练 / 53 验证,单类 tiger,每实例 12 关键点,约 49.8 MB),最适合测试、调试和打磨 pose 训练/推理管线,然后再迁移到更大数据集。

如何确认 YAML 配置被正确解析? kpt_shape 缺失会触发明确报错(No kpt_shape in the ...);kpt_namesflip_idx 缺失不会报错,但可视化名称退化为数字索引、翻转增强不做关键点重排——正式使用前建议在 tiger-pose.yaml 基础上完整保留这两项。

如何扩展到自定义数据集? 按同样目录布局组织 images/{train,val}labels/{train,val},仿照 coco8-pose.yamldog-pose.yaml 等官方示例编写自己的数据集 YAML(设置 kpt_shape,按需加 flip_idxkpt_names),然后用相同命令 yolo pose train data=your.yaml model=yolo26n-pose.pt 训练即可。

参考资料

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

项目优选

收起
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.83 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
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384