You need to enable JavaScript to run this app. numpy数组维度在人体关键点时序3D数据集构建中的正确应用
优惠活动
大模型
产品
解决方案
定价
更多

numpy数组维度在人体关键点时序3D数据集构建中的正确应用

动态生成人体3D关键点数据集的维度不匹配问题解决方案

你遇到的维度不匹配问题核心原因是:固定维度的数组要求预先确定所有维度大小,而你运行时的帧数、单帧人数都是可变的,直接预分配3D/4D数组自然会出错。可以按以下几种方案处理:

方案1:动态列表缓存+采集完成后对齐补全

这是兼容性最高、适用所有场景的方案:

  • 初始化空列表raw_frames作为缓存,每采集一帧就把当前帧的(n, 19, 3)矩阵(单人场景n=1)追加到列表中,该步骤无任何预定义维度要求,不会触发维度错误
  • 采集全部结束后,先统计总帧数和单帧最大人数,再构造统一维度的4D数组,缺人、缺关键点的位置用NaN或自定义占位值填充:
    import numpy as np
    
    # 运行时逐帧添加数据
    raw_frames = []
    for _ in 采集流程:
        # 单帧输出为 (n, 19, 3) 的矩阵,n为当前帧检测到的人数
        single_frame_data = 运行时获取的关键点矩阵()
        raw_frames.append(single_frame_data)
    
    # 对齐补全为规则4D数组
    total_frames = len(raw_frames)
    max_persons = max(frame.shape[0] for frame in raw_frames)
    dataset = np.full((total_frames, max_persons, 19, 3), fill_value=np.nan)
    for frame_idx, frame_data in enumerate(raw_frames):
        curr_person_num = frame_data.shape[0]
        dataset[frame_idx, :curr_person_num, :, :] = frame_data
    

方案2:使用框架原生不规则张量

如果后续直接用PyTorch/TensorFlow做模型训练,不需要转成规则数组,可以直接用动态维度的不规则张量存储,无需补全:

  • PyTorch 场景使用 NestedTensor,可直接传入不同长度的帧数据列表构造,支持绝大多数张量运算
  • TensorFlow 场景使用 RaggedTensor,支持动态人数维度,无需预先指定大小

方案3:动态扩展存储格式

如果需要将数据集落地到本地,不要直接存储固定形状的numpy数组,选择支持动态扩展的存储格式即可:

  • 轻量场景用JSON/MessagePack存储结构化数据:每帧存储frame_id、person_count、keypoints三个字段,读取时可按需转换为数组
  • 大数据量场景用HDF5格式存储:支持动态扩展维度的数据集,可预先开启可扩展的帧维度,运行时逐帧写入即可

内容的提问来源于stack exchange,提问作者pacours

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:21:03