(2024/5) BEVFusion ist zur Sensorfusion in NVIDIA DeepStream integriert.
(2023/5) NVIDIA bietet eine TensorRT-Bereitstellungslösung von BEVFusion und erreicht 25 FPS auf Jetson Orin.
(2023/4) BEVFusion belegt unter allen Lösungen den ersten Platz in der Rangliste der Argoverse-3D-Objekterkennung.
(2023/1) BEVFusion ist in MMDetection3D integriert.
(2023/1) BEVFusion wird zur ICRA 2023 angenommen!
(2022/8) BEVFusion belegt unter allen Lösungen den ersten Platz in der Rangliste der Waymo 3D-Objekterkennung.
(2022/6) BEVFusion belegt unter allen Lösungen den ersten Platz in der nuScenes 3D-Objekterkennungs-Rangliste.
(2022/6) BEVFusion belegt unter allen Lösungen den ersten Platz in der nuScenes 3D-Objekterkennungs-Rangliste.
Die Multisensorfusion ist für ein genaues und zuverlässiges autonomes Fahrsystem unerlässlich. Aktuelle Ansätze basieren auf der Fusion auf Punktebene: Erweitern der LiDAR-Punktwolke um Kamerafunktionen. Allerdings geht bei der Kamera-zu-LiDAR-Projektion die semantische Dichte der Kamerafunktionen verloren, was die Wirksamkeit solcher Methoden beeinträchtigt, insbesondere bei semantikorientierten Aufgaben (z. B. 3D-Szenensegmentierung). In diesem Artikel brechen wir diese tief verwurzelte Konvention mit BEVFusion, einem effizienten und generischen Multitask-Multisensor-Fusionsframework. Es vereint multimodale Funktionen im BEV-Darstellungsraum (Shared Bird's Eye View), wodurch sowohl geometrische als auch semantische Informationen gut erhalten bleiben. Um dies zu erreichen, diagnostizieren und beseitigen wir wichtige Effizienzengpässe bei der Ansichtstransformation mit optimiertem BEV-Pooling und reduzieren so die Latenz um mehr als das 40-fache . BEVFusion ist grundsätzlich aufgabenunabhängig und unterstützt nahtlos verschiedene 3D-Wahrnehmungsaufgaben nahezu ohne Änderungen an der Architektur. Es stellt den neuen Stand der Technik im NuScenes-Benchmark dar und erreicht 1,3 % höhere Karten- und NDS-Werte bei der 3D-Objekterkennung und 13,6 % höhere mIoU bei der BEV-Kartensegmentierung bei 1,9-mal niedrigeren Rechenkosten.
Modell | Karte-L1 | mAPH-L1 | Karte-L2 | mAPH-L2 |
---|---|---|---|---|
BEVFusion | 82,72 | 81,35 | 77,65 | 76,33 |
BEVFusion-TTA | 86.04 | 84,76 | 81,22 | 79,97 |
Hier verwendet BEVFusion nur ein einziges Modell ohne Testzeitverlängerung. BEVFusion-TTA verwendet ein einzelnes Modell mit Testzeiterweiterung und es wird keine Modellzusammenstellung angewendet.
Modell | Modalität | Karte | NDS |
---|---|---|---|
BEVFusion-e | C+L | 74,99 | 76.09 |
BEVFusion | C+L | 70.23 | 72,88 |
BEVFusion-Basis* | C+L | 71,72 | 73,83 |
*: Wir haben die MACs des Modells hochskaliert, um sie an den Rechenaufwand gleichzeitiger Arbeit anzupassen.
Modell | Modalität | Karte | NDS | Kontrollpunkt |
---|---|---|---|---|
BEVFusion | C+L | 68,52 | 71,38 | Link |
Nur-Kamera-Basislinie | C | 35,56 | 41.21 | Link |
Nur LiDAR-Basislinie | L | 64,68 | 69,28 | Link |
Hinweis : Die Basislinie für die reine Kamera-Objekterkennung ist eine Variante von BEVDet-Tiny mit einem viel umfangreicheren Ansichtstransformator und anderen Unterschieden bei den Hyperparametern. Dank unseres effizienten BEV-Pooling-Operators läuft dieses Modell schnell und hat bei gleicher Eingabeauflösung einen höheren mAP als BEVDet-Tiny. Die ursprüngliche BEVDet-Tiny-Implementierung finden Sie im BEVDet-Repo. Die reine LiDAR-Basislinie ist TransFusion-L.
Modell | Modalität | mioU | Kontrollpunkt |
---|---|---|---|
BEVFusion | C+L | 62,95 | Link |
Nur-Kamera-Basislinie | C | 57.09 | Link |
Nur LiDAR-Basislinie | L | 48,56 | Link |
Der Code wird mit folgenden Bibliotheken erstellt:
Python >= 3.8, <3.9
OpenMPI = 4.0.4 und mpi4py = 3.0.3 (Für Torchpack erforderlich)
Kissen = 8.4.0 (siehe hier)
PyTorch >= 1.9, <= 1.10.2
tqdm
Taschenlampenpaket
mmcv = 1.4.0
mmdetection = 2.20.0
nuscenes-dev-kit
Führen Sie nach der Installation dieser Abhängigkeiten bitte diesen Befehl aus, um die Codebasis zu installieren:
Python setup.py entwickeln
Wir stellen auch eine Docker-Datei zur Verfügung, um die Einrichtung der Umgebung zu vereinfachen. Um mit Docker zu beginnen, stellen Sie bitte sicher, dass nvidia-docker
auf Ihrem Computer installiert ist. Anschließend führen Sie bitte den folgenden Befehl aus, um das Docker-Image zu erstellen:
cd docker && docker build . -t bevfusion
Anschließend können wir den Docker mit dem folgenden Befehl ausführen:
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
Wir empfehlen den Benutzern, die Datenvorbereitung (Anweisungen finden Sie im nächsten Abschnitt) nach Möglichkeit außerhalb des Dockers durchzuführen. Beachten Sie, dass das Datensatzverzeichnis ein absoluter Pfad sein sollte. Führen Sie im Docker bitte den folgenden Befehl aus, um unser Repo zu klonen und benutzerdefinierte CUDA-Erweiterungen zu installieren:
cd home && git clone https://github.com/mit-han-lab/bevfusion && cd bevfusion Python setup.py entwickeln
Anschließend können Sie im Docker einen symbolischen data
zum Verzeichnis /dataset
erstellen.
Bitte befolgen Sie die Anweisungen hier, um den nuScenes-Datensatz herunterzuladen und vorzuverarbeiten. Bitte denken Sie daran, sowohl den Erkennungsdatensatz als auch die Kartenerweiterung (für die BEV-Kartensegmentierung) herunterzuladen. Nach der Datenvorbereitung können Sie die folgende Verzeichnisstruktur sehen (wie in mmdetection3d angegeben):
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
Wir stellen auch Anweisungen zur Bewertung unserer vorab trainierten Modelle bereit. Bitte laden Sie die Checkpoints mit dem folgenden Skript herunter:
./tools/download_pretrained.sh
Dann können Sie Folgendes ausführen:
Torchpack dist-run -np [Anzahl der GPUs] python tools/test.py [Pfad der Konfigurationsdatei] pretrained/[Checkpoint-Name].pth --eval [Auswertungstyp]
Wenn Sie beispielsweise die Erkennungsvariante von BEVFusion evaluieren möchten, können Sie Folgendes versuchen:
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
Für die Segmentierungsvariante von BEVFusion ist dieser Befehl hilfreich:
Torchpack dist-run -np 8 Python tools/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval Map
Wir stellen Anweisungen zur Reproduktion unserer Ergebnisse auf nuScenes bereit.
Wenn Sie beispielsweise die Nur-Kamera-Variante zur Objekterkennung trainieren möchten, führen Sie bitte Folgendes aus:
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 pretrained/swint-nuimages -vortrainiert.pth
Für ein reines Kamera-BEV-Segmentierungsmodell führen Sie bitte Folgendes aus:
Torchpack dist-run -np 8 Python tools/train.py configs/nuscenes/seg/camera-bev256d2.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth
Für einen Nur-LiDAR-Detektor führen Sie bitte Folgendes aus:
Torchpack dist-run -np 8 python tools/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml
Für ein reines LiDAR-BEV-Segmentierungsmodell führen Sie bitte Folgendes aus:
Torchpack dist-run -np 8 python tools/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml
Für das BEVFusion-Erkennungsmodell führen Sie bitte Folgendes aus:
Torchpack dist-run -np 8 Python tools/train.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages -pretrained.pth --load_from pretrained/lidar-only-det.pth
Für das BEVFusion-Segmentierungsmodell führen Sie bitte Folgendes aus:
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
Hinweis: Bitte führen Sie tools/test.py
nach dem Training separat aus, um die endgültigen Bewertungsmetriken zu erhalten.
CUDA-BEVFusion: Best Practice für TensorRT, das INT8-Beschleunigungslösungen bietet und 25 fps auf ORIN erreicht.
F: Können wir die von mmdetection3d vorbereiteten Infodateien direkt verwenden?
A: Wir empfehlen, die Infodateien mit dieser Codebasis neu zu generieren, da wir mmdetection3d vor der Umgestaltung ihres Koordinatensystems geforkt haben.
BEVFusion basiert auf mmdetection3d. Es ist auch stark von den folgenden herausragenden Beiträgen zur Open-Source-Community inspiriert: LSS, BEVDet, TransFusion, CenterPoint, MVP, FUTR3D, CVT und DETR3D.
Bitte schauen Sie sich auch verwandte Artikel in der Community zur reinen Kamera-3D-Wahrnehmung an, wie BEVDet4D, BEVerse, BEVFormer, M2BEV, PETR und PETRv2, die möglicherweise interessante zukünftige Erweiterungen von BEVFusion darstellen.
Wenn BEVFusion für Ihre Forschung nützlich oder relevant ist, würdigen Sie bitte unsere Beiträge, indem Sie unseren Artikel zitieren:
@inproceedings{liu2022bevfusion, title={BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation}, Autor={Liu, Zhijian und Tang, Haotian und Amini, Alexander und Yang, Xingyu und Mao, Huizi und Rus , Daniela und Han, Song}, Buchtitel={IEEE International Conference on Robotics and Automation (ICRA)}, Jahr={2023}}