PointPillars-TensorRT部署

PointPillars-TensorRT部署

1 env

  • cuda-11.3, tensorRT8.5.1.3, 建议抄作业
  1. 先安装OpenPCDetpython环境, 运行python代码需要:
# 1 创建虚拟环境
conda create -n pointpillars python=3.8

# 2 激活虚拟环境 并进入CUDA-PointPillars目录
conda activate pointpillars
cd Lidar_AI_Solution/CUDA-PointPillars

# 3 安装torch
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html

# 4 安装 pyyaml scikit-image onnx onnx-simplifier
pip install pyyaml scikit-image onnx onnx-simplifier 

# 5 安装onnx-graphsurgeon
pip install onnx_graphsurgeon --index-url https://pypi.ngc.nvidia.com

# 6 安装requirements.txt的包
pip install -r tool/requirements.txt

# 7 运行OpenPCDet的setup.py, 显示Successfully installed pcdet即安装成功
pip install -v e .
  1. 查看onnx相关环境
pip list | grep onnx

# 显示如下:
onnx                          1.14.0
onnx-graphsurgeon             0.3.27
onnx-simplifier               0.4.33
onnxruntime                   1.15.1

2 运行

  1. 生成onnx

直接用git-download中的onnx会 报错1 , 详细参考本文第3节代码复现报错汇总

# 1 进入tool目录
cd tool

# 2 运行exporter.py生成onnx
python exporter.py --ckpt ./pointpillar_7728.pth

# 3 将生成的onnx与params.h放到对应文件
mv pointpillar.onnx ../model/ && mv params.h ../include/
  1. 编译pointpillars-trt源码
  • 编译前需要修改CMakeLists.txt
  • 不改会报错fatal error: NvInfer.h: 没有那个文件或目录,详细参考报错4, 修改如下:
# ...
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64")
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
set(CUDA_INSTALL_TARGET_DIR targets/aarch64-linux)
elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(CMAKE_C_COMPILER /usr/bin/gcc)
set(CMAKE_CXX_COMPILER /usr/bin/g++)
set(CUDA_INSTALL_TARGET_DIR targets/x86_64-linux)
endif()

# 增加cuda的安装路径
set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.3)
set(CUDA_INCLUDE_DIRS ${CUDA_TOOLKIT_ROOT_DIR}/${CUDA_INSTALL_TARGET_DIR}/include)
# 增加TENSORRT的安装路径
set(TENSORRT_ROOT /home/lin/software/TensorRT-8.5.3.1)
set(TENSORRT_INCLUDE ${TENSORRT_ROOT}/include)
set(TENSORRT_LIBS ${TENSORRT_ROOT}/targets/x86_64-linux-gnu/lib/)
# ...
  • 编译
mkdir build && cd build && cmake .. && make -j12
  1. 运行
# 进入build目录
cd build

# 运行
./demo

运行会先Building TRT engine., 第二次运行就直接推理了,不用重新生成TRT engine,耗时短。

结果保存../eval/kitti/object/pred_velo/目录下。

  1. 使用ros发布结果显示如下
    在这里插入图片描述
  • 效果还将就,不过检测速度比较快10ms(6000显卡)内.

3 代码复现报错汇总

  1. 报错1

报错信息如下:onnx2trt_onnx.ModelProto" has no field named "version".

[libprotobuf ERROR google/protobuf/text_format.cc:298] Error parsing text-format onnx2trt_onnx.ModelProto: 1:9: Message type "onnx2trt_onnx.ModelProto" has no field named "version".
trt_infer: ModelImporter.cpp:735: Failed to parse ONNX model from file: ../model/pointpillar.onnx
: failed to parse onnx model file, please check the onnx version and trt support op!

是由于git拉取的代码中,提供的onnx不完整导致, 重新下载pth然后转onnx即可。pth下载地址 然后运行下面代码:

# 1 进入tool目录
cd tool

# 2 运行exporter.py生成onnx, 跟pth路径,不懂路径直接用pth的绝对路径
python exporter.py --ckpt ./pointpillar_7728.pth

# 3 会在tool生成onnx与params.h,然后安装下面移动
mv pointpillar.onnx ../model/ && mv params.h ../include/
  1. 报错2
    Error Code 1: Internal Error (Unsupported SM: 0x809)
  • 我的cuda11.3的,我使用的tensorRT8.2,换成8.5即可解决。
  • 也可以降低cuda版本,但是我们tensorRT版本变了,TRT提供的api也有可能变了,尽量改变cuda版本,不动tensorRT得版本
  1. 报错3
    Error Code 6: Internal Error (Unable to load library: libnvinfer_builder_resource.so.8.5.3)
    段错误 (核心已转储)

告诉我们找不到libnvinfer_builder_resource.so.8.5.3
是因为我们告诉系统tensorTR的库路径

解决办法:

  1. libnvinfer_builder_resource.so放到/usr/lib下或/usr/lib/x86_64-linux-gnu/
cd TensorRT-8.5.3.1/lib
sudo cp libnvinfer_builder_resource.so.8.5.3 /usr/lib
  1. 报错4
fatal error: NvInfer.h: 没有那个文件或目录
   20 | #include "NvInfer.h"
  • CmakeLists.txt修改TensorRT的安装路径即可
    本人使用的TensorRT-8.5.3.1版本,修改如下:
# 增加TENSORRT的安装路径
set(TENSORRT_ROOT /home/lin/software/TensorRT-8.5.3.1)
set(TENSORRT_INCLUDE ${TENSORRT_ROOT}/include)
set(TENSORRT_LIBS ${TENSORRT_ROOT}/targets/x86_64-linux-gnu/lib/)

  • 如果觉得本文章可以,一键三连一波,^_^
  • 部署有问题的小伙伴欢迎留言和加Q裙-472648720

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
TensorRT PointPillars是一个基于TensorRT加速的3D目标检测算法,主要用于自动驾驶等领域。PointPillars算法首先将点云数据转换为体素表示,并使用二维卷积模型对体素进行特征提取。然后,通过基于RoIAlign的RoI层,将提取的特征投影到特定区域中。接着,对投影区域中的特征进行特征提取,使用互相关操作分别得到目标的中心位置和边框的偏移。最后,使用非极大值抑制(NMS)方法进行目标框的预测和筛选。 TensorRT PointPillars的特点在于其使用了TensorRT来进行加速,通过优化和并行计算,可以大幅提升算法的运算速度和效率。TensorRT是英伟达推出的高性能深度学习推理优化库,能够针对不同硬件平台进行优化,并将模型推理过程中的计算图转换为高效的计算图,减少计算量和存储需求,从而提高模型的推理速度。 PointPillars算法通过将点云数据转换为体素表示,并结合二维卷积模型进行特征提取,有效地解决了点云数据的稀疏性和无序性的问题,提高了目标检测的准确性。另外,使用RoIAlign和互相关操作,进一步提取特征,得到目标的中心位置和边框的偏移,提高了目标检测的精度和鲁棒性。 总之,TensorRT PointPillars是一种基于TensorRT加速的3D目标检测算法,通过优化和并行计算提高了算法的运算速度和效率,在自动驾驶等领域具有重要的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全网最菜的Slamer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值