深度学习目标检测:YOLOv5 技术详解(基于 YOLOv4 同源架构)
深度学习目标检测: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=∑(xpred−xgt)2+(ypred−ygt)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=1−IOU(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=1−IOU+∣C∣∣C−(Bpred∪Bgt)∣
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=1−IoU+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=1−IOU+c2ρ2+αv
其中:
v=4π2(arctanwgthgt−arctanwpredhpred)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(arctanhgtwgt−arctanhpredwpred)2,α=(1−IoU)+vv
CIOU 同时考虑了:
- 重叠面积(IOU);
- 中心点距离;
- 宽高比的一致性(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=si⋅exp(−σ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 年提出:
做法:
- 将每个 Stage 的特征图按 channel 维度拆成两部分;
- 一部分正常经过残差网络;
- 另一部分直接跳过,在 Stage 末尾与残差输出 concat 拼接。
输入特征图(C 通道)
├─ 前半部分(C/2 通道)→ 残差块 × N → 输出A
└─ 后半部分(C/2 通道)──────────────── 输出B
↓
concat(A, B) → BN → 激活

图5:CSPNet 将特征图一分为二,一半经残差处理,另一半直接连接,减少计算瓶颈
CSPNet 的三大优势:
- 增强 CNN 学习能力:梯度信息从头到尾流动;
- 降低内存成本:减少冗余梯度传播;
- 减少计算瓶颈:降低约 20% 计算量。
6.3 CBAM 注意力机制
CBAM(Convolutional Block Attention Module)将通道注意力与空间注意力串联:
- 通道注意力:对特征图不同通道赋予不同权重(“关注哪些特征”);
- 空间注意力:对特征图不同空间位置赋予不同权重(“关注哪些位置”)。
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(Nl−1),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)=x⋅tanh(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 则更具学术参考价值,深入理解其每一个改进点,是掌握现代目标检测技术的必由之路。
参考文献
- Bochkovskiy, A., et al. “Yolov4: Optimal speed and accuracy of object detection.” arXiv 2020.
- Wang, C.Y., et al. “CSPNet: A new backbone that can enhance learning capability of CNN.” CVPRW 2020.
- He, K., et al. “Spatial pyramid pooling in deep convolutional networks for visual recognition.” ECCV 2014.
- Liu, S., et al. “Path aggregation network for instance segmentation.” CVPR 2018.
- Woo, S., et al. “CBAM: Convolutional block attention module.” ECCV 2018.
ection." arXiv 2020.- Wang, C.Y., et al. “CSPNet: A new backbone that can enhance learning capability of CNN.” CVPRW 2020.
- He, K., et al. “Spatial pyramid pooling in deep convolutional networks for visual recognition.” ECCV 2014.
- Liu, S., et al. “Path aggregation network for instance segmentation.” CVPR 2018.
- Woo, S., et al. “CBAM: Convolutional block attention module.” ECCV 2018.
更多推荐
所有评论(0)