目录
一、下载Lidar_AI_Solution1、Lidar_AI_Solution2、CUDA-BEVFusion 二、CUDA-BEVFusion 的环境配置1、TensorRT部署2、部署环境3、下载权重及测试图像 三、推理运行1、tools下的文件添加权限2、修改environment.sh文件并运行3、利用 tensorRT 构建模型4、 编译并运行程序5、 python接口
一、下载Lidar_AI_Solution
1、Lidar_AI_Solution
Lidar_AI_Solution是为激光雷达提供高性能解决方案的项目,3个GPU加速激光雷达/相机深度学习网络( sparse convolution/CenterPoint/BEVFusion/OSD/Conversion),对3D激光雷达进行高度优化
该项目依赖于其他项目,加上 --recursive 参数是为了循环克隆子项目
sudo apt-get install git-lfsgit clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution.git
2、CUDA-BEVFusion
CUDA-BEVFusion是LiADAR_AI_Solution项目下的小项目,针对BEBFusion-mit版本进行加速和推理。
CUDA-BEVFusion部署方案可以解决BEVFusion在实际部署中会面临onnx导出复杂、插件和BEVpooling效率低下等问题。可以保持高精度mAP,并以25FPS在orin芯片上运行。
二、CUDA-BEVFusion 的环境配置
系统:ubuntu20.04
GPU:RTX3090
显卡驱动:525
深度学习框架:pytorch1.10.0
cuda11.1++cudnn-8.6.0
TensorRT-8.5.2.2
1、TensorRT部署
1.1 简介与下载
TensorRT可以在NVIDIA各种GPU硬件平台下运行的模型推理框架,将pytorch等框架训练好的模型转化为TensorRT的格式,利用推理引擎去运行该模型,提升模型运行速度。
下载地址:https://developer.nvidia.com/nvidia-tensorrt-8x-download
1.2 安装
Tar文件的安装方式
(1)C++的解压直接用
tar -zxvf TensoRT-8.5.1.7.Linux.x86_64-gnu.cuda-11.8.cudnn8.6.tar.gz #解压
检验
cd /tensorrt/TensorRT-8.5.2.2/samples/sampleOnnxMNISTmake
进入/tensorrt/TensorRT-8.5.2.2/targets/x86_64-linux-gnu/bin文件夹,找到生成的sample_onnx_mnist
export LD_LIBRARY_PATH=/home/mengwen/tensorrt/TensorRT-8.5.2.2/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATHsource ~/.bashrc./sample_onnx_mnist
(2)python版本
进入TensorRT-8.5.2.2/python
pip install tensorrt-8.5.2.2-cp38-none-linux_x86_64.whl
2、部署环境
2.1 查看README.md
2.2 cudnn安装
下载地址https://developer.nvidia.com/rdp/cudnn-archive
查看安装的cudnn
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
2.3 创建新的虚拟环境
复制bevfusion命名的conda环境,生成nvi-bev
conda create --name nvi-bev --clone bevfusion
2.4 修改环境变量
安装库文件
sudo apt install libprotobuf-devpip install onnx==1.12.0pip install protobuf==3.20.0pip install onnxruntime==1.10.0
3、下载权重及测试图像
模型下载地址:model.zip
测试数据集下载地址:nuScenes-example-data.zip
完成后解压到CUDA-BEVFusion文件夹中
三、推理运行
1、tools下的文件添加权限
chmod +x ./tool/*
2、修改environment.sh文件并运行
export TensorRT_Lib=/home/mengwen/tensorrt/TensorRT-8.5.2.2/libexport TensorRT_Inc=/home/mengwen/tensorrt/TensorRT-8.5.2.2/includeexport TensorRT_Bin=/home/mengwen/tensorrt/TensorRT-8.5.2.2/binexport CUDA_Lib=/usr/local/cuda11.6/lib64export CUDA_Inc=/usr/local/cuda11.6/includeexport CUDA_Bin=/usr/local/cuda11.6/binexport CUDA_HOME=/usr/local/cudaexport CUDNN_Lib=/usr/local/cuda/lib64
输入:
cd tool./environment.sh
3、利用 tensorRT 构建模型
利用TensorRT的trtexec将ONNX模型构建成对应的engine引擎文件
./tool/build_trt_engine.sh
TensorRT构建四个模块
(1)camera.backbone.plan :相机主干网络模块
(2)camera.vtransform.plan:相机视角转换模块
(3)fuser.plan:融合模块
(4)head.bbox.plan:检测头模块
4、 编译并运行程序
./tool/run.sh
报错1:没有完整拉取项目
解决:发现是没有完整拉取子项目,自己将所有的下载下来
报错2:Compiled against cuBLASLt 11.9.2.0 but running against cuBLASLt 11.2.1.0.
pytorch1.10.0和TensorRT 8.5.2.2同时运行产生的问题,这个问题出现在加载libmyelin.so.1的时候,TensorRT 8.5.2.2中libmyelin.so.1使用的是cuBLAS 11.9.2.0版本, 而Pytorch 1.10.0安装时候使用的是cudatoolkit 11.1,这里的cuBLAS是 cuBLAS 11.2.1.0.版本。造成在import torch的时候再加载libmyelin.so.1出现错误。
解决:此处我找了很多方法,最后切换到了cuda-11.6版本就解决了这个问题
查看生成文件
打开build/cuda-bevfusion.jpg
5、 python接口
(1)在environment.sh文件打开python接口
export USE_python=ON
运行:
cd tool./environment.sh
(2)构建libpybev.so
./tool/run.sh
(3)测试 Python 接口
python tool/pybev.py
报错1:ModuleNotFoundError: No module named ‘libpybev’
在执行python脚本文件之前需要使用source命令来执行environment.sh脚本
解决:
source tool/environment.sh
参考文章:
1、BEVFustion-TensorRT部署
2、Lidar AI Solution环境配置
3、25FPS!全网首发 | 英伟达开放BEVFusion部署源代码,边缘端实时运行!!!