Project Icon

UniTR

多模态变换器网络推动3D感知进展

UniTR是一种新型统一多模态变换器网络,用于3D感知任务。它通过共享权重处理相机和激光雷达等多传感器数据,实现高效多模态融合。在nuScenes数据集上,UniTR在3D目标检测和BEV地图分割任务中均达到最新水平,且降低推理延迟。该研究为提升自动驾驶系统的感知能力提供了新思路。

UniTR:首个统一的多模态3D感知Transformer主干网络

本仓库是ICCV2023论文《UniTR: 用于鸟瞰图表示的统一高效多模态Transformer》的官方实现,以及后续相关工作。我们的UniTR在nuScenes数据集上实现了最先进的性能,使用了真正统一的、权重共享的多模态(如摄像头和激光雷达)主干网络。UniTR基于[DSVT]的代码库构建,我们竭尽全力确保代码库简洁、易读、先进,并且只依赖最少的外部库。

UniTR: 用于鸟瞰图表示的统一高效多模态Transformer

王海阳*, 唐浩*, 石少帅 $^\dagger$, 李傲雪, 李正国, Bernt Schiele, 王立威 $^\dagger$

联系人: 王海阳 (wanghaiyang6@stu.pku.edu.cn), 唐浩 (tanghao@stu.pku.edu.cn), 石少帅 (shaoshuaics@gmail.com)

🚀 感谢唐浩对代码的大量重构和对开源项目的重要贡献。他的宝贵努力对UniTR的顺利完成至关重要。

🔥 👀 诚实地说,UniTR中的分区操作较慢,占用了总时间的约40%,但通过更好的策略或一些工程优化,这部分可以优化至零,表明速度优化还有很大空间。我们不是高性能计算专家,但如果业界有人想改进这一点,我们相信可以将其减半。重要的是,这部分不会随模型规模增加而增加,这对更大的模型很友好。

📘 我将毫无保留地分享我对通用3D感知基础模型的理解和未来计划。请参阅🔥 潜在研究方向🔥。如果您觉得对您的研究有用或有启发,欢迎加入我一起构建这个蓝图。

解读文章: [CVer] [自动驾驶之心] [ReadPaper] [知乎] [CSDN] [TechBeat (将门创投)]

新闻

  • [24-07-01] 🔥 我们的 GiTECCV2024 接收。如果您觉得有帮助,请给它一个星标。🤗
  • [24-03-15] 🔥 GiT,首个仅使用ViT的成功通用视觉模型已发布。对应潜在研究方向,我们尝试解决视觉端通用模型的问题。结合UniTR和GiT构建适用于自动驾驶场景的类LLM统一模型是一个有趣的方向。
  • [23-09-21] 🚀 NuScenes的代码已发布。
  • [23-08-16] 🏆 SOTA 我们的单一多模态UniTR在nuScenes检测基准(2023年8月)上超越了所有其他非TTA方法,NDS达到74.5
  • [23-08-16] 🏆 SOTA 在NuScenes验证集上实现了多模态3D目标检测和BEV地图分割的最佳性能。
  • [23-08-15] 👀 UniTR在arXiv上发布。
  • [23-07-13] 🔥 UniTR被ICCV 2023接收。

概览

待办事项

  • 发布arXiv版本。
  • 多模态3D目标检测(NuScenes)和BEV地图分割(NuScenes)的最佳性能。
  • 整理并发布NuScenes的代码。
  • 将UniTR合并到OpenPCDet

简介

联合处理多个传感器的信息对于实现准确和稳健的感知至关重要,这是可靠自动驾驶系统的基础。然而,当前的3D感知研究遵循特定模态的范式,导致额外的计算开销和不同传感器数据之间的协作效率低下。

在本文中,我们提出了一个高效的户外3D感知多模态主干网络,它使用统一建模和共享参数处理各种模态。这是一个基本上与任务无关的主干网络,天然支持不同的3D感知任务。它在nuScenes基准测试中创造了新的最先进性能,在3D目标检测方面实现了+1.1 NDS的提升,在BEV地图分割方面实现了+12.0 mIoU的提升,同时推理延迟更低。

主要结果

3D目标检测(NuScenes验证集)

模型NDSmAPmATEmASEmAOEmAVEmAAE检查点日志
UniTR73.070.126.324.726.824.617.9检查点日志
UniTR+LSS73.370.526.024.426.824.818.7检查点日志

3D目标检测(NuScenes测试集)

模型NDSmAPmATEmASEmAOEmAVEmAAE
UniTR74.170.524.423.325.724.113.0
UniTR+LSS74.570.924.122.925.624.013.1

BEV地图分割(在NuScenes验证集上)

模型平均IoU可行驶区人行横道人行道停止线停车场分隔带检查点日志
UniTR73.290.473.178.266.667.363.8检查点日志
UniTR+LSS74.790.774.079.368.272.964.2检查点日志

这里有什么新内容?

🔥 超越了之前室外多模态3D目标检测和BEV分割的最佳成果

我们的方法在多个任务(如3D目标检测和BEV地图分割)上取得了最佳性能,并且具有高度的通用性,只需替换骨干网络即可。

3D目标检测
BEV地图分割

🔥 所有模态间共享权重

我们引入了一个与模态无关的transformer编码器,用于处理这些视角不一致的传感器数据,实现并行的模态特定表示学习和自动跨模态交互,无需额外的融合步骤。

🔥 3D视觉基础模型的先决条件

权重共享的统一多模态编码器是基础模型的先决条件,特别是在3D感知的背景下,统一来自图像和LiDAR数据的信息。这是第一个真正的多模态融合骨干网络,可以无缝连接到任何3D检测头。

快速开始

安装

conda create -n unitr python=3.8
# 安装torch,我们只在pytorch 1.10中测试过
pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 -f https://download.pytorch.org/whl/torch_stable.html

git clone https://github.com/Haiyang-W/UniTR
cd UniTR

# 安装额外依赖
pip install -r requirements.txt

# 安装nuscenes-devkit
pip install nuscenes-devkit==1.0.5

# 开发
python setup.py develop

数据集准备

OpenPCDet
├── data
│   ├── nuscenes
│   │   │── v1.0-trainval (或v1.0-mini如果你使用mini版本)
│   │   │   │── samples
│   │   │   │── sweeps
│   │   │   │── maps
│   │   │   │── v1.0-trainval  
├── pcdet
├── tools
  • (可选)要安装用于bev地图分割任务的地图扩展,请从地图扩展(地图扩展包(v1.3))下载文件,并将文件复制到你的nuScenes地图文件夹中,例如/data/nuscenes/v1.0-trainval/maps,如下所示:
OpenPCDet
├── maps
│   ├── ......
│   ├── boston-seaport.json
│   ├── singapore-onenorth.json
│   ├── singapore-queenstown.json
│   ├── singapore-hollandvillage.json
  • 通过运行以下命令生成数据信息(可能需要几个小时):
# 创建数据集信息文件,激光雷达和图像gt数据库
python -m pcdet.datasets.nuscenes.nuscenes_dataset --func create_nuscenes_infos \
    --cfg_file tools/cfgs/dataset_configs/nuscenes_dataset.yaml \
    --version v1.0-trainval \
    --with_cam \
    --with_cam_gt \
    # --share_memory # 如果使用共享内存进行激光雷达和图像gt采样(大约24G+143G或12G+72G)
# 共享内存将大大提高你的训练速度,但需要150G或75G额外的缓存内存。
# 注意:所有实验都使用了共享内存。共享内存不会影响性能
  • 生成的数据格式如下:
OpenPCDet
├── data
│   ├── nuscenes
│   │   │── v1.0-trainval (或v1.0-mini如果你使用mini版本)
│   │   │   │── samples
│   │   │   │── sweeps
│   │   │   │── maps
│   │   │   │── v1.0-trainval  
│   │   │   │── img_gt_database_10sweeps_withvelo
│   │   │   │── gt_database_10sweeps_withvelo
│   │   │   │── nuscenes_10sweeps_withvelo_lidar.npy (可选) # 如果开启共享内存
│   │   │   │── nuscenes_10sweeps_withvelo_img.npy (可选) # 如果开启共享内存
│   │   │   │── nuscenes_infos_10sweeps_train.pkl  
│   │   │   │── nuscenes_infos_10sweeps_val.pkl
│   │   │   │── nuscenes_dbinfos_10sweeps_withvelo.pkl
├── pcdet
├── tools

训练

请从unitr_pretrain.pth下载预训练检查点,并将文件复制到根文件夹下,例如UniTR/unitr_pretrain.pth。这个文件是在Imagenet和Nuimage数据集上预训练DSVT的权重。

3D目标检测:

# 多GPU训练
## 普通
cd tools
bash scripts/dist_train.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr.yaml --sync_bn --pretrained_model ../unitr_pretrain.pth --logger_iter_interval 1000

## 添加lss
cd tools
bash scripts/dist_train.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr+lss.yaml --sync_bn --pretrained_model ../unitr_pretrain.pth --logger_iter_interval 1000

BEV地图分割:

# 多GPU训练
# 注意,我们在BEV地图分割中不使用图像预训练
## 普通
cd tools
bash scripts/dist_train.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr_map.yaml --sync_bn --eval_map --logger_iter_interval 1000

## 添加lss
cd tools
bash scripts/dist_train.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr_map+lss.yaml --sync_bn --eval_map --logger_iter_interval 1000

测试

3D目标检测:

# 多GPU测试
## 普通
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr.yaml --ckpt <检查点文件>

## 添加LSS
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr+lss.yaml --ckpt <检查点文件>

BEV地图分割

# 多GPU测试
## 普通
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr_map.yaml --ckpt <检查点文件> --eval_map

## 添加LSS
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr_map+lss.yaml --ckpt <检查点文件> --eval_map
# 注意:评估结果不会记录在*.log中,只会在终端中打印

缓存测试

  • 🔥如果你使用的数据集的相机和激光雷达参数保持不变,那么使用我们的缓存模式不会影响性能。你甚至可以在训练阶段缓存所有映射计算,这可以显著加快你的训练速度。
  • Nuscenes中的每个样本的相机参数会有一些变化,在正常推理过程中,我们禁用缓存模式以确保结果准确性。然而,由于我们映射的鲁棒性,即使在像Nuscenes这样相机参数有变化的场景中,性能也只会略微下降(大约0.4 NDS)。
  • 缓存模式目前只支持batch_size为1,8x1=8
  • 根据我们的观察,骨干网络缓存可以减少40%的推理延迟。
# 仅适用于3D目标检测
## 普通
### 缓存多模态骨干网络的映射计算
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr_cache.yaml --ckpt <检查点文件> --batch_size 8

## 添加LSS
### 缓存多模态骨干网络的映射计算
cd tools
bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr+LSS_cache.yaml --ckpt <检查点文件> --batch_size 8

添加LSS

缓存多模态主干网络和LSS的映射计算

cd tools bash scripts/dist_test.sh 8 --cfg_file ./cfgs/nuscenes_models/unitr+LSS_cache_plus.yaml --ckpt <检查点文件> --batch_size 8

#### 在NuScenes验证集上的缓存测试性能(相机参数有些变化)
|  模型  | NDS | mAP |mATE | mASE | mAOE | mAVE| mAAE |
|---------|---------|--------|---------|---------|--------|---------|--------|
|  [UniTR (缓存主干网络)](https://github.com/Haiyang-W/UniTR/blob/main/tools/cfgs/nuscenes_models/unitr_cache.yaml) | 72.6(-0.4) | 69.4(-0.7) | 26.9 | 24.8 | 26.3 | 24.6 | 18.2 |
|  [UniTR+LSS (缓存主干网络)](https://github.com/Haiyang-W/UniTR/blob/main/tools/cfgs/nuscenes_models/unitr%2Blss_cache.yaml) | 73.1(-0.2) | 70.2(-0.3) | 25.8 | 24.4 | 26.0 | 25.3 | 18.2 | 
|  [UniTR+LSS (缓存主干网络和LSS)](https://github.com/Haiyang-W/UniTR/blob/main/tools/cfgs/nuscenes_models/unitr%2Blss_cache_plus.yaml) | 72.6(-0.7) | 69.3(-1.2) | 26.7 | 24.3 | 25.9 | 25.3 | 18.2 | 

## 潜在研究方向
* **3D视觉基础模型的基础架构。**
  对大型模型来说,高效的网络设计至关重要。有了可靠的模型结构,大型模型的开发就可以推进。如何使通用多模态主干网络更高效且易于部署。说实话,UniTR中的划分较慢,大约占总时间的40%,但通过更好的"划分策略"或"一些工程努力",这可以优化至零,表明在速度优化方面仍有巨大空间。我们不是高性能计算专家,但如果业内有人想改进这一点,我们相信可以将其减半。重要的是,这部分不会随模型大小而扩展,这对更大的模型很友好。
* **基于图像-激光雷达对和UniTR的多模态自监督学习。**
  请参考下图。图像和点云都描述了同一个3D场景;它们在高度信息丰富的对应关系方面相互补充。这允许使用共享参数对更通用的场景表示进行无监督学习。
* **单模态预训练。** 我们的模型与ViT几乎相同(除了一些位置嵌入策略)。如果我们适当调整位置嵌入,DSVT和UniTR可以直接加载ViT的预训练参数。这有利于与2D社区更好地整合。
* **3D视觉的统一建模。**
  请参考下图。
<div align="center">
  <img src="https://yellow-cdn.veclightyear.com/835a84d5/308acddf-9f45-41b8-a70f-62b51a29897d.png" width="800"/>
</div>

## 可能遇到的问题
* 如果在fp16训练过程中遇到梯度变为NaN的情况,不支持。
* 如果找不到解决方案,请在我们的github问题页面[这里](https://github.com/Haiyang-W/UniTR/issues)搜索已开放和已关闭的问题。
* 我们在训练阶段默认提供torch检查点选项[这里](https://github.com/Haiyang-W/UniTR/blob/3f75dc1a362fe8f325dabd2e878ac57df2ab7323/tools/cfgs/nuscenes_models/unitr.yaml#L125),以节省50%的CUDA内存。
* Nuscenes中的样本在相机参数上有一些变化。因此,在训练过程中,每个样本都会重新计算相机-激光雷达映射,这显著降低了训练速度(~40%)。如果您数据集中的外部参数是一致的,我建议在训练期间缓存这个计算。
* 如果仍然无法解决,请在我们的github上开一个新的问题。我们通常会在几天内回复。

## 引用
如果我们的工作对您有帮助,请考虑按以下方式引用:

@inproceedings{wang2023unitr, title={UniTR: A Unified and Efficient Multi-Modal Transformer for Bird's-Eye-View Representation}, author={Haiyang Wang, Hao Tang, Shaoshuai Shi, Aoxue Li, Zhenguo Li, Bernt Schiele, Liwei Wang}, booktitle={ICCV}, year={2023} }


## 致谢
UniTR使用了来自几个开源仓库的代码。如果没有这些人的努力(以及他们愿意发布他们的实现),UniTR就不可能实现。我们感谢这些作者的努力!
* Shaoshuai Shi: [OpenPCDet](https://github.com/open-mmlab/OpenPCDet)
* Chen Shi: [DSVT](https://github.com/Haiyang-W/DSVT)
* Zhijian Liu: [BevFusion](https://github.com/mit-han-lab/bevfusion)
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号