1. BEV感知概述:从鸟瞰视角重新理解自动驾驶

大家好,我是你们的讲师。今天咱们聊聊BEV感知。说实话,这个技术这几年火得不行,几乎成了高阶自动驾驶的标配。我个人习惯把BEV叫做「上帝视角」——你想想看,车顶上的传感器把周围环境拍下来,然后我们把它投影到一个俯视图上,这不就是鸟瞰图吗?

我在2021年刚开始接触BEV时,还觉得这东西挺玄乎。后来在量产项目里踩了不少坑,才慢慢摸清楚它的门道。今天这一讲,咱们就把BEV感知的定义、核心作用,以及主流方案掰开揉碎了讲清楚。

1.1 什么是BEV感知?

BEV,全称Bird's Eye View,就是鸟瞰视角。BEV感知,说白了就是把摄像头、激光雷达、毫米波雷达这些传感器的数据,统一转换到一个俯视的二维平面上去理解。

举个例子。传统的前视摄像头看到的是这样的画面:一辆车在前面,但它在图像里是斜着的、有透视变形的。而BEV感知要做的事,就是把这个透视画面「拉直」,变成从上往下看的俯视图。这样一来,车辆、行人、车道线的位置关系就一目了然了。

核心要点:BEV感知的本质是「视角转换」+「特征融合」。它把多传感器的数据统一到同一个坐标系下,让自动驾驶系统能用一张图理解全局。

嗯,这里要注意:BEV不是简单的图像拼接。它需要做深度估计、几何变换、时序融合等一系列操作。我刚开始做的时候,以为直接做个逆透视变换(IPM)就完事了,结果发现动态障碍物根本搞不定——这个坑后面会细说。

1.2 BEV在自动驾驶中的核心作用

为什么BEV这么重要?我总结了三个核心作用:

  1. 统一表达,消除视角差异:不同摄像头看到的同一辆车,在图像里位置完全不同。但在BEV空间里,它只有一个坐标。这给后续的规划控制省了大麻烦。
  2. 时序融合,提升稳定性:单帧检测容易抖动,但BEV可以把历史帧的信息叠加上去。我在项目中遇到过,雨天摄像头被遮挡时,靠时序BEV还能维持几秒的稳定输出——这救过我好几次。
  3. 端到端训练,减少信息损失:传统方法先做2D检测,再投影到3D,中间有信息丢失。BEV可以直接从图像学到3D空间的特征,精度高不少。

我的经验:BEV最大的价值其实在于「可解释性」。规划控制团队拿到BEV特征图,可以直接看到障碍物的位置、速度、朝向,沟通效率高很多。以前用2D检测结果,他们总问我「这个框到底在车的左边还是右边」——现在不用问了。

1.3 主流BEV方案对比:LSS、Transformer、IPM

目前主流的BEV方案有三条技术路线。我按自己的理解,给大家做个对比。

方案 核心思想 优点 缺点 代表工作
IPM 逆透视变换,假设地面平坦 计算量极小,实时性最好 只适用于静态场景,动态障碍物失效 传统方法
LSS Lift-Splat-Shoot,深度估计+体素池化 几何可解释性强,部署友好 深度估计精度依赖大 BEVDet、BEVDepth
Transformer 可变形注意力,端到端学习 精度最高,动态场景鲁棒 计算量大,部署难度高 BEVFormer、PETR

1.3.1 IPM:最朴素但最受限的方案

IPM是最早的方案。它假设地面是平的,然后通过相机内外参,直接把图像像素映射到BEV空间。说白了就是个几何变换。

优点:计算量极小,在嵌入式平台上跑起来毫无压力。我曾在TDA4VM上做过IPM,单帧处理时间不到1毫秒。

缺点:它假设地面平坦。一旦遇到上坡、下坡、颠簸路面,映射就全错了。而且它处理不了动态障碍物——行人站在那,IPM会把他「压扁」在地上。

避坑指南:我曾经在一个园区项目里只用IPM做BEV,结果遇到减速带,车道线全歪了。后来加了IMU做地面坡度补偿,才勉强能用。如果你要做量产,IPM只能做辅助,不能做主方案。

1.3.2 LSS:工程界的宠儿

LSS是NVIDIA在2020年提出的方案。它的流程分三步:

  • Lift:对每个像素预测深度分布,把2D特征提升到3D空间
  • Splat:把3D特征点投影到BEV网格,做池化
  • Shoot:在BEV空间做检测或分割

LSS最大的好处是几何可解释。每个BEV网格的特征,都能追溯到对应的图像区域。这在调试时特别有用——我经常用可视化工具看深度分布,一眼就能发现哪里估计错了。

部署方面,LSS对嵌入式平台相对友好。它的核心操作是矩阵乘法和体素池化,这些在NPU上都有优化。我在Jetson Orin上部署过BEVDet,用TensorRT优化后,能做到30ms一帧。

# LSS的核心:深度分布预测(伪代码)
def lift_features(image_features):
    # 对每个像素预测D个深度bin的概率
    depth_distribution = depth_net(image_features)  # shape: [B, D, H, W]
    # 把2D特征提升到3D
    lifted_features = image_features.unsqueeze(2) * depth_distribution.unsqueeze(1)
    return lifted_features  # shape: [B, C, D, H, W]

1.3.3 Transformer:精度天花板

Transformer方案,以BEVFormer为代表,用可变形注意力机制直接从图像特征中查询BEV特征。它不需要显式的深度估计,而是让模型自己学出映射关系。

优点:精度最高。在nuScenes数据集上,BEVFormer的NDS指标比LSS方案高3-5个点。而且它对动态场景的鲁棒性更好——因为注意力机制能自适应地关注不同位置。

缺点:计算量大。BEVFormer在单张A100上都要跑50ms,部署到嵌入式平台更是挑战。我试过在Jetson Orin上量化部署,精度掉了2个点,帧率才跑到15FPS。

我的建议:如果你做的是L4级Robotaxi,对精度要求极高,可以上Transformer。但如果是量产ADAS,LSS方案更务实。我目前做的项目就是LSS+轻量级Transformer混合方案——在关键区域用注意力,其他地方用LSS,效果还不错。

1.4 如何选择?我的决策框架

说了这么多,到底选哪个方案?我给大家一个简单的决策框架:

  • 算力 < 10 TOPS:别想了,用IPM做车道线检测,再加个2D检测做辅助
  • 算力 10-50 TOPS:LSS方案是首选。BEVDet或BEVDepth都行,注意深度估计网络要轻量化
  • 算力 > 100 TOPS:可以考虑Transformer。但要做好量化、剪枝、蒸馏的准备

嗯,这里要提醒一句:不要只看算力。内存带宽、NPU架构、算子支持度,这些都会影响实际性能。我见过一个项目,算力够但DDR带宽不够,LSS的体素池化成了瓶颈——最后不得不把BEV网格从200x200降到100x100。

好了,这一讲就到这里。下一讲咱们会深入LSS方案的算子级优化,从深度估计网络到体素池化,一步步教你怎么在嵌入式平台上跑起来。有什么问题,欢迎课后交流。