YOLOv4:目标检测更亲民更精准
一、YOLOv4 的核心定位:速度、精度与亲民的平衡
YOLOv4 的最大亮点,在于它打破了 "高性能必须高设备门槛" 的固有认知,同时在精度和速度上实现了双重突破。
- 亲民性拉满:所有实验都能在单 GPU 上完成,不用依赖多卡集群,大大降低了训练成本和入门门槛。
- 精度速度双优:从 COCO 数据集测试结果看,YOLOv4 的 mAP(平均精度)远超 YOLOv3,甚至能和 EfficientDet 等模型抗衡,而 FPS(每秒帧率)却保持在实时检测水平,比如在 V100 显卡上,速度远超 ASFF、Center Mask 等同期模型。
- 方法论清晰:围绕 "数据层面" 和 "网络设计层面" 两大核心,整合了当时 CV 领域的多种优秀技术,形成了一套可复用的优化思路。
二、数据层面优化:Bag of Freebies(BOF)—— 不增推理成本,只提精度
1. 花式数据增强:让模型 "见多识广"
- Mosaic 拼接:参考 CutMix 思路,把 4 张不同图像拼合成 1 张进行训练,既能丰富背景信息,又能让模型一次学习多个目标,尤其对小目标检测帮助很大。
- Random Erase/Hide and Seek:前者用随机值或数据集平均像素值覆盖图像局部区域,后者按概率隐藏部分图像块,强迫模型关注物体关键特征,避免依赖局部细节。
- Self-adversarial-training(SAT):给图像加入 "对抗性噪音",比如故意让模型把 "熊猫" 误判成 "线虫",再通过反向传播修正,相当于给模型 "加练难题",提升泛化能力。
- 传统增强升级:在亮度、对比度、翻转、旋转等基础操作外,还加入了 CutMix(融合两张图的像素和标签),实验显示 CutMix 能让 ImageNet 分类精度提升 2.3%,Pascal VOC 检测 mAP 提升 1.1%。
2. 网络正则化:防止模型 "过度自信"
正则化的目的是避免过拟合,YOLOv4 主要用了两种方法:
- DropBlock 替代 Dropout:传统 Dropout 是随机丢弃单个像素点,容易破坏特征连续性;DropBlock 则是丢弃一整个区域,能更好保留特征结构,同时强制模型学习更鲁棒的特征。
- Label Smoothing(标签平滑):解决模型 "非黑即白" 的判断问题。比如原本标签是(0,1)(代表 "不是猫,是狗"),平滑后变成(0.05, 0.95),让模型不要对分类结果过度自信,最终能让特征簇内更紧密、簇间更分离,提升泛化能力。
3. 损失函数迭代:
- 传统 IOU 的痛点:当预测框和真实框不重叠时,IOU 值为 0,无法计算梯度,模型无法学习;而且相同 IOU 值下,无法区分框的位置优劣。
- GIOU(广义 IOU):引入 "最小封闭框 C"(能同时包含预测框和真实框的最小矩形),通过计算 C 与两框并集的差值,解决了不重叠时梯度为 0 的问题,让预测框能朝着真实框移动。
- DIOU(距离 IOU):在 GIOU 基础上,加入 "中心点距离" 因素,直接优化两框中心点的欧式距离,同时用最小封闭框对角线长度做归一化,收敛速度比 GIOU 更快。
- CIOU(完全 IOU):进一步加入 "长宽比" 因素,让损失函数同时考虑 "重叠面积、中心点距离、长宽比" 三个几何特征,更贴合真实检测场景,预测框精度更高。
三、网络设计优化:Bag of Specials(BOS)—— 稍增推理成本,换精度飞跃
1. 网络结构:更高效的特征提取
- SPPNet(空间金字塔池化):解决 YOLOv3 中 "输入尺寸必须固定" 的问题。通过多尺度最大池化,把不同大小的输入特征图转换成固定尺寸的特征,既能兼容多种输入尺寸,又能提取多尺度特征,提升大目标检测精度。
- CSPNet(跨阶段部分网络):把每个网络块的特征图按通道分成两部分,一部分走正常卷积路径,另一部分直接拼接到底层输出。这种设计能减少计算量,同时保留更多梯度信息,让特征提取更高效,尤其适合深层网络。
2. 注意力机制:让模型 "聚焦关键"
- SAM(空间注意力模块):通过对特征图做最大池化和平均池化,再融合得到空间注意力权重,让模型重点关注物体所在的空间区域,忽略背景干扰。
- CBAM(卷积块注意力模块):同时考虑通道注意力和空间注意力。先通过通道注意力筛选重要特征通道,再通过空间注意力定位物体位置,双重筛选让特征更精准。
3. 特征融合:PAN 替代 FPN,双向传递信息
- 双向路径:在 "自顶向下" 的基础上,增加 "自底向上" 的路径,让低层的细节特征能快速传到高层,同时高层的语义特征也能精准下传。
- 拼接替代加法:FPN 用加法融合特征,PAN 则用拼接(Concatenate),能保留更多特征信息,尤其对小目标检测帮助显著。
4. 激活函数:Mish 替代 ReLU,更贴合实际
ReLU 激活函数在输入为负时会 "掐断" 梯度,而 Mish 函数(f (x)=x・tanh (ln (1+e^x)))在负区间仍有梯度传递,更符合生物神经元的激活模式。虽然 Mish 会增加一点计算量,但能提升模型精度,尤其在深层网络中效果更明显。
四、总结:YOLOv4 为何能成为 "集大成者"?
YOLOv4 的成功,不在于提出了全新的技术,而在于 "精准整合 + 细节优化":
- 接地气的定位:单 GPU 训练的设计,让更多人能参与研究,降低了技术普及门槛;
- 清晰的方法论:用 BOF 和 BOS 两大框架,把数据增强、正则化、注意力、特征融合等技术分门别类,形成可复用的优化思路;
- 务实的取舍:在 "精度" 和 "速度" 之间找平衡,所有改进都围绕 "提升实用价值" 展开,不追求虚无的技术噱头。