(2024/5) BEVFusion은 센서 융합을 위해 NVIDIA DeepStream에 통합되었습니다.
(2023/5) NVIDIA는 Jetson Orin에서 25FPS를 달성하는 BEVFusion의 TensorRT 배포 솔루션을 제공합니다.
(2023/4) BEVFusion은 Argoverse 3D 객체 감지 리더보드에서 모든 솔루션 중 1위를 차지했습니다.
(2023/1) BEVFusion은 MMDetection3D에 통합되었습니다.
(2023/1) BEVFusion이 ICRA 2023에 승인되었습니다!
(2022/8) BEVFusion은 모든 솔루션 중 Waymo 3D 객체 감지 리더보드에서 1위를 차지했습니다.
(2022/6) BEVFusion은 모든 솔루션 중 nuScenes 3D 객체 감지 리더보드에서 1위를 차지했습니다.
(2022/6) BEVFusion은 모든 솔루션 중 nuScenes 3D 객체 감지 리더보드에서 1위를 차지했습니다.
정확하고 안정적인 자율주행 시스템을 위해서는 다중 센서 융합이 필수적입니다. 최근 접근 방식은 카메라 기능으로 LiDAR 포인트 클라우드를 강화하는 포인트 레벨 융합을 기반으로 합니다. 그러나 카메라에서 LiDAR로의 투영은 카메라 기능의 의미 밀도를 떨어뜨려 특히 의미 중심 작업(예: 3D 장면 분할)에서 이러한 방법의 효율성을 방해합니다. 본 논문에서는 효율적이고 일반적인 다중 작업 다중 센서 융합 프레임워크인 BEVFusion을 사용하여 이러한 뿌리 깊은 관습을 깨뜨렸습니다. 공유 조감도(BEV) 표현 공간에 다중 모드 기능을 통합하여 기하학적 정보와 의미적 정보를 모두 훌륭하게 보존합니다. 이를 달성하기 위해 우리는 최적화된 BEV 풀링을 통해 뷰 변환에서 주요 효율성 병목 현상을 진단하고 해결하여 대기 시간을 40배 이상 줄입니다. BEVFusion은 기본적으로 작업에 구애받지 않으며 아키텍처 변경이 거의 없이 다양한 3D 인식 작업을 원활하게 지원합니다. 이는 nuScenes 벤치마크에서 새로운 최첨단 기술을 확립하여 3D 객체 감지에서 1.3% 더 높은 mAP 및 NDS를 달성하고 BEV 지도 분할에서 13.6% 더 높은 mIoU를 달성하며 1.9배 더 낮은 계산 비용을 달성합니다.
모델 | 지도-L1 | 지도-L1 | 맵-L2 | MAPH-L2 |
---|---|---|---|---|
BEV퓨전 | 82.72 | 81.35 | 77.65 | 76.33 |
BEVFusion-TTA | 86.04 | 84.76 | 81.22 | 79.97 |
여기서 BEVFusion은 테스트 시간을 늘리지 않고 단일 모델만 사용합니다. BEVFusion-TTA는 테스트 시간 확대가 포함된 단일 모델을 사용하며 모델 앙상블은 적용되지 않습니다.
모델 | 양식 | 지도 | NDS |
---|---|---|---|
BEVFusion-e | C+L | 74.99 | 76.09 |
BEV퓨전 | C+L | 70.23 | 72.88 |
BEVFusion 기반* | C+L | 71.72 | 73.83 |
*: 동시 작업의 계산 비용에 맞게 모델의 MAC를 확장했습니다.
모델 | 양식 | 지도 | NDS | 검문소 |
---|---|---|---|---|
BEV퓨전 | C+L | 68.52 | 71.38 | 링크 |
카메라 전용 베이스라인 | 기음 | 35.56 | 41.21 | 링크 |
LiDAR 전용 기준선 | 엘 | 64.68 | 69.28 | 링크 |
참고 : 카메라 전용 객체 감지 기준선은 훨씬 더 무거운 뷰 변환기와 하이퍼파라미터의 기타 차이점이 있는 BEVDet-Tiny의 변형입니다. 효율적인 BEV 풀링 연산자 덕분에 이 모델은 동일한 입력 해상도에서 빠르게 실행되고 BEVDet-Tiny보다 더 높은 mAP를 갖습니다. 원래 BEVDet-Tiny 구현에 대해서는 BEVDet 저장소를 참조하세요. LiDAR 전용 기준선은 TransFusion-L입니다.
모델 | 양식 | 미우 | 검문소 |
---|---|---|---|
BEV퓨전 | C+L | 62.95 | 링크 |
카메라 전용 베이스라인 | 기음 | 57.09 | 링크 |
LiDAR 전용 기준선 | 엘 | 48.56 | 링크 |
코드는 다음 라이브러리로 빌드됩니다.
파이썬 >= 3.8, <3.9
OpenMPI = 4.0.4 및 mpi4py = 3.0.3(torchpack에 필요)
베개 = 8.4.0 (여기 참조)
파이토치 >= 1.9, <= 1.10.2
tqdm
토치팩
mmcv = 1.4.0
mm검출 = 2.20.0
Nuscenes-개발 키트
이러한 종속성을 설치한 후 다음 명령을 실행하여 코드베이스를 설치하십시오.
파이썬 setup.py 개발
또한 환경 설정을 쉽게 하기 위해 Dockerfile을 제공합니다. docker를 시작하려면 nvidia-docker
컴퓨터에 설치되어 있는지 확인하세요. 그 후, 다음 명령을 실행하여 Docker 이미지를 빌드하세요.
CD 도커 && 도커 빌드 . -t bevfusion
그런 다음 다음 명령을 사용하여 도커를 실행할 수 있습니다.
nvidia-docker run -it -v `pwd`/../data:/dataset --shm-size 16g bevfusion /bin/bash
가능하면 사용자가 Docker 외부에서 데이터 준비(지침은 다음 섹션에서 확인 가능)를 실행하는 것이 좋습니다. 데이터 세트 디렉터리는 절대 경로여야 합니다. Docker 내에서 다음 명령을 실행하여 리포지토리를 복제하고 사용자 정의 CUDA 확장을 설치하십시오.
CD 홈 && 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 [gpus 수] 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 map
우리는 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 -pretrained.pth
카메라 전용 BEV 분할 모델의 경우 다음을 실행하십시오.
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
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 tools/train.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml --model.encoders.camera.backbone.init_cfg.checkpoint 사전 훈련된/swint-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-nuimages-pretrained.pth
참고: 최종 평가 지표를 얻으려면 훈련 후 tools/test.py
별도로 실행하십시오.
CUDA-BEVFusion: INT8 가속 솔루션을 제공하고 ORIN에서 25fps를 달성하는 TensorRT의 모범 사례입니다.
Q: mmDetection3d에서 준비한 정보 파일을 바로 사용할 수 있나요?
A: 좌표계 리팩터링 전에 mmDetection3d를 분기했으므로 이 코드베이스를 사용하여 정보 파일을 다시 생성하는 것이 좋습니다.
BEVFusion은 mmDetection3d를 기반으로 합니다. 또한 LSS, BEVDet, TransFusion, CenterPoint, MVP, FUTR3D, CVT 및 DETR3D와 같은 오픈 소스 커뮤니티에 대한 뛰어난 기여에서 큰 영감을 받았습니다.
BEVFusion에 대한 향후 확장이 흥미로울 수 있는 BEVDet4D, BEVerse, BEVFormer, M2BEV, PETR 및 PETRv2와 같은 카메라 전용 3D 인식 커뮤니티의 관련 논문도 확인하시기 바랍니다.
BEVFusion이 귀하의 연구에 유용하거나 관련이 있는 경우 다음 논문을 인용하여 우리의 기여를 인정해 주시기 바랍니다.
@inproceedings{liu2022bevfusion, title={BEVFusion: 통합 조감도 표현을 통한 다중 작업 다중 센서 융합}, 작성자={Liu, Zhijian 및 Tang, Haotian 및 Amini, Alexander 및 Yang, Xingyu 및 Mao, Huizi 및 Rus , Daniela 및 Han, Song}, booktitle={IEEE 로봇공학 및 자동화에 관한 국제 컨퍼런스(ICRA)}, 연도={2023}}