目标检测:IoU、mAP 与两阶段流程

核心04-深度学习视觉预计 35 分钟目标检测IoUmAPNMSFaster R-CNN

前置知识点

kp-016 图像分类与 ImageNet 里程碑

一句话定义

目标检测同时回答「有什么」与「在哪里」:模型输出边界框 + 类别 + 置信度,评测用 IoU 判定预测框与真值框的重合、用 AP/mAP 汇总不同置信度下的精度表现,两阶段方法(Faster R-CNN)先提候选区再精修,NMS 负责去掉同一物体的重复框。

为什么重要

检测是自动驾驶、安防、零售等场景的默认感知原语,也是理解分割、跟踪等更复杂任务的入口;IoU/mAP/NMS 这三件套是全视觉领域的通用语言——读不懂它们,任何检测报告与论文都无法核验。

直观类比

检测像在宴会上既叫出每位宾客名字又圈出其座位:IoU 衡量「你圈的座位和真人坐的位置重合多少」(全对重叠为 1);AP 是把你的报告按自信程度从高到低读出,统计「每叫对一个人时前面已浪费了几次点名」,画成曲线下的面积;NMS 则防止把同一人反复报三次名。

前置知识

kp-016(分类与置信度概念)。

核心概念

原理与机制

Faster R-CNN 的骨架是「骨干特征 → RPN 在每个位置、每个锚框上预测「是否为前景 + 框修正量」→ 按分数取候选 → ROI Align 池化 → 分类头 + 回归头」。回归量采用相对锚框的归一化偏移,使回归任务与目标尺度解耦。评测机制:全部预测按置信度降序排列,逐个与未匹配真值求 IoU,达到阈值且该真值未被占用的记 TP;每加入一个预测更新一次查准/查全,得到阶梯形 PR 曲线,COCO 用全部点积分,VOC 旧口径用 11 点插值。NMS 是几乎一切检测器共用的后处理,其阈值(0.4–0.6)控制「贴得近的两个物体是否被误删」。

公式与模型

IoU = |A ∩ B| / |A ∪ B| Precision = TP / (TP + FP) Recall = TP / (TP + FN) AP = ∫₀¹ P(R) dR mAP = (1/C) Σ_c AP_c COCO mAP@[.5:.95] = 均值_{t=0.50,0.55,…,0.95} mAP@t

NMS 伪代码:

按置信度降序排列同类框
取最高分框 d,加入结果集;删除与 d 的 IoU > Nt 的其余框
重复直到列表为空

图示

真值框(黑)∩ 预测框(蓝)= 橙色区 IoU = 交集面积 / 并集面积 查准率 P 查全率 R AP = 曲线下面积

实例与案例

货架识别:一帧内数百个 SKU,两阶段检测器的高查准率适合做盘点,单阶段适合实时巡检。指标陷阱实例:某模型 mAP@0.5 为 52%,但 mAP@0.75 掉到 30%——说明定位粗但「找到」没问题,若下游要精确定位(如机械臂抓取),必须按高 IoU 阈值选模型。NMS 阈值案例:密集人群用默认 0.5 会把相邻两人框合并删除,需换 Soft-NMS 或提高阈值并接受重复框。

def iou(a, b):
    x1, y1 = max(a[0], b[0]), max(a[1], b[1])
    x2, y2 = min(a[2], b[2]), min(a[3], b[3])
    inter = max(0, x2 - x1) * max(0, y2 - y1)
    areaA = (a[2]-a[0]) * (a[3]-a[1]); areaB = (b[2]-b[0]) * (b[3]-b[1])
    return inter / (areaA + areaB - inter + 1e-9)

常见误区

与其他知识点的关系

kp-018 的 YOLO 把两阶段合并为单阶段但评测完全沿用本站;kp-019 分割把 IoU 推广到像素级掩码;kp-024 多目标跟踪的匹配代价就是框间 IoU。

自测题

  1. 两框完全相同,IoU 是多少?一框完全包含另一框呢?

答案要点:相同为 1;包含时 IoU = 小框面积 / 大框面积,小于 1。

  1. mAP@0.5 与 mAP@[.5:.95] 有何区别?

答案要点:前者只要求定位到 IoU 0.5;后者对 10 个阈值取平均,对定位精度要求更严,数值通常显著更低。

  1. 为什么检测框回归常用「相对锚框的偏移」而不是直接回归绝对坐标?

答案要点:绝对坐标跨尺度方差巨大,相对偏移使回归目标分布稳定,损失均衡且收敛更快。

延伸阅读

相关知识点

kp-018 YOLO 系与单阶段检测kp-024 多目标跟踪:SORT/DeepSORT 与轨迹管理