第一章:BEV感知概述
从2D视觉到BEV视角的演进
说实话,我刚入行做自动驾驶感知那会儿,大家还在死磕2D目标检测。YOLO、Faster R-CNN这些模型,在图像上画框框,看起来挺酷的。但你想想看,车要的是啥?是知道前面那辆车离我多远、在哪个车道、会不会撞上我。2D图像里,这些信息全得靠猜。
我记得2018年做的一个项目,用单目相机做3D检测。模型在图像上检测得挺准,但一投影到3D空间,误差大得离谱。为什么?因为单张图像天然缺少深度信息。你看着图片里一辆车很大,可能是它离得近,也可能是它本身就是辆大卡车。这种歧义性,单靠2D视觉根本解不了。
后来大家开始想:能不能换个视角?别从相机角度看世界,而是从天上往下看。这就是BEV(Bird‘s Eye View,鸟瞰视角)的由来。说白了,就是把所有传感器数据都投影到一个统一的俯视图上。在这个视角下,物体的位置、大小、朝向都一目了然,没有透视变形,没有遮挡歧义。
这个演进过程其实挺自然的。从2D检测到3D检测,再到BEV感知,每一步都是在解决“空间理解”这个核心问题。我个人觉得,BEV最大的贡献不是算法多牛,而是它让感知系统有了一个“共同语言”——所有模块都在同一个坐标系下说话。
BEV在自动驾驶中的核心价值
BEV到底好在哪?我总结了几点,都是实际项目中踩过坑才体会到的:
- 统一坐标系:相机、激光雷达、毫米波雷达,各自有各自的坐标系。BEV把它们全对齐到自车坐标系下,融合起来特别方便。我曾经在一个项目里,光做传感器标定就花了两周,就是因为坐标系不统一,融合出来的结果乱七八糟。
- 时序融合自然:车辆运动是连续的,BEV视角下,你可以直接把上一帧的BEV特征和当前帧对齐,做时序融合。这在2D视角下很难,因为图像会随着车辆转向剧烈变化。
- 端到端可学习:从图像到BEV的转换,可以用神经网络学出来。不需要手工设计几何变换,模型自己会找到最优的映射方式。
- 便于下游任务:规划、控制模块直接看BEV特征就行,不用再理解图像。这大大简化了系统架构。
核心观点:BEV不是一种算法,而是一种数据表征方式。它让感知系统从“看图片”变成了“看地图”。这个转变,是自动驾驶从L2走向L4的关键一步。
主流BEV方案简介
目前主流的BEV方案,大致分两派:一派是LSS(Lift-Splat-Shoot),另一派是Transformer-based。我两种都做过,说说我的感受。
LSS方案
LSS是NVIDIA在2020年提出的,全称是Lift-Splat-Shoot。名字挺有意思,三个步骤:
- Lift:把2D图像特征“提升”到3D空间。每个像素点都预测一个深度分布,然后投影到3D。
- Splat:把3D空间离散化成体素网格,把投影过来的特征“拍”到网格里。
- Shoot:在BEV空间里做检测、分割等任务。
LSS的优点是很直观,每一步都有明确的几何意义。缺点呢?深度预测不准的时候,投影误差会累积。我在项目里试过,如果相机标定稍微有点偏差,LSS的结果就会飘。嗯,这里要注意,LSS对传感器标定精度要求很高。
个人经验:如果你用的是环视相机,LSS是个不错的起点。它不需要Transformer那么大的算力,部署起来相对容易。我建议先跑通LSS,再考虑升级到Transformer方案。
Transformer-based方案
Transformer-based方案,代表作是Tesla的Occupancy Network和BEVFormer。这类方案的核心思想是:用注意力机制,让模型自己学会从图像特征中“查询”BEV空间的信息。
具体来说,BEV空间里每个位置都有一个query向量。这个query会去关注图像上的相关区域,把有用的特征“拉”过来。整个过程是端到端学习的,不需要显式的深度预测。
Transformer方案的优势很明显:
- 对深度估计的依赖小,模型自己会找对应关系
- 能处理多模态输入(相机+雷达+地图)
- 时序融合做得很自然,直接用cross-attention对齐
但缺点也突出:计算量大,部署难。我记得第一次跑BEVFormer,一张A100显卡上推理一次要200多毫秒,根本达不到实时。后来做了各种量化、剪枝,才勉强压到50毫秒以内。
避坑指南:我曾经在Transformer方案上踩过一个坑——训练收敛特别慢。后来发现是query初始化的问题。建议用预训练好的2D检测模型做backbone初始化,能省一半的训练时间。
两种方案的对比
| 维度 | LSS | Transformer-based |
|---|---|---|
| 核心思想 | 显式深度估计+投影 | 隐式注意力查询 |
| 计算量 | 中等 | 较大 |
| 标定敏感度 | 高 | 低 |
| 时序融合 | 需要额外对齐 | 天然支持 |
| 部署难度 | 低 | 高 |
| 精度上限 | 中等 | 高 |
选哪个?我的建议是:如果你刚入门,从LSS开始。它让你理解BEV的基本原理。如果你要做量产,或者追求极致精度,那就上Transformer。但要做好心理准备,调参和部署会花不少时间。
好了,这一章就聊到这儿。下一章我们会手把手搭建一个LSS模型,从数据预处理到训练,一步步来。到时候我会分享一些我踩过的坑,保证让你少走弯路。