4、目标检测基础:目标检测任务定义、边界框、类别标签、置信度、IoU(交并比)等核心概念

在机器人视觉系统中,目标检测(Object Detection)是连接“看见”与“理解”的关键桥梁。与图像分类(判断整张图是什么)不同,目标检测需要回答两个更复杂的问题:“图中有什么物体?”以及“这些物体分别在哪里?”。对于舵机跟随、机械臂抓取、移动避障等机器人任务而言,仅知道“画面中有一个人”远远不够,必须知道这个人的像素坐标位置,才能驱动舵机转向或规划机械臂轨迹。本章将系统梳理目标检测任务的形式化定义、边界框表示方法、类别标签与置信度的含义,以及评估检测质量的核心指标——IoU(交并比),为后续学习轻量级检测模型(如YOLO、SSD、NanoDet)打下坚实基础。

目标检测核心概念关系图 输入图像 640×480 RGB 检测模型 轻量CNN / YOLO 输出张量 N×(4+1+C) 边界框 BBox (cx, cy, w, h) 或 (x1,y1,x2,y2) 类别标签 Class person / cup / robot 置信度 Score 0.0 ~ 1.0 概率值 后处理 NMS + IoU 筛选 最终检测结果 目标列表 + 位置 + 类别 IoU 交并比计算 IoU = 交集面积 / 并集面积 IoU > 0.5 视为匹配

4.1 目标检测任务的形式化定义

目标检测任务可以形式化描述为:给定一张输入图像 \( I \in \mathbb{R}^{H \times W \times 3} \),其中 H 和 W 分别为图像的高度和宽度(以像素为单位),3 表示 RGB 三个颜色通道。检测模型需要输出一个目标集合 \( D = \{d_1, d_2, ..., d_n\} \),其中每个检测结果 \( d_i \) 包含三个核心要素:边界框(Bounding Box)、类别标签(Class Label)和置信度(Confidence Score)。

在机器人视觉的实际工程中,输入图像通常来自摄像头实时视频流。以常见的 USB 摄像头为例,分辨率为 640×480 或 1280×720,帧率为 30 FPS。这意味着检测模型必须在约 33 毫秒内完成一帧图像的前向推理,才能保证实时性。因此,目标检测任务在机器人场景下不仅是“能否检测到”的问题,更是“能否在限定时间内检测到”的约束优化问题。

关键理解:目标检测是“分类 + 定位”的联合任务。分类解决“是什么”的问题,定位解决“在哪里”的问题。两者缺一不可,且相互影响——定位不准会导致分类失去意义,分类错误则定位再准也无用。

4.2 边界框(Bounding Box)的表示方法

边界框是目标在图像中的矩形包围区域,通常有两种主流表示方式:

表示方式 参数含义 适用场景 示例
中心点 + 宽高 (cx, cy, w, h) 矩形中心坐标、宽度、高度 YOLO 系列模型输出格式 (320, 240, 100, 80)
左上角 + 右下角 (x1, y1, x2, y2) 两个对角顶点坐标 Faster R-CNN、SSD 及标注工具 (270, 200, 370, 280)
归一化坐标 (x_center, y_center, w_norm, h_norm) 相对图像宽高的比例值 模型训练时避免尺度影响 (0.5, 0.5, 0.156, 0.167)

在轻量级检测模型(如 NanoDet、YOLOv5-nano)中,边界框通常以归一化坐标输出,因为这样可以使模型对不同分辨率的输入图像具有更好的泛化能力。实际部署时,需要将归一化坐标乘以图像宽高,还原为像素坐标,才能用于舵机控制或机械臂定位。

# 归一化坐标转像素坐标示例
img_w, img_h = 640, 480
x_norm, y_norm, w_norm, h_norm = 0.5, 0.5, 0.156, 0.167

x_pixel = int(x_norm * img_w)   # 320
y_pixel = int(y_norm * img_h)   # 240
w_pixel = int(w_norm * img_w)   # 100
h_pixel = int(h_norm * img_h)   # 80

4.3 类别标签与置信度

类别标签定义了检测目标所属的语义类别。在机器人视觉项目中,类别集合通常由任务需求决定。例如,一个桌面清理机器人需要检测“杯子”、“书本”、“笔”等物体;而一个行人跟随机器人则只需检测“person”一个类别。类别标签通常以整数索引表示(如 0=person, 1=cup, 2=book),模型输出的类别概率向量经过 softmax 或 sigmoid 激活后,取最大值对应的索引作为预测类别。

置信度(Confidence Score)是一个 0 到 1 之间的浮点数,表示模型对该检测结果的把握程度。它综合了“框内是否真的有目标”和“目标属于该类别的概率”两个因素。在 YOLO 系列中,置信度计算公式为:

confidence = objectness × class_probability

其中 objectness 表示边界框内包含目标的概率,class_probability 表示该目标属于某一类别的概率。实际工程中,通常设置一个置信度阈值(如 0.5),低于该阈值的检测结果会被直接丢弃,以减少误检。

工程经验:阈值的选择需要权衡精度与召回率。阈值过高会导致漏检(目标没被检测到),阈值过低会导致误检(把背景当作目标)。在舵机跟随场景中,建议初始阈值设为 0.5,然后根据实际调试效果在 0.3~0.7 之间调整。

4.4 IoU(交并比)——衡量检测质量的标尺

IoU(Intersection over Union)是目标检测中最核心的评估指标,用于衡量预测边界框与真实边界框(Ground Truth)之间的重叠程度。其计算公式为:

IoU = (预测框 ∩ 真实框) 的面积 / (预测框 ∪ 真实框) 的面积

IoU 的取值范围为 [0, 1]:0 表示两个框完全没有重叠,1 表示完全重合。在模型评估中,通常设定一个 IoU 阈值(常见为 0.5),当预测框与真实框的 IoU 大于该阈值时,认为该检测结果是正确的(True Positive)。

IoU 在机器人视觉中有三个关键应用场景:

  1. 模型评估:计算 mAP(mean Average Precision)时,需要根据 IoU 阈值判断检测是否正确。
  2. 非极大值抑制(NMS):同一目标可能产生多个重叠的预测框,通过 IoU 计算重叠程度,保留置信度最高的框,删除其他冗余框。
  3. 跟踪关联:在连续帧中,通过计算前后帧检测框的 IoU,判断是否为同一目标,实现简单的目标跟踪。

4.5 案例拆解:舵机跟随中的目标检测流程

假设我们要实现一个基于舵机云台的红色小球跟随系统。摄像头分辨率为 640×480,舵机云台可以在水平和垂直方向旋转。整个检测与跟随流程如下:

场景约束:红色小球直径约 5cm,摄像头距离小球 1~2 米,背景为白色墙壁。舵机响应延迟约 50ms,要求系统在 100ms 内完成一次检测与角度更新。

初始现象:使用 YOLOv5-nano 模型(输入尺寸 320×320)进行检测,发现两个问题:一是小球在图像中仅占约 20×20 像素,检测置信度只有 0.35;二是当小球快速移动时,检测框出现明显抖动。

分析过程:

  • 小球像素面积过小,导致特征提取不充分,置信度偏低。解决方案:将输入分辨率提升至 416×416,或使用图像裁剪放大预处理。
  • 检测框抖动是因为相邻帧的检测结果不稳定,且没有做平滑处理。解决方案:引入指数移动平均(EMA)对边界框中心坐标进行滤波。
  • 舵机控制需要的是小球中心的像素坐标,而非完整边界框。因此,从检测结果中提取 (cx, cy) 作为控制输入。

实际操作步骤:

# 伪代码:检测 + 跟随控制
while True:
    frame = camera.read()                          # 读取一帧
    detections = model.detect(frame, conf=0.4)     # 检测,阈值0.4
    
    if len(detections) > 0:
        # 取置信度最高的检测框
        best = max(detections, key=lambda d: d.conf)
        cx, cy = best.center_x, best.center_y
        
        # EMA平滑
        smooth_cx = 0.7 * smooth_cx + 0.3 * cx
        smooth_cy = 0.7 * smooth_cy + 0.3 * cy
        
        # 计算偏差并控制舵机
        dx = smooth_cx - 320   # 图像中心x
        dy = smooth_cy - 240   # 图像中心y
        servo.horizontal += dx * Kp_x   # 比例控制
        servo.vertical += dy * Kp_y
    else:
        # 未检测到目标,执行搜索模式
        servo.sweep()

结果对比:经过优化后,检测置信度从 0.35 提升至 0.62,检测框抖动幅度从 ±15 像素降低至 ±3 像素,舵机跟随的稳定性显著提升。代价是推理时间从 18ms 增加到 25ms,但仍满足 100ms 的实时性要求。

风险提示:提升输入分辨率会带来推理时间增加,在算力受限的嵌入式平台(如树莓派 4B、Jetson Nano)上可能无法满足实时性要求。实际工程中需要根据硬件算力、任务精度要求和实时性约束进行综合权衡。

4.6 常见误区与总结复盘

在目标检测基础概念的学习和工程应用中,初学者常犯以下错误:

误区 错误理解 正确认知
混淆分类与检测 认为分类模型也能给出目标位置 分类输出全局标签,检测输出局部位置+标签
忽略置信度阈值 所有检测结果都可信 低置信度结果多为误检,需设置阈值过滤
IoU 只用于评估 IoU 只在训练后计算精度时使用 IoU 在 NMS、跟踪、数据增强中都有关键作用
边界框坐标混淆 混用 (x,y,w,h) 和 (x1,y1,x2,y2) 不同模型输出格式不同,转换时需明确坐标系

总结复盘:目标检测是机器人视觉系统的基石,边界框、类别标签、置信度和 IoU 四个核心概念构成了检测任务的定义、输出和评估闭环。在实际项目中,需要根据机器人任务的具体需求(实时性、精度、算力)来选择合适的检测模型和参数配置。下一阶段的学习将围绕轻量级检测模型的结构原理展开,理解这些基础概念将帮助你更好地调试和优化模型性能。