YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection

本文主要是介绍YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天刷看到了YOLOv4之时,有点激动和兴奋,等了很久的YOLOv4,你终究还是出现了

论文地址:https://arxiv.org/pdf/2004.10934.pdf

GitHub地址:https://github.com/AlexeyAB/darknet

觉得作者很地道,论文附上开源,没有比这更开心的事情了吧!

图片

首先附上对论文总结的思维导图,帮助大家更好的理解!

(思维导图和论文译文PDF均可在公众号【计算机视觉联盟】回复YOLOv4获取)

图片

下边是对论文的翻译,有些地方可能翻译的不是很准备,欢迎指正补充

摘要

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

1、介绍

大多数基于CNN的物体检测器仅适用于推荐系统。例如,通过慢速精确模型执行的城市摄像机搜索免费停车位,而汽车碰撞警告与快速不精确模型有关。提高实时物体检测器的精度不仅可以将它们用于提示生成推荐系统,还可以用于独立的过程管理和减少人工输入。常规图形处理单元(GPU)上的实时对象检测器操作允许以可承受的价格对其进行运行。最精确的现代神经网络无法实时运行,需要使用大量的GPU进行大量的mini-batch-size训练。我们通过创建在常规GPU上实时运行的CNN来解决此类问题,并且该培训仅需要一个传统的GPU。

这项工作的主要目标是在产生式系统中设计一个运行速度快的目标探测器,并对并行计算进行优化,而不是设计一个低计算量的理论指标(BFLOP)。我们希望所设计的对象易于训练和使用。如图1中的YOLOv4结果所示,任何人使用传统的GPU进行训练和测试,都可以获得实时、高质量和令人信服的目标检测结果。我们的贡献概括如下:

  1. 我们开发了一个高效且功能强大的目标检测模型。它使每个人都可以使用1080Ti或2080TiGPU来训练超快、精确的物体探测器。
  2. 我们验证了当前最新的“免费袋”和“特殊袋”检测方法在探测器训练过程中的影响。
  3. 我们修改了最新的方法,使其更有效,更适合于单个GPU的培训,包括CBN[89]、PAN[49]、SAM[85]等。

图片

2、相关工作(Related work)

2.1 目标检测算法(Object detection models)

目标检测算法一般有两部分组成:一个是在ImageNet预训练的骨架(backbone),,另一个是用来预测对象类别和边界框的头部。对于在GPU平台上运行的检测器,其骨干可以是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。对于在CPU平台上运行的那些检测器,其主干可以是SqueezeNet [31],MobileNet [28、66、27、74]或ShuffleNet [97、53]。对于头部,通常分为两类,即一级对象检测器和二级对象检测器。最具有代表性的两级对象检测器是R-CNN [19]系列,包括fast R-CNN [18],faster R-CNN [64],R-FCN [9]和Libra R-CNN [ 58]。还可以使两级对象检测器成为无锚对象检测器,例如RepPoints [87]。对于一级目标检测器,最具代表性的模型是YOLO [61、62、63],SSD [50]和RetinaNet [45]。近年来,开发了无锚的(anchor free)一级物体检测器。这类检测器是CenterNet [13],CornerNet [37、38],FCOS [78]等。近年来,无锚点单级目标探测器得到了发展,这类探测器有CenterNet[13]、CornerNet[37,38]、FCOS[78]等。近年来发展起来的目标探测器经常在主干和头部之间插入一些层,这些层通常用来收集不同阶段的特征图。我们可以称它为物体探测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。具有这种机制的网络包括特征金字塔网络(FPN)[44]、路径聚集网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。除上述模型外,一些研究人员将重点放在直接构建用于检测对象的新主干(DetNet [43],DetNAS [7])或新的整个模型(SpineNet [12],HitDe-tector [20])上。

总而言之,普通的检测器由以下几个部分组成:

  • 输入:图像,斑块,图像金字塔
  • 骨架:VGG16 [68],ResNet-50 [26],SpineNet [12],EfficientNet-B0 / B7 [75],CSPResNeXt50 [81],CSPDarknet53 [81]
  • 颈部:
    • 其他块:SPP [25],ASPP [5],RFB [47],SAM [85]
    • 路径聚合块:FPN [44],PAN [49],NAS-FPN [17] ],Fully-connected FPN,BiFPN [77],ASFF [48],SFAM [98]
  • Heads :
    • 密集预测(一阶段):
      • RPN[64],SSD [50],YOLO [61], RetinaNet [45](基于锚)
      • CornerNet[37],CenterNet [13],MatrixNet [60],FCOS [78](无锚)
  • 稀疏预测(两阶段):
    • Faster R-CNN [64],R-FCN [9],Mask R-CNN [23](基于锚)
    • RepPoints[87](无锚)

图片

2.2 Bag of freebies

通常,传统的物体检测器是离线训练的。因此,研究人员一直喜欢采用这种优势并开发出更好的训练方法,从而可以使目标检测器获得更好的精度而又不会增加推理成本。我们称这些仅改变培训策略或仅增加培训成本的方法为“免费赠品”。数据检测是对象检测方法经常采用的并符合免费赠品的定义。**数据增强的目的是增加输入图像的可变性,从而使设计的物体检测模型对从不同环境获得的图像具有更高的鲁棒性。**例如,光度失真和几何失真是两种常用的数据增强方法,它们无疑有利于物体检测任务。在处理光度失真时,我们调整图像的亮度,对比度,色相,饱和度和噪点。对于几何失真,我们添加了随机缩放,裁剪,翻转和旋转。

上面提到的数据增强方法是全像素调整,并且保留了调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。他们在图像分类和目标检测方面取得了良好的成果。例如,random erase[100]和CutOut [11]可以随机选择图像中的矩形区域,并填充零的随机或互补值。至于hide-and-seek[69]和grid mask[6],他们随机或均匀地选择图像中的多个矩形区域,并将其替换为所有零。如果类似的概念应用于要素地图,则有DropOut [71],DropConnect [80]和DropBlock [16]方法。另外,一些研究人员提出了使用多个图像一起执行数据增强的方法。例如,MixUp [92]使用两个图像对具有不同系数的图像进行乘法和叠加,然后使用这些叠加的系数来调整标签。对于CutMix [91],它是将裁切后的图像覆盖到其他图像的矩形区域,并根据混合区域的大小调整标签。除了上述方法之外,样式转移GAN [15]还用于数据扩充,这种用法可以有效地减少CNN所学习的纹理偏差。

与上面提出的各种方法不同,其他一些免费赠品方法专用于解决数据集中语义分布可能存在偏差的问题。在处理语义分布偏向问题时,一个非常重要的问题是不同类之间存在数据不平衡的问题,这一问题通常是通过两阶段对象设计器中的难例挖掘[72]或在线难例挖掘[67]来解决的。但是实例挖掘方法不适用于一级目标检测器,因为这种检测器属于密集预测架构。因此Linet等 [45]提出了焦点损失,以解决各个类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用one-hot representation来表达不同类别之间的关联度。这种表示方法经常在执行标签时使用。[73]中提出的标签平滑是将硬标签转换为软标签以进行训练,这可以使模型更加健壮。为了获得更好的软标签,Islamet等人[33]引入知识蒸馏的概念来设计标签优化网络。

最后一袋赠品是边界框回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度、宽度进行回归,即{xcenter,ycenter,w,h},或者对左上角和右下点,即{xtopleft,ytopleft,xbottomright,ybottomright}进行回归。对于基于锚点的方法,是估计相应的偏移量,例如{xcenterOffset,ycenterOffset,wOffset,hoffset}和{xtopleftoffset,ytopleftoffset,xbottomright toffset,ybottomright toffset},例如{xtopleftoffset,ytopleftoffset}和{xtopleftoffset,ytopleftoffset}。然而,直接估计BBox中每个点的坐标值是将这些点作为独立变量来处理,而实际上并没有考虑对象本身的完整性。为了更好地处理这一问题,最近一些研究人员提出了IoU loss[90],将预测BBOX区域的覆盖率和地面真实BBOX区域的覆盖率考虑在内。IOU loss计算过程将触发BBOX的四个坐标点的计算,方法是执行具有地面实况的借条,然后将生成的结果连接到一个完整的代码中。由于IOU是一种标度不变的表示,它可以解决传统方法计算{x,y,w,h}的l1或l2个损失时,损失会随着尺度的增大而增大的问题。最近,搜索者不断改善欠条损失。例如,GIOU损失[65]除了包括覆盖区域外,还包括对象的形状和方向。他们提出找出能同时覆盖预测BBOX和实际BBOX的最小面积BBOX,并用这个BBOX作为分母来代替原来在欠条损失中使用的分母。对于DIoU loss[99],它另外考虑了物体中心的距离,而CIoU损失[99]则同时考虑了重叠面积、中心点之间的距离和纵横比。在求解BBox回归问题时,Ciou可以达到较好的收敛速度和精度。

2.3 Bag of spedials

对于那些仅增加少量推理成本但可以显着提高对象检测准确性的插件模块和后处理方法,我们将其称为“特价商品”。一般而言,这些插件模块用于增强模型中的某些属性,例如扩大接受域,引入注意力机制或增强特征集成能力等,而后处理是用于筛选模型预测结果的方法。

可以用来增强接收域的通用模块是SPP [25],ASPP [5]和RFB [47]。 SPP模块起源于空间金字塔匹配(SPM)[39],SPM的原始方法是将功能图分割成若干x不等的块,其中{1,2,3,…}可以是空间金字塔,然后提取词袋特征。 SPP将SPM集成到CNN中,并使用最大池操作而不是词袋运算。由于Heet等人提出了SPP模块。 [25]将输出一维特征向量,在全卷积网络(FCN)中应用是不可行的。因此,在YOLOv3的设计中[63],Redmon和Farhadi将SPP模块改进为内核大小为k×k的最大池输出的串联,其中k = {1,5,9,13},步长等于1。在这种设计下,相对大k×kmax池有效地增加了骨干特征的接受范围。在添加了改进版本的SPP模块之后,YOLOv3-608在MS COCOobject检测任务上将AP50升级了2.7%,而额外的计算费用为0.5%。ASPP[5]模块和改进的SPP模块之间的操作差异主要来自于原始k× kkernel大小,最大卷积步长等于1到3×3内核大小,膨胀比等于tok,步长等于1。 RFB模块将使用k×kkernel的几个扩张卷积,扩张比率equalstok和步幅等于1来获得比ASPP更全面的空间覆盖范围。 RFB [47]仅花费7%的额外推断时间即可将MS COCO上SSD的AP50提高5.7%。

物体检测中常用的注意模块主要分为通道式注意和点式注意,这两种注意模型的代表分别是挤压激发(SE)[29]和空间注意模块(SAM)[85]。虽然SE模块在Im-ageNet图像分类任务中可以提高1%的TOP-1准确率,但是在GPU上通常会增加10%左右的推理时间,因此更适合在移动设备上使用,虽然SE模块在Im-ageNet图像分类任务中可以提高1%的TOP-1准确率,但是在GPU上通常会增加10%左右的推理时间。而对于SAM,它只需要额外支付0.1%的计算量,在ImageNet图像分类任务上可以提高ResNet50-SE 0.5%的TOP-1准确率。最棒的是,它完全不影响GPU上的推理速度。

在特征集成方面,早期的实践是使用KIP连接[51]或超列[22]将低级物理特征集成到高级语义特征。随着模糊神经网络等多尺度预测方法的普及,人们提出了许多集成不同特征金字塔的轻量级模块。这种类型的模块包括SfAM[98]、ASFF[48]和BiFPN[77]。SfAM的主要思想是使用SE模块对多比例尺拼接的特征地图进行通道级的加权。ASFF采用Softmax作为逐点层次加权,然后添加不同尺度的特征地图;BiFPN采用多输入加权残差连接进行尺度层次重新加权,再添加不同尺度的特征地图。

在深度学习的研究中,有些人专注于寻找良好的激活功能。良好的激活函数可以使梯度更有效地传播,同时不会引起过多的计算成本。在2010年,Nair和Hin-ton [56]提出了ReLU,以基本上解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题。随后,LReLU [54],PReLU [24],ReLU6 [28],比例指数线性单位(SELU)[35],Swish [59],hard-Swish [27]和Mish [55]等,它们也是已经提出了用于解决梯度消失问题的方法。 LReLU和PReLU的主要目的是解决当输出小于零时ReLU的梯度为零的问题。至于ReLU6和hard-Swish,它们是专门为量化网络设计的。为了对神经网络进行自归一化,提出了SELU激活函数来满足这一目标。要注意的一件事是,Swish和Mishare都具有连续可区分的激活功能。

在基于深度学习的对象检测中通常使用的后处理方法是NMS,它可以用于过滤那些无法预测相同对象的BBox,并仅保留具有较高响应速度的候选BBox。 NMS尝试改进的方法与优化目标函数的方法一致。 NMS提出的原始方法没有考虑上下文信息,因此Girshicket等人。 [19]在R-CNN中添加了分类置信度得分作为参考,并且根据置信度得分的顺序,从高分到低分的顺序执行贪婪的NMS。对于软网络管理系统[1],考虑了一个问题,即物体的遮挡可能会导致带有IoU评分的贪婪的网络管理系统的置信度得分下降。 DIoU NMS [99]开发人员的思维方式是在softNMS的基础上将中心距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均未直接涉及捕获的图像功能,因此在随后的无锚方法开发中不再需要后处理。

3、方法(Methodology)

其基本目标是在生产系统中对神经网络进行快速操作,并针对并行计算进行优化,而不是低计算量理论指示器(BFLOP)。我们提供了实时神经网络的两种选择:

  • 对于GPU,我们使用少量的组(1-8)卷积层:CSPResNeXt50 / CSPDarknet53
  • 对于VPU-我们使用分组卷积,但是我们不再使用挤压和激发(SE)块-特别是这包括以下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / Mo-bileNetV3

3.1 Selection of architecture

我们的目标是在输入网络分辨率,卷积层数,参数数(filtersize2 过滤器通道/组)和层输出(过滤器)数目之间找到最佳平衡。例如,大量研究表明,在ILSVRC2012(ImageNet)数据集的对象分类方面,CSPResNext50比CSPDarknet53更好。然而,相反,就检测MS COCO数据集上的对象而言,CSPDarknet53比CSPResNext50更好。

下一个目标是为不同的检测器级别从不同的主干级别中选择其他块以增加接收场和参数聚集的最佳方法: FPN,PAN,ASFF,BiFPN。

对于分类最佳的参考模型对于检测器并非总是最佳的。与分类器相比,检测器需要满足以下条件:

  • 更大的网络输入,用于检测小目标
  • 更多的层-以获得更大的感受野来覆盖增大的输入图像
  • 更多的参数-为了增强从单张图像中检测出不同大小的多个对象的能力

假设可以选择接受场较大(卷积层数为3×3)和参数数较多的模型作为主干。**表1显示了CSPResNeXt50、CSPDarknet53和Effi-cientNet B3的信息。**CSPResNext50只包含16个卷积层3×3,425×425感受野和20.6M参数,而CSPDarknet53包含29个卷积层3×3,725×725感受野和27.6M参数。这一理论证明,再加上我们的大量实验,表明CSPDarknet53神经网络是两者作为探测器骨干最佳模型

图片

不同大小的感受野对检测效果的影响如下所示:

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

我们在CSPDarknet53上添加SPP块,因为它显著增加了接受场,分离出最重要的上下文特征,并且几乎不会降低网络操作速度。我们使用PANET代替YOLOv3中使用的FPN作为不同骨级的参数聚合方法,用于不同的检测器级别。

最后,我们选择了CSPDarknet53主干、SPP附加模块、PANET路径聚合Neck和YOLOv3(基于锚点的)头部作为YOLOv4的体系结构。

将来,我们计划显着扩展检测器的赠品袋(BoF)的内容,从理论上讲,它可以解决一些问题并提高检测器的准确性,并以实验方式依次检查每个功能的影响。

我们不使用跨GPU批量标准化(CGBNor SyncBN)或昂贵的专用设备。这使任何人都可以在传统的图形处理器上重现我们的最新成果,例如GTX 1080Ti或RTX2080Ti。

3.2 Selection of BoF and BoS

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

  • 激活:ReLU,leaky-ReLU,parameter-ReLU,ReLU6,SELU,Swish或Mish
  • 边界框回归损失:MSE,IoU,GIoU,CIoU,DIoU
  • 数据增强:CutOut,MixUp,CutMix
  • 正则化方法:DropOut, DropPath [36],Spatial DropOut [79]或DropBlock
  • 通过均值和方差对网络激活进行归一化:Batch Normalization (BN) [32],Cross-GPU Batch Normalization (CGBN or SyncBN)[93], Filter Response Normalization (FRN) [70], orCross-Iteration Batch Normalization (CBN) [89]
  • 跨连接:Residual connections, Weightedresidual connections, Multi-input weighted residualconnections, or Cross stage partial connections (CSP)

至于训练激活功能,由于PReLU和SELU更难训练,并且ReLU6是专门为量化网络设计的,因此我们从候选列表中删除了上述激活功能。在重新量化方法中,发布Drop-Block的人们将自己的方法与其他方法进行了详细的比较,而其正则化方法赢得了很多。因此,我们毫不犹豫地选择了DropBlock作为我们的正则化方法。至于标准化方法的选择,由于我们专注于仅使用一个GPU的训练策略,因此不考虑syncBN。

3.3 Additional improvements

为了使设计的检测器更适合在单个GPU上进行训练,我们进行了以下附加设计和改进:

  • 我们引入了一种新的数据增强方法:Mosaic, and Self-Adversarial Training (SAT)
  • 在应用遗传算法时,我们选择最优的超参数
  • 我们修改了一些现有方法,使我们的设计适合进行有效的训练和检测-改进的SAM,改进的PAN ,以及跨小批量标准化(CmBN)

Mosaic是一种新的混合4幅训练图像的数据增强方法。所以四个不同的上下文信息被混合,而CutMix只混合了2种。

这允许检测其正常上下文之外的对象。此外,批量归一化从每层上的4个不同的图像计算激活统计。这极大地减少了对large mini-batch-size的需求。

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

CmBN表示CBN的修改版本,如图4所示,定义为交叉小批量规范化(Cross mini-Batch Normalization,CMBN)。这仅在单个批次内的小批次之间收集统计信息。

图片

我们将SAM从空间注意修改为点注意,并将PAN的快捷连接分别替换为串联,如图5和图6所示。

图片

3.4 YOLOv4

在本节中,我们将详细介绍YOLOv4的细节。

YOLOv4的组成:

图片

YOLOv4的使用:

图片

4、Experiments

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

4.1 Experimental setup

在ImageNet图像分类实验中,缺省超参数如下:训练步数为800万步;batch size和mini-batch size分别为128和32;采用多项式衰减学习率调度策略,初始学习率为0.1;预热步数为1000步;动量和权值分别设置为0.9和0.005。我们所有的BoS实验都使用与默认设置相同的超参数,并且在BoF实验中,我们增加了50%的训练步骤。在BoF实验中,我们验证了MixUp、CutMix、Mosaic、Bluring数据增强和标记平滑正则化方法。在BoS实验中,我们比较了LReLU、SWISH和MISHISH激活函数的效果。所有实验均使用1080Ti或2080Ti GPU进行训练。

在MS COCO目标检测实验中,缺省超参数如下:训练步数为500,500;采用阶跃衰减学习率调度策略,初始学习率为0.01,在400,000步和450,000步分别乘以因子0.1;动量衰减和权重衰减分别设置为0.9和0.0005。所有的体系结构都使用单个GPU来执行批处理大小为64的多尺度训练,而小批处理大小为8或4,具体取决于体系结构和GPU内存的限制。除采用遗传算法进行超参数搜索实验外,其余实验均采用默认设置。遗传算法使用YOLOv3-SPP算法在有GIoU损失的情况下进行训练,在300个历元中搜索Min-Val5k集。我们采用搜索学习率0.00261,动量0.949,IOU阈值分配地面真值0.213,损失归一化0.07%进行遗传算法实验。我们验证了大量的BoF算法,包括网格敏感度消除、moSAIC数据增强、IOU阈值、遗传算法、类标签平滑、交叉小批量归一化、自对抗训练、余弦退火调度器、动态小批量大小、DropBlock、优化锚点、不同类型的IOU损失。我们还在不同的BoS上进行了实验,包括MISH、SPP、SAM、RFB、BiFPN和Gaus-Sian YOLO[8]。对于所有的实验,我们只使用一个GPU进行训练,因此不使用诸如优化多个GPU的syncBN之类的技术。

4.2 Influence of different features on Classifier training

首先,我们研究了不同特征对分类器训练的影响;具体地说,类标签平滑的影响,不同数据扩充技术的影响,双边模糊,混合,CutMix和马赛克,如图7所示,以及不同活动的影响,如Leaky-relu(默认情况下),SWISH和MISH。

图片

在我们的实验中,如表2所示,通过引入诸如:CutMix和Mosaic数据增强、类标签平滑和Mish激活等特征,提高了分类器的精度。因此,我们用于分类器训练的BoF-Backbone(Bag Of Freebies)包括以下内容:CutMix和Mosaic数据增强以及类标签平滑。此外,我们还使用MISH激活作为补充选项,如表2和表3所示。

图片

图片

4.3 Influence of different features on Detector training

进一步的研究涉及不同的免费袋(BOF探测器)对探测器训练精度的影响,如表4所示。我们通过研究在不影响FPS的情况下提高探测器精度的不同特性,显著扩展了BOF列表:

图片图片

进一步研究了不同的专业袋(BOS检测器)对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,当使用SPP、PAN和SAM时,检测器的性能最佳。

图片

4.4 Influence of different backbones and pretrained weightings on Detector training

进一步,我们研究了不同主干模型对检测器精度的影响,如表6所示。请注意,具有最佳分类精度的模型在检测器精度方面并不总是最佳。

图片

首先,尽管与CSPDarknet53模型相比,经过不同功能训练的CSPResNeXt-50模型的分类准确性更高,但CSPDarknet53模型在对象检测方面显示出更高的准确性。

其次,使用BoF和Mish进行CSPResNeXt50分类器训练会提高其分类准确性,但是将这些预先训练的权重进一步应用于检测器训练会降低检测器准确性。但是,将BoF和Mish用于CSPDarknet53分类器训练可以提高分类器和使用该分类器预训练加权的检测器的准确性。结果是,与CSPResNeXt50相比,主干CSPDarknet53更适合于检测器。

我们观察到,由于各种改进,CSPDarknet53模型具有更大的能力来提高检测器精度。

4.4 Influence of different mini-batch size on Detector training

最后,我们分析了在不同最小批量大小下训练的模型所获得的结果,结果如表7所示。从表7所示的结果中,我们发现在添加BoF和BoS训练策略之后,最小批量大小几乎没有影响在检测器的性能上。该结果表明,在引入BoF和BoS之后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都只能使用传统的GPU来训练出色的探测器。

图片

5、Results

与其他最先进的物体探测器获得的结果比较如图8所示。YOLOv4在速度和准确性方面均优于最快,为最准确的探测器。

图片

由于不同的方法使用不同体系结构的GPU进行推理时间验证,我们在常用的Maxwell、Pascal和VoltaArchitecture体系结构的GPU上运行YOLOv4,并将它们与其他先进的方法进行了比较。表8列出了使用Maxwell GPU的帧率比较结果,可以是GTX Titan X(Maxwell)或Tesla M40 GPU。表9列出了使用Pascal GPU的帧率比较结果,它可以是Titan X(Pascal)、Titan XP、GTX 1080 Ti或Tesla P100 GPU。表10列出了使用VoltaGPU的帧率对比结果,可以是Titan Volta,也可以是Tesla V100 GPU。

图片

图片

图片

6、Conclusions

我们提供最先进的检测器,其速度(FPS)和准确度(MS COCO AP50 … 95和AP50)比所有可用的替代检测器都高。所描述的检测器可以在具有8-16GB-VRAM的常规GPU上进行训练和使用,这使得它的广泛使用成为可能。一阶段基于锚的探测器的原始概念已证明其可行性。我们已经验证了大量特征,并选择使用其中的一些特征以提高分类器和检测器的准确性。这些功能可以用作将来研究和开发的最佳实践。

7、Acknowledgements

作者要感谢Glenn Jocher进行Mosaic数据增强的想法,通过使用遗传算法选择超参数并解决网格敏感性问题的方法https://github.com/ultralytics/yolov3.10。

这篇关于YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636513

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个