2. 3D检测基础
在BEVFormer这类多摄像头3D检测工程中,第一步不是写模型,而是把“3D检测到底在预测什么”讲清楚。2D检测输出的是图像平面上的矩形框,而3D检测输出的是目标在真实三维空间中的位置、尺寸和朝向。这个差别决定了后续所有坐标系变换、特征采样、损失函数设计和评价指标的选择。
一、3D目标检测的定义
3D目标检测的任务是:给定一个或多个传感器输入(图像、点云、雷达等),在三维空间中定位目标,并给出其几何与语义属性。对于自动驾驶场景,典型输出包括:
- 位置:目标中心点在三维空间中的坐标 (x, y, z);
- 尺寸:长、宽、高 (l, w, h);
- 朝向:偏航角 yaw,有时还包括俯仰角 pitch 和滚转角 roll;
- 类别:car、truck、pedestrian、cyclist 等;
- 速度:可选,用于跟踪与预测。
与2D检测相比,3D检测多了一个“深度”维度,因此对坐标系、相机标定和几何变换的依赖更强。BEVFormer 的核心思想,就是把多摄像头图像特征投影到统一的 BEV(Bird's Eye View)空间,再在 BEV 特征上完成 3D 框回归。
二、坐标系体系
多摄像头3D检测涉及多个坐标系,理解它们之间的转换关系是工程实现的基础。常见坐标系如下:
| 坐标系 | 符号 | 原点与轴向 | 典型用途 |
|---|---|---|---|
| 像素坐标系 | uv | 图像左上角,u向右,v向下 | 2D框、特征图位置 |
| 相机坐标系 | cam | 光心,x右,y下,z前 | 投影、深度估计 |
| 自车坐标系 | ego | 后轴中心,x前,y左,z上 | 多传感器融合 |
| 激光雷达坐标系 | lidar | 雷达中心,x前,y左,z上 | 点云标注、真值 |
| BEV坐标系 | bev | 自车下方平面,x前,y左 | 统一特征空间 |
从像素到 BEV 的转换链可以概括为:像素 → 相机内参 → 相机坐标系 → 外参 → 自车坐标系 → BEV 网格。BEVFormer 通过空间交叉注意力,让 BEV 查询在多个相机特征图上采样,隐式完成这一投影过程。
三、3D边界框表示
3D边界框通常用 7 个参数表示:中心点 (x, y, z)、尺寸 (l, w, h)、偏航角 yaw。在 nuScenes 数据集中,标注格式为:
{
"translation": [x, y, z], // 中心点,ego坐标系
"size": [w, l, h], // 宽、长、高
"rotation": [w, x, y, z], // 四元数
"velocity": [vx, vy], // 速度
"category": "car"
}
注意:不同数据集的尺寸顺序不同。KITTI 使用 (h, w, l),nuScenes 使用 (w, l, h)。工程中如果顺序弄错,会导致框“躺倒”或尺寸异常。此外,yaw 的定义方向也需统一,通常以自车坐标系 x 轴为 0 度,逆时针为正。
四、评价指标
3D检测的评价指标与2D检测有相似之处,但增加了深度和朝向的考量。常用指标包括:
- mAP:平均精度均值,按类别计算 AP 后取平均;
- NDS:nuScenes 检测分数,综合 mAP、mATE、mASE、mAOE、mAVE、mAAE;
- ATE:平均平移误差,衡量中心点距离;
- ASE:平均尺度误差,衡量尺寸偏差;
- AOE:平均朝向误差,衡量 yaw 偏差;
- AVE:平均速度误差;
- AAE:平均属性误差。
其中,NDS 是 nuScenes 排行榜的核心指标,计算公式为:
NDS = (1/10) * [5 * mAP + 2 * (1 - mATE) + 2 * (1 - mASE)
+ 2 * (1 - mAOE) + 2 * (1 - mAVE) + 2 * (1 - mAAE)]
可以看到,mAP 权重最高,但其他误差项也会显著影响最终得分。因此,模型不仅要“检测到”,还要“框得准、朝向对、速度合理”。
五、多摄像头3D检测的挑战
多摄像头方案相比激光雷达,成本更低、分辨率更高,但也带来一系列独特挑战:
- 深度信息缺失:单目图像无法直接获得精确深度,需要依赖几何先验或时序信息;
- 视角重叠与遮挡:相邻相机之间需要融合,但重叠区域小,目标可能被截断;
- 标定误差敏感:外参微小偏差会导致 BEV 特征错位,影响 3D 框精度;
- 时序对齐:多帧融合时,自车运动和目标运动需要补偿;
- 计算量:多相机高分辨率特征图 + BEV 网格,显存和算力消耗大。
六、案例:BEVFormer 中的坐标系流转
以 nuScenes 为例,BEVFormer 的输入是 6 个相机的图像,输出是 BEV 空间中的 3D 框。其坐标系流转大致如下:
图像 (H, W, 3)
→ 主干网络 + FPN
→ 多尺度特征图 (C, H/8, W/8) 等
→ 空间交叉注意力:BEV 查询在多个相机特征上采样
→ BEV 特征 (C, 200, 200)
→ 检测头
→ 3D 框 (x, y, z, w, l, h, yaw, vx, vy)
在这个过程中,BEV 查询的参考点通过相机内外参投影到各相机图像上,采样对应位置的特征。这样,每个 BEV 网格都能“看到”多个相机中与它相关的区域,从而实现多摄像头融合。
七、复盘与检查清单
在工程落地时,建议按以下清单逐项检查:
- 坐标系定义是否统一?ego、lidar、cam 的轴向是否一致?
- 3D 框参数顺序是否与数据集一致?(w, l, h) 还是 (h, w, l)?
- yaw 的零度和正方向是否明确?
- 评价指标是否与官方实现对齐?NDS 各项权重是否正确?
- 多相机标定外参是否经过验证?投影误差是否在可接受范围?
- 时序融合时,自车运动补偿是否加入?
只有把这些基础打牢,后续的 BEVFormer 模型训练和调优才有意义。否则,即使网络结构再先进,坐标系或标注格式的一个小错误,也会让模型学不到正确的 3D 空间关系。