Ultralytics YOLO26 姿态估计实战:基于 Tiger-Pose 数据集训练老虎 12 关键点模型
本文以 Ultralytics 官方的 Tiger-Pose 姿态估计数据集为主线,完整讲解该数据集的结构、tiger-pose.yaml 配置含义、用 yolo26n-pose 预训练模型训练 12 关键点模型的具体步骤,以及训练完成后如何加载 best.pt 进行推理;并结合仓库源码说明 kpt_shape、flip_idx、kpt_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_idx为0..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
训练流程中的几个源码级要点:
- 任务路由:
model.train(data=...)会根据数据配置将任务确定为pose;底层由 PoseTrainer 继承自检测训练器DetectionTrainer,专门处理关键点损失、验证与可视化,并在初始化时强制task="pose"。 - 关键点形状自动注入:训练器从
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 关键点数据集的原因。 - Mosaic 增强:默认训练管线包含 mosaic 拼接增强,官方文档展示了 Tiger-Pose 训练批次经 mosaic 后的效果——把多张图拼成一张以提升每个批次中目标与场景的多样性,帮助模型泛化到不同尺度、宽高比与上下文的物体。
训练参数速查
| 参数 | 本文取值 | 说明 |
|---|---|---|
data |
tiger-pose.yaml |
数据集 YAML,框架可自动下载 |
model |
yolo26n-pose.pt |
YOLO26-nano pose 预训练权重 |
epochs |
100 |
训练轮数 |
imgsz |
640 |
输入图像边长 |
task |
pose(CLI 中显式指定) |
任务类型 |
更多可用参数(patience、optimizer、augment 等)请参见 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_names 与 flip_idx 缺失不会报错,但可视化名称退化为数字索引、翻转增强不做关键点重排——正式使用前建议在 tiger-pose.yaml 基础上完整保留这两项。
如何扩展到自定义数据集?
按同样目录布局组织 images/{train,val} 与 labels/{train,val},仿照 coco8-pose.yaml、dog-pose.yaml 等官方示例编写自己的数据集 YAML(设置 kpt_shape,按需加 flip_idx 与 kpt_names),然后用相同命令 yolo pose train data=your.yaml model=yolo26n-pose.pt 训练即可。
参考资料
- 关联文档:Tiger-Pose 数据集官方文档
- 数据集配置:tiger-pose.yaml
- 模型配置:yolo26-pose.yaml
- 训练器实现:PoseTrainer
- 预测器实现:PosePredictor
- 相关文档:pose 任务、训练模式、预测模式、pose 数据集索引
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 StartedRust0623
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