参考
1、CenterPoint-PonintPillars Pytroch model convert to ONNX and TensorRT
2、Center-based 3D Object Detection and Tracking
3、CenterPoint : An Lidar Object Detection & Tracking project implemented by TensorRT
4、CenterPoint的环境配置error大全【已全部解决】
以上的参考中我主要参考了第一个博客,其他几个如果有需要也都可以拿来作参考.
python环境配置
参考链接
配置的过程中需要注意的几点:
- det3d带源码中就已经存在,但是直接使用命令的话代码找不到det3d这个目录,可能是因为运行的代码在tools的目录下.所以如果使用命令行运行的话,需要加上以下代码:
# 获取当前脚本的绝对路径
script_dir = os.path.dirname(os.path.abspath(__file__))
# 把含有 det3d 文件夹的上级目录添加到系统路径
parent_dir = os.path.dirname(script_dir)
sys.path.insert(0, parent_dir)
- 报错error:det3d cannot import name ‘deform_conv_cuda’.
原因:det3d下没有编译这些cuda源码。
解决方法:由于centerpoint目录下有det3d,因此问了作者是否需要自行编译安装det3d,作者回复说只要在centerpoint下运行bash setup.sh即可,里面写好了去项目的det3d目录下编译这几个cuda文件。 - error:det3d 中的deform_conv未编译成功,“AT_CHECK”.
原因:torch版本较高,deform_conv_cuda.cpp和deform_pool_cuda.cpp中的AT_CHECK与最新版本的torch不匹配。
解决方法:用vim将这两个文件中的"AT_CHECK" 都替换成"TORCH_CHECK "。 - 在安装APEX的过程中没有遇到问题,但是在运行程序的过程中会报错:no apex.
原因:pytorch版本过高,pytorch1.9后就会出现cannot import name ‘container_abcs‘
from ‘torch._six‘错误,当前环境版本为1.10.0
解决方法:降级为1.8或者修改apex的源码如下,然后重新编译安装:
if TORCH_MAJOR == 1 and TORCH_MINOR < 8:
from torch._six import container_abcs
else:
import collections.abc as container_abcs
- 安装spconv报错,这个在网上找一下就能找出来,最后安装的spconv的版本为:
spconv 2.3.6
还需要把scn.py中导入spconv改成:
import spconv.pytorch as spconv
from spconv.pytorch import SparseConv3d, SubMConv3d
- 模型下载
pth和onnx模型下载地址
把下载好的pth模型放到work_dirs/centerpoint_pillar_512_demo
文件夹下.
最后python tools/demo.py能够跑通就可以.
Export ONNX
- Install packages
pip install onnx onnx-simplifier onnxruntime
- Prepare dataset. Please refer todocs/NUSC.md
- Export pfe.onnx and rpn.onnx
python tools/export_pointpillars_onnx.py
- Use onnx-simplify and scripte to simplify pfe.onnx and rpn.onnx.
python tools/simplify_model.py
- Merge pfe.onnx and rpn.onnx. We use ScatterND node to connect pfe and rpn. TensorRT doesn’t support ScatterND operater. If you want to run CenterPoint-pointpillars by TensorRT, you can run pfe.onnx and rpn.onnx respectively.
python tools/merge_pfe_rpn_model.py
All onnx model are saved in onnx_model.