Yolov4的网络框架及改进对比
目录
1 YOLOv4
1.1 概念
YOLOv4(You Only Look Once version 4)是2020年推出的先进目标检测系统,由Alexey Bochkovskiy团队开发,在YOLOv3的基础上进行了多项优化,兼顾速度与精度,适用于自动驾驶、安防监控、工业检测等实时场景。
1.2 核心特点
- CSPDarknet53主干网络降低计算量,Mish激活增强非线性。
- SPP+PANet实现多尺度特征融合,提升小目标检测能力。
- Mosaic+CIoU+DIoU-NMS优化训练过程,兼顾速度与精度。
- 模块化设计为后续研究(如YOLOv5/v7)奠定基础。
1.3 优缺点
-
优点
-
实时性与高精度平衡:在Tesla V100上达到65 FPS的实时速度,同时COCO AP提升至43.5%(YOLOv3为33%),显著优于同期模型(如Faster R-CNN仅7 FPS)。
-
高效的训练策略
单卡训练友好:优化后的数据增强(Mosaic)和正则化(DropBlock)允许在1080Ti/2080Ti等消费级GPU上高效训练。
收敛速度快:采用CIoU Loss和CmBN技术,训练周期比YOLOv3缩短约20%。 -
创新的网络结构
CSPDarknet53主干:通过CSP结构减少30%计算量,Mish激活函数提升特征表达能力。
多尺度特征融合:SPP+PANet组合增强了对不同尺寸目标(尤其是小物体)的检测能力。 -
鲁棒性强:Mosaic数据增强模拟复杂场景,DIoU-NMS解决密集目标误检问题,适合实际应用(如交通监控中的车辆重叠)。
-
模块化设计:解耦的Backbone-Neck-Head结构便于定制化(如替换主干为ResNet或EfficientNet)。
-
-
缺点
- 计算资源需求较高:相比轻量级模型(如YOLOv4-tiny),完整版YOLOv4需较高算力,边缘设备(如树莓派)需量化或剪枝才能部署。
- 小目标检测仍有局限:尽管SPP+PANet改善了小目标检测,但在极端密集小目标场景(如无人机航拍的人群)仍可能漏检。
- 训练调参复杂:需精细调节超参数(如Anchor尺寸、学习率),Mosaic增强可能引入噪声,对新手不友好。
- 硬件兼容性问题:官方实现基于Darknet框架,工业部署时需转换为TensorRT或ONNX,可能遇到算子不支持问题。
2 Bag of Freebies (BoF)
2.1 概念
Bag of freebies 指的是那些不增加模型复杂度,也不增加推理的计算量,通过改进模型和数据的预处理,来提高模型的准确度。只增加训练成本,但是能显著提高精度,并不影响推理速度。
包括:
- 数据增强:调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转
- 网络正则化:Dropout、Dropblock等
- 类别不平衡,损失函数设计等
2.2 数据增强
- CutMix增强
随机裁剪部分图像并替换为另一张图的片段。
-
Mosaic 数据增强
将 4 张训练图像 随机缩放、裁剪、拼接成一张大图进行训练。
-
Random Erase:用随机值或训练集的平均像素值替换图像的区域
-
Hide and Seek:根据概率设置随机隐藏一些补丁,通过模拟遮挡场景来提高模型的泛化能力。
-
SAT(Self-Adversarial Training SAT)
通过引入添加噪声点,使其更难检测,增强模型对噪声的适应能力。
2.3 网络正则化
- DropBlock
DropBlock是谷歌在2018年提出的一种用于卷积神经网络(CNN)的正则化方法。这是一种用于解决过拟合问题的技术,在训练神经网络时非常有用,类似 Dropout,但丢弃的是连续区域(block)而非单个神经元。
DropBlock不是随机屏蔽掉一部分特征(注意是对特征图进行屏蔽),而是随机屏蔽掉多个部分连续的区域。这种方法有助于减少神经网络中的冗余连接,从而提高模型的泛化能力。
2.4 Label Smoothing标签平滑
将分类标签从硬标签(如 [0, 1])改为软标签(如 [0.05, 0.95])
2.5 损失函数改进
-
原IoU:
没有相交则IOU=0无法梯度计算,相同的IOU却反映不出实际情况
-
GIoU
在不重叠情况下能让预测框尽可能朝着真实框前进
无法解决包含情况
-
DIoU
直接优化距离,速度更快
可以解决GIOU问题
-
CIoU
损失函数必须考虑三个几何因素:重叠面积,中心点距离,长宽比,其中α可以当做权重参数
3 Bag of Specials (BoS)
3.1概念
是指那些略微增加计算复杂度但能显著提升检测性能的技术模块,yolov4在网络细节部分加入了很多改进,引入了各种能让特征提取更好的方法如注意力机制,网络细节设计,特征金字塔等。
3.2 非极大值抑制的改进
NMS用于过滤掉冗余的检测框并保留最准确的框。在目标检测中,算法会输出多个检测框,但有些框可能是冗余的,这时候就需要进行后处理。如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测。
DIOU-NMS和原始的NMS不同,DIoU-NMS不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离,使用了新的公式决定一个Box是否被删除。核心思想:若两个框中心点距离较远,即使IoU较高,也不轻易抑制(更适合密集场景)。
将当前检测框得分乘以一个权重函数,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,越是与M框高度重叠的检测框,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则(δ通常取0.3)。
3.3 网络框架改进
3.3.1 SPP Net网络
何凯明提出的一种网络结构,可以不用考虑图像大小,输出图像固定长度,并且在图像变形情况下表现稳定。这种方法在速度上比R-CNN快24-102倍,并且在不同的数据集上面得到验证。
SPP Net在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。普通的CNN结构中加入了ROI池化层(ROI Pooling),可以使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。
3.3.2 CSPNet
作者Chien-Yao Wang于2019年提出的一种新的网络结构,它可以增强CNN的学习能力,并且在轻量化的同时保持准确性。
- 每一个block按照特征图的channel维度拆分为2部分。
- 一份正常执行残差网络,另一份直接concat到block的输出。
- CSPNet主要是为了解决三个问题:增强CNN的学习能力;降低内存成本;以及减少计算瓶颈。
它通过将梯度的变化从头到尾地集成到特征图中,从而减少了计算量的同时保证了准确率。在特征金字塔生成过程中采用跨通道池来压缩特征映射,可以减少内存使用。同时,CSPNet方法可以减少模型计算量和提高运行速度,还能和多种网络结构结合在一起。
3.3.3 注意力机制
-
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
-
yolov4中用的是SAM,也就是空间的注意力机制,增强关键特征提取能力。
3.3.4 PAN
FPN通过横向连接和自上而下(top-down)的模型来进一步增强特征信息,提高目标检测的性能。 PAN改进 FPN,增加自底向上的路径聚合,优化小目标检测性能。
3.3.5 Mish激活函数
替代传统的 ReLU,Mish 激活函数在深层网络中表现更好,能缓解梯度消失问题,提升模型精度
没有一棒子打死,对极负舍弃,计算量增加但效率提高
3.3.6 网格改进
原网格无法取中心点位于边缘的部分
取不到0,1
为了缓解这种情况可以在激活函数前加上一个系数(大于1的),使其可以位于边缘
4 整体网络框架
YOLOv4 采用模块化设计,分为 Backbone(主干网络)、Neck(特征融合层) 和 Head(检测头) 三部分。
- Backbone(主干网络):CSPDarknet53
- CSP结构:将输入特征图拆分为两部分,一部分直接传递,另一部分经过密集卷积块(Dense Block)处理,最后合并。
- Mish激活函数
- DropBlock:类似Dropout,但丢弃连续区域的特征块(而非随机像素),更适合卷积网络。
- Neck(特征融合层):SPP多尺度池化 + PANetTop-down路径、Bottom-up路径
- Head(检测头):沿用YOLOv3的锚框(Anchor)和多尺度预测,使用CIoU Loss和DIoU-NMS