YOLOv4论文笔记详解

论文作者不再是YOLO 之父 Joseph Redmon,而是来自俄罗斯的 Alexey Bochkovskiy和两位台湾开发者Chien-Yao Wang、Hong-Yuan Mark Liao。

论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection (Optimal :最优的)

Github上已经有了一些代码:

YOLOv4 的 TensorFlow 2.0 实现:https://github.com/xiao9616/yolo4_tensorflow2

YOLOv4 的 TensorFlow 实现(持续更新):https://github.com/rrddcc/YOLOv4_tensorflow

YOLOv4 的 TensorFlow 实现:https://github.com/klauspa/Yolov4-tensorflow

YOLOv4 的 PyTorch 实现:https://github.com/GZQ0723/YoloV4

YOLOv4(TensorFlow后端)的 Keras 实现:https://github.com/Ma-Dan/keras-yolo4

YOLOv4 的 PyTorch 实现:https://github.com/Tianxiaomo/pytorch-YOLOv4

下面简单介绍下论文的方法,遇到新的点会说明下。

摘要

有大量的技巧可以提高卷积神经网络(CNN)的精度。需要在大数据集下对这种技巧的组合进行实际测试,并对结果进行理论论证要求。某些技巧仅在某些模型上使用和专门针对某些问题,或只针对小规模的数据集;而一些技巧,如批处理归一化、残差连接等,适用于大多数的模型、任务和数据集。

我们假设这种通用的技巧包括:Weighted-Residual-Connection(WRC)、Cross-Stage-Partial-connections (CSP)、跨小型批量连接(CSP)、Cross mini-Batch Normalization(CmBN),Self-adversarial-trainin(SAT)和Mish-activation。

我们在本文中使用这些新的技巧:WRC、CSP、CmBN、SAT,Mish-activation,Mosaic data augmentation、CmBN、DropBlock正则化和CIoU损失,以及组合技巧,以达到最好的效果。在MS COCO数据集中的AP43.5%(65.7% AP50),在实际应用中,Tesla V100上速度可达到65FPS。

**摘要说明了:**摘要一下子出现很多词汇,这些都是YOLOv4引进的各种技巧(论文涉及的技巧达20多个),正文会有说明。这些技巧一般来自顶会论文,有的技巧是在过拟合数据,而有些技巧则是真的适合通用模型。同时作者也做了大量大量的实验,可以说YOLOv4是一篇效果显著的实验报告了,也可以看作各种技巧的综述吧,因为论文引用量达到102篇。

同时论文也说明了最后选用了哪些技巧。

**Tips:**技巧类的论文还有李沐老师的两篇论文,分别是

目标检测训练技巧:Bag of Freebies for Training Object Detection Neural Networks
分类训练技巧:Bag of Tricks for Image Classification with Convolutional Neural Networks

1 引言

**这一部分主要是说明论文的目的:**设计生产系统中目标检测器的快速运行速度,优化并行计算,而不是低计算量理论指标 (BFLOP)。作者希望设计的对象能够轻松训练和使用。例如,任何使用传统 GPU 进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果。

同时说明了文章的贡献点:

我们开发一种高效、强大的物体检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU来训练超快速和准确的目标检测器。
在检测器训练期间,我们验证最先进的我们验证了最先进的Bag-of-Freebies 和 Bag-of-Specials检测方法的影响。
我们修改最先进的方法,使其更高效,适合单次 GPU 训练,包括 CBN 、PAN 、SAM 等。
分析:

  • 第1点表示我们用单卡就能完成检测训练过程。
  • 第2点中Bag-of-Freebies 和Bag-of-Specials翻译是免费包和特殊包。
    Bag-of-Freebies 可以理解为数据增扩、标签软化等外在训练方法,即不需要改变网络模型。
    Bag-of-Specials我理解的是用最新最先进的方法(网络模块)来魔改检测模型。
  • 第3点表示除了在模型上进行魔改,作者还加了其他的技巧。

2 相关工作

这部分主要解释Bag-of-Freebies 和Bag-of-Specials,分三个部分。

2.1 目标检测模型

主要是看论文这张图:
在这里插入图片描述
作者把检测模型分成:输入、骨干结构、颈部(Neck)、头部。每个部位都能玩出花来。

其中骨干结构主要是提取特征,去掉头部也可以做分类任务。

颈部(Neck)主要是对特征进行融合,这就有很多技巧在里面了。

2.2 Bag of freebies

“bag of freebies” 是指目标检测器在不增加推理损耗的情况下达到更好的精度,这些方法称为只需转变训练策略或只增加训练量成本。也就是说数据增扩、标签软化、Focal Loss等这些不用改变网络结构的方法。

2.3 Bag of specials

“Bag of specials”是指插入模块是用来增强某些属性的,显著提高目标检测的准确性。比如SE模块等注意力机制模块,还有特征融合FPN等模块。

3 方法

此部分是论文的核心部分。

基本目标是加快神经网络的运行速度,在生产系统中优化并行计算,而不是低计算量理论指标(BFLOP)。(这句话在论文第二次出现)

3.1 网路结构选择

原文:我们的目标是在输入网络分辨率、卷积层数、参数编号(滤波器大小 2 + 滤波器 + 通道/组)和图层输出数(筛选器)之间找到最佳平衡。(这句话很类似EfficientDet中如何学习参数,也是在分辨率、卷积层数、通道数等做选择)

作者采用的是CSPResNeXt50 / CSPDarknet53作为网络骨干结构。

CSP是可以增强CNN学习能力的新型backbone,论文发表2019年11月份,地址:CSPNET。

主要技巧是:CSPNet将底层的特征映射分为两部分,一部分经过密集块和过渡层,另一部分与传输的特征映射结合到下一阶段。
在这里插入图片描述
CSPDarknet53结构也是类似。

研究表明:CSPResNeXt50在分类方面优于CSPDarkNet53,而在检测方面反而表现要差。

作者认为检测模型需要选择具有更大感受野、更大参数的模型作为backbone。作者实验对比了CSPResNext50、CSPDarknet53和EfficientNet-B3。从理论与实验角度表明:CSPDarkNet53更适合作为检测模型的Backbone。(还是自家的网络结构好用)
在这里插入图片描述
最后,我们选择CSPDarknet53主干,SPP添加模块,PANet path-aggregation neck和YOLOv3(anchor based)头作为YOLOv4架构。

总结:YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head

上面SPP来源于Kaiming He的SPP Net,主要因为它显著增加了感受野,分离出最重要的上下文功能,并且几乎不降低网络操作速度。

PANet来源于https://arxiv.org/abs/1803.01534,主要是特征融合的改进(neck)。
在这里插入图片描述
YOLOv3-head,因为是anchor-base方法,因此分类、回归分支没有改变。

接下来论文大幅讲解扩展 (BoF) 的内容,可以解决一些问题并增加检测器准确性,并顺序检查每个功能的影响。

论文指出:我们不使用Cross-GPU Batch Normalization(CGBN或SyncBN)或昂贵的专用设备。

接就是说作者用单卡训练,就无需采用SyncBN方法,SyncBN是在更多的卡上同步BN,论文出自:MegDet: A Large Mini-Batch Object Detector。也就是说你的单卡游戏本就可以训练。

3.2 BoF和BoS的选择

BoF是指Bag of Freebies,BoS是指Bag of specials。这一部分就是各种技巧(Tricks)的选择了。

为了改进目标检测训练,CNN 通常使用以下内容:

激活:ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish,or Mish

边界框回归损失: MSE, IoU, GIoU, CIoU, DIoU

数据增强:CutOut, MixUp, CutMix

正化方法:DropOut, DropPath, Spatial DropOut ,or DropBlock

网络归一化:Batch Normalization (BN) , Cross-GPU Batch Normalization (CGBN or SyncBN) , Filter Response Normalization (FRN) , or Cross-Iteration Batch Normalization (CBN)

跳转连接: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

原文:至于训练激活函数,由于PRELU和SELU的训练难度较大,而ReLU6是专门的量化网络的设计,因此,我们不从候选列表中选择上述激活函数。(所以只是科普下?最后选择了Mish)对于正则化方法,发表了DropBlock的人将他们的方法与其他方法进行了比较,在细节上,他们的正则化方法赢得了很多。我们毫不犹豫地选择了DropBlock作为我们正则化方法。

解读:

ReLU6:relu6, y= min(max(0,x), 6),鼓励网络学习到稀疏特征。
Mish :Mish=x * tanh(ln(1+e^x))
IoU->GIoU->DIoU->CIoU,从最开始引用IoU损失函数,到改进如何更好优化,一系列方法。
MixUp、CutMix :这个是打比赛都会用到的方法。
CBN:解决BN批次太小的问题,batch不想调大,但是有希望能达到batch很大的效果,就采用统计前几个迭代的均值和方差。CBN属于利用不同的iter数据来变相扩大batchsize从而改进模型的效果。论文:Cross-Iteration Batch Normalization
DropOut系列:
Dropout :整体随机扔
Spatial Dropout:按通道随机扔
DropBlock:每个特征图上按spatial块随机扔
Cutout :在输入层按spatial块随机扔
DropConnect:只在连接处扔,神经元不扔。
SyncBN: 多卡同步BN。
跳转连接: 这里的方法有如Resnet里面skip连接,如果对连接加上权重就是Weighted residual connections(WRC)这个来自论文EfficientDet,如果将特征映射分为两部分就是CSP。

3.3 额外提升

为了使设计的检测器更适合于单 GPU 的训练,我们进行了如下其他设计和改进:

新的数据扩增马赛克和自我对抗训练(SAT)的方法
在应用遗传算法时,我们选择最佳的超参数
修改了一些外在方法,修改SAM、 PAN 和CmBN
解读:

马赛克是一种新的数据扩增方法,它混合了4个训练图像。

自我对抗训练 (SAT)也是一种新的数据扩增方法,前向和反向传播都有。在第一阶段,神经网络会更改原始图像,而不是网络权重。这样,神经网络通过改变原始图像,从而创造了一种图像上没有想要目标的假象,对其自身执行了对抗攻击。在第二阶段,训练神经网络以正常方式检测此修改图像上的目标。类似样本生成

CmBN 是CBN的修改版。CBN上面简单介绍过了。
在这里插入图片描述
也就是说仅收集单个batch中的mini-batches之间的统计信息。

从空间上的注意力到点注意力来修改SAM。
在这里插入图片描述
将 PAN 的快捷方式连接改为串联。
在这里插入图片描述

3.4. YOLOv4

这部分总结归纳YOLOv4的结构了。

YOLOv4由以下组成:

骨架网络: CSPDarknet53
颈部: SPP、PAN
头部: YOLOv3
YOLOv4的技巧:

Bag of Freebies 外在引入技巧: CutMix和马赛克数据增强,DropBlock正则化,类标签平滑 。
Bag of Specials 网络改进技巧: Mish激活函数,跨阶段部分连接(CSP),多输入加权残差连接 (MiWRC)。
Bag of Freebies 外在检测器引入技巧:CIoU损失函数, CmBN, DropBlock正则化,马赛克数据增强,自对抗训练(SAT),Eliminate grid sensitivity,为每个真实标签使用多个锚点,Cosine annealing scheduler,优化的超参数,随机的训练形状。
Bag of Specials检测器网络改进技巧:Mish激活函数,SPP模块,SAM模块,路径聚合模块(PAN), DIoU-NMS 。

4 实验

论文做了大量的实验,因为包含的Tticks太多了。论文验证了大量的BoF,包括grid sensitivity elimination, mosaic data augmentation, IoU threshold, genetic algorithm,class label smoothing, cross mini-batch normalization, self adversarial training, cosine annealing scheduler, dynamic mini-batch size, DropBlock, Optimized Anchors, different kind of IoU losses。我们还对各种BoS验证,包括Mish、SPP、SAM、RFB、BiFPN、BiFPN和Gaussian YOLO。对于所有的实验,只使用一个GPU训练。

4.3 不同技巧检测训练影响

作者做了大量的消融实验,且用表格显示出来。总结就是:
在这里插入图片描述
黑色表示有效,那么可以看出:

有效:

M: Mosaic data augmentation - using the 4-image mosaic during training instead of single image
GA: Genetic algorithms - using genetic algorithms for selecting the optimal hyperparameters during network
CBN: CmBN - using Cross mini-Batch Normalization for collecting statistics inside the entire batch, instead of collecting statistics inside a single mini-batch
CA: Cosine annealing scheduler - altering the learning rate during sinusoid training
GIoU, CIoU, DIoU, MSE - using different loss algorithms for bounded box regression CIoU
无效:

IT: IoU threshold - using multiple anchors for a single ground truth IoU (truth, anchor) > IoU threshold training on the first 10% of time periods
S: Eliminate grid sensitivity
LS: Class label smoothing - using class label smoothing for sigmoid activation
DM: Dynamic mini-batch size - automatic increase of mini-batch size during small resolution training by using Random training shapes
OA: Optimized Anchors - using the optimized anchors for training with the 512x512 network resolution
测试阶段方法对比
在这里插入图片描述
表格表示:

PANet、SPP、SAM均是有效的。

CSPDarknet53优于CSPResNeXt50
Mish 有效

4.5 不同的mini-batch size对检测器的影响

结论:minibatch越大越好,CSPDarknet53对minibatch不敏感,利于单卡训练

5 检测结果

论文贴了和其他方法的对比表格,说明了YOLOv4强大的性能。

6 结论

原文翻译:我们提供了一种最先进的检测器,其速度和准确度都比可用的检测器高很多。所描述的检测器可在普通的 GPU 上进行训练和使用,这使得其广泛使用成为可能。单阶段检测器的最初概念已证明其可行性。我们已经验证了大量的功能,并选择用于这些功能,以提高分类器和检测器的准确性。这些功能可用作未来研究和发展的最佳实践。

7 个人总结

论文包含了大量的知识点,需要看很多论文才能知道很多Tricks是什么,因此也可以作为综述类的论文来看。

Bag of freebies和Bag of specials对工业界或者打比赛也是十分有帮助的。YOLOv4意义不仅仅是一篇论文,更重要的是能在落地应用基础上提高了性能。

YOLOv4模型 = CSPDarkNet53 + SPP + PANet(path-aggregation neck) + YOLOv3-head

YOLOv4使用这些新的技巧:WRC、CSP、CmBN、SAT,Mish-activation,Mosaic data augmentation、CmBN、DropBlock正则化和CIoU损失,以及组合技巧,以达到最好的效果。在MS COCO数据集中的AP43.5%(65.7% AP50),在实际应用中,Tesla V100上速度可达到65FPS。

网络结构图大致为:
在这里插入图片描述

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页