开源项目 Lidar AI Solution 的环境配置,记录自己环境配置过程,仅供自己参考,只进行最最最基本的运行,不涉及任何原理分析(主要是不会)
博主环境如下:
系统:Ubuntu20.04
显卡:RTX3060
显卡驱动:510.108.03
CUDA:11.6
cuDNN:8.4.0
TensorRT:8.4.1
整个环境配置的重点和难点在于整个项目的完整拉取
以下内容均 Copy 自 Lidar AI Solutin 的 README 文档,请大家熟读熟读熟读文档
Lidar AI Solution 项目为自动驾驶 3D-Lidar 提供了一个高性能的解决方案,在加速 sparse convolution/CenterPoint/BEVFusion/OSD/Conversion 方面做得非常好
sudo apt-get install git-lfs
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
cd Lidar_AI_Solution
一定一定一定要按照上述方法完整拉取整个项目(PS:完整项目在 Linux 下大概有 365M 的大小),不要去直接点击 Code ==> DownZIP 下载,也不要直接 git clone 下载,因为该项目依赖于其他项目,因此加上 --recursive 指令是为了循环克隆子项目。
注意:项目的完整拉取非常非常非常重要,后续的问题基本上都是因为没有完整的拉取整个项目所导致的
接下来我们就来聊聊如何完整的拉取整个 repo
首先如果在 Linux 下执行上述指令你会发现由于访问的是外网会非常缓慢,当然你如果有一个好的代理应该是没有问题的,博主之前下了一晚上才下完,但是由于网络经常断开,因此也不能确保整个项目是否完整。当然网上也提供了一些快速高效下载方法,博主也没去折腾了,感兴趣的可以看看 git clone --recursive快速高效下载方法
由于在 Linux 上没有找到合适的代理,也不愿去折腾高速下载方法,因此博主决定在 Windows 下去拉取整个 repo (主要是因为 Windows 下有代理)
在此之前你需要在 Windows 下面安装 git 和 git lfs,比较简单,这里提供博主主要参考的文章:
将 git 和 git lfs 安装完成后,就可以在 cmd 窗口正常执行 git 指令了,指令如下:(PS:一定要记得开代理)
sudo apt-get install git-lfs
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
完整的项目拉取如下图所示:
下载完成以后把整个项目拷贝到 Linux 进行后续操作就行,值得注意的是,从 Windows 拉取的代码放在 Linux 下会有一个小小的 bug,这个我们之后也会提到。
这里博主也提供下博主自己拉取的整个 repo,感兴趣的可以自行下载,下载链接 Baidu Drive (注意该代码下载于 2023/5/25 日,若有改动请参考最新)
至此,整个项目文件就准备好了,对于每个任务可以查看对应子文件夹下的 README 文档
Copy 自 CUDA-BEVFusion 的 README.md 文档
这个 repo 包含使用 CUDA & TensorRT 进行 BEVFusion 推理的源码和模型
Model | Framework | Precision | mAP | NDS | FPS |
---|---|---|---|---|---|
Swin-Tiny BEVFusion-Base |
Pytorch | FP32+FP16 | 68.52 | 71.38 | 8.4(on RTX3090) |
ResNet50 | Pytorch | FP32+FP16 | 67.93 | 70.97 | - |
ResNet50 | TensorRT | FP16 | 67.89 | 70.98 | 18(on ORIN) |
ResNet50-PTQ | TensorRT | FP16+INT8 | 67.66 | 70.81 | 25(on ORIN) |
为了构建 bevfusion,我们需要以依赖以下库:
上面性能表中的数据是我们在 Nvidia Orin 平台上,使用 TensorRT-8.6、cuda-11.4 以及 cudnn8.6 得到的
关于 CUDA、CUDNN、TensorRT 的安装可以参考 Ubuntu20.04部署YOLOv5 或者 Ubuntu20.04软件安装大全 这里不再赘述
你可能会发现博主的 TensorRT 版本似乎并不满足要求,是的,但博主没去安装高版本的 TensorRT,先将就用吧,后续推理也就提示了一个 API 的警告,并没有太大的错误。软件版本不要求完全一致,但是需要尽可能的对应
注:在安装完 apt install git-lfs
以后请使用 git clone --recursive
来拉取整个项目,确保依赖的完整性
# 下载模型和数据到 CUDA-BEVFusion 文件夹
cd CUDA-BEVFusion
# 解压模型和数据压缩文件
unzip model.zip
unzip nuScenes-example-data.zip
# 下面是解压后整个文件夹的结构
CUDA-BEVFusion
|-- example-data
|-- 0-FRONT.jpg
|-- 1-FRONT_RIGHT.jpg
|-- ...
|-- camera_intrinsics.tensor
|-- ...
|-- example-data.pth
`-- points.tensor
|-- src
|-- qat
|-- model
|-- resnet50int8
| |-- bevfusion_ptq.pth
| |-- camera.backbone.onnx
| |-- camera.vtransform.onnx
| |-- default.yaml
| |-- fuser.onnx
| |-- head.bbox.onnx
| `-- lidar.backbone.xyz.onnx
|-- resnet50
`-- swint
|-- bevfusion
`-- tool
好,在正式配置之前我们需要解决一个小bug,也就是之前提到过的,当你在 Windows 下面拉取代码放到 Linux 上面时会导致执行 shell 脚本时报错,如下图所示:
原因是 Windows 和 Linux 的 .sh 脚本文件格式不同,如果在脚本中有空行,脚本是在 Windows 下进行编辑之后传到 Linux 上去执行的话,就会出现这个问题
Windows 下的换行符是\r\n,而 Linux 下的换行符是 \n,没有识别/r,所以会导致上述错误,这个属于脚本编码的问题
解决办法是在对应脚本文件目录下,执行以下命令即可
vim enviroment.sh
:set ff=unix
:wq
上述通过 vim 编辑器打开脚本文件后设置格式为 Linux 格式并保存退出
参考自 Linux下执行Shell脚本出现$‘\r‘: command not found解决方法
因此,如果你的项目是从 Windows 复制到 Linux 下的话,可能存在上述问题,请将 tools 文件夹下的所有脚本文件均按照上述方法修改为 Linux 格式,请确保 tools 下所有 .sh 文件格式均修改完成
OK! 解决了上述小 bug 之后按照 README.md 就可以正常执行推理了
1. 安装 python 依赖库
sudo apt install libprotobuf-dev
pip install onnx
如果需要使用 Python 推理的话需要安装
这里有些问题需要和大家讨论下,我看 Issues 里面有人提问说推理遇到了一些问题,杜老师是说 sudo apt install libprotobuf-dev=3.6.1
但是我安装时说找不到对应版本,如下图所示:
我们可以使用 apt-cache show package 查找指定包的详情,参考自 【Linux】使用apt-get查询并安装指定版本的软件
sudo apt update
sudo apt-cache show package
可以看到查找有多个版 3.6.1.3-2ubuntu5.2、3.6.1.3-2ubuntu5,博主随便安装了一个指令如下:
sudo apt install libprotobuf-dev=3.6.1.3-2ubuntu5.2
但是在后续执行 Python 推理的时候出现如下警告,最终能编译完成,但是执行的时候直接 Segmentation fault 崩溃了
从编译警告不难看出,protobuf编译的版本是 3.20.3 与要求的版本 3.6.1 并不匹配,博主之前有安装过 protobuf,而 CMakeLists.txt 中是通过 find_pakcage 去找 protobuf 的,找到了之前下载的 3.20.3 版本,还有一些其它的警告也是与 protobuf 相关的,因此可能需要自己手动指定下 protobuf 的头文件和库文件路径,让它正常匹配到所对应的 3.6.1 版本,而不是其它的版本。
因此,博主最终也没解决 Python 推理,等有时间再去折腾吧,C++ 的推理一切正常,下面我们继续。
2. 在 environments.sh 文件中修改 TensorRT/CUDA/CUDNN/BEVFusion 变量
# 修改为你当前使用的路径
export TensorRT_Lib=/path/to/TensorRT/lib
export TensorRT_Inc=/path/to/TensorRT/include
export TensorRT_Bin=/path/to/TensorRT/bin
export CUDA_Lib=/path/to/cuda/lib64
export CUDA_Inc=/path/to/cuda/include
export CUDA_Bin=/path/to/cuda/bin
export CUDA_HOME=/path/to/cuda
export CUDNN_Lib=/path/to/cudnn/lib
# resnet50/resnet50int8/swint
export DEBUG_MODEL=resnet50int8
# fp16/int8
export DEBUG_PRECISION=int8
export DEBUG_DATA=example-data
export USE_Python=OFF
博主修改后如下所示:
export TensorRT_Lib=/opt/TensorRT-8.4.1.5/lib
export TensorRT_Inc=/opt/TensorRT-8.4.1.5/include
export TensorRT_Bin=/opt/TensorRT-8.4.1.5/bin
export CUDA_Lib=/usr/local/cuda-11.6/lib64
export CUDA_Inc=/usr/local/cuda-11.6/include
export CUDA_Bin=/usr/local/cuda-11.6/bin
export CUDA_HOME=/usr/local/cuda-11.6/
export CUDNN_Lib=/usr/local/cuda-11.6/lib64
# resnet50/resnet50int8/swint
export DEBUG_MODEL=resnet50int8
# fp16/int8
export DEBUG_PRECISION=int8
export DEBUG_DATA=example-data
export USE_Python=OFF
3.在终端上执行 enviroment.sh 文件
bash tool/enviroment.sh
博主执行完之后如下图所示:
1.利用 tensorRT 构建模型
bash tool/build_trt_engine.sh
博主执行完之后如下图所示:
2.编译并运行程序
bash tool/run.sh
博主执行完之后如下图所示:
build/cuda-bevfusion.jpg 如下图所示:
至此,CUDA-BEVFusion 的环境配置到这里就结束了!!!
后续的 onnx 和 PTQ 模型导出的细节、Python推理、进一步的性能提升相关内容需要大家自行去了解了
分析:没有找到稀疏卷积的库文件,其库文件位于 libraries/3DSparseConvolution/libspconv 中,如果你没有完整拉取整个项目会发现该文件夹下的 lib 文件为空,导致无法找到库文件
解决办法:完整拉取整个项目
分析:这个问题在 Issues 17 有人遇到,博主遇到这个问题是因为在问题 1 中的 libspconv.so 找不到时利用手动添加的方式,手动下载库文件导致的
解决办法:完整拉取整个项目
Copy 自 CUDA-CenterPoint 的 README.md 文档
这个 repo 包含使用 CUDA & TensorRT 进行 CenterPoint 推理的源码和模型
整个推理分为以下几个阶段:
- Voxelization with CUDA kernel
- 3D backbone with NV spconv-scn
- RPN & CenterHead with TensorRT
- Decode & NMS with CUDA kernel
这个 demo 使用 nuScenes Dataset 中的激光雷达数据,onnx 模型可以通过给定的脚本从下面给出的 checkpoint 中导出
Dataset | Checkpoint | Config |
---|---|---|
nuScenes | epoch_20.pth | nusc_centerpoint_voxelnet_0075voxel_fix_bn_z |
为了构建 centerpoint 推理需要 CUDA、TesorRT、libspconv 库,注意 libspconv 在 Tesla 平台只支持 sm_80 & sm_86,在嵌入式平台只支持 sm_87
Tesla 平台
Ubuntu20.04 x86_64 with Nvidia Tesla A30
CUDA 11.4 + cuDNN 8.4.1 + TensorRT 8.4.12.5
嵌入式平台
Nvidia Drive Orin 6.0.3.0
CUDA 11.4 + cuDNN 8.3.3 + TensorRT 8.4.10.4
在编译运行之前还需要做几件事情
首先,如果你的项目是从 Windows 下面复制到 Linux 下面的,请按照之前 CUDA-BEVFusion 所讲,将 tool 文件夹下的所有 .sh 脚本文件格式均修改为 Linux 格式,具体方法请参照 2.5.2 小节,这里不再赘述
然后,你需要修改 CMakeLists.txt 中的内容,具体修改如下:
# 30行 修改tensorRT路径
set(TENSORRT_ROOT /opt/TensorRT-8.4.1.5)
# 31行 修改CUDA路径
set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.6)
最后,在 data 文件夹下创建一个 prediction 文件夹用于保存预测结果信息
在测试数据上运行检测过程,指令如下:
cd CUDA-CenterPoint
bash tool/build.trt.sh
mkdir -p build && cd build
cmake .. && make -j
./centerpoint ../data/test/ --verbose
至此,CUDA-CenterPoint 的环境配置到这里就结束了!!!
后续的可视化推理结果以及推理结果评估博主没有尝试,感兴趣的可以自己看看
Copy 自 CUDA-PointPillars 的 README.md 文档
这个 repo 包含使用 TensorRT 进行 pointpillars 推理的源码和模型,模型由 OpenPCDet 创建由 onnx_graphsurgeon 修改
整个推理分为 4 个阶段:
- Convert points cloud into 4-channle voxels
- Extend 4-channel voxels to 10-channel voxel features
- Run TensorRT engine to get 3D-detection raw data
- Parse bounding box, class type and direction
这个 demo 使用 KITTI 数据集中的激光雷达数据,onnx 文件可以通过 tool 文件夹下的脚本从预训练模型中导出
为了构建 pointpillars 推理,需要 TensorRT、CUDA 以及在 TensorRT 中的 PillarScatter layer 插件
由于我们拉取的 Lidar_AI_Solution 项目已经包含了 CUDA-PointPillars 因此不需要单独去拉取该 repo 了
在正式编译运行之前还需要修改下对应的 CMakeLists.txt 文件,修改内容如下:
# 61行 修改TensorRT头文件路径
set(TENSORRT_INCLUDE_DIRS /opt/TensorRT-8.4.1.5/include)
# 62行 修改TensorRT库文件路径
set(TENSORRT_LIBRARY_DIRS /opt/TensorRT-8.4.1.5/lib)
修改完成后执行如下指令完成编译:
mkdir build && cd build
cmake .. && make -j$(nproc)
./demo
${nproc}
会显示当前进程可用的CPU数量,博主的数量为12,上述指令等价于
cmake .. && make -j12
编译过程如下图所示:
至此,CUDA-PointPillars 的环境配置到这里就结束了!!!
这篇博客主要介绍了 Lidar_AI_Solution 的环境配置,也就是将 README 文档重新 Copy 了一次,没有涉及到任何的原理分析,大家在环境配置过程中一定要熟读 README 文档,不要忘记安装对应的库和包,除此之外,可以到 Issues 里面多看看别人遇到的一些问题,可能你也遇到过。
该 repo 中涉及到了大量的知识,包括剪枝、量化、部署、BEV感知、Lidar点云、3D检测…,集大成者,感觉把前面所学的剪枝、量化、自动驾驶CV课程全都串起来了呀,如果大家对这个 repo 感兴趣的话可以自行研究。
最后如果大家觉得这个 repo 对你有帮助的话,不妨帮忙点个 ⭐️ 支持一波!!!
git 下载地址
git lfs 下载地址
Lidar AI Solution 完整项目下载地址
CUDA-BEVFuison 数据下载
CUDA-BEVFusion 模型下载
Lidar AI Solution
git clone --recursive快速高效下载方法
Windows系统Git安装教程
Windows安装Git LFS
Ubuntu20.04部署YOLOv5
Ubuntu20.04软件安装大全
Linux下执行Shell脚本出现$‘\r‘: command not found解决方法
【Linux】使用apt-get查询并安装指定版本的软件