ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MMPose 三维全身关键点数据集 H3WB 使用指南:数据准备、目录规范与源码解析

2026/9/17 21:51:03 拓冰建站 浏览量
MMPose 三维全身关键点数据集 H3WB 使用指南:数据准备、目录规范与源码解析 MMPose 三维全身关键点数据集 H3WB 使用指南数据准备、目录规范与源码解析【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose导读本文聚焦于 OpenMMLab MMPose 姿态估计工具箱中 3D 全身关键点3D WholeBody Keypoint数据集的接入方式核心对象是 H3WBHuman3.6M 3D WholeBody 数据集。通过阅读本文你将掌握 H3WB 数据的下载与目录组织规范、MMPose 中与之配套的数据集元信息配置configs/base/datasets/h3wb.py的构成以及底层数据集实现类H36MWholeBodyDataset的加载逻辑与关键参数序列长度、因果建模、多目标等的用法能够顺利将其接入 3D 人体姿态估计训练与推理流程。H3WB 数据集概览MMPose 目前支持的 3D 全身关键点数据集为H3WBHuman3.6M 3D WholeBody Dataset and Benchmark发表于 ICCV 2023论文。它建立在经典的 Human3.6M 数据集之上在其 3D 人体姿态标注的基础上补充了全身WholeBody级别的稠密关键点标注。在 MMPose 的官方文档中对应的数据集列表位于 docs/en/dataset_zoo/3d_wholebody_keypoint.md其引用信息为InProceedings{Zhu_2023_ICCV, author {Zhu, Yue and Samet, Nermin and Picard, David}, title {H3WB: Human3.6M 3D WholeBody Dataset and Benchmark}, booktitle {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)}, month {October}, year {2023}, pages {20166-20177} }133 个全身关键点的构成从 h3wb_dataset.py 的类文档注释可以看到 H36M-WholeBody 关键点索引的划分规则0-16: 17 个身体body关键点 17-22: 6 个脚部foot关键点 23-90: 68 个脸部face关键点 91-132: 42 个手部hand关键点 总计 133 个关键点用于全身姿态估计其中身体与脚部关键点沿用 Human3.6M/COCO 风格的骨架定义脸部关键点采用 COCO-WholeBody 风格的 68 点面部轮廓手部则覆盖双手各 21 点含手腕根部hand_root、拇指/食指/中指/无名指/小指的四个关节。数据下载与目录组织推荐目录约定MMPose 官方推荐将数据集根目录软链接symlink到$MMPOSE/data下如果你的目录结构与默认不同需要同步修改配置文件中的对应路径。MMPose 仓库的工作目录示意如下mmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data └── h36m下载步骤H3WB 基于 Human3.6M 原始图像与三维标注构建因此需要分两步准备下载 Human3.6M 数据集按照 Human3.6M 数据集使用文档 中 Human3.6M 一节的说明下载原始数据下载 H3WB 标注从 H3WB 官方仓库获取 H3WB 的注解文件annotations注意务必跟随其官方Updates更新说明章节下载对应版本的标注文件以保证与当前工具链兼容。期望的目录结构下载并整理完成后data/h36m目录应具有如下结构来自 3d_wholebody_keypoint.mdmmpose ├── mmpose ├── docs ├── tests ├── tools ├── configs ── data ├── h36m ├── annotation_body3d | ├── cameras.pkl | ├── h3wb_train.npz | ├── fps50 | | ├── h36m_test.npz | | ├── h36m_train.npz | | ├── joint2d_rel_stats.pkl | | ├── joint2d_stats.pkl | | ├── joint3d_rel_stats.pkl | | ── joint3d_stats.pkl | ── fps10 | ├── h36m_test.npz | ├── h36m_train.npz | ├── joint2d_rel_stats.pkl | ├── joint2d_stats.pkl | ├── joint3d_rel_stats.pkl | ── joint3d_stats.pkl ── images ├── S1 | ├── S1_Directions_1.54138969 | | ├── S1_Directions_1.54138969_00001.jpg | | ├── S1_Directions_1.54138969_00002.jpg | | ├── ... | ├── ... ├── S5 ├── S6 ├── S7 ├── S8 ├── S9 ── S11其中h3wb_train.npz是 H3WB 的训练标注文件内含train_data、metadata、bbox等键cameras.pkl为相机参数文件images下按拍摄对象S1/S5/S6/S7/S8/S9/S11、动作与相机编号组织原始图像序列。数据集元信息配置解析MMPose 的数据集元信息通过 configs/base/datasets/h3wb.py 声明H36MWholeBodyDataset.METAINFO即通过from_fileconfigs/_base_/datasets/h3wb.py引用它。该配置主要包含四部分1. keypoint_info关键点定义为全部 133 个关键点声明name、id、color、typeupper/lower与swap左右镜像配对关系。例如0: dict(namenose, id0, color[51, 153, 255], typeupper, swap), 1: dict(nameleft_eye, id1, color[51, 153, 255], typeupper, swapright_eye), 23: dict(nameface-0, id23, color[247, 34, 5], typeupper, swapface-16), 91: dict(nameleft_hand_root, id91, color[247, 34, 5], type, swapright_hand_root),swap字段用于数据增强中的左右翻转一致性处理如left_eye与right_eye互为一对面部轮廓点同样两两配对face-0与face-16。2. skeleton_info骨架连线定义用于可视化与结构先验的骨骼连接共 65 条边例如0: dict(link(left_ankle, left_knee), id0, color[0, 255, 0]), 12: dict(link(left_eye, right_eye), id12, color[51, 153, 255]), 25: dict(link(left_hand_root, left_thumb1), id25, color[255, 128, 0]),3. joint_weightsjoint_weights[1.] * 133所有关键点的损失权重默认均为 1.0训练时可直接使用。4. sigmas关键点高斯半径sigmas长度为 133取自 COCO-WholeBody 官方评测脚本myeval_wholebody.py用于 OKSObject Keypoint Similarity指标计算时按关键点类别赋予不同的高斯标准差。例如鼻子为 0.026、肩膀为 0.079、手部关键点在 0.007~0.047 之间脸部关键点普遍更小精细部位要求更高的空间精度。底层实现源码解析类继承关系与数据划分MMPose 中 H3WB 的实现类是H36MWholeBodyDataset定义于 mmpose/datasets/datasets/wholebody3d/h3wb_dataset.py通过DATASETS.register_module()注册并继承自 3D 人体姿态数据集Human36mDataset见 h36m_dataset.py后者又继承自 BaseMocapDataset。从源码可以看到训练/测试的对象划分与相机顺序self.camera_order_id [54138969, 55011271, 58860488, 60457274] if not test_mode: self.subjects [S1, S5, S6] else: self.subjects [S7]即训练集使用 S1、S5、S6 三个对象测试集使用 S7并按四个相机编号54138969、55011271、58860488、60457274遍历。标注文件加载_load_ann_file通过 mmengine 的get_local_path支持本地与远端文件读取加载h3wb_train.npz并拆分为三个部分self.ann_data data[train_data].item() self.camera_data data[metadata].item() self.bboxes data[bbox].item()样本构建与坐标系处理_load_annotations遍历 subject、action、camera读取每帧的 2D 关键点pose_2d与相机坐标系下的 3D 关键点camera_3d并做以下处理相机参数重整将K/R/T/Distortion从原始格式转换为 MMPose 约定结构并换算焦距f与光心c*1000单位换算3D 关键点keypoints_3d与lifting_target均除以 1000/1000将毫米转换为米与 MMPose 3D 姿态任务的输出单位保持一致目标帧选择causalTrue时取序列最右侧帧为目标帧target_idx [-1]否则取中间帧multiple_target 0时目标为合并的多帧图像路径构造按{data_root}/original/{subject}/Images/{act}.{cam}/frame_{frame_id}.jpg规则拼接可见性所有关键点默认设为可见keypoints_visible/keypoints_3d_visible全 1。序列切分与Human36mDataset类似H3WB 也支持把视频按帧序列切分为样本_len (seq_len - 1) * seq_step 1从每个视频段内滑动窗口生成seq_len帧的输入序列get_sequence_indices在 H3WB 中返回空列表序列切分直接内联在_load_annotations中完成。关键参数详解BaseMocapDataset / Human36mDataset 继承参数在配置 3D 姿态模型的数据集部分时以下继承自基类的参数直接影响训练行为默认值见 h36m_dataset.py 与 base_mocap_dataset.py参数默认值作用ann_file标注文件路径相对data_rootseq_len1每个样本包含的视频帧数决定时序输入窗口长度seq_step1从视频中抽取帧的间隔步长multiple_target0大于 0 时将每multiple_target个序列合并为一个样本多目标预测要求seq_len1multiple_target_step0合并序列的间隔步长为 0 时默认等于multiple_targetpad_video_seqFalse是否对视频序列进行补帧使得视频中每一帧都能得到预测causalTrue为True时以最右侧输入帧为目标帧否则以中间帧为目标帧subset_frac1.0数据集缩减比例(0, 1]用于小规模快速调试keypoint_2d_srcgt2D 关键点来源gt标注、detection检测结果文件、pipeline由 pipeline 生成keypoint_2d_det_fileNone当keypoint_2d_srcdetection时使用的 2D 检测结果文件factor_fileNone投影因子文件如深度/尺度因子缺省时填 0camera_param_fileNone相机参数文件cameras.pkldata_modetopdowntopdown每样本单实例或bottomup每图像多实例其中keypoint_2d_src的值会经SUPPORTED_keypoint_2d_src {gt, detection, pipeline}校验非法取值将抛出ValueError。测试用例与验证方式MMPose 为 H3WB 数据集提供了单元测试 tests/test_datasets/test_datasets/test_wholebody_datasets/test_h3wb_dataset.py使用tests/data/h3wb下的精简标注子集进行验证覆盖元信息校验dataset_name h3wb、关键点数量为 133、keypoint_colors与dataset_keypoint_weights长度均为 133、骨架连线与颜色数量一致topdown 数据加载默认配置下数据集长度为 1样本包含img_paths、keypoints、keypoints_3d、scale、center、id等字段序列配置在seq_len1, seq_step1, causalFalse, pad_video_seqTrue组合下仍能正确构建样本。测试中的典型构造方式可供自定义数据集或本地验证参考cfg dict( ann_fileh3wb_train_bbox_subset.npz, data_modetopdown, data_roottests/data/h3wb, pipeline[]) dataset H36MWholeBodyDataset(**cfg)将 H3WB 接入 3D 姿态估计流程准备完成后H3WB 即可作为train_dataloader/val_dataloader/test_dataloader的数据集使用配置片段大致如下dataset_info dict(from_fileconfigs/_base_/datasets/h3wb.py) train_dataloader dict( batch_size..., # 按显存调整 datasetdict( typeH36MWholeBodyDataset, ann_fileannotation_body3d/h3wb_train.npz, seq_len1, causalTrue, keypoint_2d_srcgt, camera_param_fileannotation_body3d/cameras.pkl, data_rootdata/h36m/, data_modetopdown, pipeline..., metainfodataset_info))值得说明的是仓库中的完整 3D 姿态模型训练配置位于 configs/body_3d_keypoint如 video_pose_lift、image_pose_lift 与 motionbert 相关实验H3WB 作为 3D 全身关键点数据集可参照其中的数据集配置方式接入训练与测试入口统一使用 tools/train.py 与 tools/test.py。小结本文围绕 H3WB 数据集完整梳理了 MMPose 中 3D 全身关键点任务的接入链路从数据下载与目录组织data/h36m下的annotation_body3d与images到元信息配置h3wb.py 中 133 个关键点的keypoint_info/skeleton_info/joint_weights/sigmas再到底层实现H36MWholeBodyDataset的序列切分、坐标系单位换算、因果目标帧选择与基类参数语义。结合 h3wb_dataset.py、h36m_dataset.py 与对应测试你可以基于此快速完成 H3WB 数据的验证、复现与自定义扩展。【免费下载链接】mmposeOpenMMLab Pose Estimation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考