MMHuman3D项目中的HumanData数据格式详解

MMHuman3D项目中的HumanData数据格式详解

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

概述

在3D人体建模与姿态估计领域,数据格式的统一和标准化对于模型训练和评估至关重要。MMHuman3D项目中的HumanData数据格式提供了一种高效、统一的方式来存储和处理与人体相关的各种数据,包括关键点、模型参数、图像路径等。本文将深入解析HumanData的设计理念、核心结构和实用功能。

HumanData基础结构

HumanData是Python内置字典的子类,专门用于存储单视角人体图像的相关信息。它具有以下特点:

  1. 通用基础结构:提供标准化的数据存储框架
  2. 灵活扩展性:支持自定义数据特性的兼容
  3. 数据类型支持:原生支持numpy.ndarray和Python内置数据结构
  4. 转换能力:可轻松转换为PyTorch Tensor(支持CPU和GPU)

核心数据字段详解

1. 路径信息

路径信息用于记录各类图像文件的存储位置:

  • image_path:图像文件路径列表(N,)
  • segmentation_path(可选):分割图路径列表(N,)
  • depth_path(可选):深度图路径列表(N,)

2. 关键点数据

HumanData采用统一的190个关键点格式(HUMAN_DATA),支持2D和3D关键点的存储:

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

每个关键点字段都应有对应的mask字段(如keypoints2d_smpl_mask)标识有效关键点。

3. 检测框数据

检测框采用[x_min, y_min, width, height, confidence]格式:

  • bbox_xywh:(N, 5)数组,身体检测框
  • face_bbox_xywhlhand_bbox_xywhrhand_bbox_xywh(可选):(N, 5)数组,SMPLX模型特有

4. 人体模型参数

支持SMPL和SMPLX两种主流人体模型的参数存储:

SMPL参数
{
    'body_pose': (N, 23, 3),
    'global_orient': (N, 3),
    'betas': (N, 10),
    'transl': (N, 3)
}
SMPLX参数
{
    'body_pose': (N, 21, 3),
    'global_orient': (N, 3),
    'betas': (N, 10),
    'transl': (N, 3),
    'left_hand_pose': (N, 15, 3),
    'right_hand_pose': (N, 15, 3),
    'expression': (N, 10),
    'leye_pose': (N, 3),
    'reye_pose': (N, 3),
    'jaw_pose': (N, 3)
}

5. 元数据与杂项

  • config:数据集配置标识
  • meta:包含性别、图像尺寸等元信息
  • misc:数据集特有设置(大小限制在6MB以内)

数据压缩与优化

关键点压缩

由于HUMAN_DATA格式整合了不同数据集的关键点定义,常存在大量缺失值。HumanData提供了高效的压缩机制:

  1. 压缩过程
human_data.compress_keypoints_by_mask()
  1. 数据访问
  • get_raw_value():获取压缩后的原始数据
  • 直接索引:获取填充0后的完整格式数据
  1. 编辑方式
  • 设置填充数据:human_data['keypoints2d'] = padded_data
  • 设置压缩数据:human_data.set_raw_value('keypoints2d', compressed_data)

文件压缩

支持两种文件格式存储:

  1. NPZ格式
human_data.dump('data.npz')
human_data.load('data.npz')
  1. Pickle格式(适用于大型数据):
human_data.dump_by_pickle('data.pkl')
human_data.load_by_pickle('data.pkl')

数据选择与转换

数据选择

  1. 按形状选择
# 获取前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])
  1. 时间切片
# 获取10-20帧
sub_data = human_data.get_slice(10, 21)

# 下采样(间隔3帧)
sub_data = human_data.get_slice(0, 200, 3)

Tensor转换

# 转换为CPU Tensor
tensor_data = human_data.to()

# 转换为GPU Tensor
gpu_data = human_data.to(torch.device('cuda:0'))

MultiHumanData扩展

MultiHumanData继承自HumanData,专门处理多人场景下的数据,主要特点是:

  1. 帧范围索引:通过frame_range字段(形状为(N, 2))管理图像与多人数据的对应关系
  2. 数据组织:每张图像可能对应多个人体数据,通过指针范围进行索引

最佳实践建议

  1. 坐标系规范:所有数据应已转换到OpenCV相机空间
  2. 关键点处理:建议保持原始坐标系,不进行root alignment
  3. 检测框生成
    • 身体检测框建议缩放比例1.2
    • 手部和面部检测框建议缩放比例1.0
  4. 数据验证:充分利用HumanData内置的类型和形状检查机制

通过这种标准化的数据格式,MMHuman3D项目实现了不同数据集和模型之间的无缝对接,大大提高了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、付费专栏及课程。

余额充值