一、数据增强与正则化
为了让模型在训练时"见多识广",避免过拟合,YOLOv4引入了丰富的增强手段:
**1.马赛克数据增强:**借鉴了CutMix,讲4张图片拼接成1张进行训练,极大地丰富了背景和目标的组合,提高了小目标检测能力。
2..Random Erase & Hide and Seek:随机擦除图像区域,或根据概率随机隐藏补丁,逼迫模型通过局部特征去识别整体。
**3.自对抗训练:**在图像上引入噪声点,增加游戏难度,提高模型鲁棒性。
**4.DropBlock:**相对传统的Dropout(随机屏蔽单个神经元),DropBlock是随机屏蔽连续的区域,更好地减少了冗余连接,防止过拟合。
5.标签平滑:解决神经网络"自觉不错(过度自信)"的问题。例如将原本绝对的0,1标签平滑为0.05,0.95,让模型别太绝对。
二、损失函数的演进
目标检测的核心是画框,YOLOv4在边界框回归损失上做了重要改进:
IOU损失:最基础的算法,但没有相交则IOU=0无法计算梯度,且相同的IOU反映不出具体重合情况。
GIOU损失:引入最小封闭形状C,在不相交时也能让预测框向着真实框前进。但遇到"包含"情况时失效。
DIOU损失:直接优化预测框与真实框的中心点欧式距离,速度更快,解决了GIOU的问题。 DIoU 没能处理好的"形状"问题。
CIOU损失(最终采用):综合考虑了重叠面积、中心点距离、长宽比三个几何因素,让预测框更贴合真实框。
三、后处理改进:非极大值抑制(NMS)
传统NMS容易误删重叠的物体:
**DIoU-NMS:**不仅考虑IoU值,还考虑两个Box中心点之间的距离来判定是否删除。
SOFT-NMS:传统NMS是直接删除,SOFT-NMS则通过高斯函数衰减重叠框的分数,而不是直接干掉,保留了密集目标的检测能力。
四、网络结构改进
这是YOLOv4在架构上的核心升级:
1.SPP-Net(空间金字塔池化):接在最后一个卷积层后,用不同大小的池化核,进行最大池化并拼接,解决了输入图像尺寸固定的问题,增加了感受野。
2.CSPNet:将特征图按通道拆分为两部分,一部分正常走残差网格,另一部分直接连接到输出。这极大降低了计算量,减少了内存成本,并增强了CNN的学习能力。
3.注意力机制(CBAM):YOLOv4中使用了SAM(空间注意力机制),让网络知道该看哪里,增强特征提取。
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
**4.PANet(路径聚合网络):**传统的FPN是自顶向下的,YOLOv4引入了自底向上的路径,使底层特征更容易传到顶部。同时,YOLOv4还会拼接,保留了更多特征信息。
5.Mish激活函数:替代了部分ReLU。它的曲线更平滑,虽然计算量增加,但效果提升。ReLU 将所有权值小于 0 的输入直接置零,导致"神经元死亡"和信息丢失。Mish 在负半轴非单调 :它不会把负输入彻底杀死,而是让微小的负值以负输出的形式保留下来。
6.消除网格敏感性:解决坐标回归值在0-1之间时,网格边界难以预测问题,通过在激活函数前加上大于1的系数来缓解。
五、总结
YOLOv4 并没有提出一个全新、单一的颠覆性结构,而是像一位"集大成者",将当时学术界和工业界最好用的技巧(如Mosaic、CIoU、CSP、PANet等)完美地融合在了一个框架里,从而在速度和精度之间达到了当时极其惊人的平衡。