3. 目标检测基础理论:从任务定义到评估指标
大家好,我是你们的老朋友。今天我们来聊聊目标检测的“地基”。说实话,很多同学一上来就调YOLO的代码,跑得挺欢,但遇到问题就抓瞎了。为什么?因为基础不牢。
我个人习惯,在讲任何模型之前,先把这几个核心概念掰扯清楚:任务定义、IoU、NMS、Anchor Box、mAP。你想想看,这些搞不懂,后面调参就像蒙着眼睛走路。
3.1 目标检测任务定义
目标检测要解决什么问题?说白了就两件事:“是什么” 和 “在哪里”。
- 分类:判断图像里有没有目标,以及目标属于哪一类(比如人、车、猫)。
- 定位:用一个矩形框(Bounding Box)把目标的位置圈出来。
所以,一个目标检测模型的输出,通常是一组 [x, y, w, h, class, confidence] 的向量。x,y 是框的中心点,w,h 是宽高,class 是类别,confidence 是置信度——也就是模型觉得“这里有个东西”的把握有多大。
核心要点:分类 + 定位,缺一不可。只分类不定位,那是图像分类;只定位不分类,那是目标跟踪的活。
3.2 IoU(交并比)计算
IoU,全称 Intersection over Union。名字很直白:交集除以并集。
怎么算?两个矩形框的交集面积,除以它们的并集面积。公式长这样:
IoU = (A ∩ B) / (A ∪ B)
嗯,这里要注意:如果两个框完全不重叠,IoU = 0;完全重合,IoU = 1。实际项目中,我们通常认为 IoU > 0.5 就算检测到了。但具体阈值看场景——我做工业缺陷检测时,要求 IoU > 0.7 才算合格,因为缺陷位置必须非常精确。
小技巧:计算 IoU 时,记得先判断两个框是否有交集。如果没有,直接返回 0,可以省掉很多不必要的计算。我曾经在写 NMS 时忘了这个,结果跑了一整天,发现大部分时间都在算负数的面积……
3.3 NMS(非极大值抑制)原理
模型预测时,同一个目标上往往会冒出好几个框。怎么办?NMS 就是用来“去重”的。
它的逻辑很简单:
- 把所有预测框按置信度从高到低排序。
- 选置信度最高的框,保留它。
- 计算这个框与其他所有框的 IoU。
- 如果 IoU 大于某个阈值(比如 0.5),就把那些框扔掉。
- 重复步骤 2-4,直到没有框剩下。
你可能会问:为什么叫“非极大值抑制”?因为我们要保留的是局部置信度最大的框,抑制掉那些“非极大”的框。
避坑指南:NMS 的阈值很关键。设得太高(比如 0.9),会漏掉重叠的目标;设得太低(比如 0.3),又会保留太多冗余框。我曾经在一个密集人群检测项目里,把阈值设成 0.4,结果一个人身上出了五六个框……后来调到 0.6 才正常。
3.4 Anchor Box 机制
Anchor Box,中文叫“锚框”或“先验框”。它是 YOLO 系列的核心设计之一。
为什么需要它?因为目标的大小和形状千变万化。如果让模型直接预测框的绝对坐标,太难了。Anchor Box 的思路是:先预设一组不同大小、不同长宽比的框,然后让模型去预测“相对于这些预设框的偏移量”。
举个例子:
- 预设 3 种尺寸:小、中、大
- 每种尺寸配 3 种长宽比:1:1、1:2、2:1
- 一共 9 个 Anchor Box
模型要做的,就是判断每个 Anchor Box 里有没有目标,如果有,就微调它的位置和大小。
关键点:Anchor Box 的尺寸不是拍脑袋定的,而是通过 K-Means 聚类从训练数据中统计出来的。我建议你在自己的数据集上也跑一遍聚类,看看默认的 Anchor 是否合适。有一次我在一个遥感图像项目里,默认 Anchor 完全不对,聚类之后 mAP 直接涨了 5 个点。
3.5 mAP 评估指标
mAP,全称 mean Average Precision。它是目标检测领域最常用的评估指标。
怎么算?分三步:
- 计算每个类别的 AP:对于每个类别,把预测结果按置信度排序,然后计算 Precision-Recall 曲线下的面积。
- 对所有类别的 AP 取平均:这就是 mAP。
- 注意 IoU 阈值:通常用 mAP@0.5(IoU 阈值 0.5)和 mAP@0.5:0.95(IoU 从 0.5 到 0.95,步长 0.05,取平均)。
你可能会问:为什么不用准确率?因为目标检测里,正负样本极度不平衡。准确率会被大量“背景”样本拉高,看不出真实性能。mAP 综合考虑了查准率和查全率,更靠谱。
个人经验:我一般会同时看 mAP@0.5 和 mAP@0.75。前者反映模型“能不能找到目标”,后者反映“定位准不准”。如果 mAP@0.5 高但 mAP@0.75 低,说明框的位置偏差大,需要调整回归损失或 Anchor 尺寸。
3.6 小结
好了,今天的内容就到这里。我们聊了:
- 目标检测的任务定义:分类 + 定位
- IoU:衡量两个框的重叠程度
- NMS:去除冗余检测框
- Anchor Box:预设框,让预测更稳定
- mAP:综合评估模型性能
这些概念,每一个都在实际项目中反复用到。你想想看,如果连 IoU 都算不明白,怎么调 NMS 阈值?如果不懂 Anchor Box 的原理,怎么优化小目标检测?
下一章,我们会进入 YOLO 的网络结构,看看这些理论是怎么落地的。到时候,我会带大家手撕一下 YOLOv5 的代码,保证让你豁然开朗。
公众号:蓝海资料掘金营,微信deep3321