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中,BEV网格有明确的空间坐标,图像特征也有像素坐标,因此位置编码必须与3D几何一致,否则交叉注意力会“看错地方”。
| 编码类型 | 形式 | 适用场景 | 在BEVFormer中的角色 |
|---|---|---|---|
| 正弦位置编码 | 固定公式,无参数 | 序列长度固定 | 可作为图像特征的基础位置先验 |
| 可学习位置编码 | 可训练向量 | 网格结构稳定 | BEV网格位置嵌入 |
| 相对位置编码 | 编码相对偏移 | 长序列、密集预测 | 增强BEV网格间相对关系 |
| 3D几何位置编码 | 由相机内外参生成 | 多摄像头3D检测 | 把BEV坐标与图像像素对齐 |
四、Transformer架构:编码器—解码器与视觉适配
标准Transformer由编码器和解码器堆叠而成。编码器每层包含多头自注意力和前馈网络,配合残差连接与层归一化;解码器额外插入交叉注意力,让输出查询关注编码器输出。视觉任务中,DETR把Transformer用于目标检测,ViT把图像切成patch序列做分类,BEVFormer则把解码器改造成BEV查询与图像特征的交叉注意力结构。
五、案例/场景: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查询在图像上的采样点,确认位置编码和投影矩阵正确,再检查注意力权重是否集中在有效区域。
掌握这四个构件后,再看BEVFormer的代码结构就会清晰很多:它本质上是一个以BEV查询为中枢、以交叉注意力为入口、以自注意力为推理、以位置编码为几何约束的Transformer变体。