从数据集到可视化手把手带你用BEVFusion在NuScenes上完成自动驾驶感知全流程自动驾驶技术的快速发展对感知算法提出了更高要求。BEVFusion作为多传感器融合的先进框架通过统一的鸟瞰图表示实现了相机与激光雷达数据的高效融合。本文将带您从零开始完成NuScenes数据集上的完整感知流程涵盖数据准备、模型训练、测试评估到结果可视化的每个环节。1. 环境准备与工具链搭建构建BEVFusion开发环境需要精确匹配软件版本。以下是经过验证的配置方案conda create -n bevfusion python3.8 -y conda activate bevfusion conda install pytorch1.10.1 torchvision0.11.2 torchaudio0.10.1 cudatoolkit11.3 -c pytorch注意CUDA 11.3与PyTorch 1.10.1的组合在NVIDIA 30系列显卡上表现最佳关键依赖安装完成后需要配置多进程训练支持wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.4.tar.bz2 tar -xjf openmpi-4.0.4.tar.bz2 cd openmpi-4.0.4 ./configure --prefix$HOME/openmpi-4.0.4 make -j8 make install将以下内容添加到~/.bashrc中实现环境变量自动加载export PATH$HOME/openmpi-4.0.4/bin:$PATH export LD_LIBRARY_PATH$HOME/openmpi-4.0.4/lib:$LD_LIBRARY_PATH2. NuScenes数据集深度解析NuScenes数据集包含1000个驾驶场景每个场景约20秒时长包含传感器数据6个摄像头前视/后视/侧视1个32线激光雷达5个毫米波雷达标注信息23类物体3D边界框8类可行驶区域分割物体运动轨迹预测数据集目录结构应组织为data/nuscenes ├── maps ├── samples ├── sweeps ├── v1.0-trainval ├── nuscenes_infos_train.pkl └── nuscenes_infos_val.pkl数据预处理命令需要根据硬件配置调整python tools/create_data.py nuscenes \ --root-path ./data/nuscenes \ --out-dir ./data/nuscenes \ --extra-tag nuscenes \ --workers 16 # 根据CPU核心数调整3. 多模态训练策略详解BEVFusion支持三种训练模式性能对比如下模式mAP0.5推理速度(FPS)显存占用(GB)纯视觉0.4238.79.2纯激光雷达0.51712.47.8多模态融合0.6816.314.63.1 单卡训练配置视觉分支训练示例CUDA_VISIBLE_DEVICES0 python tools/train_single_gpu.py \ configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml \ --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth \ --run-dir output/camera关键参数解析--model.encoders.camera.backbone.init_cfg.checkpoint指定预训练权重路径--run-dir训练日志和模型保存目录--lr学习率默认2e-43.2 多卡分布式训练8卡训练配置torchpack dist-run -np 8 python tools/train.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth \ --load_from pretrained/lidar-only-det.pth \ --run-dir output/bevfusion \ --batch_size_per_gpu 2 # 根据显存调整提示多卡训练时建议使用torchpack进行进程管理比原生PyTorch分布式更稳定4. 模型评估与可视化实战4.1 定量评估多模态模型测试命令python tools/test_single_gpu.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ output/bevfusion/latest.pth \ --eval bbox \ --show-dir output/visualization评估指标说明mAP平均精度0.5-1.0 IoU阈值NDSNuScenes检测分数综合位置、尺寸、方向等mATE平均平移误差mASE平均尺寸误差4.2 预测结果可视化生成鸟瞰图预测可视化python tools/visualize.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ --mode pred \ --checkpoint output/bevfusion/latest.pth \ --bbox-score 0.3 \ --out-dir output/bev_visual可视化效果增强技巧调整--bbox-score过滤低质量预测使用--show-range参数控制显示范围添加--save-video生成连续帧动画5. 工程优化与性能调优5.1 训练加速技巧混合精度训练# 在config文件中添加 fp16 dict(loss_scale512.)数据加载优化data dict( workers_per_gpu4, # 根据CPU核心数调整 samples_per_gpu8, # 根据显存调整 )5.2 模型轻量化方案通过修改配置文件实现模型压缩model dict( encodersdict( cameradict( backbonedict( embed_dims96, # 原为128 depths[2, 2, 6, 2], # 原为[2,2,18,2] ) ) ) )压缩后性能对比模型类型参数量(M)mAP0.5推理延迟(ms)原始模型143.70.681158轻量版89.20.653926. 实际部署注意事项模型转换ONNX格式示例from mmdet3d.apis import init_model model init_model(configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml, output/bevfusion/latest.pth) input_dict {img: torch.rand(1,6,3,256,704), points: [torch.rand(20000,5)]} torch.onnx.export(model, input_dict, bevfusion.onnx, input_names[img, points], output_names[bboxes, scores])部署优化建议使用TensorRT进行推理加速对相机图像进行离线预处理激光雷达点云使用体素化缓存
从数据集到可视化:手把手带你用BEVFusion在NuScenes上完成自动驾驶感知全流程
发布时间:2026/5/17 10:04:43
从数据集到可视化手把手带你用BEVFusion在NuScenes上完成自动驾驶感知全流程自动驾驶技术的快速发展对感知算法提出了更高要求。BEVFusion作为多传感器融合的先进框架通过统一的鸟瞰图表示实现了相机与激光雷达数据的高效融合。本文将带您从零开始完成NuScenes数据集上的完整感知流程涵盖数据准备、模型训练、测试评估到结果可视化的每个环节。1. 环境准备与工具链搭建构建BEVFusion开发环境需要精确匹配软件版本。以下是经过验证的配置方案conda create -n bevfusion python3.8 -y conda activate bevfusion conda install pytorch1.10.1 torchvision0.11.2 torchaudio0.10.1 cudatoolkit11.3 -c pytorch注意CUDA 11.3与PyTorch 1.10.1的组合在NVIDIA 30系列显卡上表现最佳关键依赖安装完成后需要配置多进程训练支持wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.4.tar.bz2 tar -xjf openmpi-4.0.4.tar.bz2 cd openmpi-4.0.4 ./configure --prefix$HOME/openmpi-4.0.4 make -j8 make install将以下内容添加到~/.bashrc中实现环境变量自动加载export PATH$HOME/openmpi-4.0.4/bin:$PATH export LD_LIBRARY_PATH$HOME/openmpi-4.0.4/lib:$LD_LIBRARY_PATH2. NuScenes数据集深度解析NuScenes数据集包含1000个驾驶场景每个场景约20秒时长包含传感器数据6个摄像头前视/后视/侧视1个32线激光雷达5个毫米波雷达标注信息23类物体3D边界框8类可行驶区域分割物体运动轨迹预测数据集目录结构应组织为data/nuscenes ├── maps ├── samples ├── sweeps ├── v1.0-trainval ├── nuscenes_infos_train.pkl └── nuscenes_infos_val.pkl数据预处理命令需要根据硬件配置调整python tools/create_data.py nuscenes \ --root-path ./data/nuscenes \ --out-dir ./data/nuscenes \ --extra-tag nuscenes \ --workers 16 # 根据CPU核心数调整3. 多模态训练策略详解BEVFusion支持三种训练模式性能对比如下模式mAP0.5推理速度(FPS)显存占用(GB)纯视觉0.4238.79.2纯激光雷达0.51712.47.8多模态融合0.6816.314.63.1 单卡训练配置视觉分支训练示例CUDA_VISIBLE_DEVICES0 python tools/train_single_gpu.py \ configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml \ --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth \ --run-dir output/camera关键参数解析--model.encoders.camera.backbone.init_cfg.checkpoint指定预训练权重路径--run-dir训练日志和模型保存目录--lr学习率默认2e-43.2 多卡分布式训练8卡训练配置torchpack dist-run -np 8 python tools/train.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth \ --load_from pretrained/lidar-only-det.pth \ --run-dir output/bevfusion \ --batch_size_per_gpu 2 # 根据显存调整提示多卡训练时建议使用torchpack进行进程管理比原生PyTorch分布式更稳定4. 模型评估与可视化实战4.1 定量评估多模态模型测试命令python tools/test_single_gpu.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ output/bevfusion/latest.pth \ --eval bbox \ --show-dir output/visualization评估指标说明mAP平均精度0.5-1.0 IoU阈值NDSNuScenes检测分数综合位置、尺寸、方向等mATE平均平移误差mASE平均尺寸误差4.2 预测结果可视化生成鸟瞰图预测可视化python tools/visualize.py \ configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml \ --mode pred \ --checkpoint output/bevfusion/latest.pth \ --bbox-score 0.3 \ --out-dir output/bev_visual可视化效果增强技巧调整--bbox-score过滤低质量预测使用--show-range参数控制显示范围添加--save-video生成连续帧动画5. 工程优化与性能调优5.1 训练加速技巧混合精度训练# 在config文件中添加 fp16 dict(loss_scale512.)数据加载优化data dict( workers_per_gpu4, # 根据CPU核心数调整 samples_per_gpu8, # 根据显存调整 )5.2 模型轻量化方案通过修改配置文件实现模型压缩model dict( encodersdict( cameradict( backbonedict( embed_dims96, # 原为128 depths[2, 2, 6, 2], # 原为[2,2,18,2] ) ) ) )压缩后性能对比模型类型参数量(M)mAP0.5推理延迟(ms)原始模型143.70.681158轻量版89.20.653926. 实际部署注意事项模型转换ONNX格式示例from mmdet3d.apis import init_model model init_model(configs/nuscenes/det/transfusion/secfpn/cameralidar/swint_v0p075/convfuser.yaml, output/bevfusion/latest.pth) input_dict {img: torch.rand(1,6,3,256,704), points: [torch.rand(20000,5)]} torch.onnx.export(model, input_dict, bevfusion.onnx, input_names[img, points], output_names[bboxes, scores])部署优化建议使用TensorRT进行推理加速对相机图像进行离线预处理激光雷达点云使用体素化缓存