这篇文章整理 OpenPCDet 和 nuScenes 测试过程中遇到的 NumPy 兼容问题,主要是 np.int、np.float 等旧别名在新版本 NumPy 中被移除导致的报错。
1. 当前 NumPy 版本
当前记录中,NumPy 的原始正常版本是:
| |
在 NumPy 1.24 之后,np.int、np.float、np.bool 等旧别名已经被移除。如果旧代码中仍然使用这些写法,就会报错。
2. OpenPCDet 中 np.int 报错
2.1 报错现象
如果报错类似:
| |
通常说明代码里还有旧写法:
| |
2.2 修改位置
根据报错信息,需要修改的文件是:
| |
找到第 299 行或附近代码:
| |
修改为:
| |
或者指定具体精度:
| |
2.3 修改建议
如果只是为了兼容原代码,通常直接改成 int 即可。
如果后续涉及严格的 tensor shape、索引或跨平台一致性,也可以考虑明确使用 np.int64 或 np.int32。
3. nuScenes 测试时 np.float 报错
3.1 修改位置
直接修改当前 Conda 环境中的文件:
| |
找到类似代码:
| |
修改为:
| |
或者:
| |
4. 同类旧别名统一替换
如果同一个文件里还有下面这些写法:
| |
可以分别改成:
| |
或者改成明确的 NumPy 类型:
| |
5. 临时兼容垫片
如果只是临时跑通,也可以在文件开头加入兼容垫片:
| |
不过这种方法不够优雅,容易掩盖旧代码问题。长期来看,更推荐直接修改旧别名。
6. 训练 nuScenes 数据集时的注意事项
笔记中记录:训练 nuScenes 数据集时如果因为 NumPy 版本报错,需要先修改相关代码,训练完成后根据实际情况决定是否改回。
我的建议是:
- 如果你维护的是自己的实验代码,可以直接替换旧别名;
- 如果你只是临时运行别人的代码,可以用补丁方式记录修改;
- 修改第三方库文件时,最好单独记录修改点,避免后续换环境后忘记。
7. PillarNet 测试报错记录
PillarNet 测试时可能遇到:
| |
可以参考:
| |
建议排查方向:
- 当前
model.forward()返回值是否符合测试脚本预期; - 配置文件是否与模型代码版本匹配;
- 是否混用了不同分支或不同版本的 OpenPCDet 代码;
post_processing是否正常返回预测框结果。
8. 常用测试命令
示例:
| |
如果需要保存测试提交文件:
| |
总结
OpenPCDet 和 nuScenes 中这类报错本质上多半不是算法问题,而是旧代码和新依赖之间的兼容问题。遇到 np.int、np.float、np.bool 报错时,优先搜索对应文件并替换旧别名即可。