BEVFormer Learning Bird's-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers
记录论文《BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers》阅读过程中的一些思考。
简介
BEVFormer 用可变形注意力(Deformable Attention)替代 LSS 的显式深度估计,通过空间交叉注意力和时序自注意力直接从多视角图像查询 BEV 特征,实现了隐式的 2D 到 BEV 转换。

概念
BEV 查询 / BEV Queries
BEVFormer 预定义了一组网格状的可学习参数 $Q \in \mathbb{R}^{H \times W \times C}$ 作为 BEV 查询(BEV Queries),其中 $H \times W$ 对应 BEV 平面的空间形状, $C$ 为特征维度。在 $Q$ 中空间位置 $p = (x, y)$ 处的 BEV 查询 $Q_p \in \mathbb{R}^{1 \times C}$ 对应 BEV 平面上的一个网格单元,每个网格单元对应真实世界中 $s \times s$ 米的区域( $s$ 为 BEV 分辨率参数),并负责从多视角图像中"提取"该位置的特征。
BEV 查询在 BEVFormer 的 Encoder 的多层处理中被逐层精炼:每一层先通过时序自注意力融合历史信息,再通过空间交叉注意力从当前帧的多视角图像中聚合空间特征。经过 $L$ 层编码后,得到当前时刻的 BEV 特征 $B_t$ 。
衡准
同是为了在像素空间与 BEV 空间之间建立联系,与 LSS 需要显式地预测逐像素深度分布后将特征"推"到 BEV 空间不同, BEVFormer 采用了一种主动"查询"的范式,即 BEV 查询从 BEV 空间主动去图像空间(特征)中"拉"取所需信息。这种查询驱动(query-based)的设计避免了显式深度估计带来的误差累积。
探微
Q1: BEV 查询与 DETR 的对象查询(Object Queries)有什么关系和区别?
A:
DETR的对象查询是 $N$ 个可学习向量,每个对应一个潜在目标,数量固定且与空间位置无显式绑定BEV 查询则与BEV网格的空间位置一一对应,具备明确的空间含义。可以认为BEV 查询是对象查询在密集空间特征提取场景下的推广
Q2: BEV 查询的初始值如何设置?
A:
BEV 查询被初始化为可学习参数,在第一帧(即没有历史 BEV 特征时)也能正常工作——此时时序自注意力退化为仅对当前查询自身的自注意力。随着训练进行,BEV 查询会学到一种空间先验,使得每个位置的查询"知道"该去图像的哪些区域提取特征。
Q3: BEV 查询为什么可以缓解 LSS 因为显式深度估计带来的误差累积?
A:
LSS 是以“自下向上”的方式从像素空间( 2D )经深度反投影后映射到 BEV 空间( 2D )。 LSS 在像素空间预定义一系列锚点深度,并对像素所处真实深度进行预测,然后基于该估计的深度将像素特征三维反投影(3D Back-projection)到三维空间,再通过池化“坍缩”到 BEV 空间。这一过程中有两类误差,即相机内外参误差和像素深度估计误差。
这两类误差都难以避免,无论是内外参误差还是深度估计误差都会导致像素(特征)变换到 BEV 空间时产生位移,落在不同的 pillar ,该误差会进一步传递到后续的感知任务中,且在后续层级难以修正。
BEV 查询则不然,它从 BEV 空间( 2D )出发,将预定义的三维参考点透视变换(Perspective Transformation)到像素空间( 2D )。它不依赖于显式的深度估计,而是通过注意力机制学习哪些像素与该三维参考坐标最相关,这一过程仅受相机内外参误差影响。而该误差一方面可以通过出厂标定和实时位姿计算减小,另一方面投影过程在该误差影响下产生的影响较小(像素空间上的偏移较小),且该偏差一定程度上可以被注意力机制通过动态调整采样权重吸收,避免误差累积。
这两种方法, LSS 在像素空间“构造”(提升)深度,变换到三维后再“坍缩”(池化)到二维 BEV 空间,而 BEVFormer 在二维 BEV 空间“构造”(提升)高度,从三维再“坍缩”(投影)到像素空间,就像一个逆过程。我认为本质上的区别在于,对于前视相机而言,因为像素平面与 BEV 平面有一定的夹角(接近于正交), LSS 方法中投影射线上深度的误差在 BEV 空间上的误差更容易让相应特征用于不相关的 pillar ,而 BEVFormer 中透视的误差虽然也会导致采样到错误的像素,但投影坐标的偏移以像素为单位,量级通常较小,且该偏差可以被注意力机制通过动态调整采样权重在一定程度上吸收。
空间交叉注意力 / Spatial Cross-Attention
空间交叉注意力(Spatial Cross-Attention, SCA)是 BEVFormer 从多视角图像中聚合空间特征到 BEV 查询的核心机制,是 BEVFormer 的基础算子。
空间交叉注意力是将为 2D 感知设计的可变形注意力(Deformable Attention)在 3D 场景下进行推广。可变形注意力是在 Deformable DETR 中提出(参见),与标准注意力对所有空间位置计算权重不同,其仅在参考点(reference point)附近采样少量关键点(key points),从而将注意力的复杂度从 $O(H^2W^2)$ 降低到 $O(HWK)$ ,其中 $K$ 为每个查询的采样点数。
对于 BEV 查询 $Q_p$ ,其过程为:
- 构造
三维参考点:将BEV 平面$p = (x, y)$ 处的BEV 查询$Q_p$ “提升”到三维空间中的pillar,再沿其高度方向均匀采样 $N_\text{ref}$ 个三维参考点$(x', y', z'_j)$ ,其中 $j = 1, \ldots, N_\text{ref}$- 计算 $Q_p$ 的真实二维坐标:
BEV 平面可学习参数 $Q$ 中 $p=(x,y)$ 处的BEV 查询$Q_p$ 在以自车为原点的真实坐标 $(x',y')$ 计算: $$\left\{\begin{aligned} x' &= \left(x-\frac{W}{2}\right)\times s \\ y' &= \left(y-\frac{H}{2}\right)\times s \end{aligned}\right.$$ 其中 $H,W$ 为BEV 平面的形状, $s$ 是BEV 平面网格的分辨率尺寸 - 预定义锚点:在
3D空间中预定义一系列高度锚点 $\left\{z'_j\right\}^{N_\text{ref}}_{j=1}$ 以捕获真实世界中不同高度的线索 - 生成
三维参考点:结合 $(x',y')$ 和 $\left\{z'_j\right\}^{N_\text{ref}}_{j=1}$ 可以得到pillar的一系列三维参考点$(x',y',z'_j)^{N_\text{ref}}_{j=1}$
- 计算 $Q_p$ 的真实二维坐标:
- 投影到图像平面:利用各相机的内外参矩阵将这些
三维参考点投影到各视角的2D图像坐标 - 筛选命中视角:仅保留投影落在图像范围内的视角 $\mathcal{V}_\text{hit}$
- 可变形注意力采样:在命中视角的特征图上,以这些投影点为 $Q_p$ 的
参考点,并围绕这些参考点在特征图上进行采样 - 可变形注意力:对采样的特征进行加权求和作为
空间交叉注意力的输出,即执行可变形注意力过程
其数学形式为: $$\text{SCA}(Q_p, F_t) = \frac{1}{|\mathcal{V}_\text{hit}|} \sum_{i \in \mathcal{V}_\text{hit}} \sum_{j=1}^{N_\text{ref}} \text{DeformAttn}\!\left(Q_p,\; \mathcal{P}(p, i, j),\; F_t^i\right)$$ 其中:
- $\mathcal{V}_\text{hit}$ 为
BEV 平面中 $Q_p$ 的参考点命中的相机视角集合 - $\mathcal{P}(p, i, j)$ 为第 $j$ 个
三维参考点在第 $i$ 个相机视角上的二维投影坐标 - $F_t^i$ 为第 $i$ 个相机在当前时刻 $t$ 的图像特征图
衡准
与 LSS 的 Lift → Splat 流程相比,SCA 通过在高度方向采样参考点并投影实现了隐式的深度处理,即模型通过学习注意力权重 $A_{mqk}$ 自主决定关注哪些深度层级的信息,而无需显式预测深度分布。
探微
Q1: 为什么需要沿高度方向采样多个参考点而不是只用一个?
A: 一个 BEV 位置 $(x, y)$ 在三维空间中对应不同高度的物体(如路面标志、车辆、建筑等),用单一的参考点无法覆盖这些高度变化。多个参考点 $(x', y', z'_j)$ 使得模型能够同时关注不同高度的图像特征。论文中 $N_\text{ref} = 4$ ,即采样 $4$ 个不同高度。
Q2: 为什么用命中视角数量取平均,即 $\frac{1}{|\mathcal{V}_\text{hit}|}$ ?
A: 不同 BEV 位置被不同数量的相机覆盖(例如正前方可能被多个相机看到,而侧面可能只有一个相机),取平均可以消除覆盖数量差异导致的特征幅值不均。
Q3: SCA 如何处理跨相机重叠区域的信息?
A: 在重叠区域,同一 BEV 位置的参考点会被多个相机命中,SCA 对这些视角的特征取平均进行融合。这种设计简单但不一定最优,后续工作(如 BEVFormer v2 )探索了更精细的跨视角融合策略。
时序自注意力 / Temporal Self-Attention
时序自注意力(Temporal Self-Attention, TSA)通过融合前一时刻的 BEV 特征 $B_{t-1}$ ,使模型能够利用时序信息来增强当前帧的感知,尤其有助于速度估计和遮挡目标检测。
对于 $t$ 时刻的 BEV 特征 $Q$ 和保留在时刻 $t-1$ 的历史 BEV 特征 $B_{t-1}$ ,其过程为:
- 自车运动对齐:首先根据 $t-1$ 到 $t$ 时刻的
自车运动(ego-motion),将历史BEV特征 $B_{t-1}$ 空间对齐到当前时刻的坐标系,得到 $B'_{t-1}$ - 可变形自注意力:每个
BEV 查询$Q_p$ 同时从当前查询 $Q$ 和对齐后的历史特征 $B'_{t-1}$ 中采样信息并融合,其中采样点的偏移 $\Delta p$ 通过级联的 $Q$ 和 $B'_{t-1}$ 进行预测
其数学形式为: $$\text{TSA}(Q_p,\; \{Q,\; B'_{t-1}\}) = \sum_{V \in \{Q,\; B'_{t-1}\}} \text{DeformAttn}\!\left(Q_p,\; p,\; V\right)$$ 其中:
- 参考点 $p=(x,y)$ 即为
BEV 查询$Q_p$ 在BEV网格中的位置 - 对于每个序列的第一个样本,
时序自注意力将退化为没有时间信息的自注意力,即 $\{Q,\; Q\}$ 取代了 $\{Q,\; B'_{t-1}\}$
衡准
时序自注意力,即时序融合在自动驾驶中主要起两个关键作用:
- 速度估计:通过对比连续帧中同一目标在
BEV空间的位移可以估计速度,论文实验表明TSA显著提升了速度估计精度 - 遮挡补偿:当前帧中被遮挡的目标可能在前一帧中可见,时序融合可以弥补单帧信息的缺失
探微
Q1: 为什么只融合前一帧而不是多帧历史?
A: BEVFormer 采用递归(recurrent)式设计,即 $B_{t-1}$ 本身已经融合了 $B_{t-2}$ 的信息,以此类推,因此 $B_{t-1}$ 隐式地包含了更早时刻的时序信息。这种设计相比显式存储多帧特征更节省内存,且理论上可以捕获任意长的历史信息(尽管实际中远期信息会逐渐衰减)。
Q2: 自车运动对齐是如何实现的?
A: 已知 $t-1$ 到 $t$ 的自车位姿变换矩阵 $T_{t-1 \to t}$ ,对 $B_{t-1}$ 中每个 BEV 网格点的世界坐标施加该变换,再通过双线性插值将特征重新采样到当前时刻的 BEV 网格上。该对齐操作使用的是传感器提供的位姿信息(如 IMU / GPS / 里程计),是外部输入而非网络学习的参数。
思路
