4、目标检测基础:任务定义、IoU、NMS 与 mAP
目标检测,说白了就是让计算机在图片里回答两个问题:「什么东西在哪?」。它不像分类只告诉你「这是一只猫」,也不像分割要画出猫的每一根毛。检测要的是——框出猫的位置,再贴上「猫」的标签。
我刚开始接触这个领域时,觉得不就是画个框嘛,能有多难?后来才发现,框怎么画、框多了怎么删、框准不准怎么算,每一步都是坑。今天我们就把这几个核心概念彻底捋清楚。
4.1 目标检测的任务定义
一个完整的目标检测输出,包含两部分信息:
- 类别标签(Class):比如 person、car、dog
- 边界框(Bounding Box):通常用 (x, y, w, h) 或 (x1, y1, x2, y2) 表示
你想想看,一张图里可能有多个物体,每个物体都要输出一个框和一个标签。这就是检测和分类最大的区别——输出数量不固定。
我在项目中遇到过最头疼的问题:一张密集人群图,模型输出了几百个框,里面有一半是重复的。怎么处理?这就引出了 IoU 和 NMS。
4.2 IoU(交并比)—— 框与框的「重叠度」
IoU 全称 Intersection over Union,中文叫交并比。它衡量两个框的重叠程度。
公式很简单:
IoU = (A ∩ B) / (A ∪ B)
也就是两个框的交集面积,除以它们的并集面积。结果在 0 到 1 之间。
- IoU = 1:两个框完全重合
- IoU = 0:两个框完全不挨着
- IoU > 0.5:通常认为有重叠
下面这张图,帮你直观理解 IoU 的计算逻辑:
4.3 NMS(非极大值抑制)—— 去掉多余的框
模型预测时,同一个物体周围会冒出很多框。NMS 的作用就是:只保留最好的那个,删掉其他重复的。
算法步骤其实很直白:
- 把所有框按置信度从高到低排序
- 选置信度最高的框,保留它
- 计算它和其他框的 IoU
- 如果 IoU > 阈值(比如 0.5),就删掉那个框
- 重复 2~4,直到所有框都被处理
下面这个流程,帮你理清 NMS 的执行顺序:
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(假阴性):有真实物体,但模型没检测出来
mAP 的计算,简单来说就是:
- 对每个类别,画出 Precision-Recall 曲线
- 计算曲线下的面积,得到 AP(Average Precision)
- 对所有类别的 AP 取平均,得到 mAP
在 YOLO 的评估中,你经常会看到两个版本:
- mAP@0.5:IoU 阈值固定为 0.5
- mAP@0.5:0.95:IoU 阈值从 0.5 到 0.95,步长 0.05,取平均
4.5 本章小结
这四个概念,是目标检测的基石。我见过不少新手,模型跑通了但不知道效果好不好,就是因为没搞懂 mAP 怎么算。也有同学调 NMS 阈值调了半天,结果越调越差——其实是不理解 IoU 的含义。
记住一句话:IoU 是尺子,NMS 是剪刀,mAP 是成绩单。这三样东西,贯穿你整个 YOLO 学习生涯。