真实面经题目 · 原创解析

BEVDet 这类纯视觉 BEV 感知算法如何通过 View Transformer 把图像特征转换到 BEV 空间?

这道题考察纯视觉 BEV 感知中从多相机图像特征到鸟瞰图特征的几何建模能力。好答案要讲清 BEVDet 的三段式链路:Image-view Encoder 提取每个相机的 2D 特征,View Transformer 结合深度分布、相机内外参和数据增强矩阵,把像素特征 lift 到三维 frustum,再 splat 或 pooling 到 ego 坐标系下的 BEV 网格,最后 BEV Encoder 在鸟瞰空间做融合和检测。回答边界应覆盖深度离散、特征加权、标定误差、分辨率取舍、遮挡和验证指标,不能把 View Transformer 误讲成普通 NLP Transformer。

出现于:百度 · 算法

60 秒回答模板

BEVDet 这类纯视觉 BEV 方法的核心是把多相机 2D 图像特征变成统一 ego 坐标系下的 BEV feature。流程一般是先用 Image-view Encoder 对每个相机图像提特征,得到每个像素或特征点的语义向量;View Transformer 再为每个像素预测一个离散深度分布,沿多个 depth bin 把这个像素展开成相机坐标系里的 frustum 点。根据相机内参把像素加深度反投影成 3D 点,再用外参和数据增强逆变换映射到车体坐标系,然后根据 x、y 落在哪个 BEV voxel 或 grid cell,把该像素特征按深度概率加权累积过去。多个相机投到同一 BEV cell 的特征通过 sum、pooling 或专门的 BEV pooling 聚合,形成 C by H by W 的鸟瞰特征图。后面的 BEV Encoder 再在这个统一平面上做卷积或检测头,预测 3D box、类别和速度等。关键难点是深度估计不确定、标定和增强矩阵必须对齐、BEV 分辨率影响精度和显存,以及远距离和遮挡区域会有投影噪声。

考点 View Transformer 不是注意力模块
难度 真实面经题
回答目标 回答要让人听懂 BEVDet 如何用深度概率和相机几何把多相机 2D 特征统一投到 BEV 网格,并能说明误差来源和工程取舍。

深入解析

01

整体链路

BEVDet 的主干可以理解为图像视角编码、视角变换和 BEV 空间编码。图像编码器负责从每个相机图像抽取语义特征,View Transformer 负责把这些特征按几何关系投到车体坐标系的 BEV 网格,BEV Encoder 则在统一鸟瞰平面上做空间融合和检测。

02

图像特征输入

多相机输入经过 backbone 和 neck 后,得到每个相机的 2D feature map。这里的每个 feature cell 对应原始图像的一块区域,不只有语义类别信息,还保留了视角、尺度和局部纹理。View Transformer 要处理的正是这些带相机视角的特征,而不是直接处理原始像素。

03

深度分布预测

纯视觉没有真实激光深度,因此通常为每个图像特征位置预测离散 depth bin 的概率分布。一个像素特征会沿多个深度候选展开,特征贡献按深度概率加权。这样比预测单一深度更能表达不确定性,也让后续 BEV pooling 能利用软分配。

04

几何反投影

对某个图像坐标和深度 bin,可以用相机内参反投影到相机坐标系的 3D 点,再用相机外参变换到 ego 坐标系。训练和推理中若做了 resize、crop、flip 等图像增强,还必须把对应变换矩阵纳入坐标还原,否则投影会系统性偏移。

05

BEV 网格聚合

映射到 ego 坐标后,根据 3D 点的 x、y 范围和 BEV 分辨率确定它属于哪个鸟瞰 grid cell。落在同一 cell 的不同相机、不同像素、不同深度候选特征会被累积或池化,形成固定尺寸 BEV feature map。工程实现通常会优化这一步的排序和 pooling 以降低显存和延迟。

06

多相机融合

View Transformer 的一个价值是把前视、侧视、后视相机投到同一车辆坐标系,天然解决跨相机视角不一致。重叠视野中的特征会在同一 BEV cell 融合,非重叠区域则由对应相机贡献。融合质量依赖标定、时间同步和每个相机的有效视野。

07

误差来源

主要误差来自深度分布不准、相机内外参或同步误差、图像增强矩阵没有正确反算、远距离 BEV cell 过稀、遮挡区域语义被投错,以及多个物体沿同一视线竞争深度。回答时要说明 View Transformer 不是完美几何投影,而是几何先验加学习到的深度概率。

08

验证指标

验证除了看 3D 检测 mAP、NDS 或项目定义指标,还要做模块级 ablation,例如去掉深度监督、改变 depth bin、改变 BEV 分辨率、扰动标定和检查投影可视化。好的 View Transformer 应在鸟瞰平面上把车道、车辆和障碍物投到合理位置,而不是只在最终指标上碰巧变好。

易错点

  • 把 View Transformer 解释成普通自注意力模块,没有说明图像到 BEV 的几何投影。
  • 忽略深度分布,误以为 2D 像素特征可以直接按 x、y 坐标放进鸟瞰图。
  • 只讲网络结构,不讲相机内参、外参和图像增强矩阵对坐标还原的作用。
  • 认为多相机融合只是 feature concat,没有说明它们需要先变到统一 ego 坐标系。
  • 不讨论 BEV 分辨率、深度 bin 数量和感知范围带来的显存与延迟取舍。
  • 忽略标定误差、时间同步和遮挡带来的系统性投影错误。
  • 只用最终检测指标判断 View Transformer,不做投影可视化和模块级 ablation。
  • 把 BEVDet 扩展成依赖激光点云的方法,偏离纯视觉 BEV 感知的核心问题。

面试官追问

为什么 BEVDet 要预测 depth distribution,而不是直接把 2D 特征投到地面?

因为同一个图像像素对应一条射线,物体可能在不同深度位置。直接投到地面会假设所有特征都落在固定平面,无法表达车辆、行人和立体目标的高度和距离差异。深度分布让模型以概率形式决定特征沿射线贡献到哪些 BEV 位置。

相机标定误差会怎样影响 View Transformer?

内参或外参有误会导致反投影后的 3D 点落到错误 ego 坐标,表现为 BEV 特征整体偏移、跨相机重叠区域对不齐、远距离误差放大。严重时检测头会学习到错误补偿,换车或换标定后泛化明显下降。

BEV 网格分辨率怎么选择?

要在感知范围、目标尺寸、定位精度、显存和延迟之间权衡。城区近距离小目标多,可以适当提高分辨率;高速远距离范围大,过细网格成本很高。实际会通过 mAP、位置误差、吞吐和显存峰值做 ablation。

View Transformer 和 BEV Encoder 的职责有什么区别?

View Transformer 主要负责坐标系转换和初步多相机特征落格,把 image-view 特征变成 BEV feature。BEV Encoder 在统一 BEV 平面上继续做空间上下文建模,融合邻域信息,并为检测头提供更适合预测 3D box 的特征。

纯视觉 BEV 相比点云 BEV 的主要困难是什么?

主要困难是深度不可直接观测,尺度和遮挡依赖学习估计。点云天然给出稀疏 3D 坐标,视觉需要通过深度分布和几何投影推断空间位置,因此对标定、训练数据、天气光照和长尾场景更敏感。