当前位置: 代码迷 >> 综合 >> YOLOv4,它到底做了什么?
  详细解决方案

YOLOv4,它到底做了什么?

热度:79   发布时间:2023-12-15 16:50:18.0

还没有看过YOLOv4的朋友可以看一下我们另外一篇博客:YOLOv4全文翻译

想要训练自己的数据集的朋友可以关注我的这篇博客:YOLOv4训练自己的数据集

需要在windows下进行编译的朋友,可以关注我的这篇博客:windows下编译yolov4

需要在windows下使用yolov4的动态链接库的,可以关注我的这篇博客:windows下使用yolov4动态链接库


YOLOv4它到底做了些什么,才能得到这么高的精度和速度,并且能够在一块1080Ti的GPU上就可以进行训练和测试?

YOLOv4其实并没有提出什么特别大的创新点,它的主要内容可以概括为三个方面:目标检测算法综述+最新算法的大量实验+最优的算法组合。这三者是相互联系,层层递进的。在相关工作部分,作者将目标检测的整体框架分成三个部分:backbone、neck以及head。这三个部分对整个检测器的作用是各有偏重的,这其实也就是意味着我们可以使用不同的算法,分别提升这三个部分的检测效果,进而提升检测器整体的性能。因此,作者从这个思路出发,研究了目前最近的算法,分别对其进行对比试验,最终得到了一个最优的组合,这个组合所带来的整体增益最高。

1 目标检测算法的综述

作者将整个目标检测器分成三个部分:

 

从上图,我们可以看这三个部分的分工各有偏重:我们将backbone放在ImageNet上进行预训练,先得到一个比较好的网络权重,常见的backbone有VGG, RestNet等等;在预测类别信息以及边界框位置上,我们使用head进行预测,它分为one-stage和two-stage两个系列的算法。在head和backbone之间,常常会使用neck来收集低级和高级的特征图进行融合,低级的特征图通常保留着物体的纹理信息,而高级的特征图包含这大量的语义信息,为了能够让网络更有效地做出预测,通常会将两类信息进行融合,常见的neck包括FPN (Feature Pyramid Network) 和PAN (Path Aggregation Network)。

2 最新的算法

作者根据算法对网络检测的准确率以及推理时间的损耗,将最新的算法分为两类:一类是能够增加网络的整体性能,但是基本上没有增加检测器的推理时间的损耗,我们称之为bag of freebies(加量不加价:性能的提升就像是商品的赠品)。另一类虽然会增加推理时间,但是也能够大幅度的提高网络的整体性能,我们称之为bag of specials(特价:少量的推理损耗能够大幅度提供网络的新能)

2.1 bag of freebies

Bag of freebies主要包括解决四个问题:如何实现数据增广如何解决样本不均衡的问题、如何解决one-hot类型标签中类别关联度难以描述的问题以及如何设计边界框回归的目标函数

2.2 bag of specials

 

Bag of speicals主要包括两个部分:使用即插即拔的模块加载到网络中,提高网络的整体性能;对检测器预测的结果进行有效的过滤

3 大量的实验

作者在总结检测器的主要部分以及两类不同的算法之后,作者分别对相关的算法进行了对比实验,然后研究每个算法对网络性能的影响,然后选出那个最优的算法组合

3.1 backbone的选择

作者提供了两个可选的backbone:CSPDarknet53和CSPResNeXt-50。作者通过实验发现,前者在分类任务上要差于后者,但是在检测任务上,前者的性能要优于后者。这说明在分类任务上最优的backbone在检测任务上并不一定是最优的。作者由将BoF和Mish算法应用到两个backbone之后发现,CSPResNeXt-50虽然增加了分类精度但是降低了检测的精度;而CSPDarknet53不仅增加了分类精度,而且还增加了精测的精度。这说明CSPDarknet53的鲁棒性比前者更优,CSPDarknet53更适合作为YOLOv4的backbone。

3.2 neck

为了增加网络的感受野,并且能够将网络中不同的特征图进行融合,作者选用了SPP(Spatial pyramid pooling)作为额外的插件模块,并且使用PAN(Path Aggregation Network)进行特征图的融合。

3.3 BoF和BoS的选择

a. BoF的选择

确定了网络基本的架构之后,作者可是选择最合适的BoF组合。作者通过对边实验发现了几个化学反应比较好的组合:S(Eliminate grid sensitivity) + M(Mosaic data augmentation) + IT(IoU threshod) + GA(Genetic algorithms) + OA(Optimized Anchors) + GIoU/CIoU

b. BoS的选择

通过实验发现,SPP+PAN+SAM一起使用之后,检测器得到了一个最好的效果(SAM: Spatial Attention Module),其中PAN和SAM都是进行了改进。

YOLOv4使用到的技巧:

改进的部分

使用的技巧

Activation

Mish

Bounding box regression loss

GIoU/CIoU

Data augmentation

Mosaic

Self-Adversarial Training(SAT)

Regularization method

DropBlock

Normalization

Improved Cross mini-Batch Normalization(CmBN)

4 总结

通过上面我们发现,作者虽然没有提出什么特别亮眼的模型和算法,但是,作者集百家之长,通过大量的实验分析每个算法对检测性能的影响,从而找到最优的算法组合。