惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Security Latest
Security Latest
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
Cybersecurity and Infrastructure Security Agency CISA
Cloudbric
Cloudbric
T
Threat Research - Cisco Blogs
大猫的无限游戏
大猫的无限游戏
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
C
Cisco Blogs
V
Vulnerabilities – Threatpost
S
Security Archives - TechRepublic
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
J
Java Code Geeks
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Know Your Adversary
Know Your Adversary
博客园 - 叶小钗
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
P
Palo Alto Networks Blog
博客园_首页
V
V2EX
WordPress大学
WordPress大学
Schneier on Security
Schneier on Security
月光博客
月光博客
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
TaoSecurity Blog
TaoSecurity Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
The Cloudflare Blog
罗磊的独立博客
美团技术团队
N
News | PayPal Newsroom
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Last Week in AI
Last Week in AI
K
Kaspersky official blog
Google Online Security Blog
Google Online Security Blog
S
SegmentFault 最新的问题
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录 2025 Python 版本性能测试 Flutter Hello World Flutter 安装环境配置 Ubuntu VMware 硬盘扩容后 SMBus Host controller not enabled 报错问题解决 Python NetworkX 教程 Docker GPU 报错 - Failed to initialize NVML Unknown Error 解决方案 Python matplotlib 图表绘制 cuda-toolkit 安装替代 Cuda 与 Cudnn Jinja2 Python 利用 docxtpl 和 Jinja2 生成基于模板的 Word 文档 Docker 实现 CPU 核心隔离 LoFTR 基于 Transformer 的特征提取匹配算法 OmniGlue 特征匹配 SuperGlue 使用图神经网络学习特征匹配 Ubuntu 下将 xlsx 文件按照 sheet 转换为 图片 Python 使用 SQLAlchemy Python FastAPI 教程 openwrt 软路由配置安装 Nav2 地图文件(PGM/YAML)规范标准 3D OBJ 模型转换为 glb 瓦片格式 Python 源码 Redis 数据库介绍 Ubuntu 22.04 内核自动升级导致 MongoDB 7.0.12 错误记录 ubuntu 20.04 安装 ROS Noetic ubuntu 18.04 安装 ROS Melodic VMware Workstation Pro 个人免费版下载、安装、使用指南 Hybrid A-star 路径规划 Reeds-Shepp 曲线 Dubins 曲线 Linux kvm 虚拟机网络不通的问题解决方法 Ubuntu 自动内存清理 BiliBili 缓存视频转 mp4 Python 求解线性规划 3D Gaussian Splatting 官方源码实践记录 ImageMagick 教程 Ubuntu 22.04 安装 Colmap 对数几率 odds Ubuntu nmcli 网络管理工具使用指南 SuperPoint 自监督深度学习特征点提取 SyncTV Music Tag Web 在线音乐信息整理工具 ncm 格式转 mp3 MusicBrainz 音乐元数据百科数据库 Ubuntu 网络流量监控工具 私人云音乐平台 Navidrome 入门 手眼标定 四元数(Quaternions) OHTTPS 实现免费自动 https 证书申请、更新、部署 ubuntu 22.04 安装 CloudCompare 单机 KVM 虚拟机冷迁移 Ubuntu 22.04 使用 mdadm 实现软 raid 小鱼 一键安装 ROS-humble Fluid -46- 基于 Simpletex API 构建公式识别页面 公式识别 API 简介 -- Simpletex 使用 Python web 部署库 waitress 3D Gaussian Splatting for Real-Time Radiance Field Rendering Ubuntu Swap 简介与空间扩展 Ubuntu 24.04 安装 forticlient Clash Verge 使用 MongoDB 7.0.17 集群 Docker 构建源码 Error code - 2013. Lost connection to MySQL server during query 问题解决 Python 日志记录库 loguru 使用指北 Python 实现 Web 日志查看服务 MySQL LOAD DATA LOCAL INFILE 极速数据加载 Image size exceeds limit of 89478485 pixels 解决方案 Docker 使用 NVIDIA GPU 驱动错误解决 阿里云 docker 镜像仓库 Ubuntu中没有wired connected的解决方案 MinIO 简介 subconverter 代理订阅格式转换 修复 node –openssl-legacy-provider is not allowed in NODE_OPTIONS 错误
BEVFusion
Yiwei Zhang · 2024-09-04 · via 又见苍岚

BEVFusion 专注于多传感器融合(即多视图相机和激光雷达),用于多任务 3D 感知(即检测和分割),本文记录相关内容。

摘要(Abstract)

多传感器融合对于精确可靠的自动驾驶系统是必不可少的。 最近的方法是基于点级融合:用摄像机特征增强LIDAR点云。 然而,相机到激光雷达的投影会丢弃相机特征的语义密度(semantic density),阻碍了这种方法的有效性,尤其是对于面向语义的任务(如三维场景分割)。

本文利用BEVFusion这一高效通用的多任务多传感器融合框架,打破了这一根深蒂固的惯例。 它在共享鸟瞰(BEV)表示空间中统一了多模态特征,很好地保留了几何和语义信息。 为了实现这一点,我们用优化的BEV池化来分析和解决视图转换中的关键效率瓶颈,将延迟减少了40%以上。BevFusion从根本上来说是与任务无关的,它无缝地支持不同的3D感知任务,几乎没有架构上的变化。

介绍(Introduction)

背景:自动驾驶系统配备了多种传感器,提供互补的信号。但是不同传感器的数据表现形式不同。

自动驾驶系统配备了多样的传感器。 例如,Waymo的自动驾驶车辆有29个摄像头、6个雷达和5个激光雷达。 **不同的传感器提供互补的信号:**例如,摄像机捕捉丰富的语义信息,激光雷达提供精确的空间信息,而雷达提供即时的速度估计。 因此,多传感器融合对于准确可靠的感知具有重要意义。**来自不同传感器的数据以根本不同的方式表示:**例如,摄像机在透视图中捕获数据,激光雷达在3D视图中捕获数据。

(a) 对相机:几何损耗 ;

(b) 对激光雷达:语义有损 ;

© : BEVFusion将相机和激光雷达功能统一在一个共享的BEV空间中,而不是将一种模式映射到另一种模式。 它保留了摄像机的语义密度和激光雷达的几何结构。

现有方法

  • 方法1:LiDAR→camera ,用2维的CNNS,几何失真

由于在二维感知方面取得了巨大的成功,自然的想法是将激光雷达点云投影到摄像机上,并用二维CNNS处理RGB-D数据。 然而,这种激光雷达到摄像机的投影引入了严重的几何失真(见图 1a,本来在3D图像中的红色点和蓝色点在2D图像中相邻 ),这使得它对面向几何的任务(如三维物体识别)的有效性降低。

  • 方法2:camera→LiDAR,用基于激光雷达的检测方法,语义密度有损

最近的传感器融合方法也是朝着另一个方向发展的。 它们用semantic lables、CNN features、virtual point from 2D image 来增强了激光雷达点云,,然后使用基于激光雷达的探测器来预测三维包围盒。 虽然它们在大规模检测基准上表现出了显著的性能,但这些点级融合方法几乎不能用于面向语义的任务,如BEV地图分割。 这是因为相机到激光雷达的投影在语义上是有损的(见图 1B):对于一个典型的32光束激光雷达扫描仪,只有5%的相机特征将匹配到一个激光雷达点,而所有其他特征都会被丢弃掉。 对于较稀疏的激光雷达(或成像雷达)来说,这种密度差异将变得更加剧烈。

本文工作

在本文中,我们提出了BEVFusion将多模态特征统一到共享鸟瞰(BEV)表示空间中,用于任务无关的学习(task-agnostic learning)。 我们维护几何结构和语义密度(见图 1c)并自然支持大多数3D感知任务(因为它们的输出空间可以在BEV中自然捕获)。

在将所有特性转换为BEV时,我们确定了视图转换中主要的阻碍效率瓶颈:BEV池化操作 占用模型运行时的80%以上。 然后,我们提出了一个具有预计算和间隔缩减的专用核来消除这一瓶颈,实现了40%以上的加速比。

最后,我们应用全卷积BEV编码器融合统一的BEV特征,并附加一些特定于任务的头来支持不同的目标任务。

实验效果

BevFusion在Nuscenes基准上设置了新的最先进的性能。 在3D物体检测方面,它在所有解决方案中排名第一。 BEVFusion在BEV地图分割方面有更显著的改进。 在现有的融合方法难以实现的情况下,它的MIOU比纯相机模型高6%,比纯激光雷达模型高13.6%。 BEVFusion是高效的,以1.9倍的低计算量提供了所有这些结果。BevFusion打破了长期以来认为点级融合是多传感器融合的最佳解决方案的观点。 简洁也是它的关键力量。 我们希望这项工作能为未来的传感器融合研究提供一个简单而有力的基线,并启发研究者重新思考通用多任务多传感器融合的设计和范式。

  • 基于激光雷达的三维感知
  • 基于摄像机的三维感知
  • 多传感器融合
  • 多任务学习

与现有的方法相比,BEVFusion在一个共享的BEV空间中进行传感器融合,对前景和背景、几何和语义信息一视同仁。 BEVFusion是一种通用的多任务多传感器感知框架。

方法(Method)

BEVFusion专注于多传感器融合(即多视角摄像机和激光雷达)用于多任务3D感知(即检测和分割)

BEVFusion 从多模式中提取特征,并使用视图转换有效的将它们转换成共享鸟瞰图(BEV)空间。它融合了统一的BEV功能和全卷积BEV编码器,并支持不同任务和任务特定的头。

上图是BEVFusion的框架,流程如下:

  • 给定不同的传感器输入,我们首先应用特定于模态的编码器(modality-specific encoders)来提取它们的特征。
  • 我们将多模态特征转换为一个统一的BEV表示,该表示保留了几何和语义信息。 我们确定了视图转换的效率瓶颈,并通过预计算和减少间隔来加速BEV池化。
  • 然后,我们将基于卷积的BEV编码器应用到统一的BEV特征中,以缓解不同特征之间的局部失调。
  • 最后,我们附加了一些特定于任务的头来支持不同的3D任务。

统一表示 (Unified Representation)

目标:为不同视图的特征找到一种共享的表达方式。要求这种统一表示不丢失信息,且适用于不同任务。

不同的特征可以存在于不同的视图中。 例如,相机特征在透视图中,而激光雷达/雷达特征通常在3D/鸟瞰视图中。 即使对于相机特征,它们中的每一个都有一个不同的视角(即,前、后、左、右)。 这种观点差异使得特征融合变得困难,因为不同特征张量中的相同元素可能对应于完全不同的空间位置(在这种情况下,原始的元素特征融合将不起作用)。 因此,寻找一种共享的表示方式是至关重要的,而且需要

(1)所有传感器特征都可以很容易地转换成共享的表示方式而不丢失信息

(2)共享的表示方式适合于不同类型的任务。

统一表示的方式:

  • To Camera

    在RGB-D数据的激励下,一种选择是将激光雷达点云投影到相机平面,渲染2.5D稀疏深度。 然而,这种转换在几何上是有损耗的。 深度图上的两个邻居在三维空间中可以相距很远。 这使得相机视图对于聚焦于对象/场景几何形状的任务(如3D对象检测)的有效性降低。

  • To LiDAR

    最先进的传感器融合方法用其相应的相机特征(例如,语义标签、CNN特征或虚拟点)装饰激光雷达点。 然而,这种相机到激光雷达的投影在语义上是有损耗的。 相机和激光雷达功能的密度有很大的不同,导致只有不到5%的相机功能匹配到激光雷达点(对于32通道激光雷达扫描仪)。 放弃相机特征的语义密度严重损害了模型在面向语义任务(如BEV地图分割)上的性能。 类似的缺点也适用于潜在空间中较新的融合方法(例如,对象查询)。

  • To Bird’s-Eye View

    我们采用鸟瞰视图 (BEV) 作为融合的统一表示。 这个视图对几乎所有的感知任务都很友好,因为输出空间也在BEV中。更重要的是,到BEV的转换既保持了几何结构(来自激光雷达特征),又保持了语义密度(来自相机特征)。 一方面,Lidar-to-BEV 投影使稀疏的 Lidar 特征在高度维上变平,从而不会在图形上产生几何畸变;另一方面,Camera-to-BEV 投影将每个摄像机特征像素投射回三维空间中的一条射线(在下一节中详细描述),这可以导致如图所示的密集的BEV特征映射, 保留来自摄像机的全部语义信息。

摄像机到BEV的转换 (Efficient Camera-to-BEV Transformation)

camera→BEV 的转换是非常重要的,因为与每个摄像机特征像素相关的深度本质上是模糊的。

  • 转换方法:camera特征 (显式预测像素离散深度)→ 3D 点云特征(BEV pooling聚合点云特征)→BEV特征

继 LSS 和 BEVDet,我们显式预测每个像素的离散深度分布。然后,我们将每个特征像素沿着摄像机光线分散成D个离散点,并根据它们对应的深度概率重新确定相关特征。 这生成大小为 $ N\times H\times W\times D$ 的相机特征点云,其中 $N$ 是相机的数量,$ (H,W)$ 是相机特征图大小。 这样的3D特征点云以 $r$(例如,0.4m)的步长沿着 $X、Y$ 轴被量化。 我们使用 BEV pooling 操作来聚合每个 $r\times r$ BEV 网格中的所有特征,并沿着 $Z$ 轴 flatten 特征。

  • 采用:precomputation 和 interval reduction来优化 BEV pooling的效率

虽然简单,但BEV pooling 出奇地低效和缓慢,在RTX 3090 GPU上需要500ms以上(而我们模型的其余部分只需要100ms左右)。 这是因为相机功能点云非常大:对于典型的工作负载每帧可能会产生大约200万个点,比激光雷达特征点云密度高两个数量级。 为了解决这一效率瓶颈,我们提出了通过precomputation和interval reduction来优化BEV pooling。

Precomputation

通过预计算,把点云中的每个点赋予在BEV网格的排序编号。
BEV池化的第一步是将摄像机特征点云中的每个点与一个BEV网格关联起来。网格关联后,同一BEV网格内的所有点将在张量表示中是连续的。

与激光雷达点云不同的是,相机特征点云的坐标是固定的(只要相机内参和外力保持不变,通常经过正确的校准后就是这样)。

  • 在此基础上,我们预先计算了每个点的三维坐标和BEV网格索引
  • 我们还根据网格索引对所有点进行排序,并记录每个点的rank
  • 在推理过程中,我们只需要根据预先计算的rank对所有特征点进行重新排序

这种缓存机制可以将网格关联的时延从17ms降低到4ms

Interval Reduction

在栅格关联之后,同一BEV栅格内的所有点在张量表示中将连续排列。BEV pooling 的下一步是通过某种均匀的函数(例如,均值、最大值和总和)聚合每个BEV网格中的特征。

  • 原来的方法:

如图3(b)所示现有执行情况首先计算所有点的前缀和,然后减去索引变化边界处的值。 然而,前缀和操作需要在GPU上进行tree reduction,并产生许多未使用的部分和(因为我们只需要边界上的那些值),这两种操作都是低效的。

  • 解决方案:

为了加速特征聚合,我们实现了一个专门的GPU内核,该内核直接在BEV网格上并行化:我们为每个网格分配一个GPU线程,该线程计算其间隔和并将结果写回。 该内核消除了输出之间的依赖关系(因此不需要多级tree reduction),并避免将部分和写入DRAM(动态随机存储器),将特征聚合的延迟从500ms减少到2ms

Takeaways

通过优化的BEV池,相机到BEV的转换速度快了40:延迟从超过500ms减少到12ms(仅为我们模型端到端运行时间的10%),并且可以在不同的特征分辨率上进行扩展(图3d)。 这是在共享的BEV表示中统一多模态感官特征的关键使能器。 我们同时进行的两项工作也发现了仅摄像机三维检测的效率瓶颈。 它们通过假定均匀的深度分布来近似视图转换器或截断每个BEV网格内的点。 相比之下,我们的技术是精确的,没有任何近似,但仍然更快。

全卷积融合 (Fully-Convolutional Fusion)

当所有的模态特征转换为共享的BEV表示时,我们可以很容易地用元素操作(如级联)将它们融合在一起。 在同一空间中,由于视图变换中的深度不准确,激光雷达和摄像机的BEV特征在空间上仍会出现一定程度的错位。 为此,我们应用了一个基于卷积的BEV编码器(带有少量残差块)来补偿这种局部不对齐。 我们的方法可能受益于更精确的深度估计(例如,用地面真实深度来监督视图),我们把它留到以后的工作中去。

多任务头 (Multi-Task Heads)

我们将多个特定于任务的头应用于融合的BEV特征映射。 我们的方法适用于大多数三维感知任务。 我们展示了两个例子:三维物体检测和BEV地图分割。

  • Detection

我们使用一个特定于类的中心HeatMap头来预测所有对象的中心位置,并使用一些回归头来估计对象的大小、旋转和速度。

  • Segmentation

不同的地图类别可能会重叠(例如,人行横道是可驾驶空间的子集)。 因此,我们将此问题表述为多个二进制语义分割,每类一个。 我们遵循CVT用标准焦损训练分段头.

原始论文

项目链接

参考资料

文章链接:
https://www.zywvvd.com/notes/study/deep-learning/bev/bevfusion/bevfusion/