MMHuman3D项目中的HumanData与MultiHumanData数据结构详解

MMHuman3D项目中的HumanData与MultiHumanData数据结构详解

【免费下载链接】mmhuman3d OpenMMLab 3D Human Parametric Model Toolbox and Benchmark 【免费下载链接】mmhuman3d 项目地址: https://gitcode.com/gh_mirrors/mm/mmhuman3d

概述

在3D人体姿态与形状估计领域,数据的高效组织和管理至关重要。MMHuman3D项目中的HumanData和MultiHumanData类提供了标准化的数据结构,用于存储和处理单视角和多视角的人体相关数据。本文将深入解析这两种数据结构的定义、使用方法和最佳实践。

HumanData数据结构

基本概念

HumanData是Python内置字典类(dict)的子类,专门用于存储单视角、基于图像的人体数据。它具有以下特点:

  1. 采用键值对存储方式,支持标准化的基础数据结构
  2. 同时兼容自定义数据扩展
  3. 原生支持numpy.ndarray和Python内置数据类型
  4. 可轻松转换为PyTorch张量

核心数据结构

路径信息
  • image_path: (N,)字符串列表,存储图像相对路径
  • segmentation(可选): (N,)字符串列表,存储分割图路径
  • depth_path(可选): (N,)字符串列表,存储深度图路径
关键点数据

HumanData采用HUMAN_DATA格式(190个关节点)存储关键点数据,所有数据集的关键点都会被映射到这一统一格式。

主要字段包括:

  • keypoints3d_smpl/keypoints3d_smplx: (N,190,4)数组,带置信度的3D关键点
  • keypoints3d_original: 原始数据集提供的3D关键点
  • keypoints2d_smpl/keypoints2d_smplx: (N,190,3)数组,带置信度的2D关键点
  • keypoints2d_original: 原始数据集提供的2D关键点

每个关键点字段都有对应的掩码字段(如keypoints3d_mask),用于标识哪些关节点是有效的。

边界框数据

边界框采用[x_min, y_min, width, height, confidence]格式:

  • bbox_xywh: (N,5)数组,人体边界框
  • face_bbox_xywh, lhand_bbox_xywh, rhand_bbox_xywh(可选): (N,5)数组,面部和手部边界框(SMPLX模型)
人体姿态与形状参数
  • smpl: 字典,包含身体姿态、全局旋转、形状参数和平移
  • smplx: 字典,在smpl基础上增加了手部姿态、表情等参数

元数据与杂项信息

misc字段建议内容

misc字典用于存储数据集的各类设置信息:

  • kps3d_root_aligned: 布尔值,指示3D关键点是否已对齐到根节点
  • flat_hand_mean: 布尔值,SMPLX手部姿态参数设置
  • bbox_source: 边界框来源说明
  • 各类缩放比例参数
  • 相机参数类型及值
  • 图像尺寸信息
meta字段建议内容
  • gender: (N,)列表,每帧的性别信息
  • height/width: (N,)列表,图像尺寸
  • 其他影响关键点或模型参数的信息

数据验证机制

HumanData提供了严格的数据验证机制:

  1. 键验证:默认只允许预定义的键作为顶层键,但可通过key_strict=False禁用
  2. 值验证:对每个键的值类型、形状和维度进行验证
  3. 维度标记:使用dim属性标识时间维度

数据压缩技术

基于掩码的压缩

由于HUMAN_DATA格式包含190个关节点,而实际数据集可能只标注部分关节点,可通过掩码压缩技术节省空间:

# 压缩关键点数据
human_data.compress_keypoints_by_mask()

# 获取压缩后的原始数据
compressed_data = human_data.get_raw_value('keypoints2d')

# 解压缩
human_data.decompress_keypoints()
文件压缩

支持两种文件存储方式:

  1. dump()/load(): 使用numpy的压缩npz格式
  2. dump_by_pickle()/load_by_pickle(): 适用于大文件的pickle格式
键压缩

移除不支持的非必要项以节省空间:

human_data.pop_unsupported_items()

数据选择方法

按形状选择
# 选择前10帧
first_ten = human_data.get_value_in_shape('keypoints2d', [10,-1,-1])

# 填充到指定形状
padded_data = human_data.get_value_in_shape('keypoints2d', [200,300,-1])
时间切片选择
# 选择10-20帧
sub_data = human_data.get_slice(10, 21)

# 降采样选择(间隔3帧)
downsampled = human_data.get_slice(0, 200, 3)

转换为PyTorch张量

# 转换为CPU张量
tensor_dict = human_data.to()

# 转换为GPU张量
gpu_tensor = human_data.to(torch.device('cuda:0'))

MultiHumanData扩展

MultiHumanData继承自HumanData,用于支持多人场景下的数据管理,主要增加了frame_range字段:

'frame_range': {
    'type': np.ndarray,
    'shape': (-1, 2),
    'dim': 0
}

数据访问机制

  1. 每张图像对应frame_range中的一个元素
  2. 每个frame_range元素包含两个指针,指向对应的数据块
  3. 通过指针可以访问该图像中所有人体实例的数据

这种设计实现了图像与多人数据的一对多映射关系,为多人场景下的3D人体重建提供了高效的数据组织方式。

总结

MMHuman3D项目中的HumanData和MultiHumanData提供了强大而灵活的数据管理方案,涵盖了从单人到多人、从2D到3D的各种人体相关数据。通过标准化的数据格式、严格的数据验证和高效的数据压缩技术,这些数据结构为3D人体姿态与形状估计任务提供了坚实的基础支持。

【免费下载链接】mmhuman3d OpenMMLab 3D Human Parametric Model Toolbox and Benchmark 【免费下载链接】mmhuman3d 项目地址: https://gitcode.com/gh_mirrors/mm/mmhuman3d

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值