YOLOv4 论文翻译

内容简介:本文源自知乎,已获作者授权转载,请勿二次转载。https://zhuanlan.zhihu.com/p/136183555

本文转载自:http://mp.weixin.qq.com/s?__biz=MzIwMTE1NjQxMQ==&mid=2247505939&idx=3&sn=631404d32a8ba98b1c0aa5de3a3607c4,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

YOLOv4 论文翻译

本文源自知乎,已获作者授权转载,请勿二次转载。

https://zhuanlan.zhihu.com/p/136183555

本文是YOLO系列的一个继承篇,由俄罗斯开发者Alexey Bochkovskiy和两位中国台湾开发者Chien-Yao Wang和Hong-Yuan Mark Liao联合推出。

作者总结了近些年的深度学习目标检测技巧,进行了大量的实验,使得YOLOv4在精度和速度上都表现得非常出色。

0 1

Abstract

卷积神经网络(CNN)中有大量的特性可以进行改进而提高精度。这些特性组合需要在大型数据集上进行测试,同时对结果进行理论证明。

其中的一些特性仅仅适合于一些特定的模型和问题,或者仅适用于小规模数据集;而例如batch-normalization和residual-connections这样的方法则适用于大多数的模型、工作和数据集。

类似的还包括:

  • Weighted-Residual-Connections(WRC)

  • Cross-Stage-Partial-connections(CSP)

  • Cross mini-Batch Normalization(CmBN)

  • Self-adversarial-training(SAT) and Mish-activation

本文利用WRC,CSP,CmBN,SAT, Mish activation,Mosaic data augmentation,CmBN,DropBlock regularization,and CIoU loss实现了一个更高水平的结果:43.5% AP (65.7% ) for the MS COCO dataset at a real-time speed of ~65 FPS on Tesla V100。

Introduction

大多数基于CNN的目标检测器仅仅适用于推荐系统。 例如在城市中摄像机拍摄免费停车位时,使用速度慢却精度高的模型,而在监控汽车的碰撞时则使用识别速度快却精度不高的模型。

因此提升实时的目标检测器是很有必要的。 不仅用于生成推荐系统,并且利于独立的流程管理和减少人力。 在传统的GPU上进行实时的目标检测运算会带来更小的代价。

当下,最精确的神经网络并不具备实时性,并且需要使用大量的GPU进行小批量的运算。 我们通过创建一个CNN并利用一个GPU来解决这些问题。

这项工作的主要目标是提升生产系统中目标检测器的速度以及优化并行运算,而不是BFLOP。

我们希望设计的对象能够更容易地训练和使用。任何人使用传统的GPU便能够进行实时的训练和测试,并能够获得高质量的实时监测结果。

YOLOv4 论文翻译

我们做出了如下贡献:

  1. 我们构建了一个高效且强大的目标检测模型。这使得每一个人能够使用一个1080Ti或2080TiGPU来训练一个超快速和精确的目标检测器。

  2. 在检测器训练时,我们验证了最先进Bag-of Freebies and Bag-of-Specials目标检测方法的影响。

  3. 我们对一些先进的方法进行修改,包括CBN、PAN、SAM,使得它们更加的高效并适合单GPU运算。

03

Related Work

Object detection models

现在的检测器通常由两部分组成,一部分是在ImageNet上预训练的主干网络,另一部分则用来预测物体类别以及边界框。

对于那些在GPU平台上运行的检测器,它们的主干网络可能为VGG、ResNet、ResNeXt或DenseNet。

而对于那些在CPU平台上运行的检测器,他们的检测器可能为SqueezeNet ,MobileNet, ShufflfleNet。

头部一半分为一阶段目标检测器和二阶段目标检测器。最具代表性的二阶段目标检测器R-CNN系列,包括fast R-CNN,faster R-CNN ,R-FCN [9],Libra R-CNN。也可以使得二阶段目标检测器成为anchor-free目标检测器,例如RepPoints。至于一阶段目标检测器,最具代表性的网络包括YOLO、SSD、RetinaNet。

近年来,一阶段的anchor-free目标检测器在不断发展,包括CenterNet、CornerNet、FCOS等。在近些年来的发展,目标检测器通常是在头部和主干网络之间加入一些层,这些层被用来收集不同阶段的特征图,可以称之为目标检测器的颈部。这部分通常由几个自下而上和自上而下的路径组成。

拥有这种机制的网络包括Feature Pyramid Network (FPN),Path Aggregation Network (PAN),BiFPN和NAS-FPN。

除了上述模型外,一些研究人员将重心放在了研究主干网络上(DetNet,DetNAS),而还有一些研究人员则致力于构建用于目标检测的新的模型(SpineNet,HitDetector)。

总的来说,一般的目标检测器由以下几部分组成:

• Input: Image, Patches, Image Pyramid

• Backbones: VGG16, ResNet-50,SpineNet,EffificientNet-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,RetinaNet(anchor based)

  • CornerNet,CenterNet,MatrixNet,FCOS(anchor free)

• Sparse Prediction(two-stage):

  • Faster R-CNN,R-FCN,Mask R-CNN(anchor based)

  • RepPoints(anchor free)

YOLOv4 论文翻译

Bag of freebies

通常,传统的目标检测器都是离线训练的。因此,研究人员经常喜欢利用这一优点来开发一种更好的训练方法,使得在不增加推理成本的情况下提升目标检测器的精度。我们称这些仅仅改变了训练策略或增加了训练成本的方法为“Bag of freebies”。

目前通常采用的方法使数据增强。数据增强的目的是增加输入图像的灵活性,因此设计的目标检测器有着更高的鲁棒性。

Bag of specials

对于那些增加模块和后处理的方法,它们仅仅少量的增加了推理成本,却能够显著地提升目标检测精度,我们称之为“bag of specials”。

一般说来,这些插入的模块是用来增强某些属性,例如增强感受野,引入警示机制或增强特征的集成能力等。而后处理则用来筛选模型的预测结果。

04

Methodology

基本的目标是加快神经网络在生产系统中的运算速度以及优化并行运算。 我们提出了两种具有实时性的神经网络的方案:

  • 对于GPU,我们在卷积层中使用少量的组:CSPResNeXt50 / CSPDarknet53 。

  • 对于VPU,我们使用分组卷积,但我们不使用Squeeze-and-excitement (SE) blocks,具体包括以下模型:EffificientNet-lite / MixNet / GhostNet / MobileNetV3。

Selection of architecture

我们的目标是在输入网络分辨率、卷积层数、参数数目(fifilter size2 * fifilters * channel / groups)以及输出层数(filters)中找到最佳的平衡。

例如,大量的实验证明,对于ILSVRC2012(ImageNet)数据集上的目标分类而言,CSPResNext50要优于CSPDarknet53。

然而,在MS COCO数据集上,CSPDarknet53要优于CSPResNext50。

下一个目标则是为增加感受野而选择附加块,并在不同的检测器水平上从不同的主干水平中选择最佳的参数聚集方法。

对于分类器而言,分类最优的模型并不总是最优的。与分类器相比,检测器有以下一些需求:

  • 更高的输入网络大小(分辨率)- 用于检测多个小尺寸物体

  • 层数更多 – 用于使更高的感受野去覆盖增加输入网络大小

  • 参数更多 – 用于增强模型在检测多个不同尺寸目标时的能力

我们假设一个拥有较大感受野的模型(拥有大量3×3的卷积层)以及一个参数较多的模型作为主干网络。

表1展示了CSPResNeXt50, CSPDarknet53, and EffificientNet B3的信息。CSPResNeXt50仅包含16个3×3卷积层,一个大小为425×425的感受野以及20.6M的参数。

而CSPDarknet53则含有29个3×3卷积层,一个大小为725×725的感受野以及27.6M大小的参数。

大量的实验以及理论证明表示CSPDarknet53在两者中为最优模型。

不同大小的感受野影响总结如下:

  • 达到目标尺寸-能够感受到整个目标

  • 达到网络尺寸-能够感受目标上下文

  • 超过网络尺寸-增加图像点与激活函数的联系

我们在CSPDarknet53上添加SPP block,因为它能够显著增加感受野,分离出最重要的上下文特征且几乎没有降低网络的运行速度。我们使用PANet作为参数聚集的方法,而不是YOLOv3中使用的FPN。

最后,我们使用CSPDarknet53的主干网络, SPP附加模块, PANet 以及YOLOv3的头部作为YOLOv4的框架。

未来我们计划对检测器的Bag of Freebies(BoF)的内容进行扩展,理论上能够解决一些问题并增加检测器的精度,继而以实验的方式检测每一种特性的影响。

我们没有用Cross-GPU Batch Normalization (CGBN or SyncBN)或者昂贵的设备。这使得每一个人能够在传统的图形处理器上再现我们的最新成果。

YOLOv4 论文翻译

Selection of BoF and BoS

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

  • Activations: ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish

  • Bounding box regression loss:  MSE, IoU, GIoU,CIoU, DIoU

  • Data augmentation:  CutOut, MixUp, CutMix

  • Regularization method: DropOut, DropPath,Spatial DropOut [79], or 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) [70], or Cross-Iteration Batch Normalization (CBN)

  • Skip-connections: Residual connections, Weighted residual connections, Multi-input weighted residual connections, or Cross stage partial connections (CSP)

对于激活函数的训练,因为PReLU和SELU难以训练且ReLU6是为量化网络设计的,所以我们将他们从候选名单中排除。

对于正则化,我们选择性能更优的Drop-Block。而在归一化方法的选择中,考虑到训练方式,我们排除了syncBN。

Additional improvements

为了使我们设计的目标检测器更加适合在单GPU上训练,我们有如下的设计和改进:

  • 引入Mosaic, and Self-Adversarial Training (SAT)的数据增广方式

  • 应用遗传算法选择最优超参数

  • 修改现有的方法使之更适合训练和检测- modifified SAM, modifified PAN, and Cross mini-Batch Normalization (CmBN)

Mosaic代表了一种新的数据增广方式。它混合了四张训练图像。因此,四种不同的上下文被混合,而CutMix只混合两个输入图像。这使得能够检测正常背景之外的目标。

Self-Adversarial Training (SAT)同样代表了一种数据混合方式,分两个阶段进行。

YOLOv4 论文翻译

CmBN为CBN的修改版,定义为Cross mini-Batch Normalization(CmBN),它仅仅在一个batch之中收集小批量统计信息。

我们将SAM从spatial-wise attention改为point-wise attention。同时,替换PAN到concatenation的连接。

YOLOv4 论文翻译
YOLOv4 论文翻译

05

YOLOv4

本节中,我们详细说明YOLOv4的细节:

YOLOv4 consists of :

  • Backbone:  CSPDarknet53

  • Neck:  SPP, PAN

  • Head:  YOLOv3

YOLO v4 uses :

  • Bag of Freebies (BoF) for backbone: CutMix and Mosaic data augmentation, DropBlock regularization,Class label smoothing

  • Bag of Specials (BoS) for backbone: Mish activation, Cross-stage partial connections (CSP), Multi-input weighted residual connections (MiWRC)

  • Bag of Freebies (BoF) for detector: CIoU-loss,CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler, Optimal hyper parameters, Random training shapes

  • Bag of Specials (BoS) for detector: Mish activation,SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS

06

Experiments

我们在ImageNet (ILSVRC 2012 val)数据集上测试了不同的改进的训练方式对分类器精度的影响。 同时,在MS COCO (test-dev 2017)数据集上对检测器进行测试。

07

Results

作者做了大量的对比实验,并使用了多个技巧进行比较。

YOLOv4 论文翻译
YOLOv4 论文翻译
YOLOv4 论文翻译

作者还对比了在Maxwell、Pascal、Volta三个不同系列的GPU上的效果。

YOLOv4 论文翻译

与其他的检测器相比较,YOLOv4在速度和精度上都优于最快最精确的检测器。

08

Conclusions

YOLOv4能够在8-16GB-VRAM的传统GPU上训练和使用,对于其推广有着很大的帮助。

作者对比了近些年来的深度学习目标检测技巧,做了大量的实验,并对一些方法进行创新和改进,使得YOLOv4能够有效地平衡速度和精度之间的关系,达到整体性能提升的效果。

论文地址:

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

开源地址:

https://github.com/AlexeyAB/darknet

不仅有代码、模型而且提供了详细的训练和测试方法。

(在我爱计算机视觉公众号后台回复“ YOLOv4 ”,即可收到论文、代码、模型下载)

END

YOLOv4 论文翻译

备注:目标检测

YOLOv4 论文翻译

目标检测交流群

2D、3D目标检测等最新资讯, 若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

YOLOv4 论文翻译

在看,让更多人看到   YOLOv4 论文翻译

以上所述就是小编给大家介绍的《YOLOv4 论文翻译》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

YOLOv4 论文翻译

关注我们,获取更多IT资讯^_^

为你推荐:

  • 重磅!就在刚刚,吊打一切的 YOLOv4 开源了!
  • YOLOv4 来了!COCO 43.5 AP,65 FPS!实现速度与精度的最优平衡
  • BERT_Paper_Chinese_Translation: BERT论文中文翻译版
  • 4 – 让 Django 完成翻译:迁移数据库
  • Netty 4.x User Guide 中文翻译 – 后端

相关软件推荐:

  • 中英文翻译库
  • TCP 报文转发服务 project_x

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

nginx 翻译 中文乱码翻译 hadoop 论文 ssh翻墙 erlang 编译 scala 编译 android论坛 erlang 论坛 nginx论坛 hadoop 论坛 ruby 论坛 delphi论坛 hadoop论坛 perl论坛 java论坛 mysql论坛 html5论坛 python 论坛 perl 论坛 groovy论坛 nginx 论坛 qt论坛 groovy编译器 nginx中文文档 论坛开源 firefox翻墙教程 objective c编译器 objective c论坛 scala中文文档 erlang 文件 groovy文件 postgres中文 postgresql中文 centos中文 resin 英文 nginx文档 php文件 hadoop技术论坛 php开源论坛 .net开源论坛 jsp开源论坛 nio文件 xcode 文件 .net论坛开源 html文档 scala中文 xml文件 nginx 中文 nginx 文档 nginx中文

YOLOv4 论文翻译