在Ubuntu系统上搭建CUDA-BEVFusion推理环境,就像盖房子需要先打地基。我用的是一台搭载RTX 3060显卡的机器,实测下来这套配置性价比很高。先说说基础环境要求:
安装显卡驱动时有个坑要注意:千万别用Ubuntu自带的"附加驱动"安装!我试过三次都会导致CUDA报错。推荐用官方.run文件安装:
bash复制sudo apt purge nvidia*
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/510.108.03/NVIDIA-Linux-x86_64-510.108.03.run
sudo bash NVIDIA-Linux-x86_64-510.108.03.run
CUDA安装更简单,但要注意环境变量配置。安装完成后在~/.bashrc末尾添加:
bash复制export PATH=/usr/local/cuda-11.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64:$LD_LIBRARY_PATH
验证安装是否成功可以跑个测试:
bash复制nvidia-smi # 应该看到显卡信息
nvcc --version # 应该显示CUDA 11.6
Lidar_AI_Solution这个项目有点特殊,它采用了git子模块管理依赖。直接git clone会漏掉关键组件,必须用:
bash复制sudo apt install git-lfs
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
这里有个大坑:项目完整大小约365MB,国内直连GitHub速度可能只有20KB/s。我试过三种加速方案:
如果用第三种方法,要注意Windows和Linux的换行符差异。传输到Linux后需要执行:
bash复制find . -name "*.sh" -exec dos2unix {} \;
BEVFusion对几个关键库的版本要求很严格:
安装protobuf的正确姿势:
bash复制sudo apt install libprotobuf-dev=3.6.1.3-2ubuntu5
如果遇到版本冲突(比如之前装过其他版本),可以手动指定路径:
bash复制export PROTOBUF_INCLUDE_DIR=/usr/include/google/protobuf
export PROTOBUF_LIBRARY=/usr/lib/x86_64-linux-gnu/libprotobuf.so
Python环境建议用conda单独创建:
bash复制conda create -n bevfusion python=3.8
conda activate bevfusion
pip install onnx pycuda
项目中的environment.sh是核心配置文件,需要修改这些关键路径:
bash复制# TensorRT路径(根据实际安装位置修改)
export TensorRT_Lib=/opt/TensorRT-8.4.1.5/lib
export TensorRT_Inc=/opt/TensorRT-8.4.1.5/include
# CUDA路径(通常在这里)
export CUDA_Lib=/usr/local/cuda-11.6/lib64
export CUDA_Inc=/usr/local/cuda-11.6/include
# 模型选择(三种预训练模型)
export DEBUG_MODEL=resnet50int8 # 还有resnet50/swint可选
export DEBUG_PRECISION=int8 # 也可选fp16
配置完成后执行环境加载:
bash复制bash tool/environment.sh
如果看到类似这样的输出就成功了:
code复制[INFO] TensorRT found at /opt/TensorRT-8.4.1.5
[INFO] CUDA found at /usr/local/cuda-11.6
官方提供了百度网盘的模型和数据(约2.4GB),包含:
解压后目录结构应该是:
code复制CUDA-BEVFusion
├── example-data
│ ├── 0-FRONT.jpg
│ ├── points.tensor
│ └── ...
├── model
│ ├── resnet50int8
│ │ ├── bevfusion_ptq.pth
│ │ ├── camera.backbone.onnx
│ │ └── ...
│ └── swint
└── src
编译和运行分两步:
bash复制# 第一步:构建TensorRT引擎
bash tool/build_trt_engine.sh
# 第二步:运行推理
bash tool/run.sh
成功运行时会在build目录生成可视化结果,我用RTX 3060实测推理速度能达到18FPS。
问题1:libspconv找不到
code复制/usr/bin/ld: cannot find -lspconv
这是因为子模块没下载完整,解决方法是:
bash复制cd libraries/3DSparseConvolution
git submodule update --init
make -j$(nproc)
问题2:protobuf版本冲突
code复制[FATAL] Protocol buffer version mismatch
创建软链接强制使用正确版本:
bash复制sudo ln -sf /usr/lib/x86_64-linux-gnu/libprotobuf.so.3.6.1 /usr/lib/libprotobuf.so
问题3:TensorRT版本警告
code复制[WARNING] TensorRT 8.4.1 detected, recommend 8.5.0+
虽然能运行,但建议升级到8.5+版本以获得更好性能。
根据我的实测经验,这些参数调整能显著提升速度:
模型量化:
TensorRT优化:
bash复制# 在build_trt_engine.sh中添加
--fp16 --int8 --best
bash复制export OMP_NUM_THREADS=$(nproc)
taskset -c 0-11 ./build/bevfusion
bash复制export CUDA_MEMPOOL_SIZE=4194304 # 4MB缓存
如果想用自己的数据运行,需要准备:
转换工具在tools/convert_data.py,用法示例:
python复制python convert_data.py \
--points ./mydata/lidar.bin \
--images ./mydata/cameras/ \
--output ./mydata_converted/
记得修改config.yaml中的相机参数,否则会出标定错位。我在实际项目中遇到过因为焦距参数不对导致BEV视角扭曲的情况,调试了整整两天才发现是这个原因。