YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)

YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第1张图片
先看看效果对比
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第2张图片
YOLOv4 的运行速度是 EfficientDet 的两倍。使 YOLOv3 的 AP 和 FPS 分别提高 10 % 10\% 10% 12 % 12\% 12%,达到 43.5 % 43.5% 43.5 AP 和 65 65 65 FPS。

一、概览

论文地址:https://arxiv.org/abs/2004.10934
源码地址:https://github.com/AlexeyAB/darknet

论文框架:
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第3张图片
研究目的: 提高目标检测器的速度与精度,并使其可以很容易地训练和使用。
解决方法: 堆料,综合各先进算法。
研究贡献:

  1. 提出了一种高效而强大的目标检测模型。它使每个人都可以使用1080 Ti或2080 Ti GPU 训练超快速和准确的目标检测器。
  2. 在检测器训练期间,验证了SOTA的Bag-of Freebies 和Bag-of-Specials方法的影响。
  3. 改进了 SOTA 的方法,使它们更有效,更适合单 GPU 训练,包括 CBN,PAN,SAM 等。

实验数据集: ImageNet、MS COCO

二、相关工作

这里作者对目标检测作了一个小综述,对初学者有很大帮助。

2.1 目标检测模型

作者将模型框架拆分为 Head、Neck、Backbone 和 Head 四部分,并对常见网络进行了归类。如下图:
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第4张图片
上图只是部分归类,文中全部归类总结如下:(附下载链接)

  • Input:Image,Patches,Image Pyramid

  • Backbones

    • GPU:VGG16, ResNet-50, ResNeXt, DenseNet
    • CPU:SqueezeNet, MobileNet(V1, V2, V3, MnasNet), ShuffleNet(V1, V2)
    • SpineNet, EfficientNet-B0/B7, CSPResNeXt50, CSPDarknet53
  • Neck

    • Additional blocks:SPP, ASPP, RFB, SAM
    • Path-aggregation blocks:FPN, PAN, NAS-FPN, Fully-connected FPN, BiFPN, ASFF, SFAM
  • Heads

    • Dense Prediction (one-stage)
      • RPN, SSD, YOLO(V1, V2, V3), RetinaNet (anchor based)
      • CornerNet, CenterNet, MatrixNet, FCOS (anchor free)
    • Sparse Prediction (two-stage)
      • fast R-CNN, faster R-CNN, R-FCN, Libra R-CNN, Mask R-CNN (anchor based)
      • RepPoints (anchor free)

三、本文方法

作者提出了实时神经网络的两种选择:

  • 对于GPU,在卷积层中使用:CSPResNeXt50 / CSPDarknet53

  • 对于VPU,使用分组卷积,但避免使用 SE 块,具体包括以下模型:
    EfficientNet-lite / MixNet / GhostNet / MobileNetV3

3.1. 框架选择

首先看看选择结果:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

确定 Backbone
作者的目标是找到输入网络分辨率、卷积层数、参数个数( filter_size 2 ^2 2 * filters * channel / groups )和层输出( filters )数之间的最佳平衡。
大量研究表明,就 ILSVRC2012(ImageNet) 数据集上的对象分类而言,CSPResNext50 比 CSPDarknet53 要好得多。但在 MS COCO 数据集上,CSPDarknet53 比 CSPResNext50 更好。
由于作者使用 MS COCO 数据集,所以这里选择 CSPDarknet53。

选择其他块以增加接受野
对于分类而言最优的参考模型对于检测器而言并不总是最优的。与分类器相比,检测器需要满足以下各项:

  • 更高的输入网络大小(分辨率) —— 用于检测多个小对象
  • 更多的层 —— 提供更大的感受野,以覆盖输入网络增加的大小
  • 更多参数 —— 使模型具有更大的容量,可以在单个图像中检测多个不同大小的对象

所以选择感受野较大(卷积层数为3×3)、参数较多的模型作为 Backbone,下表大量实验所示,选 CSPDarknet53 最佳。
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第5张图片

选择针对不同探测器级别的不同 Backbone 层参数聚合的最佳方法
不同大小感受野的影响总结如下:

  • 最大为对象大小 —— 允许查看整个对象
  • 最大为网络大小 —— 允许查看对象周围的上下文
  • 超过网络大小 —— 增加图像点和最终激活之间的连接数

作者在 CSPDarknet53 上添加 SPP 块,因为它显著增加了感受野,分离出最重要的上下文特征,并且几乎不会降低网络运行速度。使用 PANet 代替 YOLOv3 中使用的 FPN,作为不同Backbone 级别对不同检测器级别的参数聚合的方法。

最后,作者选择了 CSPDarknet53 backbone、SPP 附加模块、PANet 路径聚合 neck 和YOLOv3(基于锚点的) head 作为 YOLOv4 的体系结构。

3.2. 选择 BoF(Bag of freebies) 和 BoS(Bag of specials)

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

  • Activations(激活函数):ReLU,leaky-ReLU,parametric-ReLU,ReLU6,SELU,Swish,Mish
  • Bounding box regression loss(损失函数):MSE,IoU,GIoU,CIoU,DIoU
  • Data augmentation(数据增强):CutOut,MixUp,CutMix
  • Regularization method(正则化):DropOut,DropPath,Spatial DropOut,DropBlock
  • Normalization of the network activations by their mean and variance(通过其均值和方差对网络激活进行归一化):Batch Normalization (BN),Cross-GPU Batch Normalization (CGBN or SyncBN),Filter Response Normalization (FRN),Cross-Iteration Batch Normalization (CBN)
  • Skip-connections(跳跃连接):Residual connections,Weighted residual connections,Multi-input weighted residual connections,Cross stage partial connections (CSP)

对于训练激活函数,由于 PReLU 和 SELU 训练难度较大,而 ReLU6 是专门为量化网络设计的,因此作者没有选择上述激活函数。
在正则化方法上,作者以 DropBlock 正则化方法的论文结果很优秀为理由,选择了DropBlock。
在归一化方法的选择上,由于关注的是只使用一个GPU的训练策略,所以没有考虑 syncBN。

3.3. 其他改进

为了使所设计的检测器更适合在单 GPU 上进行训练,作者对其进行了额外的设计和改进,具体如下:

  • 介绍了一种新的数据增强方法 Mosaic(镶嵌,如下图)和自对抗训练方法(SAT)。
  • 在应用遗传算法时,选择了最优的超参数。
  • 修改了一些现有的方法,使我们的设计适合于有效的训练和检测,例如:SAM,PAN 和交叉小批量归一化(CmBN)。
    YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第6张图片

Mosaic 是一种新的数据增强方法(混合4幅训练图像)。而 CutMix 仅混合了2个输入图像。这允许检测其正常上下文之外的对象。此外,批量归一化从每层上的4个不同图像计算激活统计数据,这极大地减少了对大量 mini-batch 的需求。

自对抗训练(SAT)也代表了一种新的数据增强技术,它分为两个阶段。在第一阶段,神经网络改变原始图像而不是网络权值。以这种方式,神经网络对其自身执行对抗性攻击,改变原始图像,以制造图像上没有所需对象的假象。在第二阶段,训练神经网络,以正常的方式在修改后的图像上检测目标。

CmBN 是 CBN 的修改版本,如下图所示,定义为交叉小批量归一化(Cross mini-Batch Normalization,CmBN)。仅在单个批次内的小批次之间收集统计信息。
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第7张图片
作者将 SAM 从空间关注修改为点关注,并将 PAN 的 shortcut 连接替换为串联,如下图所示。
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第8张图片

3.4. YOLOv4

来一个 YOLOv4 框架及技巧的全家福:

框架结构:

  • Backbone:CSPDarknet53
  • Neck:SPP,PAN
  • Head:YOLOv3

即 YOLOv4 = CSPDarknet53 + SPP + PAN + YOLOv3

技巧:

  • 用于 backbone 的 BoF:CutMix 和 Mosaic 数据增强,DropBlock 正则化,Class label smoothing(类标签平滑)
  • 用于 backbone 的 BoS:Mish 激活函数,CSP,MiWRC
  • 用于 detector(检测器)的 BoF:CIoU-loss,CmBN,DropBlock 正则化,Mosaic 数据增强,Self-Adversarial 训练,消除网格敏感性,对单个 ground-truth 使用多个 anchor,Cosine annealing scheduler,最佳超参数,Random training shapes
  • 用于 detector 的 Bos:Mish 激活函数,SPP,SAM,PAN,DIoU-NMS

四、实验

作者在 ImageNet(ILSVRC 2012 Val) 数据集上测试了不同训练改进技术对分类器精度的影响,然后在 MS COCO(test-dev 2017) 数据集上测试了不同训练改进技术对检测器精度的影响。

4.1 实验设置

关于训练参数设置等,通读论文阶段可以略过。
在 ImageNet 图像分类实验中,默认的超参数为:训练步数为 800 万步;批次大小和小批次大小分别为 128 和 32;采用多项式衰减学习率调度策略,初始学习率为 0.1;预热步数为 1000;动量衰减和权重衰减分别设置为 0.9 和 0.005。我们所有的 BoS 实验都使用与默认设置相同的超参数,并且在 BoF 实验中,我们增加了 50% 的训练步骤。在 BoF 实验中,我们验证了 MIXUP、CutMix、Mosaic、Bluring 数据增强和标签平滑正则化方法。在BoS 实验中,我们比较了 LReLU、SWISH 和 MISH 激活函数的影响。所有实验都使用1080Ti 或 2080Ti GPU 进行训练。
在 MS COCO 目标检测实验中,默认的超参数为:训练步数为 500500 步;采用步长衰减学习率调度策略,初始学习率为 0.01,在 40 万步 和 45 万步分别乘以因子 0.1;动量和权重衰减分别设置为 0.9 和 0.0005。所有架构都使用单个GPU来执行批大小为 64 的多尺度训练,小批量大小为 8 或 4,具体取决于架构和GPU内存限制。除采用遗传算法进行超参数搜索实验外,其余实验均采用默认设置。遗传算法使用 YOLOv3-SPP 算法进行带GIoU损失的训练,搜索 300 个 epochs 的 min-val 5k 集。遗传算法实验采用搜索学习率为 0.00261,动量为 0.949,IOU阈值为 0.213,损失归一化为 0.07.。我们验证了大量的BoF 算法,包括网格敏感度消除、Mosaic 数据增强、IOU 阈值、遗传算法、类标签平滑、交叉小批量归一化、自对抗训练、余弦退火、动态小批量大小、DropBlock、优化锚点、不同类型的 IOU 损失。我们还在各种 BoS 上进行了实验,包括MISH、SPP、SAM、RFB、BiFPN 和 GaussYOLO。对于所有的实验,我们只使用一个 GPU 进行训练,因此不使用诸如优化多个 GPU 的 syncBN 之类的技术。

4.2 不同特征对分类器训练的影响

作者通过实验研究了不同特征对分类器训练的影响。
包括:

  • 类别标签平滑的影响
  • 不同数据增强技术的影响(bilateral blurring, MixUp, CutMix 和 Mosaic)
  • 不同激活函数的影响(Leaky-ReLU, Swish, Mish)
    结果如下表:
    YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第9张图片
    YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第10张图片
4.3 不同特征对检测器训练的影响

作者通过实验研究了不同特征对 BoF-detector 训练精度的影响。
包括: Eliminate grid sensitivity(S)、Mosaic 数据增强(M)、IoU threshold(IT)、遗传算法(GA)、类别标签平滑(LS)、CmBN(CBN)、余弦退火(CA)、Dynamic mini-batch size(DM)、优化锚点(OA)、使用不同的损失算法进行有界盒回归(GIoU, CIoU, DIoU, MSE)。结果如下表:
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第11张图片

作者通过实验研究了不同特征对 BoS-detector 训练精度的影响。
包括:PAN、RFB、SAM、GaussYOLO(G) 和 ASFF。
结果如下表:
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第12张图片

4.4 不同 backbone 和预训权重对检测器训练的影响

作者通过实验研究了不同 backbone 和预训权重对检测器训练的影响。
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第13张图片
首先,虽然不同特征训练的 CSPResNeXt50 模型比 CSPDarknet53 模型具有更高的分类精度,但 CSPDarknet53 模型在目标检测方面表现出更高的准确率。
其次,使用 BoF 和 Mish 对 CSPResNeXt50 分类器进行训练可以提高其分类精度,但是进一步将这些预先训练好的权重用于检测器训练会降低检测器的精度。而使用 BoF 和 Mish 进行 CSPDarknet53 分类器训练,可以同时提高分类器和使用该分类器预训练权重的检测器的准确性。最终结果是 CSPDarknet53 比 CSPResNeXt50 更适合检测器。

4.5 不同小批量大小对检测器训练的影响

最后,作者分析了用不同小批量训练模型得到的结果,如下表所示:
YOLOv4 文献翻译阅读及拓展阅读(附拓展文献下载链接)_第14张图片
可以看出,加入 BoF 和 BoS 训练策略后,小批量对检测器的性能几乎没有影响。这一结果表明,BOF 和 BOS 推出后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都能只使用传统的 GPU 来训练一个优秀的检测器。

五、总结

感觉作者就是作了大量实验(除了文中,文章最后足足有3页的实验结果表格,这里未列出),比较了各模型与 trick,选择了最好的,然后把它们拼起来,就成了 YOLOv4。不过正因为这样,文章覆盖了当前大部分主流的 模型与 trick,对系统了解当前研究有很大帮助(哈哈,当一个综述读也是不错的)。

自己的理解,有不对的地方欢迎留言。

你可能感兴趣的:(文献阅读,深度学习)