(2024/5) BEVFusion está integrado en NVIDIA DeepStream para la fusión de sensores.
(2023/5) NVIDIA proporciona una solución de implementación TensorRT de BEVFusion, logrando 25 FPS en Jetson Orin.
(2023/4) BEVFusion ocupa el primer lugar en la clasificación de detección de objetos 3D de Argoverse entre todas las soluciones.
(2023/1) BEVFusion se integra en MMDetection3D.
(2023/1) ¡BEVFusion es aceptado en ICRA 2023!
(2022/8) BEVFusion ocupa el primer lugar en la clasificación de detección de objetos 3D de Waymo entre todas las soluciones.
(2022/6) BEVFusion ocupa el primer lugar en la clasificación de detección de objetos 3D de nuScenes entre todas las soluciones.
(2022/6) BEVFusion ocupa el primer lugar en la clasificación de detección de objetos 3D de nuScenes entre todas las soluciones.
La fusión de múltiples sensores es esencial para un sistema de conducción autónoma preciso y confiable. Los enfoques recientes se basan en la fusión a nivel de puntos: aumentar la nube de puntos LiDAR con funciones de cámara. Sin embargo, la proyección de cámara a LiDAR descarta la densidad semántica de las características de la cámara, lo que dificulta la efectividad de dichos métodos, especialmente para tareas orientadas a la semántica (como la segmentación de escenas 3D). En este artículo, rompemos esta convención profundamente arraigada con BEVFusion, un marco de fusión multisensor multitarea eficiente y genérico. Unifica características multimodales en el espacio de representación compartido a vista de pájaro (BEV), que conserva muy bien la información geométrica y semántica. Para lograr esto, diagnosticamos y eliminamos los principales cuellos de botella de eficiencia en la transformación de la vista con una agrupación de BEV optimizada, lo que reduce la latencia en más de 40 veces . BEVFusion es fundamentalmente independiente de las tareas y admite perfectamente diferentes tareas de percepción 3D casi sin cambios arquitectónicos. Establece el nuevo estado del arte en el punto de referencia nuScenes, logrando un 1,3 % más de mAP y NDS en la detección de objetos 3D y un 13,6 % más de mIoU en la segmentación de mapas BEV, con un costo de cálculo 1,9 veces menor.
Modelo | mapa-L1 | mapaH-L1 | mapa-L2 | mapah-l2 |
---|---|---|---|---|
BEVFusión | 82,72 | 81,35 | 77,65 | 76,33 |
BEVFusion-TTA | 86.04 | 84,76 | 81.22 | 79,97 |
Aquí, BEVFusion solo utiliza un único modelo sin ningún aumento del tiempo de prueba. BEVFusion-TTA utiliza un modelo único con aumento del tiempo de prueba y no se aplica ningún conjunto de modelos.
Modelo | Modalidad | mapa | NDS |
---|---|---|---|
BEVFusion-e | C+L | 74,99 | 76.09 |
BEVFusión | C+L | 70.23 | 72,88 |
BEVFusion-base* | C+L | 71,72 | 73,83 |
*: Ampliamos las MAC del modelo para que coincidan con el costo de cálculo del trabajo simultáneo.
Modelo | Modalidad | mapa | NDS | Control |
---|---|---|---|---|
BEVFusión | C+L | 68,52 | 71,38 | Enlace |
Línea base de solo cámara | do | 35,56 | 41.21 | Enlace |
Línea base solo LiDAR | l | 64,68 | 69,28 | Enlace |
Nota : La línea base de detección de objetos solo con cámara es una variante de BEVDet-Tiny con un transformador de vista mucho más pesado y otras diferencias en los hiperparámetros. Gracias a nuestro eficiente operador de agrupación de BEV, este modelo funciona rápido y tiene un mAP más alto que BEVDet-Tiny con la misma resolución de entrada. Consulte el repositorio de BEVDet para conocer la implementación original de BEVDet-Tiny. La línea de base únicamente LiDAR es TransFusion-L.
Modelo | Modalidad | miou | Control |
---|---|---|---|
BEVFusión | C+L | 62,95 | Enlace |
Línea base de solo cámara | do | 57.09 | Enlace |
Línea base solo LiDAR | l | 48,56 | Enlace |
El código está construido con las siguientes bibliotecas:
Pitón >= 3.8, <3.9
OpenMPI = 4.0.4 y mpi4py = 3.0.3 (Necesario para torchpack)
Almohada = 8.4.0 (ver aquí)
PyTorch >= 1.9, <= 1.10.2
tqdm
paquete de antorchas
mmcv = 1.4.0
mmdetección = 2.20.0
nuscenes-dev-kit
Después de instalar estas dependencias, ejecute este comando para instalar el código base:
python setup.py desarrollar
También proporcionamos un Dockerfile para facilitar la configuración del entorno. Para comenzar con Docker, asegúrese de que nvidia-docker
esté instalado en su máquina. Después de eso, ejecute el siguiente comando para crear la imagen de la ventana acoplable:
CD Docker && compilación de Docker. -t fusión
Luego podemos ejecutar la ventana acoplable con el siguiente comando:
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
Recomendamos a los usuarios ejecutar la preparación de datos (las instrucciones están disponibles en la siguiente sección) fuera de la ventana acoplable, si es posible. Tenga en cuenta que el directorio del conjunto de datos debe ser una ruta absoluta. Dentro de la ventana acoplable, ejecute el siguiente comando para clonar nuestro repositorio e instalar extensiones CUDA personalizadas:
cd inicio && git clone https://github.com/mit-han-lab/bevfusion && cd bevfusion python setup.py desarrollar
Luego puede crear un enlace simbólico data
al directorio /dataset
en la ventana acoplable.
Siga las instrucciones que aparecen aquí para descargar y preprocesar el conjunto de datos de nuScenes. Recuerde descargar tanto el conjunto de datos de detección como la extensión del mapa (para la segmentación del mapa BEV). Después de la preparación de los datos, podrá ver la siguiente estructura de directorios (como se indica en 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
También proporcionamos instrucciones para evaluar nuestros modelos previamente entrenados. Descargue los puntos de control utilizando el siguiente script:
./tools/download_pretrained.sh
Entonces podrás ejecutar:
torchpack dist-run -np [número de gpus] python tools/test.py [ruta del archivo de configuración] preentrenado/[nombre del punto de control].pth --eval [tipo de evaluación]
Por ejemplo, si desea evaluar la variante de detección de BEVFusion, puede intentar:
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
Mientras que para la variante de segmentación de BEVFusion, este comando será útil:
torchpack dist-run -np 8 python tools/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval map
Proporcionamos instrucciones para reproducir nuestros resultados en nuScenes.
Por ejemplo, si desea entrenar la variante de solo cámara para la detección de objetos, ejecute:
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 -preentrenado.pth
Para el modelo de segmentación BEV solo con cámara, ejecute:
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
Para el detector solo LiDAR, ejecute:
torchpack dist-run -np 8 herramientas de python/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml
Para el modelo de segmentación BEV solo LiDAR, ejecute:
torchpack dist-run -np 8 herramientas de python/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml
Para el modelo de detección BEVFusion, ejecute:
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
Para el modelo de segmentación BEVFusion, ejecute:
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
Nota: ejecute tools/test.py
por separado después del entrenamiento para obtener las métricas de evaluación finales.
CUDA-BEVFusion: mejores prácticas para TensorRT, que proporciona soluciones de aceleración INT8 y alcanza 25 fps en ORIN.
P: ¿Podemos utilizar directamente los archivos de información preparados por mmdetection3d?
R: Recomendamos volver a generar los archivos de información utilizando este código base, ya que bifurcamos mmdetection3d antes de refactorizar su sistema de coordenadas.
BEVFusion se basa en mmdetection3d. También está muy inspirado en las siguientes contribuciones destacadas a la comunidad de código abierto: LSS, BEVDet, TransFusion, CenterPoint, MVP, FUTR3D, CVT y DETR3D.
Consulte también los artículos relacionados en la comunidad de percepción 3D exclusiva de cámaras, como BEVDet4D, BEVerse, BEVFormer, M2BEV, PETR y PETRv2, que podrían ser extensiones futuras interesantes de BEVFusion.
Si BEVFusion es útil o relevante para su investigación, por favor reconozca nuestras contribuciones citando nuestro artículo:
@inproceedings{liu2022bevfusion, title={BEVFusion: fusión multitarea y multisensor con representación unificada a vista de pájaro}, autor={Liu, Zhijian y Tang, Haotian y Amini, Alexander y Yang, Xingyu y Mao, Huizi y Rus , Daniela y Han, Song}, booktitle={Conferencia Internacional IEEE sobre Robótica y Automatización (ICRA)}, año={2023}}