3、深度学习基础回顾:卷积神经网络(CNN)核心概念、锚框(Anchor Box)机制、非极大值抑制(NMS)、交并比(IoU)计算原理

做目标检测,光会调API可不行。你得把底层的几个核心概念吃透。今天咱们就聊聊CNN、锚框、NMS和IoU。这些是YOLO的骨架,理解了它们,后面调参、改模型才有底气。

本章核心脉络:CNN负责“看”和“提取特征”,锚框负责“猜位置”,IoU负责“算重叠”,NMS负责“去冗余”。四者串联,才构成一个完整的目标检测推理链路。

3.1 卷积神经网络(CNN)—— 特征提取的“眼睛”

CNN说白了就是一套自动找特征的过滤器。我刚开始接触时,总觉得它很玄乎。后来在项目里调试一个车牌识别模型,才真正体会到——卷积核就是特征探测器。

一个典型的CNN包含这几层:

  • 卷积层:用滑动窗口(卷积核)扫描图像,提取边缘、纹理等低级特征,再组合成高级语义。
  • 激活层(ReLU):去掉负值,增加非线性。没有它,网络再深也只是线性变换。
  • 池化层:下采样,缩小特征图尺寸,同时保留主要信息。我习惯用最大池化,效果稳定。
  • 全连接层:把特征图拉平,做最终分类或回归。

在YOLO里,CNN负责把输入图片变成一堆特征图。这些特征图里藏着物体的位置、类别和置信度信息。嗯,这里要注意——YOLO用的是全卷积网络,没有全连接层,这样能处理任意尺寸的输入。

我的经验:别把CNN想得太复杂。你可以把它理解成一个“特征压缩器”——输入一张图,输出一组有意义的数字。我在做工业缺陷检测时,发现浅层特征关注纹理,深层特征关注形状。理解这个,对调优很有帮助。

3.2 锚框(Anchor Box)—— 预设的“形状模板”

锚框是什么?说白了就是一组预设的矩形框。它们代表了你希望检测到的物体可能出现的形状和大小。

YOLO v3用了9个锚框,分3个尺度。每个尺度3个框。为什么是9个?因为COCO数据集里的物体形状大致能聚成9类。我曾在项目中自己聚类过锚框,效果确实比默认的好——锚框越贴合你的数据集,模型收敛越快。

特征图尺度 感受野 锚框尺寸(宽×高) 适合检测
13×13 大 (116×90), (156×198), (373×326) 大物体(如汽车、行人)
26×26 中 (30×61), (62×45), (59×119) 中等物体(如瓶子、书)
52×52 小 (10×13), (16×30), (33×23) 小物体(如鸟、手机)

每个锚框会预测4个偏移量(tx, ty, tw, th)和1个物体置信度,再加上类别概率。最终解码成真实的边界框。

避坑指南:我曾经在训练一个无人机视角的检测模型时,直接用YOLO默认锚框,结果小目标召回率极低。后来用K-means对训练集标注框重新聚类,换了锚框,mAP直接涨了5个点。所以——锚框一定要跟你的数据走。

3.3 交并比(IoU)—— 衡量“框得准不准”

IoU就是两个框的交集面积除以并集面积。值越大,说明两个框越重合。

公式很简单:

IoU = (A ∩ B) / (A ∪ B)

取值范围0到1。0表示完全不重叠,1表示完全重合。在YOLO里,IoU有三个关键用途:

  • 训练时:判断锚框是否匹配真实目标(通常IoU > 0.5就算正样本)。
  • 评估时:计算mAP,判断预测框是否算正确检测。
  • 后处理时:NMS用它来去重。

你想想看,如果IoU阈值设得太低(比如0.3),很多不准确的框也会被算成正确;设得太高(比如0.9),又可能漏掉一些接近的检测。我一般习惯在验证集上调一下这个阈值,找到最佳平衡点。

代码小贴士:计算IoU时,注意坐标格式。YOLO用的是中心点+宽高,但计算IoU需要左上角和右下角坐标。记得转换,否则算出来全是错的。我踩过这个坑。

3.4 非极大值抑制(NMS)—— 去掉“重复框”

模型预测时,同一个物体周围会冒出很多框。NMS就是把这些冗余框干掉,只保留最好的那个。

流程很简单:

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

为什么会这样?因为同一个物体上,高置信度的框通常更准。低置信度的框跟它重叠太多,说明是重复检测,直接扔掉。

避坑指南:NMS阈值不是万能的。设得太小(比如0.3),密集场景下容易漏检;设得太大(比如0.7),又可能留下太多重复框。我建议根据你的场景调——稀疏场景用0.5,密集场景用0.3-0.4。另外,YOLO v5之后用了加权NMS,效果更好,可以试试。

3.5 知识体系总览

下面这张图把四个核心概念的关系串起来了。你看一遍,应该能理解它们在YOLO里的协作方式。

YOLO目标检测核心概念关系图 YOLO目标检测核心概念关系图 输入图像 CNN 特征提取 多尺度特征图 锚框(Anchor Box) 预测边界框 IoU 计算 NMS 去重 最终检测结果 锚框提供形状先验 IoU衡量重叠程度

从图上你能看到:输入图像经过CNN提取特征,生成多尺度特征图。锚框提供形状先验,跟特征图一起解码出预测框。然后IoU上场,衡量预测框跟真实框的重叠程度。最后NMS出手,去掉重复框,输出最终结果。

这四个概念环环相扣。我在实际项目中,经常需要来回调它们——改锚框尺寸、调NMS阈值、换IoU计算方式。每次改动,效果都立竿见影。所以,别觉得它们是理论,它们是调优的武器。

一句话总结:CNN负责“看”,锚框负责“猜”,IoU负责“量”,NMS负责“选”。四者配合,YOLO才能又快又准地找到目标。