2. 目标检测基础:IoU、NMS、Anchor机制与YOLO系列简介

各位同学,欢迎来到第二章。今天咱们聊聊目标检测里最基础、也最绕不开的几个概念。说实话,很多新手一上来就追着YOLO跑,结果连IoU怎么算都搞不清楚,后面调参的时候一脸懵。我个人习惯是,先把地基打牢,再盖楼。

这一章,我会带你把这四个核心概念彻底吃透。嗯,咱们一个一个来。

2.1 IoU(交并比)—— 衡量两个框有多“像”

IoU,全称Intersection over Union。说白了,就是两个矩形框的重叠程度。

怎么算?很简单:

IoU = 两个框的交集面积 / 两个框的并集面积

举个例子。你预测了一个框,真实框也在那。如果IoU大于0.5,通常认为你“检测到了”。如果IoU接近1,说明你框得特别准。

核心公式:

IoU = Area_of_Intersection / Area_of_Union

取值范围:[0, 1]。0表示完全不重叠,1表示完全重合。

我在项目中遇到过一个问题:两个框明明挨得很近,但IoU只有0.3。为什么?因为一个框特别大,另一个特别小,交集虽然不小,但并集更大。所以IoU对框的大小很敏感。这一点,你在做小目标检测时要格外注意。

避坑指南: 我曾经在训练一个行人检测模型时,发现验证集mAP一直上不去。后来排查发现,是IoU阈值设得太高了(0.7)。对于小目标,0.5其实更合理。别盲目追求高IoU。

2.2 NMS(非极大值抑制)—— 把重复的框干掉

你想想看,目标检测模型在预测时,同一个物体可能会输出好几个框。比如一只猫,模型可能给了三个框,都差不多。这时候怎么办?

NMS就是干这个的。它的核心思想很简单:保留得分最高的框,干掉和它重叠度高的其他框。

流程是这样的:

  1. 把所有预测框按置信度从高到低排序。
  2. 选置信度最高的框,保留它。
  3. 计算它和其他框的IoU。如果IoU大于阈值(比如0.5),就把那些框删掉。
  4. 重复第2、3步,直到没有框剩下。

嗯,这里要注意:NMS的阈值很关键。阈值设得太低,会漏掉真正的目标;设得太高,又会留下太多重复框。我个人习惯是,对于密集场景(比如人群),阈值设到0.3;对于稀疏场景,0.5就够用。

警告: NMS不是万能的。如果两个目标靠得非常近,NMS可能会误删其中一个。这时候可以考虑Soft-NMS,它不会直接删掉框,而是降低它的得分。

2.3 Anchor机制—— 让模型知道“该往哪看”

Anchor,中文叫“锚框”或“先验框”。这东西刚出来的时候,我也觉得有点绕。但说白了,它就是一组预设的框,告诉模型:“嘿,你往这个位置、这个大小去找目标。”

为什么需要Anchor?因为目标的大小和形状是千变万化的。如果没有Anchor,模型得自己从头学起,效率很低。有了Anchor,模型只需要预测“偏移量”——相对于预设框的微调。

举个例子。你预设了一个宽高比为1:1的Anchor,模型预测的结果是:这个Anchor往右移了5个像素,宽度增加了10%。这样,模型就不用从零开始预测坐标了。

Anchor的设计原则:

  • 通常使用3种尺度(小、中、大)和3种宽高比(1:1、1:2、2:1),组合出9个Anchor。
  • Anchor的大小应该与数据集中的目标大小匹配。比如检测行人,Anchor应该偏瘦长。
  • 我建议你用K-means聚类算法,从训练数据中自动学习Anchor的尺寸。

我在做交通标志检测时,发现默认的Anchor完全不管用。为什么?因为交通标志大多是正方形,而默认Anchor的宽高比是1:1、1:2、2:1。后来我重新聚类,只用了1:1的Anchor,效果立竿见影。

2.4 YOLO系列简介—— 从V1到V8,一路狂奔

YOLO,全称You Only Look Once。它最大的特点就是快。别的模型看两遍、三遍,YOLO只看一遍,就能把目标检测出来。

咱们快速过一下几个关键版本:

版本 核心贡献 我的评价
YOLOv1 首次提出“端到端”检测,把检测当作回归问题 开创性,但精度一般,对小目标不友好
YOLOv2 引入Anchor机制,使用Darknet-19 精度大幅提升,我开始用YOLO就是从v2开始的
YOLOv3 多尺度预测,使用Darknet-53 经典之作,至今仍有很多项目在用
YOLOv4 集大成者,Mish激活函数、CSP结构 工程优化做得很好,训练技巧丰富
YOLOv5 PyTorch实现,更易用 社区活跃,部署方便,我目前的主力
YOLOv8 支持检测、分割、姿态估计 最新版本,功能全面,但模型稍大

我个人最推荐YOLOv5。为什么?因为它平衡了速度和精度,而且文档齐全,社区活跃。你遇到的大部分问题,网上都能找到答案。

避坑指南: 我曾经在YOLOv3上花了很多时间调参,后来换成YOLOv5,同样的数据集,mAP直接涨了3个点。有时候,换个版本比死磕一个版本更有效。

知识体系总览

下面这张图,帮你把这一章的核心逻辑串起来。你看,IoU是基础,NMS是后处理,Anchor是策略,YOLO是实战。一环扣一环。

目标检测基础:知识体系 IoU(交并比) NMS(非极大值抑制) Anchor机制 YOLO系列 交集 / 并集 取值范围:[0, 1] 衡量框的重叠程度 小目标注意阈值 按置信度排序 保留最高分框 删除高IoU框 密集场景阈值设低 预设框(先验框) 3种尺度 × 3种宽高比 预测偏移量 建议用K-means聚类 端到端检测 v1 → v8 迭代 速度快,精度高 推荐YOLOv5 IoU → NMS → Anchor → YOLO:环环相扣,缺一不可

好了,这一章的内容就到这里。IoU、NMS、Anchor、YOLO,这四个概念你如果都理解了,后面的课程会轻松很多。记住,别急着跑,先学会走。

可可精品资料库