4、目标检测基础:任务定义、IoU、NMS 与 mAP

目标检测,说白了就是让计算机在图片里回答两个问题:「什么东西在哪?」。它不像分类只告诉你「这是一只猫」,也不像分割要画出猫的每一根毛。检测要的是——框出猫的位置,再贴上「猫」的标签。

我刚开始接触这个领域时,觉得不就是画个框嘛,能有多难?后来才发现,框怎么画、框多了怎么删、框准不准怎么算,每一步都是坑。今天我们就把这几个核心概念彻底捋清楚。

4.1 目标检测的任务定义

一个完整的目标检测输出,包含两部分信息:

  • 类别标签(Class):比如 person、car、dog
  • 边界框(Bounding Box):通常用 (x, y, w, h) 或 (x1, y1, x2, y2) 表示

你想想看,一张图里可能有多个物体,每个物体都要输出一个框和一个标签。这就是检测和分类最大的区别——输出数量不固定。

核心公式: 检测结果 = { (class₁, bbox₁), (class₂, bbox₂), ..., (classₙ, bboxₙ) }

我在项目中遇到过最头疼的问题:一张密集人群图,模型输出了几百个框,里面有一半是重复的。怎么处理?这就引出了 IoU 和 NMS。

4.2 IoU(交并比)—— 框与框的「重叠度」

IoU 全称 Intersection over Union,中文叫交并比。它衡量两个框的重叠程度。

公式很简单:

IoU = (A ∩ B) / (A ∪ B)

也就是两个框的交集面积,除以它们的并集面积。结果在 0 到 1 之间。

  • IoU = 1:两个框完全重合
  • IoU = 0:两个框完全不挨着
  • IoU > 0.5:通常认为有重叠
我的习惯: 在训练 YOLO 时,正样本的 IoU 阈值我一般设 0.5~0.7。设太低,模型学到的框太粗糙;设太高,正样本太少,模型学不动。

下面这张图,帮你直观理解 IoU 的计算逻辑:

IoU 计算示意图 框 A 框 B 交集 IoU = 交集面积 / 并集面积 并集 = 框A面积 + 框B面积 - 交集面积

4.3 NMS(非极大值抑制)—— 去掉多余的框

模型预测时,同一个物体周围会冒出很多框。NMS 的作用就是:只保留最好的那个,删掉其他重复的。

算法步骤其实很直白:

  1. 把所有框按置信度从高到低排序
  2. 选置信度最高的框,保留它
  3. 计算它和其他框的 IoU
  4. 如果 IoU > 阈值(比如 0.5),就删掉那个框
  5. 重复 2~4,直到所有框都被处理
我曾经踩过的坑: NMS 阈值设得太高(比如 0.9),两个挨得很近的物体,其中一个会被误删。设得太低(比如 0.3),同一个物体会留下好几个框。YOLOv9 里我一般用 0.5~0.6,具体看你的场景。

下面这个流程,帮你理清 NMS 的执行顺序:

NMS 执行流程 输入:所有预测框 + 置信度 按置信度降序排序 选最高分框,计算与其他框的 IoU IoU > 阈值?→ 删除;否则保留

4.4 mAP(平均精度均值)—— 模型到底好不好?

mAP 是目标检测领域最常用的评估指标。全称 mean Average Precision。

要理解 mAP,先要搞懂两个概念:Precision(精确率)和Recall(召回率)。

指标 含义 公式
Precision 模型预测的框里,有多少是对的 TP / (TP + FP)
Recall 所有真实物体中,模型找出了多少 TP / (TP + FN)

这里 TP、FP、FN 的定义,我习惯这样记:

  • TP(真阳性):预测框和真实框的 IoU > 阈值(比如 0.5),且类别正确
  • FP(假阳性):预测框和真实框的 IoU ≤ 阈值,或者类别错了
  • FN(假阴性):有真实物体,但模型没检测出来
一句话总结: Precision 看「准不准」,Recall 看「全不全」。两者往往此消彼长。

mAP 的计算,简单来说就是:

  1. 对每个类别,画出 Precision-Recall 曲线
  2. 计算曲线下的面积,得到 AP(Average Precision)
  3. 对所有类别的 AP 取平均,得到 mAP

在 YOLO 的评估中,你经常会看到两个版本:

  • mAP@0.5:IoU 阈值固定为 0.5
  • mAP@0.5:0.95:IoU 阈值从 0.5 到 0.95,步长 0.05,取平均
我的经验: 做落地项目时,我更关注 mAP@0.5。因为实际场景中,框稍微偏一点没关系,只要类别对、位置大致准就行。但做竞赛或对比,mAP@0.5:0.95 才是硬通货。

4.5 本章小结

这四个概念,是目标检测的基石。我见过不少新手,模型跑通了但不知道效果好不好,就是因为没搞懂 mAP 怎么算。也有同学调 NMS 阈值调了半天,结果越调越差——其实是不理解 IoU 的含义。

记住一句话:IoU 是尺子,NMS 是剪刀,mAP 是成绩单。这三样东西,贯穿你整个 YOLO 学习生涯。