(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-imagesges-pretrained.pththths
對於僅 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 yaml --model.encoders.camera.backbone.init_cfg.check 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-nuges-pretrainebone.init_cfg.checkpoint pretrained/swint-nugesp-pretraine-d.
注意:請在訓練後單獨執行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}}