【YOLOv4核心技术详解】从损失函数到网络架构
一、损失函数的演进:从IoU到CIoU
1. IoU损失及其缺陷
IoU损失:常用于边界框回归,计算预测框与真实框的交并比。
问题:
当两个框不重叠时,IoU=0,无法计算梯度,训练停滞。
相同的IoU值可能对应不同的位置关系,无法区分对齐程度。
2. GIoU:引入最小包围框
引入一个最小封闭形状C,将预测框A和真实框B包含在内。
优化目标不仅是最大化IoU,还包括最小化C中未被A、B覆盖的区域。
优点:解决了IoU在不重叠情况下的梯度问题。
3. DIoU:考虑中心点距离
在IoU基础上,加入中心点欧式距离作为惩罚项。
公式中考虑了重叠面积和中心点距离,收敛更快。
4. CIoU:全面考虑几何因素
在DIoU基础上,进一步引入长宽比的一致性。
综合考虑:重叠面积、中心点距离、长宽比。
是目前最全面的边界框回归损失函数。
二、NMS的改进:DIoU-NMS与Soft-NMS
1. DIoU-NMS
传统NMS仅依赖IoU值决定是否抑制框。
DIoU-NMS 同时考虑IoU和中心点距离,更准确地判断框之间的重叠关系。
公式中引入距离项,避免误删距离较远但IoU较高的框。
2. Soft-NMS
不是直接删除框,而是降低其置信度分数。
更加“柔和”,避免密集目标检测中的漏检问题。
三、Bag of Specials (BOS):提升精度的“小插件”
BOS是一类略微增加推理成本但显著提升精度的技术,主要包括:
1. 注意力机制
SAM(Spatial Attention Module):在YOLOv4中使用的空间注意力模块,增强特征图的空间信息。
CBAM:结合通道与空间注意力,进一步提升特征表达能力。
2. 特征金字塔增强:PAN
FPN:自顶向下传递高层语义信息。
PAN:在此基础上引入自底向上的路径,增强底层位置信息的传递。
YOLOv4中使用拼接(concat) 而非加法,保留更多特征信息。
3. 激活函数:Mish
替代ReLU,更平滑,避免“死神经元”。
公式:
虽然计算量增加,但提升模型表达能力。
四、其他关键技术
1. SPPNet(空间金字塔池化)
使用不同尺度的最大池化,使网络适应不同尺寸的输入。
避免因输入尺寸变化而重新训练模型。
2. CSPNet(跨阶段局部网络)
将特征图按通道拆分为两部分:
一部分正常经过卷积层;
另一部分直接与输出拼接。
减少计算量,增强梯度流动,提升特征复用。
3. 消除网格敏感度(Eliminate Grid Sensitivity)
边界框坐标通常在0~1之间,靠近网格边界时难以表示。
在激活函数前加上一个大于1的系数,缓解边界回归困难。
五、整体网络架构
YOLOv4的整体架构融合了上述所有技术:
Backbone:CSPDarknet53
Neck:SPP + PAN
Head:YOLOv3-style,配合CIoU损失和DIoU-NMS
总结
YOLOv4不仅在精度上达到新高度,更在实用性上做出巨大贡献:
所有实验均可在单GPU上完成,极大降低训练门槛。
融合了近年来目标检测领域的多项SOTA技术,如注意力机制、Mish激活、CIoU损失等。
通过大量消融实验验证每个模块的有效性,堪称“目标检测技术集大成者”。