MHFormer如何加载Human3.6M?Fusion数据集与ChunkedGenerator分块管线深度解析

MHFormer如何加载Human3.6M?Fusion数据集与ChunkedGenerator分块管线深度解析 MHFormer如何加载Human3.6MFusion数据集与ChunkedGenerator分块管线深度解析【免费下载链接】MHFormer[CVPR 2022] MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation项目地址: https://gitcode.com/gh_mirrors/mh/MHFormerMHFormerCVPR 2022 的多假设 Transformer 3D 人体姿态估计模型是如何一步步加载 Human3.6M 数据集的 对于想复现该项目的同学来说数据管线是最容易卡住的一环。本文将带你深度解析两个核心组件Fusion 数据集类与ChunkedGenerator 分块生成器——它们把三个 npz 原始文件加工成模型可直接训练的 351 帧滑动窗口样本。一图看懂 MHFormer 的 3D 姿态估计整体流程在深入数据加载之前先看看模型的多假设思想从 2D 输入出发先生成多个 3D 姿态假设MHG再经自假设精炼SHR与跨假设交互CHI最终合成稳定的 3D 骨骼输出。理解了整体目标再看数据是如何被喂进模型的。Human3.6M 数据集目录3 个 npz 文件就够了MHFormer 沿用 VideoPose3D 的数据组织方式所有文件放在dataset/目录下文件名作用data_3d_h36m.npz3D 骨骼真值mocap 位置data_2d_h36m_gt.npz2D 关键点真值data_2d_h36m_cpn_ft_h36m_dbb.npzCPN 网络预测的 2D 关键点默认输入含 domain bias几个关键约定定义在 common/opt.py 与 common/h36m_dataset.py数据根路径root_path默认dataset/加载时拼接data_3d_h36m.npz与data_2d_h36m_{keypoints}.npz受试者划分训练用 S1、S5、S6、S7、S8测试用 S9、S11subjects_train/subjects_test采样率50 fps骨架在加载时剔除了 15 个静态关节只保留17 个关节相机参数4 台相机的内外参已硬编码在h36m_dataset.py中无需额外配置文件Fusion 数据集把 2D 检测与 3D 真值融合在一起核心实现位于 common/load_data_hm36.py 的Fusion类它继承 PyTorch 的data.Dataset内部做了三件事prepare_data坐标统一与对齐世界坐标 → 相机坐标对每个受试者的每段动作用world_to_camera来自 common/camera.py变换 3D 位置并减去根关节得到相对坐标消除全身平移2D 关键点归一化按相机分辨率把像素坐标归一化到屏幕坐标系长度对齐2D 检测序列若比 mocap 长直接截断到 mocap 长度保证 2D/3D 一一对应。fetch以 (受试者, 动作, 相机) 为键组织数据所有序列被打平成字典键为(subject, action, cam_idx)同时支持--actions前缀过滤、--downsample抽帧和--subset子采样方便调试时快速缩小数据量。getitem返回 8 元组训练样本每个索引返回cam, gt_3D, input_2D, action, subject, scale, bb_box, cam_ind其中cam是 10 维相机内参向量input_2D是归一化的 2D 关键点序列gt_3D是根相对的 3D 骨骼。测试模式下还会额外生成一份水平翻转版 2D 输入供测试时增强使用。ChunkedGenerator 分块管线351 帧窗口是怎么切出来的Fusion初始化时会创建一个 common/generator.py 中的ChunkedGenerator这才是真正决定一个 batch 长什么样的地方。分块规则居中偏移 步长滑动块长frames默认 351 帧步长stride默认 1即相邻窗口几乎完全重叠每段序列被切成ceil(帧数/块长)个块且所有块整体向序列中间居中偏移offset (n_chunks × 块长 − 帧数) // 2让首尾块也能覆盖到序列边界之外的空气帧每个块记录为一条pairs(键, start, end, flip, reverse)Fusion.__len__就返回pairs数量。get_batch取窗、填充、翻转取出一个窗口时生成器执行 4 步操作取 2D 窗口长度 chunk_length 2 × padpad 默认 175即 351350701 帧越界部分用edge模式填充取 3D 真值默认out_all13D 标签与 2D 窗口完全对齐边缘帧也有监督信号水平翻转x 坐标取反 左右关键点交换3D 侧同步交换左右关节相机参数中对应分量取反时间翻转reverse标志把序列倒放用于时序增强。训练增强样本自动翻倍开启data_augmentation后每条pairs会再复制一份并置flipTrue——每个窗口既以原样、又以镜像形式进入训练等效于数据量翻倍而测试模式则关闭一切增强保证评估纯净。调用链速览main.py 里发生了什么整个管线在 main.py 中一行行串起来python main.py --frames 351 --batch_size 128 # 训练 python main.py --test --previous_dir checkpoint/pretrained/351 --frames 351 # 测试流程为Human36mDataset读 npz 骨架/相机→Fusion融合 建生成器→DataLoader多进程取 batch→Model前向。训练损失即 MPJPE测试时input_augmentation会对原图/镜像两次推理并取平均x 轴取反 左右关节交换后这也是 MHFormer 论文中test-time augmentation的落地位置。关键参数速查表 ⚙️参数默认值说明--frames3513D 预测窗口长度pad175自动按(frames-1)//2计算-k / --keypointscpn_ft_h36m_dbb使用的 2D 关键点文件--root_pathdataset/数据根目录--batch_size256实际传给生成器的批次 batch_size ÷ stride--workers8DataLoader 进程数小结MHFormer 的数据加载可以浓缩为一句话Human36mDataset负责读Fusion负责对齐与融合ChunkedGenerator负责切窗与增强。掌握这条 npz → 居中滑动窗口 → 翻转增强的管线你就能轻松替换数据源、修改窗口长度或自定义增强策略完整复现这篇 CVPR 2022 工作。【免费下载链接】MHFormer[CVPR 2022] MHFormer: Multi-Hypothesis Transformer for 3D Human Pose Estimation项目地址: https://gitcode.com/gh_mirrors/mh/MHFormer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考