Horse-10 数据集与 MMPose 使用指南:面向马的 2D 姿态估计数据管线详解
2026/9/17 13:18:13 网站建设 项目流程

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_namepaper_infokeypoint_infoskeleton_infojoint_weightssigmas

2.1 关键点定义(keypoint_info)

Horse-10 共标注22 个关键点,每个关键点包含name(名称)、id(编号,0~21)、color(可视化 RGB 颜色)、type(部位类型)与swap(水平翻转对应点,本文中全部为空)。完整清单如下:

idnamecolortype
0Nose[255, 153, 255]upper
1Eye[255, 153, 255]upper
2Nearknee[255, 102, 255]upper
3Nearfrontfetlock[255, 102, 255]upper
4Nearfrontfoot[255, 102, 255]upper
5Offknee[255, 102, 255]upper
6Offfrontfetlock[255, 102, 255]upper
7Offfrontfoot[255, 102, 255]upper
8Shoulder[255, 153, 255]upper
9Midshoulder[255, 153, 255]upper
10Elbow[255, 153, 255]upper
11Girth[255, 153, 255]upper
12Wither[255, 153, 255]upper
13Nearhindhock[255, 51, 255]lower
14Nearhindfetlock[255, 51, 255]lower
15Nearhindfoot[255, 51, 255]lower
16Hip[255, 153, 255]lower
17Stifle[255, 153, 255]lower
18Offhindhock[255, 51, 255]lower
19Offhindfetlock[255, 51, 255]lower
20Offhindfoot[255, 51, 255]lower
21Ischium[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_idslower_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本身不内嵌任何关键点定义,而是通过METAINFOfrom_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_rootdata_prefixann_file的根目录;
  • data_prefix:训练数据的路径前缀,默认dict(img=None, ann=None)
  • filter_cfg:数据过滤配置(如按bbox_score_thr过滤检测框);
  • test_modeTrue表示测试阶段(不做随机增广、可加载 bbox 文件);
  • lazy_init:是否在实例化时立即加载标注;仅需元信息(如可视化场景)时设False可跳过标注加载以节省时间。

3.3 元信息派生

由 configs/base/datasets/horse10.py 与加载逻辑共同派生出的dataset.metainfo包含:dataset_namenum_keypoints(=22)、keypoint_id2name/keypoint_name2id双向映射、upper_body_ids/lower_body_idsflip_indices/flip_pairskeypoint_colorsnum_skeleton_links(=18)、skeleton_links/skeleton_link_colorsdataset_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 对应不同采集环境(如BrownHorseinShadowBrownHorseintoshadow等子目录分别代表不同光照/场景的视频片段),用于验证模型在训练环境之外的泛化能力,这正是论文标题 "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_pipelineval_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_colorsdataset_keypoint_weights长度均为 22,skeleton_linksskeleton_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_modebbox_file仅在test_mode=True时允许设置,且仅限 topdown 模式;bbox_score_thr过滤仅限 topdown 模式。这些校验保证了用户不会在错误场景下静默得到异常行为。

测试使用仓库自带的 tests/data/horse10 迷你样本(3 张图片 + 1 个test_horse10.json),可在无完整数据集的情况下验证数据集类的加载逻辑。

七、小结:从论文卡片到可运行数据集

回顾全文,Horse-10 在 MMPose 中的落地形成了清晰的三层结构:

  1. 论文层:docs/src/papers/datasets/horse10.md 承载引用信息(WACV'2021、BibTeX),保证学术引用可溯源;
  2. 元信息层:configs/base/datasets/horse10.py 以dataset_info声明 22 关键点、18 骨架连线、权重与颜色,通过METAINFO挂载;
  3. 实现层:horse10_dataset.py 以极简的派生类复用BaseCocoStyleDataset的全部解析与采样逻辑,并由 单元测试 锁定行为契约。

理解这一模式后,你不仅能直接复用 Horse-10 进行马的姿态估计训练与跨域鲁棒性实验,还能照此范式快速接入其他 COCO 风格的动物姿态数据集。

【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询