在计算机视觉领域,目标检测是一项基础性任务,其应用范围从自动驾驶到医学成像,囊括甚广。该领域长期存在的挑战是速度与精度之间的权衡。高精度模型通常在实时场景下运行过慢,而速度更快的模型有时又缺乏关键任务所需的准确性。
但如果两者兼得呢?如果你可以不依赖庞大昂贵的云基础设施,而是在实验室或家庭办公室的一台消费级 GPU 上训练一个最先进的检测器呢?
这正是 YOLOv4: 目标检测的最佳速度与精度 所带来的承诺。由 Alexey Bochkovskiy、Chien-Yao Wang 和 Hong-Yuan Mark Liao 于 2020 年发表,这项工作并非建立在某个单一的突破性算法之上,而是工程与实证科学的集大成之作。作者们严谨评估并融合了数十项深度学习的研究成果,打造出一个既精准又极速的检测器——让高性能目标检测走向大众化。
如论文中的性能图所示:
YOLOv4 占据了领先地位,超越了前代 YOLOv3,并在保持实时速度的同时,与 EfficientDet 等竞争模型旗鼓相当甚至更优。
本文将深入探讨 YOLOv4 的架构、训练策略与实验,使其成为目标检测领域的里程碑之作。
背景: 目标检测器的结构剖析
在剖析 YOLOv4 之前,让我们先建立共识。现代目标检测器,无论是一阶段还是二阶段,都有类似的结构:
输入 (Input): 送入网络的图像。可以是单张图像、局部图像块,或通过图像金字塔实现的多尺度图像。
骨干网络 (Backbone): 通常是一个在 ImageNet 上预训练的深度 CNN,用于从输入中提取丰富的特征映射。例如: ResNet、VGG、DenseNet,以及 YOLO 所用的 Darknet。
颈部 (Neck): 聚合来自不同骨干网络层的特征映射,生成适用于多尺度目标检测的鲁棒特征。常见方法有特征金字塔网络 (FPN) 和路径聚合网络 (PAN) 。
头部 (Head): 预测层,根据聚合的特征输出类别和边界框。
- **一阶段检测器 **(密集预测) : 直接从特征图一步完成预测 (如 YOLO、SSD) ,速度快但精度可能稍逊。
- **二阶段检测器 **(稀疏预测) : 先生成候选区域,再在其中分类/检测 (如 Faster R-CNN) ,精度更高但速度较慢。
YOLOv4 是一个一阶段检测器——这是实现其实时性能的关键。作者的主要目标是优化架构,使其能在标准 GPU 上高效并行计算,确保其实用性和普及性。
核心理念: 免费包 (Bag of Freebies) 与特价包 (Bag of Specials)
YOLOv4 独到之处在于将可能的改进分成两类:
免费包 (Bag of Freebies, BoF): 在不增加推理成本的情况下提升精度的技术,通常在训练阶段使用。例如: 数据增强、更优的损失函数。
特价包 (Bag of Specials, BoS): 增加极少推理成本却能提升精度的模块或后处理步骤。例如: 注意力机制、感受野增强。
论文系统性地探索了多种 BoF 与 BoS 技术,并寻找出构造高性能检测器的最佳组合。
构建 YOLOv4 架构
基于这一理念,作者为 YOLOv4 各部分精挑细选组件。
Backbone: CSPDarknet53
强大的检测骨干网络需要:
- 大感受野以捕捉目标上下文信息。
- 高容量模型以表达复杂特征。
比较结果表明,CSPDarknet53 是最佳选择:
虽然 CSPResNeXt50 在分类任务上略优,但拥有 29 个卷积层和更大感受野的 CSPDarknet53 在目标检测上表现更好。CSP (跨阶段局部连接) 结构提升了梯度流与效率。
Neck: SPP + PAN
两个模块增强了骨干网络的特征:
- SPP (空间金字塔池化) : 在多个尺度进行池化并拼接,极大增加感受野而不影响速度。
- PAN (路径聚合网络) : 增强高层与低层特征的融合。YOLOv4 对 PAN 做了优化,以进一步改善多尺度特征融合。
Head: YOLOv3 风格的锚点预测
YOLOv4 延续了 YOLOv3 基于锚点的预测结构,保持了快速且可靠的边界框预测优势。
黄金组合: YOLOv4 的 BoF 与 BoS
免费包 (Bag of Freebies, BoF)
关键技术:
- Mosaic 数据增强: YOLOv4 新引入,将四张图像拼接成一张,使目标呈现在不同背景中。
该方法增加每批数据中目标的多样性,降低对大批量的依赖,并提升模型鲁棒性。
自对抗训练 (Self-Adversarial Training, SAT) : 两阶段方法,先让网络“攻击”输入图像以隐藏目标,再训练其在被修改的图像中检测目标。
CIoU 损失: 一种考虑重叠度、中心距离与长宽比的边界框回归损失,比 MSE/IoU 有更快收敛与更准定位。
跨小批量归一化 (Cross mini-Batch Normalization, CmBN) : 在一个批次内跨小批量聚合归一化统计,提高小批量训练的稳定性。
特价包 (Bag of Specials, BoS)
关键技术:
Mish 激活函数: 平滑、非单调的激活函数 (
\(y = x \cdot \tanh(\text{softplus}(x))\)
) ,改善梯度流,提升精度。改进版 SAM 与 PAN:
- SAM 从双池化路径简化为单卷积路径。
- PAN 将特征融合由相加改为拼接,以保留更多细节。
- DIoU-NMS: 在非极大值抑制中同时考虑 IoU 与中心距离,有助于处理遮挡目标的检测。
实验: 验证每个设计选择
作者进行了大量消融实验,以分析各项技术在分类 (ImageNet) 与检测 (MS COCO) 任务上的影响。
分类器训练
验证结果显示,CutMix、Mosaic、标签平滑 (Label Smoothing) 与 Mish 会持续提升骨干网络分类精度。
检测器训练
BoF 的影响:
Mosaic 数据增强与 CIoU 损失带来明显 AP 提升。
BoS 的影响:
在 PAN-SPP 中加入改进版 SAM 模块表现最佳。
最终骨干选择与批次大小适应性
有趣的是,最佳分类骨干并非最佳检测骨干。使用 BoF 与 Mish 训练的 CSPDarknet53 在检测上表现最佳:
BoF/BoS 还使网络对批次大小变化不敏感:
最终结果: 称霸全场
经过精细调优,YOLOv4 在多种 GPU 上都展现了出色的速度-精度平衡:
结果:
- **43.5% AP **(65.7% AP50) @ MS COCO
- 约 65 FPS @ Tesla V100
- 相比 YOLOv3,AP 提升约 10%、FPS 提升约 12%
结论: 实时检测的新基准
YOLOv4 不只是小幅升级,更是对顶级模型构建方式的一种革新。作者没有执着于单一创新组件,而是展示了系统集成与实证验证的威力,造就了一个:
- 快速与精准兼具: 刷新了实时检测的新标准,推动帕累托前沿发展。
- 易于使用: 可在一块 8–16GB VRAM 的消费级 GPU 上训练。
- 体系完整: 为将 BoF 与 BoS 融入目标检测器提供了成熟范例。
通过将社区的最佳成果与自身创新相结合,YOLOv4 团队不仅打造了更好的检测器,也形成了一套更优的方法论来构建检测器。