重磅更新!YoloV4最新论文!解读yolov4框架

谁说胖子不能爱 提交于 2020-04-26 16:06:30

论文地址和代码

https://arxiv.org/abs/2004.10934v1

代码:https://github.com/AlexeyAB/darknet

摘要:

据说有许多功能可以提高卷积神经网络(CNN)的准确性。 需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。 某些功能仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行; 而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。 我们假设此类通用功能包括加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。 我们使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CIoU丢失,并结合其中的一些功能来实现最新的结果:43.5%的AP(65.7 在Tesla V100上,MS COCO数据集的实时速度约为65 FPS。

 核心中的核心:作者将Weighted-Residual-Connections(WRC), Cross-Stage-Partial-connections(CSP), Cross mini-Batch Normalization(CmBN), Self-adversarial-training(SAT),Mish-activation Mosaic data augmentation, DropBlock, CIoU等组合得到了爆炸性的YOLOv4,可以吊打一切的YOLOv4.在MS-COCO数据上:43.5%@AP(65.7%@AP50)同时可以达到65fps@TeslaV100.

 

贡献

作者设计YOLO的目的之初就是设计一个快速而高效的目标检测器。该文的贡献主要有以下几点:

  • 设计了一种快速而强有力的目标检测器,它使得任何人仅需一个1080Ti或者2080Ti即可训练这样超快且精确的目标检测器你;

  • (不会翻译直接上英文)We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training

  • 作者对SOTA方法进行改进(含CBN、PAN,SAM)以使其更适合单GPU训练

方法

作者在现有实时网络的基础上提出了两种观点:

  • 对于GPU而言,在组卷积中采用小数量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;

  • 对于VPU而言,采用组卷积而不采用SE模块。

网路结构选择

网络结构选择是为了在输入分辨率、网络层数、参数量、输出滤波器数之间寻求折中。作者研究表明:CSPResNeXt50在分类方面优于CSPDarkNet53,而在检测方面反而表现要差

网络主要结构确定了后,下一个目标是选择额外的模块以提升感受野、更好的特征汇聚模块(如FPN、PAN、ASFF、BiFPN)。对于分类而言最好的模型可能并不适合于检测,相反,检测模型需要具有以下特性:

  • 更高的输入分辨率,为了更好的检测小目标;

  • 更多的层,为了具有更大的感受野;

  • 更多的参数,更大的模型可以同时检测不同大小的目标。

一句话就是:选择具有更大感受野、更大参数的模型作为backbone。下图给出了不同backbone的上述信息对比。从中可以看到:CSPResNeXt50仅仅包含16个卷积层,其感受野为425x425,包含20.6M参数;而CSPDarkNet53包含29个卷积层,725x725的感受野,27.6M参数。这从理论与实验角度表明:CSPDarkNet53更适合作为检测模型的Backbone

在CSPDarkNet53基础上,作者添加了SPP模块,因其可以提升模型的感受野、分离更重要的上下文信息、不会导致模型推理速度的下降;与此同时,作者还采用PANet中的不同backbone级的参数汇聚方法替代FPN。

最终的模型为:CSPDarkNet53+SPP+PANet(path-aggregation neck)+YOLOv3-head = YOLOv4.

Tricks选择

为更好的训练目标检测模型,CNN模型通常具有以下模块:

  • Activations:ReLU、Leaky-ReLU、PReLU、ReLU6、SELU、Swish or Mish

  • Bounding box regression Loss:MSE、IoU、GIoU、CIoU、DIoU

  • Data Augmentation:CutOut、MixUp、CutMix

  • Regularization:DropOut、DropPath、Spatial DropOut、DropBlock

  • Normalization:BN、SyncBn、FRN、CBN

  • Skip-connections:Residual connections, weighted residual connections, Cross stage partial connections

作者从上述模块中选择如下:激活函数方面选择Mish;正则化方面选择DropBlock;由于聚焦在单GPU,故而未考虑SyncBN。

其他改进策略

为使得所涉及的检测器更适合于单GPU,作者还进行了其他几项额外设计与改进:

  • 引入一种新的数据增广方法:Mosaic与自对抗训练;

  • 通过GA算法选择最优超参数;

  • 对现有方法进行改进以更适合高效训练和推理:改进SAM、改进PAN,CmBN。

 

 

YOLOv4

总而言之,YOLOv4包含以下信息:

  • Backbone:CSPDarkNet53

  • Neck:SPP,PAN

  • Head:YOLOv3

  • Tricks(backbone):CutMix、Mosaic、DropBlock、Label Smoothing

  • Modified(backbone): Mish、CSP、MiWRC

  • Tricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shape

  • Modified(tector):Mish、SPP、SAM、PAN、DIoU-NMS

Experiments

模型的好坏最终还是要通过实验来验证,直接上对比表:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!