4. 目标检测基础:从2D到3D,再到BEV视角

大家好,我是老张。今天咱们聊聊目标检测这块硬骨头。说实话,我刚入行那会儿,2D检测还没现在这么成熟,更别提3D和BEV了。这几年技术迭代快得吓人,但核心思路其实没变——就是让车「看懂」周围有什么、在哪儿、往哪儿去。

我个人习惯把目标检测分成三个层次:2D检测是基础,3D检测是进阶,BEV视角是融合的终极形态。咱们一个一个来拆解。

4.1 2D目标检测:YOLO系列与Faster R-CNN

2D检测说白了就是在图像上画框。你想想看,一张图片进来,模型要告诉我「这里有辆车,那里有个人」。这事儿现在看起来简单,但早期可费劲了。

4.1.1 YOLO系列:一阶段检测的王者

YOLO(You Only Look Once)这个名字起得好,真的只看一次。它的核心思想是:把检测当成回归问题。一张图分成S×S的网格,每个网格负责预测中心点落在它里面的物体。

我记得第一次跑YOLOv3的时候,那个速度让我震惊。在当时的GPU上能跑到30 FPS以上,而两阶段的Faster R-CNN也就10 FPS左右。为什么这么快?因为它没有「先提候选框再分类」的步骤,一步到位。

YOLO的核心演进:

  • YOLOv1:开创性工作,但小目标检测差。我在项目中试过,远处的行人基本漏检。
  • YOLOv3:引入FPN(特征金字塔),多尺度检测。这是我最常用的版本,稳定可靠。
  • YOLOv5:工程优化极好,训练速度快。我建议新手从v5开始学。
  • YOLOv8:最新版本,支持实例分割和姿态估计。但说实话,自动驾驶里还是v3和v5用得最多。

YOLO的损失函数很有意思,包含三部分:

Loss = λ_coord * L_bbox + λ_obj * L_obj + λ_cls * L_cls

其中L_bbox是边界框回归损失,L_obj是置信度损失,L_cls是分类损失。λ是权重系数,我一般设λ_coord=5,λ_obj=1,λ_cls=1。这个比例是我调了无数次才找到的平衡点。

4.1.2 Faster R-CNN:两阶段检测的标杆

Faster R-CNN走的是另一条路:先提候选框,再分类回归。它引入了RPN(Region Proposal Network),让候选框生成也变成可学习的。

两阶段的好处是精度高,坏处是慢。我在一个项目中需要检测远处的交通标志,YOLO死活检不出来,换成Faster R-CNN就好了。为什么?因为RPN会生成大量候选框,覆盖更全面。

我的经验:

如果你对实时性要求高(比如前向碰撞预警),选YOLO。如果你对精度要求极高(比如远距离小目标检测),选Faster R-CNN。但说实话,现在YOLO的精度已经追上来了,我大部分场景都用YOLO。

4.2 3D目标检测:PointPillars与VoxelNet

2D检测只能告诉你「图像上有个框」,但自动驾驶需要知道「这辆车在三维空间的位置、大小、朝向」。这就引出了3D检测。

3D检测的输入是激光雷达点云。点云是什么?就是一堆(x, y, z, intensity)的点。但点云是无序的、稀疏的,直接扔进神经网络可不行。所以需要做结构化处理

4.2.1 VoxelNet:体素化的先驱

VoxelNet的思路很直接:把点云划分成一个个小立方体(体素),每个体素内用PointNet提取特征,然后用3D卷积处理。

嗯,这里要注意:3D卷积的计算量非常大。一个体素大小设为(0.1m, 0.1m, 0.2m),100m×100m的范围,体素数量就是1000×1000×500=5亿个。虽然大部分体素是空的,但计算量依然惊人。

我在项目中试过VoxelNet,效果确实好,但推理速度只有5 FPS左右。对于实时系统来说,这太慢了。

4.2.2 PointPillars:效率与精度的平衡

PointPillars是我个人最喜欢的3D检测方法。它做了一个巧妙的简化:把点云投影到BEV(鸟瞰图)上,然后只用2D卷积

具体来说,它把点云在Z轴方向分成若干「柱子」(Pillar),每个柱子内提取特征,然后转换成伪图像,再用2D卷积处理。这样一来,3D问题就变成了2D问题,速度大幅提升。

PointPillars vs VoxelNet:

方法 输入处理 推理速度 精度(mAP)
VoxelNet 3D体素化 + 3D卷积 ~5 FPS
PointPillars 柱状化 + 2D卷积 ~30 FPS 中高

我曾经在一个量产项目中用PointPillars做前向感知,在Jetson AGX Orin上能跑到25 FPS,精度也满足要求。如果你要做工程落地,我建议优先考虑PointPillars。

4.3 BEV视角下的检测方法

BEV(Bird's Eye View,鸟瞰图)是这两年最火的方向。为什么?因为BEV视角天然适合自动驾驶——你想想看,路径规划、控制决策都是在BEV空间做的,如果感知也输出BEV表示,整个系统就统一了。

BEV检测的核心问题:如何把多视角的相机图像和激光雷达点云,统一到同一个BEV空间里?

目前主流的方法有两类:

  1. 基于IPM(逆透视映射):把图像投影到地面。简单但精度有限,因为假设地面是平的。
  2. 基于Transformer:用注意力机制学习图像到BEV的映射。效果好但计算量大。

我记得2022年的时候,特斯拉的Occupancy Network就是用Transformer做BEV感知。当时我们团队也跟进了类似方案,效果确实惊艳——能检测出任意形状的障碍物,不只是标准的矩形框。

避坑指南:

我曾经在BEV检测上踩过一个坑:相机和激光雷达的外参标定精度不够,导致BEV空间中的特征对齐出现偏差。后来我花了整整一周重新标定,才把mAP提上去。所以,标定是BEV感知的基石,千万别马虎

4.4 本章知识体系

下面这张图展示了本章的核心逻辑:从2D检测到3D检测,再到BEV融合检测,每一步都是前一步的延伸和升级。

目标检测技术演进路线 2D目标检测 输入:RGB图像 输出:2D边界框 代表:YOLO, Faster R-CNN 3D目标检测 输入:激光雷达点云 输出:3D边界框 代表:PointPillars, VoxelNet BEV检测 输入:多模态融合 输出:BEV特征图 代表:Transformer方案 技术演进:从图像空间 → 3D空间 → 统一BEV空间 关键对比 维度:2D (x, y) → 3D (x, y, z, w, h, l, θ) → BEV (x, y, 特征) 速度:YOLO (30+ FPS) > PointPillars (25 FPS) > VoxelNet (5 FPS) > BEV Transformer (10 FPS) 精度:BEV Transformer > VoxelNet > PointPillars > YOLO (3D场景下) 工程落地:PointPillars 最均衡,YOLO 最成熟,BEV 是未来方向

总结一下:2D检测是基础,3D检测是进阶,BEV检测是融合的终极形态。我个人建议的学习路径是:先搞懂YOLO,再上手PointPillars,最后挑战BEV Transformer。每一步都有坑,但踩过去就是成长。

好了,这一章就到这里。下一章咱们聊聊多传感器融合的具体实现,包括时间同步、空间对齐这些工程细节。到时候见。


公众号:蓝海资料掘金营,微信deep3321