[YOLO系列③] YOLOv3和YOLOv4优化策略

1.YOLO-V3

1.网络架构改进

提升特征提取能力和训练稳定性​​

1.残差连接(Residual Connections)​

残差连接 是指在神经网络中将输入 x 直接跳跃连接(shortcut)加到输出 F(x) 上的那一条路径。数学形式如下:
$$
y = F(x) + x
$$

  • 其中:
    • x:输入
    • F(x):一系列卷积层后的输出(即“主干路径”)
    • x 是“旁路路径”或称“跳跃连接”
    • 两者相加形成最终输出 y
      这条连接就是 “残差连接”,它是 结构中的一条数据路径

为什么要加残差连接?

  1. 解决梯度消失:深层网络容易出现梯度消失,导致前层参数无法有效更新。残差连接可以让梯度直接从后向前传播,缓解这个问题
  2. 避免退化问题:当网络加深后,理论上精度应该更好,但实际上常常出现“深层网络比浅层表现差”的现象,残差连接能避免这个问题
  3. 更容易收敛:训练时网络更快收敛,训练更稳定
  4. 允许更深的网络:有了残差结构,能够训练出 50层、101层甚至1000多层 的深度神经网络

残差结构是指包含残差连接的整个网络子模块(block)。它通常包括:

  1. 一条主路径:由几层卷积、BN、ReLU 等组成,用来提取特征;
  2. 一条旁路径:直接跳过主路径,将输入 x 加到输出;
  3. 一个加法操作:将主路径和旁路径的结果合并。
1
2
3
4
5
6
7
8
输入 x
├─ Conv(卷积)
├─ BatchNorm(归一化)
├─ ReLU(激活)
├─ Conv(卷积)
├─ BatchNorm(归一化)
└─ 加上输入 x(残差连接 / Shortcut)
输出 y = F(x) + x

总结:残差结构其实就是“包含残差连接的子网络结构”

2.Backbone 升级:Darknet-19 → Darknet-53

YOLOv2 使用的是 Darknet-19,它结构简单、推理速度快,但在复杂场景中容易丢失细节信息,YOLOv3 需要一个更深、更强的特征提取网络来增强对小目标的检测能力,于是作者提出了Darknet-53特点:

  • “53” 代表网络共有 53 层具有可学习参数的层(大多是卷积层)
  • 引入了 残差结构(Residual Block),类似于 ResNet,使得更深层的网络更容易训练
  • 全部使用了 3x3 和 1x1 卷积核,保持运算高效
  • 没有使用全连接层,利于保持空间信息

Darknet-53 的网络层次可以分为多个阶段,每个阶段都包含若干个残差块,具体结构如下:

Stage Output Size Layers(简写) 残差块数量
1 256×256 Conv1: 3×3, 32 0
2 128×128 Conv2: 3×3, 64 / stride=2 1
3 64×64 Conv3: 3×3, 128 / stride=2 2
4 32×32 Conv4: 3×3, 256 / stride=2 8
5 16×16 Conv5: 3×3, 512 / stride=2 8
6 8×8 Conv6: 3×3, 1024 / stride=2 4

注:每个“残差块”都包含 1 个 1×1 卷积 + 1 个 3×3 卷积,并带有残差连接。

2.检测机制优化

提升多尺度目标检测和定位精度​

1.多尺度预测(Feature Pyramid)

在目标检测中,一个主要挑战是:目标大小不一,有的目标很小(比如鸟、行人),有的很大(比如卡车、建筑),为了同时检测这些不同尺寸的物体,YOLOv3 引入了多尺度预测机制,灵感来源于 FPN(Feature Pyramid Network)
核心思想:

在不同分辨率的特征图上分别进行检测,每个尺度都负责检测特定大小的目标。

YOLOv3 使用 Darknet-53 主干网络来提取特征,并构建多尺度输出。流程如下:

  1. 从主干网络中间层获取三个特征图(多尺度预测)
    • ResBlock8 输出 → 52×52
    • ResBlock15 输出 → 26×26
    • 最终输出 → 13×13
  2. 上采样 + 拼接(​细粒度特征融合)
    • 高层特征通过 上采样(Nearest Neighbour) 放大
    • 与来自浅层的特征图进行 拼接(concat)
    • 然后再通过卷积层提取融合后的特征

多尺度预测带来的好处:

  1. 增强小目标检测能力,如行人、人脸、交通标志
  2. 适应多种目标大小,从小狗到大卡车都能检测
  3. 信息融合更充分,深层语义 + 浅层细节互补
  4. 检测性能全面提升,尤其在 COCO 数据集上表现优异

2.​细粒度特征融合(Fine-Grained Features)​

为什么要融合细粒度特征?
神经网络在不断向下采样、加深层数的过程中:

  • 低层特征(浅层):保留了空间位置和纹理细节信息,但语义抽象能力弱
  • 高层特征(深层):具有很强的语义理解能力,但空间分辨率低、细节丢失
    这种深层特征虽然对“看懂物体”很强,但:
  • 小目标的位置、边界感知能力弱
  • 容易出现目标边界模糊、定位不准等问题。
    所以,细粒度特征融合的目标就是:结合低层的“清晰细节”与高层的“语义理解”,做到“看清楚 + 看懂了”。

YOLOv3 借助类似 FPN(Feature Pyramid Network) 的思想,把不同层级的特征融合起来,具体策略如下:

  1. 将高层的语义特征图(分辨率低)进行上采样(Nearest Neighbor)
  2. 与来自浅层网络的高分辨率特征图进行 拼接(concatenation)
  3. 拼接后经过卷积进一步提取融合后的信息,得到更丰富的检测特征图

3.Bounding Box 预测方式改进

YOLOv3 在 Bounding Box(边界框)预测方式 上也做了关键改进,这是 YOLOv3 能提升定位准确度、训练更稳定的重要原因之一。
早期 YOLO 系列的 bbox 预测有一些问题:

问题 解释
不够稳定 使用直接预测中心点 (x, y) 和宽高 (w, h),对回归不敏感,尤其宽高变化大时梯度不稳定
容易偏移 预测中心点是绝对位置,对小目标偏移影响更大
有负数预测值 预测结果可为负数,导致框“跑出图像”或不合理

YOLOv3 改进的核心是:用更稳定的相对形式来预测 bbox 参数,并通过激活函数限制其范围。具体改进包括:

  1. 使用 sigmoid 激活预测中心坐标偏移,始终在当前 grid cell 内,不会跑偏或跳出格子,更好学习“相对位移”,训练稳定、收敛更快
  2. 宽高采用 anchor box 的缩放系数,YOLOv3 不直接预测宽高,而是基于 anchor box 尺寸进行缩放,这样做的好处是,保证宽高始终为正值,使用指数函数使得模型可以灵活地预测比 anchor 更大/更小的物体

与 YOLOv2 的预测方式对比:

对比项 YOLOv2 YOLOv3
中心坐标预测方式 未归一化(线性偏移) Sigmoid 激活后加上网格坐标
宽高预测方式 线性缩放 指数缩放(保证宽高为正)
激活函数 无限制 Sigmoid + exp 让预测值更合理、更稳定
框的位置稳定性 容易偏移 更准确、学习目标位置更加稳定
多标签支持 softmax 分类(互斥) sigmoid 多标签(支持多标签分类场景)

4.先验框优化(Anchor Box Clustering)

先验框优化是 YOLOv3 在预测精度上提升的重要步骤,它直接影响模型预测框的 拟合能力和收敛速度

为什么需要先验框(Anchor Box)优化?
在物体检测中,Anchor Box(先验框) 是预设的一组矩形框,用于引导模型预测目标的位置和尺寸。
YOLOv2 起首次引入 Anchor Box,每个格子默认设定多个尺度和比例的先验框,模型只需预测与 Anchor Box 的“偏移量”,这样可以提高定位精度,尤其是对于尺寸多变的目标。
但这样存在问题:

  • 不能很好地拟合训练集中真实目标的尺寸分布
  • 对小目标或特殊形状的物体不友好
  • 容易出现预测框与实际目标形状差距太大

YOLOv3 使用 K-Means 聚类算法 在训练集上自动学习出合适的 Anchor Box 尺寸,替代人为设置,聚类过程如下:

  1. 收集训练集中的所有真实 bbox(宽、高)
  2. 选择一个距离度量方式
    • 通常用 IOU 距离(1 - IOU),不是欧氏距离
    • 这样更符合 bbox 匹配的实际逻辑
  3. 用 K-Means 对这些真实框做聚类
    • 聚出 K 个“代表性 bbox 尺寸”作为 anchor
  4. 得到一组尺寸不一但适配度高的 Anchor Boxes

Anchor Box 优化的好处:

优势 说明
更匹配真实目标尺寸分布 聚类得出的 anchor 更符合数据分布
提升预测框与真实框匹配度 IOU 更高,正样本分配更准确
收敛速度更快 不会训练初期大量预测框 mismatch
提高小目标检测能力 某些 anchor 专门服务于小目标
泛化性更强 在新数据集上重新聚类即可快速适配

5.分类方式变化:Softmax → Sigmoid

YOLOv3 抛弃 Softmax,采用 逐类别 Sigmoid 激活,实现了更灵活的 多标签分类能力,使模型可以适应更多复杂、多义、多标签的目标检测任务,是一个设计上的质变提升。

为什么 Softmax 不适合目标检测?
在真实检测任务中,存在以下情况:

情况 举例
多标签物体 一只“人骑在马”上,可能属于“人类”和“骑手”
模糊/不确定类别 模糊图像同时可能是“猫”和“狸花猫”
需要支持多类可能性 一些检测任务,如医学影像、遥感图像,多类交叉

因此 Softmax 会强行“排他”,不能表达“一个框可能属于多个类”的情况

YOLOv3 抛弃 Softmax,改用 逐类别的 Sigmoid 激活函数
特点:

  • 每个类别都有一个独立的概率
  • 类别之间互不干扰,不要求总和为 1
  • 可以实现多标签分类(multi-label classification)

3.其它

1.训练策略增强​

  • 多尺度训练(Multi-Scale Training):在训练时动态调整输入图像尺寸(如 320×320 → 608×608),提升模型尺度鲁棒性
  • 数据增强:引入随机裁剪、色彩抖动等,提升泛化性

2.损失函数改进​

  • 用二元交叉熵(BCE)替代 MSE 计算分类损失,更适应多标签任务
  • 对定位损失(IoU)和分类损失分开加权,平衡不同任务优化

3.细粒度特征融合(Fine-Grained Features)​​

  • 在 26×26 和 52×52 特征图中,通过跳跃连接(Concatenation)融合浅层细节信息(如边缘、纹理),提升小目标检测

4.动态阈值与非极大抑制(NMS)优化​

  • 设置动态置信度阈值过滤低质量预测框
  • 改进 NMS 算法,缓解密集场景下的重叠框误删问题

2.YOLO-V4

1.Bag of freebies(BOF)训练优化

1.Mosaic数据增强(Mosaic data augmentation)

Mosaic 数据增强 是由 YOLOv4 首次提出的一种图像增强方法是将4张不同的图像拼接成1张图像,并将目标框同时映射过来。相比传统的数据增强(如翻转、旋转、裁剪等),Mosaic 可以在一次训练样本中同时看到更多目标,显著增加了图像中目标的多样性、数量和尺度变化

Mosaic实现过程:

  1. 从数据集中随机选择 4 张图像
  2. 对每张图像分别进行缩放、裁剪等基本预处理
  3. 将这 4 张图像以 2×2 网格方式拼接成 1 张图像(可以是中心交汇,也可以是非对称拼接)
  4. 将原图中的标注框(bounding boxes)根据缩放和平移关系映射到拼接后的图像中
    这样每张训练图像可以包含多个原始图像中的目标

Mosaic 的优势:

  1. 提高小目标检测能力,Mosaic 能让原本分布在不同图像中的小目标集中在一张图中,使模型能更好地学习小目标的特征
  2. 增强模型鲁棒性,通过随机组合不同图像内容,模型学到更丰富的背景、目标组合,从而提升泛化能力
  3. 类似于“批内增强”,它相当于将 4 张图片的信息融合进了 1 次前向传播中,某种程度上起到了提升 batch 多样性的作用。
  4. 无需大batch size,结合了 4 张图像的信息,有效缓解小 batch size 下样本多样性不足的问题

2.自对抗训练(Self-Adversarial Training, SAT)

YOLOv4 中的 自对抗训练(Self-Adversarial Training, SAT) 是一个非常有趣、而且颇具创意的训练技巧。它首次将“对抗攻击”的概念用于数据增强,从而提升模型的鲁棒性和性能。

什么是自对抗训练?SAT 是一种分两步进行的训练方式,先“欺骗”模型,再“教训”模型。
它的核心思路是:

  1. 利用模型本身生成“对抗性扰动”来修改输入图像,使其对模型变得更难识别
  2. 然后再用这些被“扰乱”的图像去训练模型,让模型学会“识破”这些对抗干扰
    这就像模型自己“打一巴掌,再喂药”,最终变得更强。

实现过程:
SAT 通常发生在每一个 mini-batch 的训练过程中,主要包括两个阶段:
对抗扰动阶段:主要是找出模型当前最不容易处理的样本区域

  • 模型接收到一张原始图像
  • 对其进行一次前向传播,计算损失
  • 然后根据这个损失对输入图像计算梯度(类似 FGSM 方法)
  • 利用这个梯度对图像进行微调(添加对抗扰动)
  • 得到一张被“攻击过”的图像
    常规训练阶段
  • 用第一步生成的“被攻击图像”进行正常的训练
  • 目标是让模型正确识别这些更具挑战性的样本,从而提升鲁棒性

这样做有什么好处?

  1. 提升模型鲁棒性:SAT 实际上是让模型暴露在“对抗样本”中,因此它在面对噪声、遮挡、低质量图像时,表现更稳健
  2. 模拟更复杂的样本分布:相比于普通数据增强,SAT 所生成的对抗图像具有“更真实的混乱”,更接近模型容易犯错的场景
  3. 不需要额外的数据或模型:自对抗训练完全基于当前模型自身,不需要额外的对抗网络(不像 GAN),训练成本可控

3.DropBlock

YOLOv4 中引入的 DropBlock 是一种比 Dropout 更高级的正则化方法,它专门针对 卷积神经网络(CNN) 中的特征图设计,能有效防止模型过拟合,效果非常实用且高效。
DropBlock 是一种针对 CNN 特征图的正则化方法,它会随机“抹掉”一个区域(Block)而不是单个点(像 Dropout 那样)。想象一下,把特征图中的一小块方形区域设为零,就像是图像上贴了一块“遮挡物”。这样训练时,模型就必须学会依赖更多元的上下文信息,而不是过度依赖某一个区域。

为什么要用 DropBlock(而不是 Dropout)?
在卷积网络中,普通的 Dropout 并不太有效,原因是:

  • Dropout 是随机将单个像素设为 0
  • 但在 CNN 的特征图中,相邻像素高度相关
  • 所以即使“断”了一个点,其周围还会有类似信息,模型没太受影响
    DropBlock 会将一整块区域同时设为 0,这更像是“局部信息丢失”,迫使模型从别的地方寻找信息,更有效防止过拟合。

DropBlock 的工作机制
核心参数有两个:

  • block_size:要遮挡的方块区域的边长,比如 3 就是一个 3×3 的方块
  • keep_prob / drop_prob:保留或丢弃的概率,控制正则化强度
    实现步骤如下:
  1. 随机选择特征图上的若干中心点
  2. 以这些点为中心,生成固定大小的 block 区域
  3. 将这些 block 区域内的值全部设为 0
  4. 保持整个特征图的均值不变(可选的 scale 操作)

4.标签平滑(Label Smoothing)

标签平滑是一种防止模型过拟合的方法,核心思想是:不要把标签当作“100% 确定”的真理,而是给它留一点“模糊空间”。
传统分类任务中,标签是独热(one-hot)形式,比如对于 3 类任务中的第 2 类,标签为:

1
[0, 1, 0]

而标签平滑之后,就变成了类似:

1
[0.1, 0.8, 0.1](当 smoothing=0.2 时)

这样模型在训练时就不会把第二类“当作绝对真理”,而是会保持一些“不确定性”,从而减少过拟合。

为什么要用标签平滑?
在目标检测中,特别是像 YOLO 这样的大规模多类检测中,模型很容易:

  • 对于某一类过拟合(预测置信度接近1)
  • 对其他类别完全“视而不见”
    这会造成模型泛化性差,一旦测试图像稍有偏差,模型就“懵了”。
    而标签平滑可以缓解这个问题,让模型在训练过程中更温和地“相信”标签,从而提升稳定性与鲁棒性。

YOLOv4 使用标签平滑主要是用于:

  • 类别置信度的预测部分(即 objectness + class probability)
  • 搭配 CIoU Loss、Mosaic、SAT 等其他策略,形成一套完整的正则组合拳
  • 特别有效于多类、小样本类别,能减少对“极端标签”的依赖

注意事项

  • smoothing 不宜过大,一般 $0.05 \sim 0.1$
  • 在 label 极其干净且类别之间差异极大时,可能带来微弱负面影响(置信度下降)
  • 对于检测模型来说,标签平滑只作用在分类标签上,不影响位置(bbox)回归

5.​IoU/GIoU/DIoU/CIoU 损失

在 YOLO 系列(特别是 YOLOv3 之后)中,边界框回归(bounding box regression) 的损失函数经历了从 IoU 到 GIoU、DIoU、CIoU 的逐步演化。这些损失函数的目标是让预测框更准确地贴合真实框。

IoU(Intersection over Union)

$$
IoU = \frac{Area\ of\ Overlap}{Area\ of\ Union}
$$

表示预测框和真实框重合部分与并集的比例,范围在 $[0, 1]$
问题点:

  • 如果两个框 没有重叠(IoU=0),就无法提供任何梯度信息,模型无法学习
  • 只能衡量“重叠程度”,不能衡量位置差异或形状差异
GIoU(Generalized IoU)

$$
GIoU = IoU - \frac{|C \setminus (A \cup B)|}{|C|}
$$

  • $C$ 是预测框和真实框的最小闭包框(包含两者的最小矩形)
  • 当 IoU = 0 时,GIoU 仍然能产生梯度
    优点:
  • 即使两个框没有重叠,也能提供优化方向
  • 更鲁棒地处理初始预测不准的情况
DIoU(Distance IoU)

$$
DIoU = IoU - \frac{\rho^2(\mathbf{b}, \mathbf{b}^{gt})}{c^2}
$$

  • $\rho$:两个框中心点之间的欧几里得距离
  • $c$:包含两个框的最小闭包框的对角线长度
    优点:
  • 加入了 “中心点距离”惩罚项,促使预测框中心靠近真实框
  • 收敛更快,回归效果更好
  • 更适合快速定位目标
CIoU(Complete IoU)

$$
CIoU = IoU - \left( \frac{\rho^2(\mathbf{b}, \mathbf{b}^{gt})}{c^2} + \alpha v \right)
$$

其中:

  • $\rho^2$ 是中心点距离;
  • $v$ 是宽高比一致性度量项;
  • $\alpha$ 是动态权重,依赖于 IoU 和 $v$;
    其中:
    $$v = \frac{4}{\pi^2} \left( \arctan\frac{w^{gt}}{h^{gt}} - \arctan\frac{w}{h} \right)^2$$

$$ \alpha = \frac{v}{(1 - IoU) + v} $$

优点是同时考虑了,框的重叠程度(IoU)、中心点距离(定位)、 宽高比差异(形状匹配)。是目前目标检测中最全面、收敛最快、表现最优的一种 bbox 回归损失。

2.Bag of specials(BOS)模型结构改进

1.CSPDarknet53(Cross Stage Partial Network)

CSPDarknet53 是 YOLOv4 的主干网络(Backbone),它是对 YOLOv3 中使用的 Darknet-53 的增强版本,引入了 CSPNet(Cross Stage Partial Network) 架构思想,大幅提升了网络的性能和效率。
Darknet-53 是 YOLOv3 使用的主干网络,包含 53 层卷积结构,使用残差连接(Residual),特点是结构简单,速度快,适合实时检测。
但是Darknet-53 在高层容易冗余梯度,特征融合效率一般,在保持轻量的同时很难进一步提升精度。
CSPDarknet是将特征图通道分成两部分:一部分直接跳过残差块,另一部分通过残差块学习,最终在 stage 的末尾进行融合。也就是说,在传统残差块的基础上,把输入一分为二:一半走残差学习路径,一半直接传输;最后再 concat(拼接)。

YOLOv4 中 CSPDarknet53 使用了新的激活函数:Mish,Mish 的特点:平滑且非单调,梯度流通更顺畅,表现优于 ReLU、LeakyReLU(但推理速度略慢)。

CSPDarknet53 = Darknet53 + CSPNet + Mish 激活函数,拥有更高的效率、更强的表示力,是 YOLOv4 实时检测的核心骨干网络。**

2.SPPNet(Spatial Pyramid Pooling)

SPPNet 是一个非常经典的结构,被广泛应用于图像分类、目标检测等任务中。YOLOv4 也集成了它的思想,用来增强特征提取能力。
它的核心思想是:在一张特征图上,进行多尺度的最大池化,然后把这些池化结果拼接起来,从而提取多尺度上下文信息。

为什么要用 SPP?
YOLOv4 中的目标检测有两个难点:

  1. 目标尺寸不一致 —— 同一张图里,大目标、小目标混杂
  2. 感受野不够大 —— 上层卷积只能看到局部
    SPP 的优势是:
  • 不改变输入图像尺寸
  • 能提取 不同感受野下的特征(即多尺度上下文信息)
  • 提升模型对大、小目标的适应能力

SPP 的结构怎么做?
假设某一层输出了一个大小为 n × n 的特征图。
我们在这个特征图上做:

  • 1×1 最大池化(全局)
  • 5×5 最大池化
  • 9×9 最大池化
  • 13×13 最大池化
    然后对这些池化结果进行拼接(concat)。
    通俗理解:就像把一个图像用不同大小的窗口去“扫”,每个窗口提取一个“全局摘要”特征,最后把这些不同尺度的摘要拼在一起,形成更全面的理解。

3.PANet(Path Aggregation Network)

PANet = FPN + Bottom-Up Path + Adaptive Feature Pooling

Facebook AI 在 2018 年提出,最初是为了改进实例分割和目标检测中的多尺度融合结构。

在 YOLOv4 中,PANet 被用作 Neck,连接主干网络(如 CSPDarknet53)和检测头(Head),增强信息流的双向传播。

PANet 的核心结构

1
2
3
4
5
6
7
8
9
CSPDarknet53(Backbone)

SPP 模块(增强感受野)

FPN(top-down 路径)

PANet(bottom-up 路径)

YOLO Head(输出框和类别)

这种顺序结构被称为 “SPP + FPN + PANet”,强化了语义 & 位置特征融合,尤其对小目标检测非常有效。

PANet 的优势:

优点 说明
双向融合 结合 top-down 和 bottom-up 信息
强化定位 底层信息可回传,增强空间细节
小目标检测提升 多尺度增强对小物体识别更敏感
与 FPN 兼容 在 FPN 基础上增强,无需重构体系

PANet = FPN 的双向升级版,它让特征融合从“单向信息流”变成“双向协作”,是 YOLOv4 实现强小目标检测能力的重要模块。

4.CBAM

CBAM(Convolutional Block Attention Module)是一个轻量级的注意力机制模块,可以无缝嵌入到现有的 CNN 网络中,用于增强模型对有用特征的关注能力,提升特征表达效果。CBAM 在图像分类、目标检测、分割等任务中都非常实用。
它是一个模块化的注意力结构,由两个子模块组成:

  1. Channel Attention Module(通道注意力)
  2. Spatial Attention Module(空间注意力)
    这两个模块串联使用,用来从不同角度提升特征图的质量

通道注意力模块(Channel Attention),关注哪些通道更重要,如边缘通道、纹理通道、颜色通道等。以达到强化重要的通道,抑制冗余信息的目的。
步骤:

  1. 对输入特征图分别做 Global Avg Pooling 和 Max Pooling,得到两个通道描述向量(1×1×C)
  2. 将这两个向量送入 共享的 MLP(全连接层)
  3. 输出经过 sigmoid 激活的权重向量
  4. 将该权重与原特征图逐通道相乘

空间注意力模块(Spatial Attention),关注“图像上哪些位置更关键”,比如目标所在区域。
步骤:

  1. 对通道维做 MaxPool 和 AvgPool,得到两个 1×H×W 特征图
  2. 将它们拼接在通道维上(2×H×W)
  3. 通过一个 7×7 的卷积核
  4. 经 sigmoid 激活后生成空间注意力图
  5. 与输入特征图逐元素相乘

CBAM 的优势:

优点 说明
模块轻量 几乎不增加计算量
可插拔 可用于任何 CNN 模型后续模块
语义增强 强调关键通道和空间区域,提高准确率
对小目标友好 提升模型关注小区域信息的能力
适合多任务 分类、检测、分割任务都适用

CBAM 是一个串联的“通道 + 空间”注意力模块,帮助 CNN 更聪明地理解“看哪”和“看什么”,在轻量化和性能之间取得了极佳的平衡。

5.Mish 激活函数

Mish 激活函数是一种新兴的非线性激活函数,在很多模型(包括 YOLOv4)中被应用,用于增强特征表达能力。它是 ReLU 和 Swish 的一种更平滑、性能更优的替代方案。

Mish 与其他激活函数的对比

激活函数 数学表达 是否平滑 是否单调 输出范围 性能表现
ReLU max(0, x) [0, ∞) 基础款
LeakyReLU max(αx, x) (-∞, ∞) 较好
Swish x * sigmoid(x) (-∞, ∞)
Mish x * tanh(softplus(x)) (-∞, ∞) 最优(很多场景)

Mish 继承了 Swish 的非线性优势,输出在负区间更温和,利于梯度流动。

Mish 的优势总结:

优势 描述
更强特征表达 曲线光滑,非线性强,有利于建模复杂模式
梯度更稳定 相比 ReLU、LeakyReLU 梯度不会突变
不截断负值 在负区间仍有小的输出,有利于保留信息
实证有效 在 YOLOv4、EfficientNet 等网络上验证有效提升

YOLOv4 将 Mish 激活广泛用于主干 CSPDarknet53,替换了传统的 LeakyReLU,配合其他模块(如 CSP、SPP、PANet)进一步提升准确率,对小目标检测尤其明显。

6.Eliminate grid sensitivity

主要用于改善目标检测中因网格划分导致的预测偏差问题,尤其是在小目标或边缘目标的检测上。

什么是 Grid Sensitivity(网格敏感性)?
在 YOLO 系列(尤其是 YOLOv1~v3)中,图像被划分为 S×S 个网格,每个网格预测其“负责”的目标框:

  • 每个目标只能被分配给其中心点所在的网格
  • 假如目标刚好压在网格边缘,模型必须决定“左边网格负责”还是“右边负责”,这就容易产生波动(不稳定)
  • 同样,小目标若跨多个网格,可能会出现预测位置偏差

YOLOv4 对于位置回归的预测做了以下调整,特别是在预测框中心坐标 (x, y) 的计算方式上:
加上一个小常数 ε,以允许预测点略微“跳出”当前网格,突破 sigmoid 限制。

方法一:缩放输出范围
$$\hat{x} = (\sigma(t_x) \cdot s + \epsilon) + c_x$$
- $s \in (0,1.5)$,例如 1.2
- ε 是微小偏移,用于平滑过渡

方法二:用更大的 sigmoid 控制区间
$$ \sigma(2 \cdot t_x) - 0.5 \ $$
- 这样 sigmoid 的范围变成了约 (-0.5, 1.5),可以适度超出网格边界
这种方式就允许中心坐标跨越网格边界,从而缓解边缘预测抖动,提升定位精度

通俗总结一下,网络把图像像井盖一样切成格子,以前每个“井盖”只能管它正中间的东西,现在我们说:井盖的手可以伸出去一点点,不用非得把人圈死在正中心,这样,就能“柔和地”预测落在格子边缘的目标了,不再出现抖动、漏检!

3.后处理优化

1.DIoU-NMS​/​Soft-NMS

用来改进 YOLO 等目标检测器中 非极大值抑制(NMS) 的优化技术,目的是在去除冗余检测框时,更智能地保留真实目标框,尤其对密集目标检测、小目标检测有帮助。

Soft-NMS 更柔和、精细地处理框之间的重叠;DIoU-NMS 则更智能地结合了 IoU 与中心距离,更适合 YOLO 等实时检测器,对密集目标特别有效。

NMS 是什么?
在目标检测中,模型可能对同一个物体输出多个重叠框,需要做抑制,原始 NMS(Greedy NMS) 策略是:
1. 选择当前得分最高的框
2. 将与其 IoU > 阈值 的其他框全部移除
3. 重复以上步骤直到无框可选
这种做法简单暴力,但存在两个问题

  • 对密集目标不友好(比如人群、果堆)
  • 可能误删有效框(只因为 IoU 稍大)
Soft-NMS(Soft Non-Maximum Suppression)

不是直接删掉重叠框,而是“软处理”:随着 IoU 增加,逐渐降低其它框的置信度。
优点是更温和地处理重叠框;可以保留多个相邻目标,适合拥挤场景。

DIoU-NMS(Distance IoU-based NMS)

除了考虑 IoU,还考虑 两个框中心点的距离优先保留“离得远的”框,避免误删多个相邻目标。
优点是解决 NMS 对密集目标误删问题;对于同类目标密集区域(如行人、人脸)效果明显提升, 速度快,易于替换传统 NMS。

DIoU-NMS vs Soft-NMS 对比

特性 Soft-NMS DIoU-NMS
保留重叠目标 更温和 更智能
抑制依据 IoU + 衰减函数 IoU + 距离
对密集目标 很有效 很有效
计算复杂度 较高(需要排序) 类似原始 NMS
是否去除框 不直接去除 直接去除(基于距离)
在 YOLO 中应用 默认未启用 YOLOv4 默认采用

3.总结

YOLO-V3 改进

  1. 网络架构改进
    • 残差连接(Residual Connections)​​:解决梯度消失和退化问题,允许训练更深的网络
    • Darknet-53 主干网络​:引入残差块,提升特征提取能力,支持多尺度检测
  2. 检测机制优化
    • 多尺度预测​:通过三个不同尺度的特征图(13×13、26×26、52×52)检测不同大小的目标
    • 细粒度特征融合​:上采样深层特征并与浅层特征拼接,结合细节与语义信息
    • 边界框预测改进​:sigmoid处理中心坐标,基于anchor的指数缩放预测宽高,提升稳定性
    • 先验框优化​:K-means聚类生成更匹配数据分布的anchor尺寸
    • 分类方式​:用sigmoid替代softmax,支持多标签分类
  3. 训练策略
    • 多尺度训练​:动态调整输入尺寸,增强模型鲁棒性
    • 数据增强​:如随机裁剪、色彩抖动等
    • 损失函数​:二元交叉熵(分类)与改进的定位损失结合

YOLO-V4 改进

  1. Bag of Freebies(训练优化)​
    • Mosaic数据增强​:拼接四张图像,增加目标多样性和尺度变化
    • 自对抗训练(SAT)​​:生成对抗样本并训练模型,提升鲁棒性
    • DropBlock​:区域级正则化,防止过拟合
    • 标签平滑​:缓解分类标签的过拟合
    • CIoU损失​:综合考虑重叠、中心距离和宽高比,提升定位精度
  2. Bag of Specials(结构改进)​
    • CSPDarknet53​:引入CSP结构和Mish激活函数,提升特征提取效率
    • SPPNet​:多尺度池化增强感受野
    • PANet​:双向特征金字塔,强化多尺度融合
    • CBAM注意力机制​:通道与空间注意力结合,聚焦关键特征
    • Mish激活函数​:平滑梯度,增强非线性表达能力
    • 消除网格敏感度​:允许预测框微调出网格,改善边缘目标检测
  3. 后处理优化
    • DIoU-NMS​:结合IoU与中心距离,减少密集目标的误删

对比

改进点 YOLO-V3 YOLO-V4
主干网络 Darknet-53(残差连接) CSPDarknet53(CSP结构 + Mish激活)
多尺度检测 三尺度特征图 + FPN思想 SPP + PANet(双向融合)
数据增强 多尺度训练、传统增强 Mosaic、自对抗训练(SAT)
正则化 残差连接、BatchNorm DropBlock、标签平滑
损失函数 Sigmoid分类 + 定位损失 CIoU损失(综合重叠、距离、宽高比)
注意力机制 CBAM(通道与空间注意力)
后处理 传统NMS DIoU-NMS(结合距离抑制冗余框)
激活函数 LeakyReLU Mish(更平滑的梯度流)

YOLO-V3​:通过残差结构、多尺度预测和细粒度融合,解决了深层网络训练难题,提升小目标检测能力。
YOLO-V4​:集成大量训练技巧(Mosaic、SAT)和结构优化(CSP、PANet、CBAM),结合CIoU损失和DIoU-NMS,显著提升精度与鲁棒性,尤其适合复杂场景和密集目标检测。