目录

BEVFusion Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation

记录论文《BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation》阅读过程中的一些思考。

简介

论文获取:arXiv | 网盘备份

BEVFusion相机LiDAR 各自独立编码为 BEV 表示后在 BEV 空间中融合,统一了多模态传感器的融合范式,证明了 BEV 是多传感器融合的天然中间表示。

传统多传感器融合方法通常有两种思路。一种是得益于之前 2D 视觉感知的巨大成功,以 Camera 为中心,将 LiDAR 点云投影到图像中,并使用 CNN 系的方法处理 RGB-D 数据;另一种则是之后流行的 point-level 方法,其使用 语义标签(semantic labels)CNN 特征或者来自相机的虚拟点(virtual points)来增强LiDAR 点云的信息,再使用以 LiDAR 为基础的检测器做 3D 边界框检测。但这两种思路都有各自棘手的问题,前者在将 LiDAR 投影到图像时引入了严重的几何失真,这会让诸如 3D 目标识别 之类的几何向(geometric-oriented)的任务效率低下;而后者虽然在大规模检测任务集上展现了卓越的性能,但在语义向(semantic-oriented)的任务上表现乏力,究其原因是图像中密集的语义特征被稀疏的 LiDAR 点(尤其是稀疏的 LiDAR 或者 Radar)采样后大量丢失。

共享的 BEV 表征空间

BEVFusion 打破了这种范式,提出用模态特定(modality-specific)的编码器独立编码提取各模态特征,并将这些特征统一到 BEV 表示空间后再做融合。

概念

统一 BEV 表征 / Unified Bird’s-Eye View Representation

来自不同传感器的特征可能存在不同的视图,如图像特征是透视视图、典型的 LiDAR/Radar 特征是 3DBird's-Eye View 视图。甚至对于图像特征,其本身可能都包含诸如前视后视环视等等多种不同视角。这种视图差异让同一元素在不同特征空间中的位置迥异从而导致特征融合变得困难。

不同于前述的统一到图像的 2D 空间或 LiDAR/Radar3D 空间的方案,本文提出统一 BEV 表征(Unified Bird's-Eye View Representation)将特征统一到 BEV(Bird's-Eye View) 空间。

衡准

优秀的统一表征空间应该:

  • 所有传感器的特征能尽量信息无损的转换到该空间
  • 能够适配不同的任务类型

相比于以 2D 图像或 3D LiDAR/Radar 为中心的方案,统一 BEV 表征

  • 几何-语义互补LiDAR 提供的精确的几何结构、相机提供的丰富的语义纹理,两者在转换后都被保留,并在 BEV 空间中自然互补
  • 任务无关性统一 BEV 表征可以同时支持检测、分割等几乎所有感知任务,因为它们的输出也是在 BEV 空间
探微

Q1: 为什么“对齐”到图像空间会损失几何信息而“对齐”到点云空间会损失语义信息?

A:

  • 对齐到图像空间:在由对齐后的 RGB-D 数据驱动的深度图中,相邻像素在 3D 空间中可能相距很远,它们的特征在卷积时会被强制混合

  • 对齐到点云空间:因为 LiDAR/Radar 点云相比图像非常稀疏,将相机特征投影到点云,会导致大量的图像特征被丢弃(如 $32$ 线 LiDAR 只能匹配约 $5\%$ 的图像特征),如远处的交通标志、地面标线、行人的部分身体等等

Q2: BEVFusion 与其他 BEV 融合方法(如北大的同名 BEVFusion)有什么区别?

A: 同期发表了两篇名为 BEVFusion 的工作:

  • MIT 版(本文):重点在于诊断并解决视角变换的效率瓶颈(提出高效 BEV 池化),强调任务无关的统一框架设计
  • 北大版arXiv:2205.13790):侧重于设计自适应的特征级融合策略,关注检测精度提升

两者的核心思想,即在 BEV 空间融合多模态特征——是一致的。

视角变换 / View Transformation

视角变换(View Transformation),或相机到鸟瞰视角变换(Camera-to-BEV Transformation),是将相机图像特征从透视视角转换到 BEV 空间的关键步骤。

视角变换性能优化

BEVFusion 沿用了 LSS 的方法(参见):对每个像素预测离散深度分布 $\alpha \in \Delta^{|D|-1}$ ,与上下文特征 $\boldsymbol{c}$ 做外积生成三维特征视锥,再通过 BEV 池化坍缩到 BEV 平面。然而,论文发现这一流程中的 BEV 池化虽然简单但却是整个流水线的效率瓶颈。在原始 LSS 实现中,视角变换BEV 池化RTX 3090 上耗时约 $500\text{ms}$(剩余部分仅耗时 $100\text{ms}$ 左右),即超过 $80\%$ 的计算耗时。

因此 BEVFusion预计算间隔约简/区间归约(interval reduction)两个角度来优化 BEV 池化

  • 预计算:将相机特征视锥中的每个点关联到 BEV 网格是 BEV 池化的第一步。与 LiDAR 点不同,在相机经过恰当的标定后(且相机内外参保持不变),特征视锥中的各点在三维空间中坐标是确定的。基于此

    1. 预先计算特征视锥中的每个点的三维坐标和其关联的 BEV 网格的索引
    2. 按网格索引排序所有点并记录每个点的排名

    因而在推理阶段,仅需按照排名重新排序所有特征点,这使得同一 BEV 网格内的点在张量(Tensor)表达中物理连续。

  • 间隔约简:在将特征点关联到 BEV 网格后, BEV 池化的下一步是在每个网格中使用对称函数(Symmetric Function)(函数输出与输入的顺序无关,常见的有 $mean,max,sum,\dots$)聚合这些特征。如上图(b)所示,当前 LSS 实现中这步是先在所有点上计算前缀和(Prefix Sum),也叫累加和(Cumulative Sum, Cumsum),再在网格索引变化时减去边界值。但累加和操作在 GPU 上需要进行树约简(Tree Reduction)并产生大量未使用的部分和(partial sum),这两者都不必要。因此 BEVFusion 实现了一个可以在 BEV 网格上并行化的专用 GPU kernel,即它为每个网格分配一个 GPU 线程并独立并行计算网格的区间和并返回结果。其

    • 消除了输出之间的依赖性,因此无需执行树约简
    • 避免了将部分和写入 DRAM

    最终,如图(c),将特征聚合的延迟从 $500ms$ 左右减到了 $2ms$ 左右。

经过这两种优化, BEVFusion 在没有引入任何“近似”的前提下,视角变换的延迟从约 $500\text{ms}$ 降低到约 $12\text{ms}$(加速 $\boldsymbol{> 40\times}$)。

衡准

视角变换本身不是 BEVFusion 的方法创新(该步骤来自 LSS),但作者对其效率瓶颈的诊断优化是本文的核心工程贡献之一。该优化纯属工程层面,不改变模型的数学行为(输出完全一致),但对实际部署至关重要,解决了模型工程部署延迟过高的核心障碍。

探微

Q1: 为什么视角变换会成为效率瓶颈?

A: LSSBEV 池化需要将大量三维特征点(约 $N_\text{cam} \times H \times W \times |D|$ 个)分配到 BEV 网格中并求和。

原始实现依赖计算出特征点的三维坐标后使用类似 torch.scatter_add 这种原子加法(Atomic Add)操作来将属于同一 BEV 网格的点聚集在一起。该原子操作(Atomic Operation)在硬件实现上本质是一种硬件锁, GPU 硬件为了保证“原子性”会对同一地址的访问进行串行化处理。

虽然有开源实现中使用累加和的方式做了一定的优化,但都存在 GPU 并行效率低下的问题。

Q2: BEVFusion 这种预计算的优化方式是否无法适应车辆行驶过程中动态变化的相机外参?

A: 对于固定安装的车载相机阵列,相机相对于车体的外参在行驶过程中保持不变(即相机-车体变换矩阵是固定的),在大多数论文( LSSBEVFormerBEVFusion )的用法中 BEV 平面的坐标系都是固定在车体坐标系上,从这个角度说预计算的优化是有效的。

但在工程实践中,相机对地平面的外参是随自车姿态变化而变化的。俯仰(Pitch)/横滚(roll)的变化通常会带来几方面的问题:

  • 当车辆颠簸导致车体平面与地平面不再平行时,目标在统一 BEV 表征中的位置会发生偏移,且距离越远越显著
  • BEVFormer 这种涉及时序融合的方案,其对齐问题更显著,如在将历史特征变换到当前时刻时忽略了俯仰/横滚的影响,也会导致时序特征的抖动

因此,实践中,往往需要通过 IMU 补偿或者其它的地平面估计方法来动态调整 BEV 平面。

Q3: 该优化是否也适用于 LSS 的训练阶段?

A: 部分适用。

预计算可以在训练中使用(同一 batch 内内外参不变),但训练阶段需要保留完整的计算图用于反向传播,因此自定义 GPU kernel 的加速效果不如推理阶段显著。

全卷积融合 / Fully-Convolutional Fusion

在获得相机 BEV 特征 $B_\text{cam}$ 和 LiDAR BEV 特征 $B_\text{lidar}$ 后,BEVFusion 使用一个轻量级的卷积 BEV 编码器进行融合,具体为:

  1. 逐元素拼接:将 $B_\text{cam}$ 和 $B_\text{lidar}$ 沿通道维度拼接,得到 $B_\text{concat} \in \mathbb{R}^{2C \times H \times W}$
  2. 卷积融合:通过若干层卷积将拼接特征整合为统一的融合特征 $B_\text{fused} \in \mathbb{R}^{C \times H \times W}$

其中第二步使用基于卷积的融合模块是为了弥补因为深度估计不准确导致的图像 BEV 特征与 LiDAR BEV 特征的空间错位。

衡准

该融合方式的设计故意保持简单,即仅用拼接 + 卷积,而非复杂的注意力门控等机制。其意在表明,当两个模态各自的 BEV 编码足够好时,简单的融合策略就能取得优异的效果。可以从侧面验证 BEV 空间作为统一表示的有效性。

不过作者也表示,这种方式受深度估计影响,如果将来这部分精度有所提高,本方法也能受益。

探微

Q1: 如果某个传感器缺失(如 LiDAR 故障),该融合框架是否仍能工作?

A: 框架本身不直接处理传感器缺失的情况。但由于两个分支是独立编码的,理论上可以通过将缺失模态的 BEV 特征置零来实现优雅降级(graceful degradation),性能会退化到单模态水平。后续工作(如 BEVFusion++ )对传感器鲁棒性做了进一步探索。

多任务头 / Multi-Task Heads

BEVFusion 的一个关键设计目标是任务无关性,即统一的 BEV 特征 $B_\text{fused}$ 可以同时支持多种下游任务:

  • 3D 目标检测:在 $B_\text{fused}$ 上接 CenterPoint 等检测头,预测 3D bounding box
  • BEV 地图分割:在 $B_\text{fused}$ 上接分割头,逐 BEV 网格预测语义类别

两个任务共享同一个 BEV 编码器和融合模块,仅在最后一步使用不同的任务头。

衡准

任务无关性BEVFusion 区别于早期融合方法的重要特点。传统方法通常为特定任务(如检测)设计特定的融合策略,切换任务需要重新设计。而 BEVFusion 的统一 BEV 表示使得添加新任务只需要新增一个任务头,骨干和融合模块完全复用。

探微

Q1: 多个任务之间是否会互相影响?

A: 在论文实验中,同时训练检测和分割两个任务不会导致显著的性能冲突,反而有轻微的互相促进作用。这说明 BEV 特征同时编码了足够的几何和语义信息来支撑多种任务。但对于更多或更异质的任务(如运动预测),是否仍然如此需要进一步验证。

思路

BEV 融合过程

总结