BEVFustion-TensorRT部署
- 感谢大佬们的开源工作,yyds Lidar_AI_Solution
- BEVFustion-python代码复现
- CenterPoint-TensorRT部署
- PointPillars-TensorRT部署
- BEV各算法环境部署实战汇总
- 如果觉得本文章可以,一键三连一波,
^_^
- 部署有问题的小伙伴欢迎留言和加
Q
裙-472648720
1 下载Lidar_AI_Solution
- 不要去直接点击
DownZIP
下载,也不要直接git clone
下载,因为该项目依赖于其他项目,因此加上--recursive
参数是为了循环克隆子项目。
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution.git
- 如果上面下载失败,请采用下面下载方式
- 下载速度慢,用国内代理拉取
# 下载Lidar_AI_Solution,不含子模块
git clone https://ghproxy.com/https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution.git
# 进入目录, 修改`.gitmodules`文件
cd Lidar_AI_Solution
# 国内代理https://ghproxy.com/
- 对
.gitmodules中
的url
加上代理https://ghproxy.com/
如下所示
[submodule "CUDA-PointPillars"]
path = CUDA-PointPillars
url = https://ghproxy.com/https://github.com/NVIDIA-AI-IOT/CUDA-PointPillars.git
[submodule "CUDA-BEVFusion/bevfusion"]
path = CUDA-BEVFusion/bevfusion
url = https://ghproxy.com/https://github.com/mit-han-lab/bevfusion.git
[submodule "dependencies/pybind11"]
path = dependencies/pybind11
url = https://ghproxy.com/https://github.com/pybind/pybind11.git
[submodule "dependencies/stb"]
path = dependencies/stb
url = https://ghproxy.com/https://github.com/nothings/stb.git
[submodule "libraries/cuPCL"]
path = libraries/cuPCL
url = https://ghproxy.com/https://github.com/NVIDIA-AI-IOT/cuPCL.git
- 下载子模块
git submodule sync && git submodule update --init --recursive
- 整个包大约
336.3 MB
, 包含子模块。如果不是请重新下载
Git LFS(Large File Storage,大型文件存储)。当一个项目的最大文件超过128MB,那么Git就会报错
2 BEVFusion的TensorRT部署
2.1 BEVFusion环境
-
不要问其他版本行不行,小白和不想折腾的小伙伴直接抄作业:
-
版本号:ubuntu20.04, 显卡驱动
525
(影响不大),cuda-11.3, cudnn-8.6.0,TensorRT-8.5.3.1
-
这个BEVFusion源码地址mit版本
-
安装其他依赖:
sudo apt install libprotobuf-dev cmake
pip install onnx
- 如果不是
ubuntu20.04
,libprotobuf-dev
版本可能小于3.6.1
版本,可以去git
上下载源码编译安装 ,git
地址
readme.md
要求的版本:
To build bevfusion, we need to depend on the following libraries:
- CUDA >= 11.0
- CUDNN >= 8.2
- TensorRT >= 8.5.0
- libprotobuf-dev == 3.6.1
- [Compute Capability](https://developer.nvidia.com/cuda-gpus#compute) >= sm_80
- Python >= 3.6
2.2 下载权重以及测试图像
- 下载模型 ( Google Drive ) or ( Baidu Drive )
- 下载测试数据集 ( Google Drive ) or ( Baidu Drive )
- 模型下载解压后复制到
Lidar_AI_Solution/CUDA-BEVFusion/
中,目录结果如下:
(base) lin@PC:~/Lidar_AI_Solution/CUDA-BEVFusion/model$ tree
.
├── resnet50
│ ├── bevfusion-det.pth
│ ├── camera.backbone.onnx
│ ├── camera.vtransform.onnx
│ ├── default.yaml
│ ├── fuser.onnx
│ ├── head.bbox.onnx
│ └── lidar.backbone.xyz.onnx
├── resnet50int8
│ ├── bevfusion_ptq.pth
│ ├── camera.backbone.onnx
│ ├── camera.vtransform.onnx
│ ├── default.yaml
│ ├── fuser.onnx
│ ├── head.bbox.onnx
│ └── lidar.backbone.xyz.onnx
└── swint
├── camera.backbone.onnx
├── camera.vtransform.onnx
├── default.yaml
├── fuser.onnx
├── head.bbox.onnx
└── lidar.backbone.xyz.onnx
2 测试数据下载解压后复制到Lidar_AI_Solution/CUDA-BEVFusion/
中,目录结果如下:
(bevfusion) lin@PC:~/Lidar_AI_Solution/CUDA-BEVFusion/example-data$ tree
├── 0-FRONT.jpg
├── 1-FRONT_RIGHT.jpg
├── 2-FRONT_LEFT.jpg
├── 3-BACK.jpg
├── 4-BACK_LEFT.jpg
├── 5-BACK_RIGHT.jpg
├── camera2ego.tensor
├── camera2lidar.tensor
├── camera_intrinsics.tensor
├── example-data.pth
├── gt_bboxes_3d.tensor
├── gt_labels_3d.tensor
├── images.tensor
├── img_aug_matrix.tensor
├── lidar2camera.tensor
├── lidar2ego.tensor
├── lidar2image.tensor
├── lidar_aug_matrix.tensor
├── points.tensor
└── token.txt
3 运行
- 报错1:运行
./tool/build_trt_engine.sh
报错
😥Failed to build model model/resnet50int8/build/camera.backbone.plan.
- 更换TensorRT版本, 即修改
CUDA-BEVFusion/tool/environment.sh
中的TensorRT
的设置,本人的如下:
export TensorRT_Lib=/home/lin/software/TensorRT-8.5.3.1/lib
export TensorRT_Inc=/home/lin/software/TensorRT-8.5.3.1/include
export TensorRT_Bin=/home/lin/software/TensorRT-8.5.3.1/bin
- 报错2:运行
./tool/run.sh
报错
😥nvcc fatal : Unsupported gpu architecture 'compute_89'
修改,在tool/environment.sh
最后更新nvcc支持的算力,将export CUDASM=86
代码复制到tool/environment.sh
文件的最后一行即可
-
cuda-11.3
最高支持8.6
由于我的显卡是6000
系,算力是8.9
,40
显卡系可能也会遇到这个问题,40
系的算力也是8.9
,30
系卡算力是8.6
,如果你使用cuda-11.x
版本就改CUDASM
参数,要么更改为cuda-12.0
版本 -
改成
cuda-12.0
版本的方法是否能运行还未测试,建议直接改CUDASM
export CUDASM=86
- 增加脚本文件的可执行权限
# 1 进入CUDA-BEVFusion目录
cd CUDA-BEVFusion
# 2 给tools目录下所有文件加权限
chmod +x ./tools/*
- 运行
tool/environment.sh
-
设置
cuda, cudnn, TensorRT
的环境变量, 土话将就是告诉编译器去哪里找这三个库 -
运行前需要修改这个3个库安装目录, 大家根据自己实际情况修改,本人的如下:
-
模型3种 ,精度2种, 选择其中一种
-
设置参数
# TensorRT-8.2.1.8
export TensorRT_Lib=/home/lin/software/TensorRT-8.5.3.1/lib
export TensorRT_Inc=/home/lin/software/TensorRT-8.5.3.1/include
export TensorRT_Bin=/home/lin/software/TensorRT-8.5.3.1/bin
# cuda
export CUDA_Lib=/usr/local/cuda/lib64
export CUDA_Inc=/usr/local/cuda/include
export CUDA_Bin=/usr/local/cuda/bin
export CUDA_HOME=/usr/local/cuda
# 由于安装cudnn是时将cudnn的lib64拷贝到cuda下的,所以这里直接用cuda的路径
export CUDNN_Lib=/usr/local/cuda/lib64
# 选择模型三种 resnet50/resnet50int8/swint
export DEBUG_MODEL=resnet50int8
# 精度2种 fp16/int8
export DEBUG_PRECISION=int8
- 运行:
./tool/environment.sh
显示如下:
- 运行
tool/build_trt_engine.sh
./tool/build_trt_engine.sh
- 自己训练的pth权重转onnx, 详细参考
显示如下:
4. 运行tool/run.sh
./tool/run.sh
显示如下:
可以看到resnet50int8
推理耗时只要5.4ms
左右,从可视化上看效果也还行,YYDS
效果图展示:
小伙伴们部署时遇到问题,欢迎各位小伙伴留言,欢迎进入bev交流抠抠裙472648720,大家一起学bev!
如果觉得文章可以,一键三连支持一波,瑞思拜^-^
参考链接