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 就是用来“去重”的。

它的逻辑很简单:

  1. 把所有预测框按置信度从高到低排序。
  2. 选置信度最高的框,保留它。
  3. 计算这个框与其他所有框的 IoU。
  4. 如果 IoU 大于某个阈值(比如 0.5),就把那些框扔掉。
  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。它是目标检测领域最常用的评估指标。

怎么算?分三步:

  1. 计算每个类别的 AP:对于每个类别,把预测结果按置信度排序,然后计算 Precision-Recall 曲线下的面积。
  2. 对所有类别的 AP 取平均:这就是 mAP。
  3. 注意 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