📄 论文信息
- 标题:BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers(基于时空 Transformer 从多摄像头图像学习鸟瞰图表示)
- 团队:香港大学 + 商汤科技 + 南京大学(Zhiqi Li, Wenhai Wang, Hongyang Li, Enze Xie, Chonghao Sima, Tong Lu, Jifeng Dai 等)
- arXiv:2203.17270(ECCV 2022)
- 一句话总结:用一组可学习的 BEV queries,通过空间交叉注意力从多摄像头"掏"特征、再用时间自注意力融合历史帧,纯视觉达到 56.9% NDS,把纯摄像头感知拉到了接近 LiDAR 的水平。
🤔 要解决什么问题?为什么是 BEV?
自动驾驶的下游模块(预测、规划、控制)几乎都默认在一个统一的俯视图(Bird’s-Eye-View, BEV) 空间里工作——障碍物是 BEV 框、地图是 BEV 矢量、轨迹是 BEV 坐标。但传感器原始输入是多个透视相机的 2D 图像,如何把它们"搬"到一个统一的 BEV 空间,是纯视觉感知的核心难题。
BEVFormer 之前,主流方案有两条,但都不够好:
| 方案 | 做法 | 问题 |
|---|---|---|
| LSS(Lift-Splat-Shoot)类 | 预测每像素深度再"拍"到 BEV | 显式深度预测难、信息损失大 |
| 2D 检测后投影 | 各相机做 2D 检测再投到 BEV | 丢失几何关系、多相机难融合 |
BEVFormer 的判断:与其显式预测深度,不如用 Transformer 的注意力机制,让 BEV query 主动去多摄像头里"查询"自己需要的特征——这把"图像转 BEV"变成一个可端到端学习的纯数据驱动过程。

💡 核心思想:BEV queries + 时空注意力
BEVFormer 的整体框架可以用一句话概括:一组网格状的 BEV queries,既"横跨空间"去各摄像头取特征,又"纵跨时间"去历史帧取信息,最终汇聚成一个丰富的 BEV 表示。
BEV queries:可学习的俯视"网格"
把自车周围的一块 BEV 区域离散成一个 $H_B \times W_B$ 的网格,每个网格点对应一个可学习的 query $Q_p$。每个 query 在几何上对应 BEV 平面上的一个参考点,代表"我要查询这个位置有没有东西"。
关键设计:BEV query 背后是柱状(pillar)参考点——不是 BEV 平面上的一个点,而是一根立柱(沿高度方向采样多个 3D 点)。这是因为同一个 BEV 位置在不同高度可能是不同物体(如头顶标牌 vs 地面锥桶),用 pillar 才能捕捉高度信息。
空间交叉注意力(Spatial Cross-Attention, SCA)
每个 BEV query 把自己的 pillar 参考点投影到各摄像头图像,只在投影点附近的小邻域做 deformable attention 取特征:
$$\text{SCA}(Q_p) = \frac{1}{|\mathcal{V}_p|}\sum_{i \in \mathcal{V}_p}\sum_{j=1}^{N_{\text{ref}}} \text{DeformAttn}(Q_p,\ \mathbf{P}_{ij},\ F_i)$$其中 $\mathcal{V}p$ 是能"看到"该 pillar 的相机集合,$\mathbf{P}{ij}$ 是参考点在第 $i$ 个相机上的 2D 投影,$F_i$ 是该相机的特征图。用 deformable attention(可变形注意力)是为了避免全局注意力的平方开销,只在参考点附近采样,又快又准。
直觉:每个 BEV query 像一个"侦察兵",拿着自己的 3D 坐标去问各个相机"你那边在我这个位置看到啥了",相机只回报相关区域的特征,高效又精准。
参考点与可学习偏移:deformable 的精髓
deformable attention 并非在参考点处硬采样一个像素,而是采样参考点周围 4 个可学习偏移点的加权特征,权重也由网络预测。这让每个 BEV 位置的感受野自适应——远处稀疏处可以"够"得更远,近处密集处可以聚焦更精细。再加上多尺度图像特征(FPN 的 C3/C4/C5 层),近处细节与远处语义都能兼顾。
更关键的是,整套 3D→2D 投影完全可微:参考点经相机内外参投影到像素坐标,梯度能一路回传到图像 backbone,让视觉特征学习"主动对齐"几何约束。这正是 BEVFormer 比 LSS 显式深度预测更优雅的地方——它不预测深度,而是让网络自己学出"该往哪看"。
时间自注意力(Temporal Self-Attention, TSA)
这是 BEVFormer 区别于一般 BEV 方法的杀手锏。历史帧的 BEV 特征蕴含了运动线索(他车位移、自车补偿后的对齐信息),对速度估计和遮挡恢复至关重要。
TSA 把上一帧的 BEV 特征 $B_{t-1}$ 按自车运动做对齐(ego-motion compensation) 后,作为当前 query 的注意力 key/value:
$$\text{TSA}(Q_p) = \text{MultiheadAttn}(Q_p,\ \text{Align}(B_{t-1}))$$这一步让模型不用显式光流就能感知运动——速度信息隐式地从"前后帧差异"里学出来。
自车运动对齐:TSA 生效的前提
TSA 里有一个容易被忽略却至关重要的细节:融合历史 BEV 前,必须先做自车运动补偿(ego-motion compensation)。因为自车在不断移动,上一帧的 BEV 坐标系和当前帧并不重合——如果不把历史 BEV 按位姿变换对齐到当前坐标系,时间注意力就是在"错位对照",反而引入噪声。
具体做法是用相邻帧间的自车位姿变换,把 $B_{t-1}$ 的每个网格平移旋转到当前时刻的坐标原点下,再送入 TSA。这一步把"几何一致性"显式注入了时序融合,也是 BEVFormer 速度估计能大幅提升的底层原因——对齐后的前后帧差异,恰好编码了他车的真实运动。
| 模块 | 作用 | 类比 |
|---|---|---|
| BEV queries | 网格化俯视表示 | “棋盘格” |
| SCA | 跨空间取多摄像头特征 | “侦察兵去各相机采集” |
| TSA | 跨时间融合历史 BEV | “回看上一帧对照” |
🏗️ 与 DETR3D / LSS 的关键区别
| 维度 | DETR3D | LSS | BEVFormer |
|---|---|---|---|
| query 来源 | 3D 目标 query | 无 | BEV 网格 query |
| 深度建模 | 隐式 | 显式预测 | 隐式(注意力学习) |
| 时序融合 | ❌ | 弱 | ✅ TSA |
| 任务支持 | 3D 检测 | 多任务 | 3D 检测 + 地图分割 |
| 注意力类型 | deformable | 无 | deformable SCA + TSA |
BEVFormer 的独特性在于:它把 BEV 当成一个统一的"中间表示"来学,而非检测的副产品——这种"先建 BEV,再接各种任务头"的设计,让一个 backbone 能同时服务于 3D 检测、地图分割、甚至后续的规划,极大增强了通用性。
🧪 任务与输出
BEVFormer 学到的 BEV 表示 $B_t$ 可以直接接各种下游头:
- 3D 目标检测:用 Deformable DETR 风格的检测头,在 BEV 上预测 3D 框(位置、尺寸、朝向、速度、类别)
- 地图分割:在 BEV 上分割可行驶区域、车道线、人行横道等语义要素
这种一图多用的设计,是后续 UniAD、VAD 等端到端框架把感知和规划打通的基石——BEV 成了感知与下游之间的"通用语"。
检测头与地图头:统一表示上的多任务
具体到任务实现,BEVFormer 在共享的 BEV 特征 $B_t$ 上接了两个并行头:
- 3D 检测头:采用 Deformable DETR 风格的迭代式框精修,一组目标 query 从 BEV 特征里采样、不断调整 3D 框的中心、尺寸、朝向,并额外回归速度——速度信息正来自 TSA 融合的历史帧运动线索
- 地图分割头:在 BEV 网格上做逐像素的语义分割,输出可行驶区域、车道线、人行横道等掩码
这种共享主干 + 多任务头的设计,让一次前向就能同时产出"有谁、在哪、路咋走"的全部信息。更重要的是,多任务监督互相增益:检测任务强迫 BEV 关注动态目标,分割任务强迫 BEV 理解静态路网,两者协同让 BEV 表示比单任务训练时更丰富、更结构化。这一思想后来被 UniAD 发扬光大,把轨迹预测、占用预测、规划统统挂在同一个表示上,形成了完整的端到端闭环。
📊 实验结果:纯视觉逼近 LiDAR
BEVFormer 在 nuScenes 上交出了惊艳答卷:

| 指标 | 关键数字 |
|---|---|
| NDS(test) | 56.9%,比当时 SOTA 高 9.0 个点 |
| 与 LiDAR 对比 | on par(持平)——纯视觉首次逼近激光雷达 |
| 速度估计 | 显著改善(得益于 TSA 的时序线索) |
| 低能见度召回 | 明显提升(历史帧弥补当前帧遮挡) |
几个关键消融结论:
- 去掉 TSA:速度估计大幅退化——证明时间注意力是速度感知的关键来源
- 去掉 pillar(只用单点):高度信息丢失,检测掉点
- BEV 分辨率:越高越准,但算力越大,需权衡
⚙️ 工程要点与细节
| 要点 | 说明 |
|---|---|
| deformable attention | 避免 $O(N^2)$ 全局注意力,支撑高分辨率 BEV |
| ego-motion 对齐 | TSA 前必须按自车位姿变换历史 BEV,否则时空错位 |
| 多尺度图像特征 | 用 FPN/ResNet 多层特征,兼顾近处细节与远处语义 |
| 可微投影 | 3D→2D 投影要可微,梯度才能回传到图像 backbone |
⚠️ 局限性与后续演进
BEVFormer 并非终点,它也开启了 BEV 感知的全面繁荣:
- 小目标 / 远距离:纯视觉在远距离小目标上仍弱于 LiDAR,这是传感器物理特性的固有限制
- 计算开销:时空注意力算力不低,车端实时部署需量化/蒸馏/剪枝等加速手段
- 无显式深度:遇到罕见几何配置可能误判(后续 BEVDepth 等工作补强了深度监督,通过显式的深度监督信号让 BEV 特征的高度估计更准,弥补了 BEVFormer 纯隐式学习的不足)
后续工作沿着 BEVFormer 开创的方向持续推进:
| 方向 | 代表工作 |
|---|---|
| 加强深度 | BEVDepth、SOLOFusion |
| 多模态融合 | BEVFusion(摄像头 + LiDAR) |
| 长期时序 | VideoBEV、Sparse4D-v3 |
| 稀疏 query | Sparse4D、StreamPETR(告别密集 BEV 网格) |
即便后来稀疏 query 路线(Sparse4D、StreamPETR)兴起,BEVFormer 的密集 BEV 中间表示思想依然是理解所有时序多摄像头感知的基石,也是 UniAD 等端到端框架直接采用的感知骨干。可以说,没有 BEVFormer 把"多摄像头统一到 BEV"这件事做扎实,后来端到端框架里"感知-预测-规划一体化"的宏大叙事就失去了立身之本。
📝 个人思考
读 BEVFormer,最让我印象深刻的是它对 “用什么中间表示” 这个问题的回答。感知领域长期在"2D 检测后投影"和"显式深度估计"两条路上打转,BEVFormer 跳出来给了第三种答案:用一个可学习的 BEV 网格当 query,让注意力自己去图像里"捞"特征。这个设计漂亮在两处——一是把"图像转 BEV"这个几何问题彻底数据驱动化,不再依赖脆弱的显式深度预测;二是它把 BEV 当成统一的中间表示而非检测的副产品,于是一套感知结果能同时喂给检测、分割、规划,这种"通用语“思维直接奠定了后续端到端框架的架构基础。
第二点启发在 时序的价值被重新发现。TSA 这个看似简单的模块,其实是 BEVFormer 能逼近 LiDAR 的关键功臣——速度估计、低能见度召回的大幅提升都源于它。这提醒我们:自动驾驶是时序问题,单帧感知的天花板很低。从 BEVFormer 的 TSA,到后来的长期时序融合、世界模型对未来的推演,“时间"始终是感知与预测最强却最容易被忽视的维度。我倾向于认为,真正鲁棒的感知一定是时空联合的,BEVFormer 早在 2022 年就用一个 temporal self-attention 把这个判断写进了代码。
最后,BEVFormer 对整个端到端社区的辐射价值。UniAD、VAD、SparseDrive 这些后来的端到端框架,几乎都站在 BEVFormer 的肩膀上——因为 BEV 是感知到规划的天然桥梁。当我们今天讨论 VLA、世界模型这些更宏大的叙事时,不要忘了:底层那个把多摄像头图像干净地搬进俯视空间的机制,依然是这套大厦的地基。BEVFormer 之于自动驾驶感知,正如 ResNet 之于图像识别——它定义了一个时代的默认架构,而后来者只是在它的版图上不断精修与扩展。
📖 这是论文精读系列的第 22 篇。BEV 感知是端到端驾驶的地基,你认为稀疏 query 会彻底取代密集 BEV 吗?欢迎留言讨论。