(2024/5) BEVFusion est intégré à NVIDIA DeepStream pour la fusion de capteurs.
(2023/5) NVIDIA fournit une solution de déploiement TensorRT de BEVFusion, atteignant 25 FPS sur Jetson Orin.
(2023/4) BEVFusion se classe premier dans le classement de détection d'objets 3D d'Argoverse parmi toutes les solutions.
(2023/1) BEVFusion est intégré à MMDetection3D.
(2023/1) BEVFusion est accepté à l'ICRA 2023 !
(2022/8) BEVFusion se classe premier dans le classement de détection d'objets 3D Waymo parmi toutes les solutions.
(2022/6) BEVFusion se classe premier dans le classement de détection d'objets 3D nuScenes parmi toutes les solutions.
(2022/6) BEVFusion se classe premier dans le classement de détection d'objets 3D nuScenes parmi toutes les solutions.
La fusion multicapteurs est essentielle pour un système de conduite autonome précis et fiable. Les approches récentes sont basées sur la fusion au niveau des points : augmenter le nuage de points LiDAR avec des fonctionnalités de caméra. Cependant, la projection caméra vers LiDAR supprime la densité sémantique des caractéristiques de la caméra, ce qui entrave l'efficacité de ces méthodes, en particulier pour les tâches orientées sémantique (telles que la segmentation de scènes 3D). Dans cet article, nous brisons cette convention profondément enracinée avec BEVFusion, un framework de fusion multi-capteurs multitâches efficace et générique. Il unifie les fonctionnalités multimodales dans l'espace de représentation partagé à vol d'oiseau (BEV), qui préserve parfaitement les informations géométriques et sémantiques. Pour y parvenir, nous diagnostiquons et supprimons les principaux goulots d'étranglement en matière d'efficacité dans la transformation des vues grâce à un pooling BEV optimisé, réduisant ainsi la latence de plus de 40 fois . BEVFusion est fondamentalement indépendant des tâches et prend en charge de manière transparente différentes tâches de perception 3D sans pratiquement aucun changement architectural. Il établit le nouvel état de l'art sur le benchmark nuScenes, atteignant un mAP et un NDS 1,3 % plus élevés sur la détection d'objets 3D et un mIoU 13,6 % plus élevé sur la segmentation de carte BEV, avec un coût de calcul 1,9 fois inférieur.
Modèle | mAP-L1 | mAPH-L1 | mAP-L2 | mAPH-L2 |
---|---|---|---|---|
BEVFusion | 82,72 | 81.35 | 77,65 | 76.33 |
BEVFusion-TTA | 86.04 | 84,76 | 81.22 | 79,97 |
Ici, BEVFusion n'utilise qu'un seul modèle sans aucune augmentation du temps de test. BEVFusion-TTA utilise un modèle unique avec augmentation du temps de test et aucun assemblage de modèle n'est appliqué.
Modèle | Modalité | carte | NDS |
---|---|---|---|
BEVFusion-e | C+L | 74,99 | 76.09 |
BEVFusion | C+L | 70.23 | 72,88 |
Base BEVFusion* | C+L | 71.72 | 73,83 |
* : Nous avons augmenté les MAC du modèle pour correspondre au coût de calcul du travail simultané.
Modèle | Modalité | carte | NDS | Point de contrôle |
---|---|---|---|---|
BEVFusion | C+L | 68.52 | 71.38 | Lien |
Référence de la caméra uniquement | C | 35.56 | 41.21 | Lien |
Référence LiDAR uniquement | L | 64,68 | 69.28 | Lien |
Remarque : La ligne de base de détection d'objets par caméra uniquement est une variante de BEVDet-Tiny avec un transformateur de vue beaucoup plus lourd et d'autres différences dans les hyperparamètres. Grâce à notre opérateur de pooling BEV efficace, ce modèle fonctionne rapidement et a un mAP plus élevé que BEVDet-Tiny sous la même résolution d'entrée. Veuillez vous référer au référentiel BEVDet pour l'implémentation originale de BEVDet-Tiny. La référence LiDAR uniquement est TransFusion-L.
Modèle | Modalité | mIoU | Point de contrôle |
---|---|---|---|
BEVFusion | C+L | 62,95 | Lien |
Référence de la caméra uniquement | C | 57.09 | Lien |
Référence LiDAR uniquement | L | 48.56 | Lien |
Le code est construit avec les bibliothèques suivantes :
Python >= 3,8, <3,9
OpenMPI = 4.0.4 et mpi4py = 3.0.3 (nécessaire pour torchpack)
Oreiller = 8.4.0 (voir ici)
PyTorch >= 1.9, <= 1.10.2
tqdm
sac de torche
mmcv = 1.4.0
mmdétection = 2.20.0
nuscenes-dev-kit
Après avoir installé ces dépendances, veuillez exécuter cette commande pour installer la base de code :
python setup.py développer
Nous fournissons également un Dockerfile pour faciliter la configuration de l'environnement. Pour démarrer avec Docker, assurez-vous que nvidia-docker
est installé sur votre machine. Après cela, veuillez exécuter la commande suivante pour créer l'image Docker :
cd docker && docker build. -t bevfusion
Nous pouvons ensuite exécuter le docker avec la commande suivante :
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
Nous recommandons aux utilisateurs d'exécuter la préparation des données (les instructions sont disponibles dans la section suivante) en dehors du menu fixe si possible. Notez que le répertoire de l'ensemble de données doit être un chemin absolu. Dans le docker, veuillez exécuter la commande suivante pour cloner notre dépôt et installer des extensions CUDA personnalisées :
cd home && git clone https://github.com/mit-han-lab/bevfusion && cd bevfusion python setup.py développer
Vous pouvez ensuite créer un data
symbolique vers le répertoire /dataset
dans le docker.
Veuillez suivre les instructions d'ici pour télécharger et prétraiter l'ensemble de données nuScenes. N'oubliez pas de télécharger à la fois l'ensemble de données de détection et l'extension de carte (pour la segmentation de carte BEV). Après la préparation des données, vous pourrez voir la structure de répertoires suivante (comme indiqué dans 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
Nous fournissons également des instructions pour évaluer nos modèles pré-entraînés. Veuillez télécharger les points de contrôle à l'aide du script suivant :
./tools/download_pretrained.sh
Ensuite, vous pourrez exécuter :
torchpack dist-run -np [nombre de GPU] python tools/test.py [chemin du fichier de configuration] pré-entraîné/[nom du point de contrôle].pth --eval [type d'évaluation]
Par exemple, si vous souhaitez évaluer la variante de détection de BEVFusion, vous pouvez essayer :
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
Alors que pour la variante de segmentation de BEVFusion, cette commande sera utile :
torchpack dist-run -np 8 python tools/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval map
Nous fournissons des instructions pour reproduire nos résultats sur nuScenes.
Par exemple, si vous souhaitez entraîner la variante avec caméra uniquement pour la détection d'objets, veuillez exécuter :
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 -pré-entraîné.pth
Pour le modèle de segmentation BEV avec caméra uniquement, veuillez exécuter :
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
Pour le détecteur LiDAR uniquement, veuillez exécuter :
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml
Pour le modèle de segmentation BEV LiDAR uniquement, veuillez exécuter :
torchpack dist-run -np 8 python tools/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml
Pour le modèle de détection BEVFusion, veuillez exécuter :
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
Pour le modèle de segmentation BEVFusion, veuillez exécuter :
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
Remarque : veuillez exécuter tools/test.py
séparément après la formation pour obtenir les mesures d'évaluation finales.
CUDA-BEVFusion : meilleure pratique pour TensorRT, qui fournit des solutions d'accélération INT8 et atteint 25 ips sur ORIN.
Q : Pouvons-nous utiliser directement les fichiers d'informations préparés par mmdetection3d ?
R : Nous vous recommandons de régénérer les fichiers d'informations à l'aide de cette base de code puisque nous avons forké mmdetection3d avant la refactorisation de leur système de coordonnées.
BEVFusion est basé sur mmdetection3d. Il s'inspire également grandement des contributions exceptionnelles suivantes à la communauté open source : LSS, BEVDet, TransFusion, CenterPoint, MVP, FUTR3D, CVT et DETR3D.
Veuillez également consulter les articles connexes de la communauté de perception 3D réservée aux caméras, tels que BEVDet4D, BEVerse, BEVFormer, M2BEV, PETR et PETRv2, qui pourraient constituer de futures extensions intéressantes de BEVFusion.
Si BEVFusion est utile ou pertinent pour votre recherche, veuillez reconnaître nos contributions en citant notre article :
@inproceedings{liu2022bevfusion, title={BEVFusion : fusion multi-capteurs multi-tâches avec représentation unifiée à vol d'oiseau}, author={Liu, Zhijian et Tang, Haotian et Amini, Alexander et Yang, Xingyu et Mao, Huizi et Rus , Daniela et Han, Song}, booktitle={Conférence internationale de l'IEEE sur la robotique et l'automatisation (ICRA)}, année={2023}}