3. 目标检测基础
做目标检测,说白了就是让计算机在图像里找到物体,并告诉我们在哪、是什么。这背后有几个核心概念,就像盖房子的地基。今天我就把这几个地基给你讲透。
我个人习惯,每次带新人做项目,都会先让他们把这几个概念吃透。不然模型跑起来,出了问题你都不知道错在哪。
3.1 IOU:交并比
IOU,全称 Intersection over Union。它衡量的是两个框的重合程度。
公式很简单:
IOU = 两个框的交集面积 / 两个框的并集面积
你想想看,如果两个框完全重合,IOU=1。如果完全不沾边,IOU=0。
IOU 在目标检测中的三个核心用途:
- 训练阶段:判断预测框和真实框是否匹配(通常 IOU > 0.5 就算匹配)
- 后处理阶段:NMS 中用来过滤重复框
- 评估阶段:mAP 计算中判断检测是否正确
我在项目中遇到过一个问题:两个框明明位置差不多,但 IOU 只有 0.4。后来发现是框的尺寸差异太大。所以后来我改用 GIOU 或 CIOU,它们能更好地处理这种情况。
避坑指南:我曾经在计算 IOU 时,直接用整数坐标做除法,结果精度丢失严重。建议统一用浮点数计算,尤其是做损失函数时。
3.2 NMS:非极大值抑制
模型预测时,同一个物体周围会冒出很多框。NMS 就是把这些冗余框干掉,只留最好的那个。
流程其实很直观:
- 把所有预测框按置信度从高到低排序
- 选置信度最高的框,保留它
- 计算它和其他框的 IOU,把 IOU 大于阈值的框删掉
- 重复 2-3 步,直到没有框剩下
嗯,这里要注意:阈值选大了,会漏掉物体;选小了,会留下很多重复框。我一般用 0.5 作为默认值,但具体要看你的场景。
常见陷阱:NMS 对密集小目标效果很差。比如一群人站在一起,NMS 可能会把相邻的人框也干掉。这时候可以试试 Soft-NMS,它不直接删除,而是降低置信度。
3.3 Anchor:锚框
Anchor 是目标检测里一个很巧妙的设计。它相当于在图像上预置了一组固定大小和比例的框,模型只需要预测这些框的偏移量。
为什么要用 Anchor?
- 直接预测框的坐标太难了,模型学不动
- Anchor 给了模型一个「参考系」,它只需要说「往左挪一点,拉长一点」
- 不同尺度的 Anchor 可以覆盖不同大小的物体
我记得在 YOLOv7 里,Anchor 是通过 K-means 聚类从训练数据中自动学出来的。这样 Anchor 的尺寸更贴合你的数据集。
| 特征图尺度 | 感受野 | Anchor 尺寸(示例) | 适合检测 |
|---|---|---|---|
| 大(80x80) | 小 | 10x13, 16x30, 33x23 | 小物体 |
| 中(40x40) | 中 | 30x61, 62x45, 59x119 | 中等物体 |
| 小(20x20) | 大 | 116x90, 156x198, 373x326 | 大物体 |
实战经验:我建议你在自己的数据集上重新聚类 Anchor,不要直接用 COCO 的默认值。尤其是做工业检测时,物体尺寸分布和自然场景完全不同。
3.4 边界框回归
边界框回归,就是让模型学会把 Anchor 调整到目标位置。
通常我们预测的是 4 个偏移量:
tx, ty:中心点偏移(相对于 Anchor 中心)tw, th:宽高缩放(相对于 Anchor 宽高)
转换公式:
bx = σ(tx) + cx
by = σ(ty) + cy
bw = pw * exp(tw)
bh = ph * exp(th)
其中 cx, cy 是网格坐标,pw, ph 是 Anchor 的宽高。
你想想看,如果不做这个转换,模型直接预测坐标,那损失函数会非常大,梯度也不稳定。用了 Anchor 回归,模型只需要学一个很小的偏移量,训练稳定多了。
YOLOv7 的改进:YOLOv7 在回归时用了更精细的损失函数,比如 CIOU Loss。它不光考虑框的重叠面积,还考虑中心点距离和宽高比。我在项目中试过,用 CIOU 比用原始的 MSE Loss 能提升 2-3 个点的 mAP。
3.5 mAP:平均精度均值
mAP 是目标检测最常用的评估指标。它综合了精度和召回率,能全面反映模型的好坏。
计算步骤:
- 对每个类别,按置信度排序所有预测框
- 遍历每个预测框,判断它是 TP(正确检测)还是 FP(误检)
- 计算每个置信度阈值下的 Precision 和 Recall
- 绘制 PR 曲线,计算曲线下的面积(AP)
- 对所有类别的 AP 取平均,得到 mAP
这里有个关键点:IOU 阈值怎么定?
- mAP@0.5:IOU 阈值取 0.5,比较宽松
- mAP@0.5:0.95:从 0.5 到 0.95,步长 0.05,取平均。这个更严格,对框的精度要求更高
我个人习惯,做工程落地时主要看 mAP@0.5:0.95。因为实际部署中,框稍微偏一点就可能影响下游任务。
注意:mAP 高不代表模型一定能落地。我见过一个模型在 COCO 上 mAP 很高,但部署到工业相机上效果很差。因为训练数据和实际场景的分布不同。所以评估时一定要用你自己的测试集。
3.6 本章知识体系
下面这张图把本章的核心概念串起来了。你可以看到它们之间的依赖关系:
从这张图你可以看到,Anchor 是起点,它决定了模型能检测什么尺度的物体。边界框回归负责把 Anchor 调整到目标位置。IOU 是衡量调整好坏的标尺。NMS 用来去冗余。最后 mAP 给出一个综合评分。
这五个概念环环相扣。你理解了它们,就等于拿到了目标检测的钥匙。后面讲 YOLOv7 的具体结构时,你会发现每个模块都在围绕这些基础概念做优化。