YOLOv4: Optimal Speed and Accuracy of Object Detection(2020.4)

文章目录

  • Abstract
  • Introduction
  • [Related work](#Related work)
    • [Object detection models](#Object detection models)
    • [Bag of freebies](#Bag of freebies)
    • [Bag of specials](#Bag of specials)
  • Methodology
    • [Selection of architecture](#Selection of architecture)
    • [Selection of BoF and BoS](#Selection of BoF and BoS)
    • [Additional improvements](#Additional improvements)
    • YOLOv4
  • Experiments
  • Results
    • [表8列出了使用Maxwell GPU的帧率对比结果](#表8列出了使用Maxwell GPU的帧率对比结果)
    • [表9列出了使用Pascal GPU的帧率对比结果](#表9列出了使用Pascal GPU的帧率对比结果)
  • [表10列出了使用Volta GPU的帧率对比结果](#表10列出了使用Volta GPU的帧率对比结果)
  • Conclusions

原文链接
源代码

Abstract

据说有大量的特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论论证。一些特征只对某些模型和某些问题起作用,或者只对小规模数据集起作用;而一些特征,如批归一化和残差连接,适用于大多数模型、任务和数据集。我们假设这些通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批归一化(CmBN)、自对抗训练(SAT)和Mish-激活。
我们使用了新的特征:WRC、CSP、CmBN、SAT、Mish-激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并将其中一些特征结合起来获得了最先进的结果:MS COCO数据集在Tesla V100上以~ 65 FPS的实时速度获得了43.5%的AP(65.7%的AP50)

Introduction

大多数基于cnn的目标检测器很大程度上只适用于推荐系统 。最精确的现代神经网络不是实时运行的,需要大量的gpu来进行大量的mini-batch大小的训练。提高实时对象检测器的准确性,不仅可以将它们用于提示生成推荐系统,还可以用于独立流程管理和减少人工输入

我们通过创建一个在传统GPU上实时运行的CNN来解决这些问题,并且训练只需要一个传统GPU

本工作的主要目标是在生产系统中设计一个快速运行的目标检测器,并优化并行计算 ,而不是低计算量理论指标(BFLOP)

我们希望所设计的对象易于训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如图1所示的YOLOv4结果
(在性能相当的情况下,YOLOv4的运行速度比EfficientDet快两倍。改进YOLOv3的AP和FPS分别提高10%和12%)
我们的贡献总结如下:

  1. 我们开发了一个高效、强大的目标检测模型。它使得每个人都可以使用1080 Ti或2080 Ti GPU来训练超级快速准确的目标检测器
  2. 我们在检测器训练过程中验证了最先进的Bag-of- Freebies和Bag-of- specials方法对目标检测的影响
  3. 我们修改了最先进的方法,使它们更有效,更适合单GPU训练,包括CBN, PAN, SAM等

Object detection models

现代检测器通常由两部分组成,在ImageNet上进行预训练的主干和用于预测对象类别和边界框的头部

对于那些运行在GPU平台上的检测器,它们的主干 可以是VGG[68]、ResNet[26]、ResNeXt[86]或DenseNet[30]

对于那些运行在CPU平台上的检测器,它们的主干可以是SqueezeNet b[31]、MobileNet[28,66,27,74]或ShuffleNet[97,53]。

对于头部部分 ,通常分为两种,即一阶段目标检测器和两阶段目标检测器。最具代表性的两阶段目标检测器是R-CNN系列 ,包括Fast R-CNN、Faster R-CNN、R-FCN和Libra R-CNN。也有可能使两阶段对象检测器成为无锚点对象检测器,如RepPoints
对于单级目标检测器,最具代表性的型号有YOLO、SSD和RetinaNet

近年来发展了无锚单级目标探测器。这类检测器有CenterNet、CornerNet、FCOS等。近年来发展起来的目标检测器通常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部

通常,一个颈由几个自下而上的路径和几个自上而下的路径组成。采用这种机制的网络包括Feature Pyramid Network (FPN)、Path aggregation Network (PAN)[49]、BiFPN[77]和NAS-FPN

除了上述模型外,一些研究者强调直接建立一个新的主干(DetNet[43], DetNAS[7])或一个新的整体模型(SpineNet [12], HitDe- tector[20])来进行目标检测

综上所述,一个普通的目标检测器由几个部分组成:

Bag of freebies

通常,目标检测器是离线训练的 。因此,研究人员一直喜欢利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更高的精度,我们把这些只改变训练策略或只增加训练成本的方法称为 "bag of freebies"

目标检测方法中经常采用的一种方法是数据增强,这种方法符合 "bag of freebies"的定义。数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性

其他一些 "bag of freebies"方法致力于解决数据集中的语义分布可能存在偏差的问题 。在处理语义分布偏差问题时,一个非常重要的问题是不同类别之间存在数据不平衡的问题,这一问题通常通过两阶段对象检测器中的硬负例挖掘[72]或在线硬例挖掘[67]来解决

最后一类"bag of freebies"是边界盒(Bounding Box, BBox)回归的目标函数传统的目标检测器通常使用均方误差(Mean Square Error, MSE)直接对BBox的中心点坐标和高度、宽度进行回归 ,即{x中心,y中心,w, h},或者左上点和右下点,即{x左上,y左上,x右下,y右下}。基于锚点的方法是估计相应的偏移量,例如{x中心偏移量,y中心偏移量,w偏移量,h偏移量}和{x左上偏移量,y左上偏移量,x右下偏移量,y右下偏移量}

Bag of specials

对于那些只增加少量推理成本,却能显著提高目标检测精度的插件模块和后处理方法,我们称之为"bag of specials" 。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受野、引入注意机制或增强特征集成能力等,后处理是对模型预测结果进行筛选的一种方法

通常用于目标检测的注意模块主要分为通道型注意和点型注意,这两种注意模型的代表分别是挤压-激发(Squeeze-and-Excitation, SE )[29]和Spatial注意模块(SAM)[85]

基于深度学习的目标检测中常用的后处理方法是NMS,它可以过滤掉那些对同一目标预测不好的bbox,只保留响应较高的候选bbox

Methodology

根本目标是神经网络在生产系统中的快速运行和并行计算的优化 ,而不是低计算量的理论指标(BFLOP)。我们提出了两种实时神经网络的选择:

对于GPU ,我们在卷积层中使用少量组(1 - 8):CSPResNeXt50 / CSPDarknet53

对于VPU -我们使用分组卷积,但我们避免使用挤压和兴奋(SE)块-具体包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / Mo- bileNetV3

Selection of architecture

我们的目标是在输入网络分辨率、卷积层数、参数数(filter_size² * filters * channel / groups)和输出层数(过滤器)之间找到最佳平衡

下一个目标是为不同的检测器级别(如FPN, PAN, ASFF, BiFPN)选择额外的块来增加接受野和来自不同骨干级别的参数聚合的最佳方法

对于分类来说最优的参考模型对于检测器来说并不总是最优的 。与分类器不同,检测器需要满足以下条件:
1. 更高的输入网络大小(分辨率)-用于检测多个小尺寸目标
2. 更多的层-用于更高的接受域,以覆盖增加的输入网络大小
3. 更多参数-为了提高模型在单个图像中检测不同大小的多个目标的能力

我们可以假设应该选择一个具有更大的接受野大小(具有更多的卷积层数3 × 3)和更多参数的模型作为主干 。表1显示了CSPResNeXt50、CSPDarknet53和Effi- cientNet B3的信息,这一理论证明,连同我们的大量实验,表明CSPDarknet53神经网络是两者的最佳模型作为一个检测器的骨干

不同大小感受野的影响总结如下:
1. 达到目标大小-允许查看整个目标
2. 达到网络大小-允许查看目标周围的上下文
3. 超过网络大小-增加图像点和最终激活之间的连接数

我们在CSPDarknet53上添加了SPP块,因为它显着增加了接受野,分离出最重要的上下文特征,并且几乎没有导致网络运行速度的降低。我们使用PANet作为不同检测级别的不同骨干级别的参数聚合方法,而不是YOLOv3中使用的FPN

最后,我们选择CSPDarknet53骨干、SPP附加模块、PANet路径聚合颈和YOLOv3(基于锚点的)头作为YOLOv4的架构

Selection of BoF and BoS

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

对于训练激活函数,由于PReLU和SELU较难训练,而ReLU6是专门为量化网络设计的,因此我们将上述激活函数从候选列表中删除
我们毫不犹豫地选择DropBlock作为我们的正则化方法 ,对于归一化方法的选择,由于我们关注的是只使用一个GPU的训练策略,所以没有考虑syncBN

Additional improvements

为了使所设计的检测器更适合在单GPU上进行训练,我们进行了额外的设计和改进如下:
1.本文介绍了一种新的数据增强方法Mosaic, and Self-Adversarial Training (SAT)
2.采用遗传算法选择最优超参数
3.我们修改了一些现有的方法,使我们的设计适合于有效的训练和检测-改进的SAM,改进的PAN和交叉小批量正态化(CmBN)

Mosaic 是一种新的数据增强方法,它将4张训练图像混合在一起,因此混合了4种不同的上下文,而CutMix只混合了2个输入图像。这使得在正常环境之外的对象检测变得容易 。此外,批处理规范化计算每层上4个不同图像的激活统计信息。这大大减少了对大型mini-batch大小的需求

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

CmBN表示CBN的修改版本,如图4所示,定义为Cross mini-Batch Normalization (CmBN)。这只收集单个批内的小批之间的统计信息
我们将SAM从空间注意改为点注意,将PAN的快捷连接改为串联,分别如图5和图6所示

YOLOv4


YOLO v4 uses

Bag of Freebies (BoF ) for backboneCutMixMosaic数据增强DropBlock正则化类标签平滑

Bag of Specials (BoS ) for backboneMish激活,跨级部分连接(CSP),多输入加权残差连接(MiWRC)

Bag of Freebies (BoF ) for detectorCIoU-loss , CmBN, DropBlock正则化Mosaic数据增强自对抗训练SAT ,消除网格敏感性,使用多个锚点为一个ground truth,余弦退火调度程序[52],最优超参数,随机训练形状

Bag of Specials (BoS ) for detectorMish激活,SPP-block, SAM-block, PAN路径聚合block, DIoU-NMS

Experiments

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




Results

与其他最先进的目标探测器获得的结果的比较如图8所示。我们的YOLOv4位于帕累托最优曲线上,在速度和精度方面都优于最快和最准确的检测器

表8列出了使用Maxwell GPU的帧率对比结果

可以是GTX Titan X (Maxwell)或Tesla M40 GPU

(MS COCO数据集上不同目标检测器的速度和精度比较(test- dev 2017)。(此处高亮显示FPS为30或更高的实时检测器。我们将结果与batch=1进行比较,而不使用tensorRT)

表9列出了使用Pascal GPU的帧率对比结果

可以是Titan X (Pascal)、Titan Xp、GTX 1080 Ti、Tesla P100 GPU

表10列出了使用Volta GPU的帧率对比结果

可以是Titan Volta或者Tesla V100 GPU

Conclusions

我们提供了一个最先进的检测器,比所有可用的替代检测器更快(FPS)和更准确(MS COCO AP 50...95和AP 50) 。所描述的检测器可以在具有8-16 gb vram的传统GPU上进行训练和使用,这使得其广泛使用成为可能。基于一阶段anchor的检测器的原始概念已被证明是可行的,我们已经验证了大量的特征,并选择使用这些特征来提高分类器和检测器的准确性,这些特性可以作为未来研究和开发的最佳实践

相关推荐
晚点吧3 小时前
视频横屏转竖屏播放-使用人脸识别+目标跟踪实现
人工智能·目标跟踪·音视频
风走茶未凉4 小时前
目标检测(object detection)
人工智能·目标检测·目标跟踪
红色的山茶花16 小时前
YOLOv7-0.1部分代码阅读笔记-general.py
笔记·yolo
源代码•宸16 小时前
完美解决 no model scale passed. assuming scale=‘n‘ 的YOLO问题
经验分享·yolo
lanboAI19 小时前
基于yolov5的番茄成熟度检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】
python·yolo·智能手机
goomind20 小时前
YOLOv11实战宠物狗分类
人工智能·yolo·机器学习·计算机视觉·分类·聚类
aabbcccddd0121 小时前
yolov8目标检测如何设置背景/无标签图像参与训练
人工智能·yolo·目标检测·ultralytics
啊文师兄1 天前
使用 Pytorch 搭建视频车流量检测资源(基于YOLO)
人工智能·pytorch·yolo
m0_523674211 天前
技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路
人工智能·深度学习·目标检测·机器学习·语言模型·自然语言处理·数据挖掘
python1561 天前
基于驾驶员面部特征的疲劳检测系统
python·深度学习·目标检测