(2024/5) BEVFusion é integrado ao NVIDIA DeepStream para fusão de sensores.
(2023/5) NVIDIA fornece uma solução de implantação TensorRT de BEVFusion, atingindo 25 FPS em Jetson Orin.
(2023/4) BEVFusion ocupa o primeiro lugar no ranking de detecção de objetos 3D da Argoverse entre todas as soluções.
(2023/1) BEVFusion está integrado ao MMDetection3D.
(2023/1) BEVFusion é aceito no ICRA 2023!
(2022/8) BEVFusion ocupa o primeiro lugar na classificação de detecção de objetos 3D Waymo entre todas as soluções.
(2022/6) BEVFusion ocupa o primeiro lugar no ranking de detecção de objetos 3D da nuScenes entre todas as soluções.
(2022/6) BEVFusion ocupa o primeiro lugar no ranking de detecção de objetos 3D da nuScenes entre todas as soluções.
A fusão multissensor é essencial para um sistema de condução autônomo preciso e confiável. Abordagens recentes são baseadas na fusão em nível de ponto: aumentando a nuvem de pontos LiDAR com recursos de câmera. No entanto, a projeção câmera-LiDAR descarta a densidade semântica dos recursos da câmera, dificultando a eficácia de tais métodos, especialmente para tarefas orientadas semânticas (como segmentação de cena 3D). Neste artigo, quebramos essa convenção profundamente enraizada com o BEVFusion, uma estrutura de fusão multissensor multitarefa eficiente e genérica. Ele unifica recursos multimodais no espaço de representação compartilhado da visão aérea (BEV), que preserva bem as informações geométricas e semânticas. Para conseguir isso, diagnosticamos e eliminamos os principais gargalos de eficiência na transformação da visualização com pooling de BEV otimizado, reduzindo a latência em mais de 40x . BEVFusion é fundamentalmente independente de tarefas e suporta perfeitamente diferentes tarefas de percepção 3D quase sem alterações arquitetônicas. Ele estabelece o novo estado da arte no benchmark nuScenes, alcançando mAP e NDS 1,3% mais altos na detecção de objetos 3D e mIoU 13,6% mais altos na segmentação de mapas BEV, com custo de computação 1,9x menor.
Modelo | 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 |
Aqui, o BEVFusion usa apenas um único modelo sem qualquer aumento no tempo de teste. BEVFusion-TTA usa modelo único com aumento de tempo de teste e nenhum conjunto de modelo é aplicado.
Modelo | Modalidade | mapa | NDS |
---|---|---|---|
BEVFusion-e | C+L | 74,99 | 76.09 |
BEVFusion | C+L | 70,23 | 72,88 |
Base BEVFusion* | C+L | 71,72 | 73,83 |
*: Aumentamos os MACs do modelo para corresponder ao custo de computação do trabalho simultâneo.
Modelo | Modalidade | mapa | NDS | Ponto de verificação |
---|---|---|---|---|
BEVFusion | C+L | 68,52 | 71,38 | Link |
Linha de base somente para câmera | C | 35,56 | 41.21 | Link |
Linha de base somente LiDAR | eu | 64,68 | 69,28 | Link |
Nota : A linha de base de detecção de objetos somente com câmera é uma variante do BEVDet-Tiny com um transformador de visão muito mais pesado e outras diferenças nos hiperparâmetros. Graças ao nosso eficiente operador de pooling BEV, este modelo funciona rapidamente e possui mAP mais alto que o BEVDet-Tiny na mesma resolução de entrada. Consulte o repositório BEVDet para a implementação original do BEVDet-Tiny. A linha de base somente LiDAR é TransFusion-L.
Modelo | Modalidade | miU | Ponto de verificação |
---|---|---|---|
BEVFusion | C+L | 62,95 | Link |
Linha de base somente para câmera | C | 57.09 | Link |
Linha de base somente LiDAR | eu | 48,56 | Link |
O código é construído com as seguintes bibliotecas:
Pitão >= 3,8, <3,9
OpenMPI = 4.0.4 e mpi4py = 3.0.3 (necessário para torchpack)
Travesseiro = 8.4.0 (veja aqui)
PyTorch >= 1,9, <= 1.10.2
tqdm
mochila de tocha
mmcv = 1,4,0
mmdetecção = 2.20.0
nuscenes-dev-kit
Depois de instalar essas dependências, execute este comando para instalar a base de código:
python setup.py desenvolver
Também fornecemos um Dockerfile para facilitar a configuração do ambiente. Para começar a usar o docker, certifique-se de que nvidia-docker
esteja instalado em sua máquina. Depois disso, execute o seguinte comando para construir a imagem docker:
cd docker && docker build. -t bevfusão
Podemos então executar o docker com o seguinte comando:
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
Recomendamos que os usuários executem a preparação de dados (as instruções estão disponíveis na próxima seção) fora da janela de encaixe, se possível. Observe que o diretório do conjunto de dados deve ser um caminho absoluto. Na janela de encaixe, execute o seguinte comando para clonar nosso repositório e instalar extensões CUDA personalizadas:
cd home && git clone https://github.com/mit-han-lab/bevfusion && cd bevfusion python setup.py desenvolver
Você pode então criar um link simbólico data
para o diretório /dataset
na janela de encaixe.
Siga as instruções aqui para baixar e pré-processar o conjunto de dados nuScenes. Lembre-se de baixar o conjunto de dados de detecção e a extensão do mapa (para segmentação do mapa BEV). Após a preparação dos dados, você poderá ver a seguinte estrutura de diretórios (conforme indicado em 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
Também fornecemos instruções para avaliar nossos modelos pré-treinados. Faça download dos pontos de verificação usando o seguinte script:
./tools/download_pretrained.sh
Então, você poderá executar:
torchpack dist-run -np [número de gpus] python tools/test.py [caminho do arquivo de configuração] pré-treinado/[nome do ponto de verificação].pth --eval [tipo de avaliação]
Por exemplo, se quiser avaliar a variante de detecção do BEVFusion, você pode tentar:
torchpack dist-run -np 8 ferramentas python/test.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml pretrained/bevfusion-det.pth --eval bbox
Já para a variante de segmentação do BEVFusion, este comando será útil:
torchpack dist-run -np 8 python ferramentas/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval map
Fornecemos instruções para reproduzir nossos resultados no nuScenes.
Por exemplo, se você deseja treinar a variante somente câmera para detecção de objetos, execute:
torchpack dist-run -np 8 ferramentas python/train.py configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pré-treinado/swint-nuimages -pretrained.pth
Para modelo de segmentação BEV somente câmera, execute:
torchpack dist-run -np 8 python ferramentas/train.py configs/nuscenes/seg/camera-bev256d2.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth
Para detector somente LiDAR, execute:
torchpack dist-run -np 8 python ferramentas/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml
Para modelo de segmentação BEV somente LiDAR, execute:
torchpack dist-run -np 8 python ferramentas/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml
Para o modelo de detecção BEVFusion, execute:
torchpack dist-run -np 8 ferramentas python/train.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pré-treinado/swint-nuimages -pretrained.pth --load_from pré-treinado/lidar-only-det.pth
Para o modelo de segmentação BEVFusion, execute:
torchpack dist-run -np 8 python ferramentas/train.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth
Observação: execute tools/test.py
separadamente após o treinamento para obter as métricas de avaliação final.
CUDA-BEVFusion: Prática recomendada para TensorRT, que fornece soluções de aceleração INT8 e atinge 25fps no ORIN.
P: Podemos usar diretamente os arquivos de informações preparados por mmdetection3d?
R: Recomendamos gerar novamente os arquivos de informações usando esta base de código, já que bifurcamos mmdetection3d antes da refatoração do sistema de coordenadas.
BEVFusion é baseado em mmdetection3d. Também é muito inspirado pelas seguintes contribuições notáveis para a comunidade de código aberto: LSS, BEVDet, TransFusion, CenterPoint, MVP, FUTR3D, CVT e DETR3D.
Verifique também artigos relacionados na comunidade de percepção 3D somente para câmeras, como BEVDet4D, BEVerse, BEVFormer, M2BEV, PETR e PETRv2, que podem ser extensões futuras interessantes do BEVFusion.
Se BEVFusion for útil ou relevante para sua pesquisa, por favor, reconheça nossas contribuições citando nosso artigo:
@inproceedings{liu2022bevfusion, title={BEVFusion: Multi-Task Multi-Sensor Fusion com Unified Bird's-Eye View Representation}, autor={Liu, Zhijian e Tang, Haotian e Amini, Alexander e Yang, Xingyu e Mao, Huizi e Rus , Daniela e Han, Song}, booktitle={IEEE International Conference on Robotics and Automation (ICRA)}, ano={2023}}