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就是干这个的。它的核心思想很简单:保留得分最高的框,干掉和它重叠度高的其他框。
流程是这样的:
- 把所有预测框按置信度从高到低排序。
- 选置信度最高的框,保留它。
- 计算它和其他框的IoU。如果IoU大于阈值(比如0.5),就把那些框删掉。
- 重复第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,这四个概念你如果都理解了,后面的课程会轻松很多。记住,别急着跑,先学会走。