4. Transformer基础

在BEVFormer这类多摄像头3D检测工程中,Transformer并不是一个“可替换的模块”,而是把多视角图像特征提升为统一BEV空间的核心计算引擎。理解它的四个关键构件——自注意力、交叉注意力、位置编码、整体架构——是读懂BEVFormer数据流的前提。

一、核心原理:注意力就是加权聚合

Transformer的基本单元是缩放点积注意力。给定查询Q、键K、值V,注意力通过Q与K的相似度决定每个V的权重:

Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V

Q: [N_q, d_k]   查询,表示“我想找什么”
K: [N_k, d_k]   键,表示“我有什么可被匹配”
V: [N_k, d_v]   值,表示“匹配后取走什么”
√d_k: 缩放因子,防止点积过大导致softmax饱和

多头注意力把d维特征拆成h个子空间并行计算,再拼接投影。它让模型在不同子空间中分别关注不同位置、不同尺度、不同语义的关系,是BEVFormer能同时处理近处车辆和远处车道线的关键。

二、自注意力与交叉注意力:同源与异源

自注意力中Q、K、V来自同一组特征,用于建模图像内部或BEV内部的长程依赖。例如BEV特征自注意力可以让一个BEV网格参考远处另一个网格,从而补全被遮挡区域。交叉注意力中Q来自一个空间,K、V来自另一个空间,用于跨域信息交换。BEVFormer的时序融合和空间融合都依赖交叉注意力:BEV查询作为Q,多摄像头图像特征作为K、V,从而把2D图像证据“拉”到3D BEV网格上。

在BEVFormer中,交叉注意力的Q是BEV query,K/V是图像特征;自注意力的Q、K、V都来自BEV特征。两者分工明确:交叉注意力负责“从图像取证据”,自注意力负责“在BEV内部做推理”。

三、位置编码:让注意力知道“在哪里”

注意力本身是置换不变的,若不注入位置信息,模型无法区分“左边车”和“右边车”。位置编码分为绝对位置编码和相对位置编码。视觉任务中常用可学习位置编码、正弦位置编码和条件位置编码。BEVFormer中,BEV网格有明确的空间坐标,图像特征也有像素坐标,因此位置编码必须与3D几何一致,否则交叉注意力会“看错地方”。

编码类型形式适用场景在BEVFormer中的角色
正弦位置编码固定公式,无参数序列长度固定可作为图像特征的基础位置先验
可学习位置编码可训练向量网格结构稳定BEV网格位置嵌入
相对位置编码编码相对偏移长序列、密集预测增强BEV网格间相对关系
3D几何位置编码由相机内外参生成多摄像头3D检测把BEV坐标与图像像素对齐

四、Transformer架构:编码器—解码器与视觉适配

标准Transformer由编码器和解码器堆叠而成。编码器每层包含多头自注意力和前馈网络,配合残差连接与层归一化;解码器额外插入交叉注意力,让输出查询关注编码器输出。视觉任务中,DETR把Transformer用于目标检测,ViT把图像切成patch序列做分类,BEVFormer则把解码器改造成BEV查询与图像特征的交叉注意力结构。

BEVFormer中的Transformer数据流:自注意力、交叉注意力与位置编码 多摄像头图像特征 6路环视 · 2D backbone输出 F_img: [B, N, C, H, W] 含像素坐标与相机内外参 交叉注意力 Q = BEV query K, V = 图像特征 + 位置编码 把2D证据投影到3D BEV网格 BEV特征 F_bev: [B, C, H_bev, W_bev] 统一空间表示 供检测头解码3D框 自注意力 Q = K = V = BEV特征 建模BEV网格间长程依赖 补全遮挡、平滑边界 位置编码 BEV网格坐标嵌入 图像像素坐标嵌入 相机内外参几何对齐 前馈网络 + 残差 + LayerNorm FFN: Linear → GELU → Linear 每层输出稳定、可堆叠 3D检测头 分类 + 回归 输出3D框、速度、朝向 图例 图像特征流 交叉注意力 自注意力

五、案例/场景:BEVFormer中的一次前向传播

假设输入6路环视图像,每路经过ResNet-50和FPN得到多尺度特征。BEV查询初始化为可学习网格,每个网格对应真实世界中的一块区域。交叉注意力中,每个BEV查询通过相机内外参投影到各图像平面,采样对应位置的图像特征作为K、V,再聚合回BEV网格。随后自注意力在BEV网格间传播信息,最后检测头输出3D框。整个过程可概括为:

输入: 6 × [B, 3, H, W]
  ↓ 2D backbone + FPN
图像特征: [B, 6, C, H', W']
  ↓ 交叉注意力 (Q=BEV query, K/V=图像特征+位置编码)
BEV特征: [B, C, H_bev, W_bev]
  ↓ 自注意力 + FFN + 残差
增强BEV特征
  ↓ 3D检测头
输出: 类别、中心点、尺寸、朝向、速度

六、误区与复盘

  • 误区一:把注意力当卷积用。注意力没有局部归纳偏置,必须靠位置编码和足够数据才能学到空间关系。BEVFormer中若位置编码与相机几何不一致,交叉注意力会“看错位置”。
  • 误区二:忽略缩放因子。d_k较大时点积方差大,softmax会饱和,梯度消失。工程中必须除以√d_k。
  • 误区三:自注意力和交叉注意力混用。交叉注意力负责跨域取证据,自注意力负责域内推理,二者顺序和数量都会影响BEV特征质量。
  • 复盘建议:调试时先可视化BEV查询在图像上的采样点,确认位置编码和投影矩阵正确,再检查注意力权重是否集中在有效区域。
记忆口诀:交叉注意力“向外看图像”,自注意力“向内看BEV”,位置编码“告诉它在哪里”,残差与LayerNorm“保证堆得深”。

掌握这四个构件后,再看BEVFormer的代码结构就会清晰很多:它本质上是一个以BEV查询为中枢、以交叉注意力为入口、以自注意力为推理、以位置编码为几何约束的Transformer变体。