2. 目标检测基础

大家好,我是你们这堂课的主讲。今天咱们聊聊目标检测,这是感知融合里最基础、也最关键的一环。说白了,就是让车“看见”周围有什么东西——是车、是人、还是路障?

我个人习惯把目标检测分成两大流派:基于视觉的2D/3D检测和基于激光雷达的点云检测。当然,还有把两者结合起来的多模态融合。咱们一个一个来拆解。

1.1 基于视觉的2D目标检测:YOLO与CenterNet

先说说2D检测。你想想看,摄像头拍到的就是一张二维图像,我们要从里面找出物体,并框出它的位置。这活儿,YOLO干得最漂亮。

YOLO:一阶段检测的标杆

YOLO(You Only Look Once)的核心思想很简单:把检测当成回归问题。它把图像分成网格,每个网格负责预测中心点落在它里面的物体。

我记得刚接触YOLOv3时,被它的速度惊艳到了。为什么快?因为它没有“先提候选框再分类”的两阶段流程,而是直接一步到位。

# YOLO的核心思想(伪代码)
def yolo_inference(image):
    grid = divide_into_cells(image, S=7)  # 分成7x7网格
    for cell in grid:
        bbox, confidence, class_probs = predict(cell)
        if confidence > threshold:
            output.append(bbox, class_probs)
    return nms(output)  # 非极大值抑制去重
避坑指南:我曾经在项目中遇到过YOLO对小目标检测效果差的问题。后来发现,把输入分辨率从416x416提升到608x608,小目标的召回率能提升近10%。但代价是推理速度下降,需要权衡。

CenterNet:无锚框的另一种思路

YOLO用的是锚框(anchor box),但CenterNet换了个玩法——直接预测物体的中心点,然后回归出宽高和深度。

说白了,CenterNet把检测问题转化成了关键点估计问题。它输出一个热力图,热力图的峰值就是物体中心。这样做的好处是:不需要调锚框的超参数,训练更稳定。

方法 核心思想 优点 缺点
YOLO 网格+锚框回归 速度快,工程成熟 小目标差,锚框需调参
CenterNet 中心点+热力图 无锚框,结构简单 重叠物体处理弱

1.2 基于激光雷达的点云目标检测:PointPillars与VoxelNet

摄像头有它的短板——光线不好时,或者物体被遮挡,它就抓瞎了。这时候,激光雷达(LiDAR)就派上用场了。它发射激光束,返回的是三维点云数据。

点云数据长什么样?就是一堆(x, y, z, intensity)的坐标点。怎么从这些点里找出物体?嗯,这里有两个经典方案。

VoxelNet:体素化的先驱

VoxelNet的思路很直观:把点云划分成三维体素(voxel),每个体素里用PointNet提取特征,然后做3D卷积。

我在项目里试过VoxelNet,效果确实好,但有个问题——计算量太大了。一个64x64x32的体素网格,3D卷积的参数量是2D卷积的几十倍。那时候我们的嵌入式平台根本跑不动。

注意:VoxelNet的推理速度通常在10-15 FPS(在高端GPU上),远达不到实时要求。所以后来大家开始想办法简化。

PointPillars:把3D问题变成2D问题

PointPillars的聪明之处在于:它把点云投影到鸟瞰图(BEV)上,然后只用2D卷积来处理。

具体怎么做?它把点云沿着Z轴方向切成一个个“柱子”(pillar),每个柱子里的点用PointNet提取特征,然后拼成一张伪图像。剩下的,就交给2D检测网络了。

# PointPillars的核心流程
def pointpillars_inference(point_cloud):
    pillars = create_pillars(point_cloud, grid_size=(0.16, 0.16))  # 柱子大小
    pillar_features = pointnet(pillars)  # 每个柱子提取特征
    pseudo_image = scatter_to_image(pillar_features)  # 拼成伪图像
    detections = 2d_detector(pseudo_image)  # 用2D检测网络
    return detections

说实话,PointPillars的速度比VoxelNet快了一个数量级。我印象很深,有一次在Jetson Xavier上跑,VoxelNet只有8 FPS,换成PointPillars直接飙到35 FPS。这就是工程上的胜利。

1.3 多模态融合检测思路

讲到这里,你可能会问:既然摄像头和激光雷达各有优缺点,为什么不把它们结合起来?

没错,这就是多模态融合。我把它分成三个层次:

  • 数据级融合:把图像和点云在原始数据层面对齐。比如把点云投影到图像上,生成RGB-D图像。但问题是,两种数据的分辨率差异太大,容易引入噪声。
  • 特征级融合:分别提取图像特征和点云特征,然后在特征图上做融合。这是目前的主流做法。比如AVOD、F-PointNet都是这个思路。
  • 决策级融合:两个模态各自独立检测,最后把结果合并。简单粗暴,但容易漏检。

我个人比较推荐特征级融合。为什么?因为它在信息损失和计算效率之间取得了平衡。我在一个项目中试过,单纯用摄像头检测行人,远距离的召回率只有60%;加上激光雷达后,召回率提升到了85%。

核心经验:多模态融合不是简单的“1+1=2”。你需要解决两个关键问题:一是空间对齐(摄像头和激光雷达的坐标系转换),二是时间同步(两种传感器的数据帧率不同)。这两个问题没解决好,融合效果反而会变差。

本章知识体系

下面这张图,是我自己画的,帮你理清本章的知识脉络:

目标检测基础:知识体系 基于视觉的2D/3D检测 基于激光雷达的点云检测 多模态融合检测 YOLO(锚框回归) CenterNet(中心点+热力图) VoxelNet(体素化+3D卷积) PointPillars(柱子+2D卷积) 数据级融合(RGB-D) 特征级融合(主流方案) 决策级融合(结果合并) 核心目标:让感知系统“看得全、看得准、看得快”