Horse-10 数据集与 MMPose 使用指南:面向马的 2D 姿态估计数据管线详解
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
本篇技术指南以 MMPose 仓库中 Horse-10 论文条目(docs/src/papers/datasets/horse10.md)为核心,结合数据集元信息配置、数据集类实现与单元测试,系统梳理 Horse-10 数据集的论文出处、22 关键点与骨架定义、数据下载与目录组织、MMPose 中的加载与使用方式。读完本文,你将掌握如何在 MMPose 中正确接入 Horse-10 数据,并理解其底层数据集元信息契约。
一、数据集背景与论文出处
Horse-10 是由 Mathis 等人于 2021 年发表于 IEEE/CVF Winter Conference on Applications of Computer Vision(WACV)的动物姿态估计数据集。其配套论文题为Pretraining boosts out-of-domain robustness for pose estimation,核心研究方向是预训练对姿态估计模型跨域鲁棒性的提升——即模型在某一采集环境下训练后,能否在未见过的环境(光照、背景、马匹个体差异等)中依然保持关键点定位能力。
仓库中的论文卡片 docs/src/papers/datasets/horse10.md 完整记录了该论文的标准引用信息,在学术论文、报告或模型卡中引用 Horse-10 时可直接使用以下 BibTeX:
@inproceedings{mathis2021pretraining, title={Pretraining boosts out-of-domain robustness for pose estimation}, author={Mathis, Alexander and Biasi, Thomas and Schneider, Steffen and Yuksekgonul, Mert and Rogers, Byron and Bethge, Matthias and Mathis, Mackenzie W}, booktitle={Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision}, pages={1859--1868}, year={2021} }在 MMPose 的 动物 2D 关键点数据集总览 中,Horse-10 与 AP-10K、AnimalPose、MacaquePose 等数据集并列收录,是仓库支持的动物姿态估计基准之一。
二、数据集元信息配置:22 个关键点与 18 条骨架连线
MMPose 通过统一的dataset_info结构描述一个数据集的全部元信息,Horse-10 的定义位于 configs/base/datasets/horse10.py。该配置由五个部分组成:dataset_name、paper_info、keypoint_info、skeleton_info、joint_weights与sigmas。
2.1 关键点定义(keypoint_info)
Horse-10 共标注22 个关键点,每个关键点包含name(名称)、id(编号,0~21)、color(可视化 RGB 颜色)、type(部位类型)与swap(水平翻转对应点,本文中全部为空)。完整清单如下:
| id | name | color | type |
|---|---|---|---|
| 0 | Nose | [255, 153, 255] | upper |
| 1 | Eye | [255, 153, 255] | upper |
| 2 | Nearknee | [255, 102, 255] | upper |
| 3 | Nearfrontfetlock | [255, 102, 255] | upper |
| 4 | Nearfrontfoot | [255, 102, 255] | upper |
| 5 | Offknee | [255, 102, 255] | upper |
| 6 | Offfrontfetlock | [255, 102, 255] | upper |
| 7 | Offfrontfoot | [255, 102, 255] | upper |
| 8 | Shoulder | [255, 153, 255] | upper |
| 9 | Midshoulder | [255, 153, 255] | upper |
| 10 | Elbow | [255, 153, 255] | upper |
| 11 | Girth | [255, 153, 255] | upper |
| 12 | Wither | [255, 153, 255] | upper |
| 13 | Nearhindhock | [255, 51, 255] | lower |
| 14 | Nearhindfetlock | [255, 51, 255] | lower |
| 15 | Nearhindfoot | [255, 51, 255] | lower |
| 16 | Hip | [255, 153, 255] | lower |
| 17 | Stifle | [255, 153, 255] | lower |
| 18 | Offhindhock | [255, 51, 255] | lower |
| 19 | Offhindfetlock | [255, 51, 255] | lower |
| 20 | Offhindfoot | [255, 51, 255] | lower |
| 21 | Ischium | [255, 153, 255] | lower |
关键点命名遵循马匹解剖学结构:Near*与Off*分别对应观察者视角的近侧/远侧肢体部位(如 Nearknee/Offknee、Nearfrontfoot/Offfrontfoot、Nearhindhock/Offhindhock),Wither(马肩隆)、Girth(胸围)、Stifle(膝关节)、Ischium(坐骨)等则覆盖躯干核心区域。
值得注意的两点:
swap字段全部为空:与人体关键点数据集(如 COCO 中 left_shoulder↔right_shoulder 的成对定义)不同,Horse-10 没有声明任何水平翻转对称关键点对。从配置结构可以推断,由该字段推导出的flip_indices/flip_pairs元信息在水平翻转数据增强时不会发生关键点索引重排。type划分为 upper/lower:以马匹躯干为分界,头部与前肢关键点属upper,后肢与臀部关键点属lower。该信息会进入元信息中的upper_body_ids与lower_body_ids,可供分区评估(如 keypoint_partition_metric.py)或分区可视化使用。
2.2 骨架连线定义(skeleton_info)
dataset_info同时定义了18 条骨架连线,用于可视化与骨架级评估:
Nose-Eye, Eye-Wither, Wither-Hip, Hip-Ischium, Ischium-Stifle, Stifle-Girth, Girth-Elbow, Elbow-Shoulder, Shoulder-Midshoulder, Midshoulder-Wither, Nearknee-Nearfrontfetlock, Nearfrontfetlock-Nearfrontfoot, Offknee-Offfrontfetlock, Offfrontfetlock-Offfrontfoot, Nearhindhock-Nearhindfetlock, Nearhindfetlock-Nearhindfoot, Offhindhock-Offhindfetlock, Offhindfetlock-Offhindfoot这些连线将头部(Nose/Eye)经 Wither 连接到躯干主链(Wither-Hip-Ischium-Stifle-Girth-Elbow-Shoulder),并分别向四条腿延伸,构成完整的马匹骨架拓扑。
2.3 joint_weights 与 sigmas
配置末尾的joint_weights=[1.] * 22表示 22 个关键点在损失计算中的权重均为 1.0(无重点加权);sigmas=[]表示该数据集未提供逐关键点的高斯标准差先验(部分数据集会据此生成自适应热图标准差)。paper_info字段则冗余记录了论文作者、标题、会议与年份,与论文卡片一致。
三、数据集加载实现:Horse10Dataset 与元信息机制
3.1 类定义
Horse-10 在 MMPose 中的加载实现位于 mmpose/datasets/datasets/animal/horse10_dataset.py,类声明极为简洁:
@DATASETS.register_module() class Horse10Dataset(BaseCocoStyleDataset): """Horse10Dataset for animal pose estimation. ... """ METAINFO: dict = dict(from_file='configs/_base_/datasets/horse10.py')这体现了 MMPose 3.x 的数据集设计哲学:元信息与代码解耦。Horse10Dataset本身不内嵌任何关键点定义,而是通过METAINFO的from_file机制在运行时加载上一节介绍的 configs/base/datasets/horse10.py;数据解析与增广逻辑则全部继承自BaseCocoStyleDataset(COCO 风格标注格式,即images/annotations/categories三件套的 JSON 结构)。新增一个动物数据集时,通常只需仿照该模式编写一个派生类并挂载对应的dataset_info配置。
3.2 关键构造参数
从类文档字符串(docstring)可以确认该数据集类支持以下常用参数:
ann_file:标注文件路径(默认'');bbox_file:检测结果文件路径。若设置,评估时将使用该文件中的检测框替代 GT 框(仅评估阶段有效,即test_mode=True时);data_mode:数据采样模式,'topdown'(每样本单实例)或'bottomup'(每样本含图中全部实例),默认'topdown';data_root:data_prefix与ann_file的根目录;data_prefix:训练数据的路径前缀,默认dict(img=None, ann=None);filter_cfg:数据过滤配置(如按bbox_score_thr过滤检测框);test_mode:True表示测试阶段(不做随机增广、可加载 bbox 文件);lazy_init:是否在实例化时立即加载标注;仅需元信息(如可视化场景)时设False可跳过标注加载以节省时间。
3.3 元信息派生
由 configs/base/datasets/horse10.py 与加载逻辑共同派生出的dataset.metainfo包含:dataset_name、num_keypoints(=22)、keypoint_id2name/keypoint_name2id双向映射、upper_body_ids/lower_body_ids、flip_indices/flip_pairs、keypoint_colors、num_skeleton_links(=18)、skeleton_links/skeleton_link_colors、dataset_keypoint_weights等字段,为训练管线、评估器与可视化器提供统一入口。
四、数据下载与目录组织
4.1 下载与版权声明
Horse-10 的图像需从数据集官方主页下载,标注文件则从 OpenMMLab 发布的horse10_annotations.tar中获取(数据准备完整说明见 docs/en/dataset_zoo/2d_animal_keypoint.md 的 Horse-10 小节)。注意:根据作者声明,该数据集及其标注仅限非商业用途,使用前请阅读horse10.deeplabcut.org上的许可信息。
4.2 目录结构
将图像与标注解压后,应组织为如下结构(放在仓库根目录的data/下):
mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs `── data │── horse10 │-- annotations │ │-- horse10-train-split1.json │ |-- horse10-train-split2.json │ |-- horse10-train-split3.json │ │-- horse10-test-split1.json │ |-- horse10-test-split2.json │ |-- horse10-test-split3.json │-- labeled-data │ │-- BrownHorseinShadow │ │-- BrownHorseintoshadow │ │-- ...标注目录下共6 个 JSON 文件:train/test 各 3 个 split。split1/2/3的划分与论文中"跨环境(跨域)鲁棒性"的评测设定直接相关——不同 split 对应不同采集环境(如BrownHorseinShadow、BrownHorseintoshadow等子目录分别代表不同光照/场景的视频片段),用于验证模型在训练环境之外的泛化能力,这正是论文标题 "out-of-domain robustness" 的落点。
五、在训练与评估配置中接入 Horse-10
由于 configs/base/datasets/horse10.py 位于_base_目录,任何 top-down 或 bottom-up 训练配置都可以通过继承方式引用它。一个典型的接入方式是在自定义训练配置中以_base_字段引入该数据集元信息,并配套设置数据集类、数据根目录、标注文件与增广管线:
_base_ = 'configs/_base_/datasets/horse10.py' # 以 topdown 模式为例 dataset_type = 'Horse10Dataset' data_root = 'data/horse10/' train_dataloader = dict( batch_size=64, num_workers=8, persistent_workers=True, sampler=dict(type='DefaultSampler', shuffle=True), dataset=dict( type=dataset_type, data_root=data_root, data_mode='topdown', ann_file='annotations/horse10-train-split1.json', data_prefix=dict(img=''), pipeline=train_pipeline, )) val_dataloader = dict( batch_size=32, num_workers=8, dataset=dict( type=dataset_type, data_root=data_root, data_mode='topdown', ann_file='annotations/horse10-test-split1.json', data_prefix=dict(img=''), pipeline=val_pipeline, test_mode=True, ))需要说明的是:上述片段为示意性写法,_base_中仅含dataset_info元信息;实际训练时还需组合train_pipeline、val_pipeline及优化器、调度器、评估器等配置(可参考 configs 目录下 animal_2d_keypoint 各模型完整示例)。按论文设定进行跨域评测时,可以用某个 split 训练、另一个 split 测试,以复现 "out-of-domain" 评估协议。训练完成后,若希望用检测器输出的框(而非 GT 框)评估,可设置bbox_file并保持test_mode=True。
六、单元测试:元信息契约与参数校验
仓库为 Horse-10 数据集提供了完整的单元测试 tests/test_datasets/test_datasets/test_animal_datasets/test_horse10_dataset.py,其验证内容可作为接入数据时的"契约清单":
- 元信息校验(test_metainfo):断言
dataset_name == 'horse10'、num_keypoints == 22,且keypoint_colors、dataset_keypoint_weights长度均为 22,skeleton_links与skeleton_link_colors长度一致。这反向验证了 configs/base/datasets/horse10.py 中定义的一致性。 - topdown / bottomup 双模式:两种
data_mode下训练与测试均能正确构建,且data_info的关键字段类型符合预期——topdown 模式返回img_id / img_path / bbox / bbox_score / keypoints / keypoints_visible / id,bottomup 模式额外包含invalid_segs。 - 异常路径:
data_mode非法时抛出got invalid data_mode;bbox_file仅在test_mode=True时允许设置,且仅限 topdown 模式;bbox_score_thr过滤仅限 topdown 模式。这些校验保证了用户不会在错误场景下静默得到异常行为。
测试使用仓库自带的 tests/data/horse10 迷你样本(3 张图片 + 1 个test_horse10.json),可在无完整数据集的情况下验证数据集类的加载逻辑。
七、小结:从论文卡片到可运行数据集
回顾全文,Horse-10 在 MMPose 中的落地形成了清晰的三层结构:
- 论文层:docs/src/papers/datasets/horse10.md 承载引用信息(WACV'2021、BibTeX),保证学术引用可溯源;
- 元信息层:configs/base/datasets/horse10.py 以
dataset_info声明 22 关键点、18 骨架连线、权重与颜色,通过METAINFO挂载; - 实现层:horse10_dataset.py 以极简的派生类复用
BaseCocoStyleDataset的全部解析与采样逻辑,并由 单元测试 锁定行为契约。
理解这一模式后,你不仅能直接复用 Horse-10 进行马的姿态估计训练与跨域鲁棒性实验,还能照此范式快速接入其他 COCO 风格的动物姿态数据集。
【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考