深度学习目标检测:YOLOv4 技术全面解析 其中v5和v4没有本质区别。v5重工程方面,v4更重学院派。下面介绍v4的原理。v5类似。

系列说明:本系列共四篇,本篇为第三篇,聚焦 YOLOv4 引入的全面技术升级——从数据增强、正则化、损失函数到骨干网络与特征聚合的系统性改进。


一、YOLOv4 背景与定位

论文:《YOLOv4: Optimal Speed and Accuracy of Object Detection》(2020,CVPR)
作者:Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao

YOLOv4 更换了原作者(Joseph Redmon 退出),由 Alexey Bochkovskiy 主导开发。它并非从零设计新架构,而是在 YOLOv3 基础上系统性地吸收了近年来目标检测领域的最新研究成果,将大量被证明有效的技术精心组合,显著提升了检测性能。

YOLOv4 的核心设计哲学

在单张消费级 GPU 上实现最优的速度与精度平衡。

YOLOv4 将改进点分为两大类:

类别 名称 含义
BoF(Bag of Freebies) 免费午餐 不增加推理计算量,通过改进训练策略提升精度
BoS(Bag of Specials) 特殊组件 少量增加推理计算量,但精度提升明显

二、数据增强(BoF:数据层面)

数据增强是 YOLOv4 中 Bag of Freebies 的重要组成部分,目标是在不增加推理开销的前提下提升模型泛化能力。

2.1 马赛克数据增强(Mosaic Augmentation)

马赛克增强是 YOLOv4 提出的最具代表性的创新之一。

原理:随机选取 4 张图像,按随机比例拼接成一张图,形成类似马赛克的效果。

在这里插入图片描述

图1:马赛克数据增强,将 4 张图随机拼合为一张训练样本

优势

  • 一次训练相当于处理 4 张图像,丰富数据多样性
  • 让模型在一张图中同时看到多种场景和目标;
  • 增加了小目标的占比(目标在被裁切后变小);
  • 大幅降低对大 mini-batch 的依赖,小 batch 也能学到丰富的上下文。

2.2 其他数据增强方法

YOLOv4 还使用了以下增强技术:

增强方法 作用
随机裁剪(Random Crop) 模拟目标局部出现
随机翻转(Random Flip) 提高模型对方向的鲁棒性
色彩抖动(Color Jitter) 增强对光照/色彩变化的适应性
MixUp 两张图像混合,标签软化处理
CutMix 将一张图的部分区域粘贴到另一张图
随机缩放(Multi-Scale) 继承自 YOLOv3,训练时随机改变输入尺寸

三、DropBlock 正则化

3.1 Dropout 的局限性

传统 Dropout 随机屏蔽单个神经元,但在卷积特征图中,相邻位置的特征高度相关——被 Dropout 的特征信息可以通过邻近特征轻松恢复,导致 Dropout 对 CNN 效果有限。

3.2 DropBlock 原理

DropBlock(Google,2018)是专为卷积网络设计的正则化方法:与 Dropout 随机屏蔽单个点不同,DropBlock 随机屏蔽连续的矩形区域(Block)

在这里插入图片描述

图2:左侧为 Dropout,右侧为 DropBlock,屏蔽连续区域使特征无法轻易恢复

参数

  • block_size:要屏蔽的方块边长(通常取 7×7);
  • keep_prob:保留激活的概率(类比 Dropout 的 keep_rate)。

效果:强迫网络学习更全局的特征,减少过拟合,提升泛化能力。


四、IOU Loss 系列改进

4.1 为什么要改进 IOU Loss?

在这里插入图片描述

YOLOv1~v3 使用 MSE(均方误差)计算坐标损失:

L=∑(xpred−xgt)2+(ypred−ygt)2+…\mathcal{L} = \sum (x_{pred} - x_{gt})^2 + (y_{pred} - y_{gt})^2 + \ldotsL=(xpredxgt)2+(ypredygt)2+

问题:MSE 将坐标视为独立变量,没有考虑边界框的整体几何关系,导致:

  • 预测框与真实框不重叠时,梯度为零(无法优化);
  • 对小框和大框的敏感度不一致。

4.2 IOU Loss → GIOU Loss → DIOU Loss → CIOU Loss

YOLOv4 最终采用 CIOU Loss,这是 IOU Loss 系列的最终进化版:

IOU Loss

LIOU=1−IOU(Bpred,Bgt)\mathcal{L}_{\text{IOU}} = 1 - \text{IOU}(B_{pred}, B_{gt})LIOU=1IOU(Bpred,Bgt)

优点:直接优化检测指标;
缺点:不重叠时梯度为零。

GIOU Loss(Generalized IOU)

LGIoU=1−IOU+∣C−(Bpred∪Bgt)∣∣C∣\mathcal{L}_{\text{GIoU}} = 1 - \text{IOU} + \frac{|C - (B_{pred} \cup B_{gt})|}{|C|}LGIoU=1IOU+CC(BpredBgt)

CCC 为包含两个框的最小外接矩形。
优点:解决不重叠时梯度消失问题;
缺点:收敛慢,水平/垂直情况下退化。

在这里插入图片描述

DIOU Loss(Distance IOU)

LDIoU=1−IoU+ρ2(bpred,bgt)c2\mathcal{L}_{\text{DIoU}} = 1 - \text{IoU} + \frac{\rho^2(b_{pred}, b_{gt})}{c^2}LDIoU=1IoU+c2ρ2(bpred,bgt)

其中 ρ\rhoρ 为两框中心点的欧氏距离,ccc 为最小外接矩形对角线长度。
优点:直接最小化中心点距离,收敛更快。

然而还有一些小问题,如果预选框宽高大一些也不是很好。

CIOU Loss(Complete IOU)✅ YOLOv4 采用

LCIOU=1−IOU+ρ2c2+αv\mathcal{L}_{\text{CIOU}} = 1 - \text{IOU} + \frac{\rho^2}{c^2} + \alpha vLCIOU=1IOU+c2ρ2+αv

其中:
v=4π2(arctan⁡wgthgt−arctan⁡wpredhpred)2,α=v(1−IoU)+vv = \frac{4}{\pi^2}\left(\arctan\frac{w_{gt}}{h_{gt}} - \arctan\frac{w_{pred}}{h_{pred}}\right)^2, \quad \alpha = \frac{v}{(1-\text{IoU})+v}v=π24(arctanhgtwgtarctanhpredwpred)2,α=(1IoU)+vv

CIOU 同时考虑了:

  1. 重叠面积(IOU)
  2. 中心点距离
  3. 宽高比的一致性(v)
Loss 类型 重叠面积 中心距离 宽高比
IoU
GIoU
DIoU
CIoU

五、非极大值抑制改进:DIOU-NMS

5.1 传统 NMS 的问题

NMS(Non-Maximum Suppression)的工作原理:保留得分最高的框,删除与其 IOU 超过阈值的其他框。

问题:当两个不同目标的检测框高度重叠时,得分较低的框会被错误删除,导致漏检。

在这里插入图片描述

图3:传统 NMS 在目标重叠时容易将真实检测框误删

5.2 Soft-NMS

将删除改为衰减得分

si=si⋅exp⁡(−IoU(M,bi)2σ)s_i = s_i \cdot \exp\left(-\frac{\text{IoU}(M, b_i)^2}{\sigma}\right)si=siexp(σIoU(M,bi)2)

与高分框 MMM 重叠越多,得分衰减越大,但不直接删除,最后按阈值过滤。

5.3 DIoU-NMS(YOLOv4 采用)

DIoU-NMS 在判断是否删除框时,不仅考虑 IoU,还额外考虑中心点距离

Score′=IoU(M,bi)−RDIoU(M,bi)\text{Score}' = \text{IoU}(M, b_i) - R_{\text{DIoU}}(M, b_i)Score=IoU(M,bi)RDIoU(M,bi)

其中 RDIoUR_{\text{DIoU}}RDIoU 为中心点距离比值(两框中心越远,惩罚越小)。

优势:同一位置的重叠框会被抑制,而位置不同但 IoU 较高的框(属于不同目标)会被保留,有效减少漏检。


六、骨干网络:CSPDarknet53

6.1 SPP-Net:解决固定输入尺寸问题

SPP(Spatial Pyramid Pooling,空间金字塔池化),由何恺明提出:

  • 普通 CNN 需要固定尺寸输入(如 224×224);
  • SPP 在最后一层卷积后加入金字塔池化,将任意尺寸特征图池化为固定维度;
  • 使网络能接受任意尺寸输入,且在不同尺度下提取多层次特征。

YOLOv4 在 Neck 部分使用 SPP 模块:用 1×1、5×5、9×9、13×13 四种最大池化并行处理特征,最后 concat 拼接。

在这里插入图片描述

图4:SPP 模块通过不同尺度的池化操作提取多尺度特征

6.2 CSPNet:提升 CNN 学习能力

CSPNet(Cross Stage Partial Network),2019 年提出:

做法

  1. 将每个 Stage 的特征图按 channel 维度拆成两部分;
  2. 一部分正常经过残差网络;
  3. 另一部分直接跳过,在 Stage 末尾与残差输出 concat 拼接。
输入特征图(C 通道)
    ├─ 前半部分(C/2 通道)→ 残差块 × N → 输出A
    └─ 后半部分(C/2 通道)──────────────── 输出B
                                     ↓
                              concat(A, B) → BN → 激活

在这里插入图片描述

图5:CSPNet 将特征图一分为二,一半经残差处理,另一半直接连接,减少计算瓶颈

CSPNet 的三大优势

  1. 增强 CNN 学习能力:梯度信息从头到尾流动;
  2. 降低内存成本:减少冗余梯度传播;
  3. 减少计算瓶颈:降低约 20% 计算量。

6.3 CBAM 注意力机制

CBAM(Convolutional Block Attention Module)通道注意力空间注意力串联:

  1. 通道注意力:对特征图不同通道赋予不同权重(“关注哪些特征”);
  2. 空间注意力:对特征图不同空间位置赋予不同权重(“关注哪些位置”)。

F′=Mc(F)⊗FF' = M_c(F) \otimes FF=Mc(F)F
F′′=Ms(F′)⊗F′F'' = M_s(F') \otimes F'F′′=Ms(F)F

CBAM 几乎可以嵌入任何 CNN 结构,几乎不增加计算量,但显著提升模型性能。

在这里插入图片描述

图6:CBAM 通道注意力与空间注意力模块结构


七、Neck 改进:FPN + PAN

7.1 FPN(Feature Pyramid Network)

FPN 使用**自顶向下(Top-Down)**的路径融合多尺度特征:深层语义信息通过上采样传递给浅层,与浅层高分辨率特征融合。

Pl=Upsample(Pl+1)+Lateral(Cl)P_l = \text{Upsample}(P_{l+1}) + \text{Lateral}(C_l)Pl=Upsample(Pl+1)+Lateral(Cl)

优点:每层输出都具备丰富的语义信息 + 足够的空间分辨率。

7.2 PAN(Path Aggregation Network)

PAN 在 FPN 的基础上增加了**自底向上(Bottom-Up)**的路径:

FPN 自顶向下:
C5 → P5 → P4 → P3 → P2

PAN 再自底向上:
P2 → N2 → N3 → N4 → N5

这确保了底层精确的位置信息也能流向高层,增强不同尺度特征的信息互通。

在这里插入图片描述

图7:PAN 在 FPN 自顶向下路径基础上,增加自底向上的路径聚合

7.3 YOLOv4 的 PAN 改进

YOLOv4 将 PAN 中的相加(Add)操作改为拼接(Concat),保留了更多信息:

Nl=Concat(Conv(Nl−1),Cl)N_l = \text{Concat}(\text{Conv}(N_{l-1}), C_l)Nl=Concat(Conv(Nl1),Cl)

这减少了特征融合时的信息损失。

在这里插入图片描述

图8:YOLOv4 将 PAN 中的 Add 操作替换为 Concat,保留更多特征信息


八、激活函数:Mish

YOLOv4 在骨干网络中将 LeakyReLU 替换为 Mish 激活函数:

Mish(x)=x⋅tanh⁡(ln⁡(1+ex))\text{Mish}(x) = x \cdot \tanh(\ln(1 + e^x))Mish(x)=xtanh(ln(1+ex))

在这里插入图片描述

图9:Mish 激活函数曲线,相比 LeakyReLU 更平滑,梯度信息保留更完整

Mish 的特性

  • 连续可导(无硬截断);
  • 允许轻微负值输出(保留少量负向信息);
  • 实验证明比 Swish、ReLU 更好,骨干网络提升约 1.1% mAP。

九、网格(Grid)敏感度改进

9.1 问题描述

YOLOv3 的位置预测公式:

bx=σ(tx)+cxb_x = \sigma(t_x) + c_xbx=σ(tx)+cx

Sigmoid 函数的输出范围为 (0, 1),永远无法达到 0 或 1。这意味着当预测目标中心恰好在网格边界时,模型需要极大的 ∣tx∣|t_x|tx 值,导致预测困难。

9.2 YOLOv4 的修正

YOLOv4 对 Sigmoid 输出乘以一个大于 1 的缩放系数(如 2.0),使中心点可以预测到网格边界:

bx=(2σ(tx)−0.5)+cxb_x = (2\sigma(t_x) - 0.5) + c_xbx=(2σ(tx)0.5)+cx

缩放后的输出范围从 (0, 1) 扩展为 (-0.5, 1.5),让中心点预测更灵活。

在这里插入图片描述

图10:网格敏感度改进,扩大中心点可预测范围


十、YOLOv4 整体架构总结

YOLOv4 的整体架构由三个模块组成:

模块 组件 作用
Backbone(骨干网络) CSPDarknet53 特征提取
Neck(特征聚合) SPP + PAN 多尺度特征融合
Head(检测头) YOLOv3 Head × 3 三尺度目标预测

在这里插入图片描述

图11:YOLOv4 完整网络架构:CSPDarknet53 → SPP → PAN → 三个检测头

10.1 Backbone:CSPDarknet53

  • 基于 Darknet-53 + CSPNet 构建;
  • 共 29 个残差块,提供强力特征提取能力;
  • 使用 Mish 激活函数(Neck/Head 部分仍用 LeakyReLU)。

10.2 Neck:SPP + PAN

  • SPP 模块:用 1×1、5×5、9×9、13×13 最大池化并行提取多感受野特征;
  • PAN 模块:FPN 自顶向下 + 自底向上双向特征融合(Add 改为 Concat)。

10.3 Head:三尺度检测

继承 YOLOv3 的三尺度检测设计(13×13、26×26、52×52),使用 CIoU Loss 训练。


十一、YOLOv4 各模块技术汇总

BoF(Bag of Freebies)

技术 说明
马赛克数据增强 4 图拼接,丰富训练多样性
DropBlock 区域化随机遮蔽,替代 Dropout
CIOU Loss 综合考虑重叠、中心距离、宽高比
余弦退火学习率 训练收敛更稳定
网格敏感度修正 扩展中心点预测范围
多 Anchor 匹配 一个 GT 可匹配多个 Anchor

BoS(Bag of Specials)

技术 说明
Mish 激活函数 更平滑,保留更多梯度信息
SPP 模块 多尺度池化,增大感受野
CBAM 注意力 通道+空间双重注意力
PAN 特征融合 双向特征聚合
DIoU-NMS 基于中心距离的改进 NMS

十二、性能对比

YOLOv4 vs 其他检测器(COCO test-dev)

算法 mAP@50:95 FPS(V100)
YOLOv3 33.0 52
YOLOv4 43.5 62
EfficientDet-D3 45.8 24
Faster R-CNN 37.8 15
RetinaNet 40.4 22

YOLOv4 在速度与精度上均超过了同期主流算法,在单 GPU 上达到最优平衡点。


十三、YOLO 系列横向对比

版本 年份 主干网络 检测尺度 代表改进
YOLOv1 2016 GoogLeNet 1(7×7) 奠定单阶段检测范式
YOLOv2 2017 Darknet-19 1(13×13) Anchor、BN、多尺度训练
YOLOv3 2018 Darknet-53 3(13/26/52) 多尺度、残差、Logistic
YOLOv4 2020 CSPDarknet53 3(13/26/52) CSP、Mosaic、CIoU、PAN

十四、小结

YOLOv4 是 YOLO 系列迄今为止工程化程度最高的版本,它系统集成了数十种提升技巧:

  • 训练侧(BoF):马赛克增强、DropBlock、CIoU Loss 等无推理开销改进;
  • 推理侧(BoS):CSPNet 骨干、SPP 模块、PAN 特征融合、Mish 激活等少量开销带来大幅精度提升;
  • 后处理:DIoU-NMS 减少漏检。

对于工程实践而言,YOLOv5(基于 YOLOv4 思路的 PyTorch 复现)提供了更完善的工程框架,建议在实际项目中参考 YOLOv5 的代码结构。YOLOv4 则更具学术参考价值,深入理解其每一个改进点,是掌握现代目标检测技术的必由之路。


参考文献

  1. Bochkovskiy, A., et al. “Yolov4: Optimal speed and accuracy of object detection.” arXiv 2020.
  2. Wang, C.Y., et al. “CSPNet: A new backbone that can enhance learning capability of CNN.” CVPRW 2020.
  3. He, K., et al. “Spatial pyramid pooling in deep convolutional networks for visual recognition.” ECCV 2014.
  4. Liu, S., et al. “Path aggregation network for instance segmentation.” CVPR 2018.
  5. Woo, S., et al. “CBAM: Convolutional block attention module.” ECCV 2018.
    ection." arXiv 2020.
  6. Wang, C.Y., et al. “CSPNet: A new backbone that can enhance learning capability of CNN.” CVPRW 2020.
  7. He, K., et al. “Spatial pyramid pooling in deep convolutional networks for visual recognition.” ECCV 2014.
  8. Liu, S., et al. “Path aggregation network for instance segmentation.” CVPR 2018.
  9. Woo, S., et al. “CBAM: Convolutional block attention module.” ECCV 2018.

更多推荐