You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于numpy.save保存0维数组的原因及维度转换问题咨询

人体姿态估计热力图异常问题处理

问题背景

使用人体姿态估计模型生成姿态热力图,数组形状为[p k h w](其中p为帧中人数,k为关键点数量,h/w为热力图高/宽),通过numpy.save保存数组。处理15000个视频(约100万帧)后,发现10-15帧的保存文件形状为[0 17 96 72],存在两个疑问:


1. 为何会生成并保存维度为0的数组?

这是主流姿态估计模型的标准化设计:

  • 为了维持输出结构的一致性,方便后续批量处理(如数组拼接、循环遍历),模型检测不到人体时,不会返回None,而是返回人数维度p为0的空数组。这种设计能避免因返回值类型不一致导致的代码报错,尤其在批量推理场景下更实用。
  • 你直接用numpy.save写入了这个空数组,因此磁盘文件保留了[0,17,96,72]的形状。

2. 能否将[0 17 96 72]的数组转换为[1 17 96 72]?

可以实现,但需明确:原0维度数组无有效姿态数据,转换后的数组只能用默认值填充,无法恢复真实姿态。具体方法如下:

  • 无需使用numpy.squeeze()(该方法用于压缩维度为1的轴,与当前需求相反),直接生成对应形状的数组即可。示例代码:
import numpy as np

# 加载异常的npy文件
abnormal_arr = np.load("path/to/your/abnormal_file.npy")
# 生成[1,17,96,72]形状的全0数组(可根据需求替换为其他默认值)
corrected_arr = np.zeros((1, 17, 96, 72), dtype=abnormal_arr.dtype)
# 保存修正后的数组
np.save("path/to/save/corrected_file.npy", corrected_arr)
  • 如果只是需要调整维度结构而非填充数值,也可以用np.expand_dims结合空数组,但实际场景下全0占位是最常用的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:10:15