(2024/5) BEVFusion 集成到 NVIDIA DeepStream 中以实现传感器融合。
(2023/5) NVIDIA 提供 BEVFusion 的 TensorRT 部署方案,在 Jetson Orin 上实现 25 FPS。
(2023/4) BEVFusion 在 Argoverse 3D 物体检测排行榜所有解决方案中排名第一。
(2023/1) BEVFusion 集成到 MMDetection3D 中。
(2023/1) BEVFusion 被 ICRA 2023 接受!
(2022/8) BEVFusion 在 Waymo 3D 物体检测排行榜所有解决方案中排名第一。
(2022/6) BEVFusion 在 nuScenes 3D 物体检测排行榜所有解决方案中排名第一。
(2022/6) BEVFusion 在 nuScenes 3D 物体检测排行榜所有解决方案中排名第一。
多传感器融合对于准确可靠的自动驾驶系统至关重要。最近的方法基于点级融合:用相机功能增强激光雷达点云。然而,相机到 LiDAR 的投影抛弃了相机特征的语义密度,阻碍了此类方法的有效性,特别是对于面向语义的任务(例如 3D 场景分割)。在本文中,我们通过 BEVFusion 打破了这一根深蒂固的惯例,BEVFusion 是一种高效且通用的多任务多传感器融合框架。它将多模态特征统一在共享鸟瞰图(BEV)表示空间中,很好地保留了几何和语义信息。为了实现这一目标,我们通过优化的 BEV 池来诊断并解决视图转换中的关键效率瓶颈,将延迟减少了40 倍以上。 BEVFusion 基本上与任务无关,并且无缝支持不同的 3D 感知任务,几乎无需进行架构更改。它在 nuScenes 基准上建立了新的技术水平,在 3D 对象检测上实现了1.3%的 mAP 和 NDS 高出 1.3%,在 BEV 地图分割上实现了 13.6% 的 mIoU 高出13.6% ,同时计算成本降低了1.9 倍。
模型 | mAP-L1 | mAPH-L1 | mAP-L2 | mAPH-L2 |
---|---|---|---|---|
纯电动汽车融合 | 82.72 | 81.35 | 77.65 | 76.33 |
BEVFusion-TTA | 86.04 | 84.76 | 81.22 | 79.97 |
在这里,BEVFusion 仅使用单个模型,没有任何测试时间增加。 BEVFusion-TTA 使用具有测试时间增强的单一模型,并且不应用模型集成。
模型 | 模态 | 地图 | 国家统计局 |
---|---|---|---|
BEVFusion-e | 中+左 | 74.99 | 76.09 |
纯电动汽车融合 | 中+左 | 70.23 | 72.88 |
BEVFusion 基础* | 中+左 | 71.72 | 73.83 |
*:我们扩大了模型的 MAC 以匹配并发工作的计算成本。
模型 | 模态 | 地图 | 国家统计局 | 检查站 |
---|---|---|---|---|
纯电动汽车融合 | 中+左 | 68.52 | 71.38 | 关联 |
仅相机基线 | C | 35.56 | 41.21 | 关联 |
仅 LiDAR 基线 | L | 64.68 | 69.28 | 关联 |
注意:仅相机对象检测基线是 BEVDet-Tiny 的变体,具有更重的视图转换器和超参数的其他差异。得益于我们高效的 BEV 池化算子,该模型运行速度快,并且在相同输入分辨率下比 BEVDet-Tiny 具有更高的 mAP。请参阅 BEVDet 存储库了解原始 BEVDet-Tiny 实现。仅 LiDAR 的基线是 TransFusion-L。
模型 | 模态 | 米卢 | 检查站 |
---|---|---|---|
纯电动汽车融合 | 中+左 | 62.95 | 关联 |
仅相机基线 | C | 57.09 | 关联 |
仅 LiDAR 基线 | L | 48.56 | 关联 |
该代码是使用以下库构建的:
Python >= 3.8,<3.9
OpenMPI = 4.0.4 和 mpi4py = 3.0.3(torchpack 需要)
枕头 = 8.4.0(参见此处)
PyTorch >= 1.9,<= 1.10.2
全面质量管理
火炬包
毫米CV = 1.4.0
毫米检测= 2.20.0
nuscenes开发套件
安装这些依赖项后,请运行以下命令来安装代码库:
python setup.py 开发
我们还提供了一个 Dockerfile 来简化环境设置。要开始使用 docker,请确保您的计算机上安装了nvidia-docker
。之后,请执行以下命令来构建docker镜像:
cd docker && docker build . -t 融合
然后我们可以使用以下命令运行 docker:
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
如果可能的话,我们建议用户在 docker 外部运行数据准备(下一节中提供了说明)。注意,数据集目录应该是绝对路径。在 docker 中,请运行以下命令来克隆我们的存储库并安装自定义 CUDA 扩展:
cd home && git clone https://github.com/mit-han-lab/bevfusion && cd bevfusion python setup.py 开发
然后,您可以创建到 docker 中的/dataset
目录的符号链接data
。
请按照此处的说明下载并预处理 nuScenes 数据集。请记住下载检测数据集和地图扩展(用于 BEV 地图分割)。数据准备好后,您将可以看到以下目录结构(如mmdetection3d所示):
mmdetection3d ├── mmdet3d ├── tools ├── configs ├── data │ ├── nuscenes │ │ ├── maps │ │ ├── samples │ │ ├── sweeps │ │ ├── v1.0-test | | ├── v1.0-trainval │ │ ├── nuscenes_database │ │ ├── nuscenes_infos_train.pkl │ │ ├── nuscenes_infos_val.pkl │ │ ├── nuscenes_infos_test.pkl │ │ ├── nuscenes_dbinfos_train.pkl
我们还提供了评估预训练模型的说明。请使用以下脚本下载检查点:
./tools/download_pretrained.sh
然后,您将能够运行:
torchpack dist-run -np [GPU数量] python tools/test.py [配置文件路径] pretrained/[检查点名称].pth --eval [评估类型]
例如,如果您想评估 BEVFusion 的检测变体,您可以尝试:
torchpack dist-run -np 8 python tools/test.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml pretrained/bevfusion-det.pth --eval bbox
对于 BEVFusion 的分段变体,此命令会很有帮助:
torchpack dist-run -np 8 python tools/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval 地图
我们提供了在 nuScenes 上重现结果的说明。
例如,如果您想训练仅相机变体进行对象检测,请运行:
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml --model.encoders.camera.backbone.init_cfg.checkpoint 预训练/swint-nuimages -预训练.pth
对于仅相机的 BEV 分割模型,请运行:
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/seg/camera-bev256d2.yaml --model.encoders.camera.backbone.init_cfg.checkpoint 预训练/swint-nuimages-pretrained.pth
对于仅 LiDAR 检测器,请运行:
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml
对于仅 LiDAR BEV 分割模型,请运行:
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml
对于 BEVFusion 检测模型,请运行:
torchpack dist-run -np 8 python 工具/train.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml --model.encoders.camera.backbone.init_cfg.checkpoint 预训练/swint-nuimages -pretrained.pth --load_from pretrained/lidar-only-det.pth
对于 BEVFusion 分割模型,请运行:
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth
注意:请在训练后单独运行tools/test.py
以获得最终的评估指标。
CUDA-BEVFusion:TensorRT的最佳实践,提供INT8加速方案,在ORIN上达到25fps。
Q:mmdetection3d准备好的info文件可以直接使用吗?
答:我们建议使用此代码库重新生成信息文件,因为我们在坐标系统重构之前分叉了 mmdetection3d。
BEVFusion 基于 mmdetection3d。它还受到以下对开源社区的杰出贡献的启发:LSS、BEVDet、TransFusion、CenterPoint、MVP、FUTR3D、CVT 和 DETR3D。
另请查看仅相机 3D 感知社区中的相关论文,例如 BEVDet4D、BVerse、BEVFormer、M2BEV、PETR 和 PETRv2,它们可能是 BEVFusion 未来有趣的扩展。
如果 BEVFusion 对您的研究有用或相关,请引用我们的论文来认可我们的贡献:
@inproceedings{liu2022bevfusion,title={BEVFusion:具有统一鸟瞰图表示的多任务多传感器融合},author={Liu、Zhijian和Tang、Haotian和Amini、Alexander和Yang、Xingyu和Mao、Huizi和Rus ,Daniela 和 Han,宋},书名={IEEE 国际机器人与自动化会议 (ICRA)},年份={2023}}