YOLOv4 介绍及其模型优化方法
YOLOv4 介绍及其模型优化方法
YOLOv4是2020年发布的实时目标检测模型,在YOLO系列原作者退出CV领域后,由AlexeyAB基于YOLOv3进行改进开发。相比YOLOv3,YOLOv4在保持实时性的同时,将平均精度(AP)和帧率(FPS)分别提升了10%和12%。本文将详细介绍YOLOv4的模型结构及其优化方法。
YOLOv4 介绍
2020年4月,YOLOv4在悄无声息中重磅发布,在目标检测领域引起广泛的讨论。在YOLO系列的原作者Joseph Redmon宣布退出CV领域后,表明官方不再更新YOLOv3。但在过去的两年中,AlexeyAB继承了YOLO系列的思想和理念,在YOLOv3的基础上不断进行改进和开发,于今年4月发布YOLOv4,并得到了原作者Joseph Redmon的承认。YOLOv4可以使用传统的GPU进行训练和测试,并能够获得实时的,高精度的检测结果。与其他最先进的目标检测器的比较的结果如图1.1所示,YOLOv4在与EfficientDet性能相当的情况下,推理速度比其快两倍。相比YOLOv3的AP和FPS分别提高了10%和12%。
图1.1 检测结果对比
YOLOv4贡献可总结如下:
- 提出了一种实时、高精度的目标检测模型。它可以使用1080 Ti或2080 Ti等通用GPU来训练快速和准确的目标检测器;
- 在检测器训练阶段,验证了一些最先进的Bag-of-Freebies和Bag-of-Specials方法的效果;
- 对SOTA方法进行改进,使其效率更高,更适合单GPU训练,包括CBN、PAN和SAM等。
论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection,https://arxiv.org/abs/2004.10934
代码链接:https://github.com/AlexeyAB/darknet#yolo-v4-in-other-frameworks
1. 目标检测相关方法总结
一般目标检测器网络结构由以下四个部分构成,如图1.2所示。
图1.2 目标检测
1.1 Bag of freebies
可以在训练过程中进行改进(例如数据增强,类别不平衡,损失函数,软标签等)以提高检测的准确性。我们把这些只改变训练策略或只增加训练成本而对推理速度没有影响的方法称为"Bag of freebies (BoF)"。BoF方法总结如图1.3所示。
图1.3 Bag of freebies
1.2. Bag of specials
对于那些仅增加少量推理时间但可以显着提高目标检测精度的插件模块和后处理方法,将其称为“Bag of specials (BoS)”。这些方法主要用于增强模型中的某些属性,例如扩大感受野,引入注意力机制或增强特征集成能力等,而后处理方法则是筛选模型预测结果。BoS方法总结如下图1.4所示。
图1.4 Bag of specials
2. YOLOv4 模型结构及其使用的方法
YOLOv4所采用的网络结构,Bag方法总结如下图1.5所示。
图1.5 YOLOv4
2.1 网络结构
YOLOv4模型结构如图1.6所示。图片引用来自https://blog.csdn.net/nan355655600/article/details/107852288
图1.6 YOLOv4模型结构
CSPDarknet53
CSPNet (Cross Stage Paritial Network) 主要从网络结构设计的角度解决推理中计算量大的问题。CSPNet的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。因此采用Cross-Stage-Partial-connections (CSP) 先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。CSP连接如图1.7所示。
图1.7 CSP
网络结构采用CSP连接,主要有以下三个方面的优点:
- 增强CNN的学习能力,使得在轻量化的同时保持准确性;
- 降低计算瓶颈;
- 降低内存成本。
YOLOv4利用上面的CSP连接以及如图1.8所示的Darknet-53作为特征提取的主干网络。
图1.8 Darknet-53
与具有更好的分类性能CSPResNeXt-50相比,CSPDarknet53模型在目标检测方面具有更高的检测精度。同时,可以使用Mish和其他技术来提高CSPDarknet53的分类准确性。因此,YOLOv4最终选择CSPDarknet53作为主干网络。
目标检测器由特征提取中的backbone和用于目标检测的head组成。为了检测不同尺度的目标,将使用具有不同空间分辨率特征图生成层次结构。为了丰富输入到head的信息,来自自底向上和自顶向下的相邻特征映射按元素方式相加或连接在一起,然后作为head的输入。因此,head输入将包含自底向上的丰富空间信息和自顶向下的丰富语义信息。我们将这一部分称为neck。
SPP (spatial pyramid pooling layer)
在YOLOv4中,对SPP进行了修改以保证输出为空间维度。最大池化的核大小为k={1×1、5×5、9×9、13×13}。将来自不同核大小池化后的特征图串联在一起作为输出。采用SPP层的方式,比单纯的使用单个尺寸核大小的最大池化的方式,更有效的增加主干网络的感受野,显著的分离最重要的上下文特征。YOLOv4的作者在使用608 * 608大小的图像进行测试时发现,在COCO目标检测任务中,以0.5%的额外计算代价将AP50增加了2.7%。
图1.9 Darknet-53
PAN (Path Aggregation Network)
图1.10是用于目标检测的路径聚合网络(PAN)。自下而上的路径(b)得到增强,使低层空间信息更易于传播到顶部。在FPN中,局部空间信息沿红色箭头向上传播。虽然图中未明确显示,但红色路径将穿过约100层以上。PAN引入了一条捷径(绿色路径),仅需大约10层即可到达顶层。这种捷径连接使细粒度的局部信息可用于顶层。
图1.10 PAN
在YOLOv4中,修改后的PAN对相邻的特征图不是相加在一起,而是串联在一起。如图1.11所示。
图1.11 Modified_PAN
2.2 使用的Bag方法
Mosaic数据增强
Mosaic是一种数据增强方法,将4张训练图像组合成一张进行训练(而不是CutMix中的2张),这增强了对超出正常图像边框的目标的检测。另外,每个mini-batch包含大量的图像(是原来mini-batch所包含图像数量的4倍),因此,在估计均值和方差时减少了对large mini-batch sizes的需求。
图1.12 Mosaic
Mish激活函数
YOLOv4的骨干网络中都使用了Mish激活函数,而其他部分则使用Leaky_ReLU函数。Mish是光滑的非单调激活函数,可定义为:
图1.13 Mish激活函数
在YOLOv4中使用Mish函数的原因是它的低成本和它的平滑、非单调、无上界、有下界等特点,与其他常用函数如ReLU和Swish相比,提高了它的性能。
3. 测试结果
图1.14为YOLOv4在MS COCO 2017测试集上的测试结果。
图1.14 测试结果
YOLOv4模型优化—通道剪枝
在资源受限的设备上部署像YOLOv4这样的大模型时,模型压缩是研究人员重新调整较大模型所需资源消耗的有用工具。现有模型压缩和加速方法主要包括模型剪枝,知识蒸馏和量化等。非结构化的模型剪枝方法虽然可以在不损失精度的情况下得到较高的压缩比,但其需要专用的硬件或软件才能够实现模型的加速。通道剪枝是一种粗粒度但有效的结构化剪枝方法,更重要的是,它不需要专用的硬件或软件就可以方便地实现剪枝模型。因此,本节主要介绍对YOLOv4模型进行结构化剪枝,在普通硬件上即可实现模型尺寸的压缩和推理加速。
Network slimming提出了一种简单但有效的通道修剪方法。他们直接采用批处理归一化(BN)层中的缩放因子,通道级缩放因子,并对这些缩放因子进行L1正则化训练网络,以获得通道级的稀疏性。应用network slimming方法来修剪基于CNN的图像分类器,显著地减少了模型大小和FLOPs。因此,本节将network slimming扩展到目标检测模型中,应用去对YOLOv4模型进行通道剪枝。
我们按照如图2.1所示的步骤在YOLOv4中应用通道修剪以获取SlimYOLOv4。
图2.1 SlimYOLOv4通道剪枝流程
- 稀疏化训练
神经网络模型的按通道稀疏度有助于进行通道修剪,并描述以后可能被删除的不重要通道的数量。为了方便通道修剪,为每个通道分配了一个缩放因子,其中缩放因子的绝对值表示通道的重要性。具体来说,除了检测头之外,YOLOv4中的每个卷积层后面都有一个B