目录:
• YOLOv4
• Scaled YOLOv4
YOLOv4和Scaled YOLOv4的一作的其它工作:不深网络,YOLOR
YOLOv4
https://zhuanlan.zhihu.com/p/342570549
2020 年 4 月,YOLOv4 发布,在目标检测领域引起广泛的讨论。在 YOLO 系列的原作者 Joseph Redmon 宣布退出 CV 领域后,表明官方不再更新 YOLOv3。AlexeyAB 继承了 YOLO 系列的思想和理念,在 YOLOv3 的基础上不断进行改进和开发,发布了 YOLOv4,并得到了原作者 Joseph Redmon 的承认。YOLOv4 可以使用传统的 GPU 进行训练和测试,并能够获得实时的,高精度的检测结果。YOLOv4 在与 EfficientDet 性能相当的情况下,推理速度比其快两倍。相比 YOLOv3 的 AP 和 FPS 分别提高了 10% 和 12%。
原文地址:https://arxiv.org/abs/2004.10934
摘要:据说有大量的方法可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。某些方法只在某些模型上运行,也只在某些问题上运行,或者只在小规模数据集上运行;而一些特性,如批量归一化和残差连接,适用于大多数模型、任务和数据集。我们假设这些通用方法包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量标准化(CmBN)、自对抗训练(SAT)和Mish激活。我们使用了新功能:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU丢失,并将其中一些功能结合起来,以实现最先进的结果:在TeslaV100上,MS COCO数据集以约65 FPS的实时速度获得43.5%的AP(65.7%的AP50)。源代码位于https://github.com/AlexeyAB/darknet
1.引言
大多数基于CNN的对象检测器基本上只适用于推荐系统。例如,通过城市摄像机搜索免费停车位是由慢速精确模型执行的,而汽车碰撞警告则与快速不精确模型相关。提高实时对象检测器的准确性不仅可以用于生成提示的推荐系统,还可以用于独立的流程管理和减少人工输入。传统图形处理单元(GPU)上的实时对象检测器操作允许以合理的价格大量使用。最精确的现代神经网络不能实时运行,需要大量的GPU来进行大批量的训练。我们通过创建一个CNN来解决这些问题,该CNN在传统GPU上实时运行,训练只需要一个传统GPU。
这项工作的主要目标是设计生产系统中目标检测器的快速运行速度,并优化并行计算,而不是低计算量理论指标(BFLOP)。我们希望设计的对象可以很容易地训练和使用。例如,任何使用传统GPU进行训练和测试的人都可以获得实时、高质量和令人信服的目标检测结果,如图1所示。我们的贡献总结如下:
1. 我们开发了一个高效、强大的目标检测模型。它使每个人都可以使用1080Ti或2080Ti的GPU来训练一个超快速和精确的目标探测器。
2. 在探测器训练期间,我们验证了最先进的无代价提升方法和一点点代价提升方法对目标探测方法的影响。
3. 我们修改了最先进的方法,使其更有效,并适用于单个GPU训练,包括CBN[89]、PAN[49]、SAM[85]等。
2.相关工作
2.1. 目标检测模型
现代检测器通常由两部分组成,一部分是在ImageNet上预训练的主干,另一部分是用于预测对象类别和边界框的头部。对于在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]。近年来,发展了无锚单阶段目标探测器。此类探测器有CenterNet[13]、CornerNet[37,38]、FCOS[78]等。近年来开发的目标探测器通常在主干和头部之间插入一些层,这些层通常用于收集不同阶段的特征图。我们可以称之为物体探测器的颈部。通常,颈部由几个自下而上的路径和几个自上而下的路径组成。配备这种机制的网络包括特征金字塔网络(FPN)[44]、路径聚合网络(PAN)[49]、BiFPN[77]和NAS-FPN[17]。
除上述模型外,一些研究人员还将重点放在直接构建一个新的主干(DetNet[43],DetNAS[7])或一个新的整体模型(SpineNet[12],HitDetector[20])来进行目标检测。
综上所述,普通的物体探测器由几个部分组成:
• 输入:图像、图块、图像金字塔
• 主干网:VGG16[68]、ResNet-50[26]、SpineNet[12]、EfficientNet-B0/B7[75]、CSPRENEXT50[81]、CSPDarknet53[81]
• 颈部:
• 额外块:SPP[25]、ASPP[5]、RFB[47]、SAM[85]
• 路径聚合块:FPN[44]、PAN[49]、NAS-FPN[17]、全连接FPN、BiFPN[77]、ASFF[48]、SFAM[98]
• 检测头:
• 密集预测(单阶段):
◦ RPN[64]、SSD[50]、YOLO[61]、RetinaNet[45](基于锚)
◦ CornerNet[37]、CenterNet[13]、MatrixNet[60]、FCOS[78](无锚)
• 稀疏预测(两阶段):
◦ Faster R-CNN[64],R-FCN[9],掩码RCNN[23](基于主播)
◦ RepPoints[87](无锚)
2.2. 无代价提升方法 BoF
通常,传统的目标探测器是离线训练的。因此,研究人员一直希望利用这一优势,开发更好的训练方法,使目标检测器在不增加推理成本的情况下获得更好的精度。我们将这些只会改变训练策略或只会增加训练成本的方法称为“无代价提升方法”。目标检测方法通常采用的,并且符合无代价提升方法的定义的是数据增强。数据增强的目的是增加输入图像的多样性,使所设计的目标检测模型对从不同环境获得的图像具有更高的鲁棒性。例如,光度畸变和几何畸变是两种常用的数据增强方法,它们肯定有利于目标检测任务。在处理光度畸变时,我们调整图像的亮度、对比度、色调、饱和度和噪声。对于几何变形,我们添加了随机缩放、裁剪、翻转和旋转。
上面提到的数据增强方法都是逐像素调整,并且保留调整区域中的所有原始像素信息。此外,一些从事数据增强的研究人员将重点放在模拟对象遮挡问题上。在图像分类和目标检测方面取得了良好的效果。例如,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]来解决。但是,样本挖掘方法不适用于单阶段目标检测器,因为这种检测器属于密集预测结构。因此,Lin等人[45]提出了Focal loss来解决不同类别之间存在的数据不平衡问题。另一个非常重要的问题是,很难用one hot 硬表示来表达不同类别之间的关联度的关系。one hot表示是标注时经常使用的。[73]中提出的标签平滑是将硬标签转化为软标签进行训练,使模型更具鲁棒性。为了获得更好的软标签,Islam等人[33]引入了知识蒸馏的概念来设计标签蒸馏网络。
最后一些无代价方法是边框回归的目标函数。传统的目标检测器通常使用均方误差(MSE)直接对BBox的中心点坐标和高度和宽度进行回归,即{x_center,y_center,w,h},或左上点和右下点,即{x_top_left,y_top_left,x_bottom_right,y_bottom_right}。对于基于锚的方法,它是估计相应的偏移量,例如{x_center_off set,y_center_offset,w_offset,h_offset}和{x_top_left_offset,y_top_left_offset,x_bottom_right_offset,y_bottom_right_offset}。然而,直接估计BBOX的每个点的坐标值是把这些点当作独立变量,但实际上不考虑对象本身的完整性。为了更好地处理这一问题,一些研究人员最近提出了IoU损失[90],其中考虑了预测BBox区域和真值BBox区域的覆盖范围。IoU损失计算过程将引发BBox四个坐标点的计算,方法是使用真值执行IoU,然后将生成的结果连接成一个完整的code。由于IoU是一种尺度不变性表示,它可以解决传统方法计算{x,y,w,h}的l1或l2损失时损失会随着尺度的增加而增加的问题。最近,一些研究人员继续改善IoU损失。例如,GIoU loss[65]除了覆盖区域外,还包括物体的形状和方向。他们建议找到能够同时覆盖预测BBox和真值BBox的最小面积BBox,并使用该BBox作为分母,以取代IoU损失中最初使用的分母。至于DIoU损失[99],它还考虑了对象中心的距离,而CIoU损失[99],另一方面,它同时考虑了重叠面积、中心点之间的距离和纵横比。CIoU可以在BBox回归问题上获得更好的收敛速度和精度。
2.3 一点点代价的提升方法 BoS
对于那些只会少量增加推理成本,但可以显著提高目标检测精度的插件模块和后处理方法,我们称之为“一点点代价的提升方法”。一般来说,这些插件模块用于增强模型中的某些属性,如扩大感受野、引入注意机制或增强特征整合能力等,后处理是筛选模型预测结果的一种方法。
可用于增强感受野的常见模块有SPP[25]、ASPP[5]和RFB[47]。SPP模块起源于空间金字塔匹配(SPM)[39],SPMs最初的方法是将特征图分割成几个d×d相等的块,其中d可以是{1,2,3,…},从而形成空间金字塔,然后提取出bag-of-word特征。SPP将SPM集成到CNN中,并使用最大池操作而不是词袋操作。由于He等人[25]提出的SPP模块将输出一维特征向量,因此不可能应用于全卷积网络(FCN)。因此,在YOLOv3[63]的设计中,Redmon和Farhadi将SPP模块改进为最大池化的输出的拼接,池化核k={1,5,9,13},stride=1。在这种设计下,相对较大的k×k最大池化有效地增加了主干特征的感受野。在添加改进版的SPP模块后,YOLOv3-608将MS COCO目标检测任务的AP50升级了2.7%,而额外计算的成本为0.5%。
ASPP[5]模块与改进的SPP模块在运算上的差异主要是将原始的k×k核大小、步幅为1的最大池化改为几个3×3核大小、扩张率为k、步幅为1的扩张卷积操作。RFB模块使用k×k核的几个扩展卷积,扩展比等于k,步长等于1,以获得比ASPP更全面的空间覆盖。RFB[47]只需额外花费7%的推理时间,就能将MS COCO上SSD的AP50提高5.7%。
目标检测中常用的注意模块主要分为通道式注意和点式注意,这两种注意模型的代表分别是挤压和激发(SE)[29]和空间注意模块(SAM)[85]。虽然SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1%的top-1精度,但只需增加2%的计算工作量,但在GPU上,它通常会将推理时间增加约10%,因此更适合用于移动设备。但对于SAM来说,它只需要额外0.1%的计算,并且可以将ResNet50 SE在ImageNet图像分类任务中的最高精度提高0.5%。最重要的是,它根本不会影响GPU上的推理速度。
在特征集成方面,早期的实践是使用跳连[51]或hyper-column[22]将低级物理特征集成到高级语义特征。随着FPN等多尺度预测方法的流行,许多集成了不同特征金字塔的轻量级模块被提出。这类模块包括SFAM[98]、ASFF[48]和BiFPN[77]。SFAM的主要思想是使用SE模块对多尺度串联特征映射执行channel-wise重加权。对于ASFF,它使用softmax作为point-wise别重新加权,然后添加不同尺度的特征图。在BiFPN中,提出了多输入加权残差连接来执行scale-wise重新加权,然后添加不同尺度的特征映射。
在深度学习的研究中,一些人把注意力放在寻找良好的激活功能上。一个好的激活函数可以使梯度更有效地传播,同时不会造成太多额外的计算开销。2010年,Nair和Hinton[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和Mish都是连续可微的激活函数。
基于深度学习的目标检测中常用的后处理方法是NMS,它可以用来过滤那些对同一目标预测不好的 BBoxes,只保留响应较高的候选 BBoxes。NMS试图改进的方式与优化目标函数的方法一致。NMS提出的原始方法不考虑上下文信息,因此Girshick等人〔19〕在R-CNN中加入分类置信得分作为参考,根据置信分数的顺序,贪婪的NMS按高得分到低得分的顺序执行。对于软NMS[1],它考虑了对象的遮挡可能会导致具有IoU分数的贪婪NMS的置信度降低的问题。DIoU NMS[99]开发者的思路是在软NMS的基础上,将中心点距离的信息添加到BBox筛选过程中。值得一提的是,由于上述后处理方法均不直接涉及捕获的图像特征,因此在随后开发的无锚方法中不再需要后处理。
3. 方法
基本目标是神经网络在生产系统中的快速运行和并行计算的优化,而不是低计算量理论指标(BFLOP)。我们提供了两种实时神经网络选项:
• 对于GPU,我们在卷积层中使用少量组(1-8):CSPResNeXt50/CSPDarknet53
• 对于VPU——我们使用分组卷积,但我们避免使用挤压和激励(SE)块——具体来说,这包括以下模型:EfficientNet lite/MixNet[76]/GhostNet[21]/MobileNetV3。
3.1 架构选择
我们的目标是在输入网络分辨率、卷积层数、参数数(滤波器大小^2*滤波器数*通道数/组数)和层输出数(滤波器数)之间找到最佳平衡。例如,我们的大量研究表明,就ILSVRC2012(ImageNet)数据集上的对象分类而言,CSPResNext50比CSPDarknet53要好得多[10]。然而,相反地,在MS COCO数据集上检测对象方面,CSPDarknet53比CSPResNext50更好[46]。
下一个目标是选择额外的块来增加感受野,以及针对不同探测器阶段别从不同主干阶段别聚合参数的最佳方法(例如FPN、PAN、ASFF、BiFPN)。
对于分类来说是最优的参考模型对于检测器来说并不总是最优的。与分类器相比,检测器需要以下各项:
• 更高的输入网络尺寸(分辨率)-用于检测多个小尺寸物体
• 更多的层–更高的感受野,覆盖更大的输入网络
• 更多参数–模型在一张图像中检测多个不同大小物体的能力更强
假设地说,我们可以假设一个具有更大感受野大小(具有更多卷积层3×3)和更多参数的模型应该被选择为主干。表1显示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNext50仅包含16个卷积层3×3、425×425感受野和20.6 M参数,而CSPDarknet53包含29个卷积层3×3、725×725感受野和27.6 M参数。这一理论证明以及我们的大量实验表明,CSPDarknet53神经网络是两者中作为探测器主干的最佳模型。
不同大小的感受野的影响总结如下:
• Up to the object size-允许查看整个对象
• Up to network size-允许查看对象周围的上下文
• Exceeding the network size-增加映像点和最终激活之间的连接数
我们在CSPDarknet53上添加了SPP块,因为它显著增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低网络运行速度。我们使用PANet作为从不同主干级别为不同检测器级别聚合参数的方法,而不是YOLOv3中使用的FPN。
最后,我们选择CSPDarknet53主干、SPP附加模块、PANet路径聚合颈和基于锚的YOLOv3头作为YOLOv4的架构。
在未来,我们计划大幅增加探测器的无代价提升方法(BoF)内容,这在理论上可以解决一些问题,提高探测器的精度,并以实验方式依次检查每个特征的影响。
我们不使用跨GPU批量标准化(CGBN或SyncBN)或昂贵的专用设备。这使得任何人都可以在传统图形处理器(如GTX 1080Ti或RTX 2080Ti)上重现我们最先进的成果。
3.2. BoF and BoS的选择
为了改进目标检测训练,CNN通常使用以下方法:
• 激活:ReLU、leaky ReLU、parametric ReLU、ReLU6、SELU、Swish或Mish
• 边框回归损失:MSE、IoU、GIoU、CIoU、DIoU
• 数据增强: CutOut, MixUp, CutMix
• 正则化方法:DropOut, DropPath[36]、Spatial DropOut[79]或 DropBlock
• 通过均值和方差对网络激活进行标准化:批标准化(BN)[32]、交叉GPU批标准化(CGBN或SyncBN)[93]、 Filter Response标准化(FRN)[70]或Cross-Iteration Batch Normalization(CBN)[89]
• 跳连:残差连接、加权残差连接、多输入加权残差连接或Cross stage partial connections(CSP)
至于训练激活函数,由于PReLU和SELU更难训练,并且ReLU6是专门为量化网络设计的,因此我们从候选列表中删除了上述激活函数。在正则化方法中,DropBlock的作者详细比较了他们的方法和其他方法,他们的正则化方法获得了很多成功。因此,我们毫不犹豫地选择DropBlock作为正则化方法。至于归一化方法的选择,由于我们关注的是只使用一个GPU的训练策略,因此不考虑syncBN。
3.3. 其他改进
为了使设计的探测器更适合在单个GPU上进行训练,我们进行了如下额外的设计和改进:
• 我们介绍了一种新的数据增强Mosaic和自对抗训练(SAT)方法
• 我们在应用遗传算法时选择最佳超参数
• 我们修改了一些现有的方法,使我们的设计适合有效的训练和检测——修改SAM、修改PAN和交叉小批量标准化(Cross mini-Batch Normalization,CmBN)
Mosaic代表了一种新的数据增强方法,它混合了4幅训练图像。因此,混合了4种不同的上下文,而CutMix只混合了2个输入图像。这允许检测正常环境之外的对象。此外,批量标准化还可以根据每层上的4个不同图像计算激活统计信息。这大大减少了对大的小批量的需求。
自对抗训练(SAT)也代表了一种新的数据增强技术,分两个前后两个阶段进行操作。在第一阶段,神经网络改变原始图像,而不是网络权重。通过这种方式,神经网络对自身执行对抗性攻击,改变原始图像,从而欺骗模型图像上没有所需对象。在第二阶段,训练神经网络以正常方式在修改后的图像上检测目标。
CmBN代表一个CBN修改版本,如图4所示,定义为交叉小批量标准化(CmBN)。这仅在单个批次内的小批次之间收集统计信息。
我们将SAM从spatial-wise 注意修改为point-wise注意,并将PAN的跳连替换为串联,分别如图5和图6所示。
3.4. YOLOv4
在本节中,我们将详细介绍YOLOv4。YOLOv4包括:
•主干:CSPDarknet53[81]
•颈部:SPP[25],PAN[49]
•检测头:YOLOv3[63]
YOLO v4使用:
• 主干网无代价提升方法(BoF):CutMix和Mosaic数据增强、DropBlock正则化、类标签平滑
• 主干网一点点代价提升方法(BoS):Mish激活、跨级部分连接(CSP)、多输入加权残差连接(MiWRC)
• 探测器的无代价提升方法(BoF):CIoU损失、CmBN、DropBlock正则化、Mosaic数据增强、自对抗训练、消除网格敏感性、使用多个锚点实现单一真值、余弦退火调度程序[52]、最佳超参数、Random training shapes
• 探测器一点点代价提升方法(BoS):Mish激活、SPP块、SAM块、PAN路径聚合块、DIoU NMS
4 实验
我们在ImageNet(ILSVRC 2012 val)数据集上测试了不同训练改进技术对分类器准确性的影响,然后在MS COCO(test dev 2017)数据集上测试了检测器的准确性。
4.1. 实验装置
在ImageNet图像分类实验中,默认的超参数如下:训练步骤为8000000; 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和Mish激活功能的效果。所有实验都使用1080 Ti或2080 Ti GPU进行训练。
在MS COCO目标检测实验中,默认的超参数如下:训练步骤为500,500;采用step decay衰减学习率调度策略,初始学习率为0.01,在40万步和45万步时分别乘以系数0.1;动量和权重衰减分别设置为0.9和0.0005。所有架构都使用单个GPU来执行批量大小为64的多尺度训练,而mini-batch size为8或4取决于架构和GPU内存限制。除了使用遗传算法进行超参数搜索实验外,所有其他实验都使用默认设置。遗传算法使用YOLOv3 SPP进行GIoU loss训练,并在300个epoch内搜索min-val 5k集。我们采用搜索学习率0.00261、动量0.949、IoU阈值0.213和损失归一化器0.07进行遗传算法实验。我们已经验证了大量的BoF,包括网格敏感性消除、Mosaic数据增强、IoU阈值、遗传算法、类标签平滑、交叉小批量标准化、自对抗训练、余弦退火调度、动态小批量、DropBlock、优化锚定、不同类型的IoU损失。我们还对各种BOS进行了实验,包括Mish、SPP、SAM、RFB、BiFPN和Gaussian YOLO[8]。对于所有实验,我们只使用一个GPU进行训练,因此不使用优化多个GPU的syncBN等技术。
4.2. 不同方法对分类器训练的影响
首先,我们研究了不同方法对分类器训练的影响;具体来说,如图7所示,类标签平滑的影响、不同数据增强技术的影响、双边模糊、混搭、剪切混合和Mosaic,以及不同激活的影响,如Leaky-ReLU(默认情况下)、Swish和Mish。
在我们的实验中,如表2所示,通过引入CutMix和Mosaic数据增强、类标签平滑和Mish激活等功能,提高了分类器的准确性。因此,我们用于分类器训练的BoFbackbone(无代价提升方法)包括以下内容:CutMix和Mosaic数据增强和类标签平滑。此外,我们使用Mish激活作为补充选项,如表2和表3所示。
4.3. 不同方法对探测器训练的影响
进一步的研究涉及到不同的无代价方法(BoF检测器)对检测器训练精度的影响,如表4所示。通过研究在不影响FPS的情况下提高探测器精度的不同功能,我们显著扩展了BoF列表:
•S:消除网格敏感性方程式bx=σ(tx)+cx,by=σ(ty)+cy,其中cx和cy始终是整数,用于在YOLOv3中评估对象坐标,因此,对于接近cx或cx+1值的bx值,需要极高的tx绝对值。我们通过将sigmoid乘以超过1.0的因子来解决这个问题,这样就消除了网格对无法检测到对象的影响。
•M:Mosaic数据增强——在训练期间使用4幅图像Mosaic,而不是单一图像
•IT:IoU阈值-对单个真值IoU使用多个锚定(真相,锚定)>IoU阈值
•GA:遗传算法——在前10%的时间段内,使用遗传算法在网络训练期间选择最佳超参数
•LS:类标签平滑-使用类标签平滑进行乙状结肠激活
•CBN:CmBN——使用跨小批量标准化来收集整个批次内的统计数据,而不是在单个小批量内收集统计数据
•CA:余弦退火调度器-在正弦训练期间改变学习速率
•DM:动态小批量-通过使用随机训练形状,在小分辨率训练期间自动增加小批量
•OA:优化锚-使用优化锚进行512x512网络分辨率的训练
•GIoU、CIoU、DIoU、MSE——对有界盒回归使用不同的损失算法
进一步的研究涉及不同种类的特殊物(BoS检测器)对检测器训练精度的影响,包括PAN、RFB、SAM、高斯YOLO(G)和ASFF,如表5所示。在我们的实验中,当使用SPP、PAN和SAM时,探测器获得最佳性能。
4.4. 不同主干和预训练权重对检测器训练的影响
此外,我们还研究了不同主干模型对探测器精度的影响,如表6所示。我们注意到,具有最佳分类精度的模型在检测器精度方面并不总是最佳的。
首先,尽管使用不同特征训练的CSPResNeXt50模型的分类精度高于CSPDarknet53模型,但CSPDarknet53模型在目标检测方面显示出更高的精度。
其次,在CSPResNeXt50分类器训练中使用BoF和Mish可以提高其分类精度,但在检测器训练中进一步应用这些预训练的权重会降低检测器精度。然而,在CSPDarknet53分类器训练中使用BoF和Mish可以提高分类器和使用该分类器预训练权重的检测器的准确性。最终的结果是,主干CSPDarknet53比CSPResNeXt50更适合检测器。
我们观察到,由于各种改进,CSPDarknet53模型显示出更大的提高探测器精度的能力。
4.5. 不同小批量对检测器训练的影响
最后,我们分析了用不同小批量训练的模型得到的结果,结果如表7所示。从表7所示的结果中,我们发现在添加BoF和BoS训练策略后,小批量对检测器的性能几乎没有影响。这一结果表明,在引进BoF和BoS后,不再需要使用昂贵的GPU进行训练。换句话说,任何人都可以使用一个传统的GPU来训练优秀的探测器。
5.结果
图8显示了与其他最先进的物体探测器的对比结果。我们的YOLOv4位于帕累托最优曲线上,在速度和精度方面都优于最快和最准确的检测器。
由于不同的方法使用不同架构的GPU进行推理时间验证,我们在Maxwell、Pascal和Volta架构的常用GPU上运行YOLOv4,并将其与其他最先进的方法进行比较。表8列出了使用麦克斯韦GPU的帧速率比较结果,可以是GTX Titan X(麦克斯韦)或TeslaM40 GPU。表9列出了使用Pascal GPU的帧速率比较结果,可以是Titan X(Pascal)、Titan Xp、GTX 1080 Ti或TeslaP100 GPU。表10列出了使用Volta GPU的帧速率比较结果,可以是Titan Volta或Tesla V100 GPU。
6.结论
我们提供最先进的检测器,比所有可用的替代检测器更快(FPS)和更准确(MS COCO AP50…95和AP50)。所述检测器可在具有8-16 GB-VRAM的常规GPU上训练和使用,这使其广泛使用成为可能。单阶段锚基探测器的最初概念已经证明了其可行性。我们已经验证了大量特征,并选择使用这些特征来提高分类器和检测器的准确性。这些特性可以作为未来研究和开发的最佳实践。
7.致谢
作者希望感谢Glenn Jocher提出的Mosaic数据增强、使用遗传算法选择超参数以及解决网格敏感性问题的想法https://github.com/ultralytics/yolov3
Scaled YOLOv4 (CVPR2021)
https://openaccess.thecvf.com/content/CVPR2021/papers/Wang_Scaled-YOLOv4_Scaling_Cross_Stage_Partial_Network_CVPR_2021_paper.pdf
https://openaccess.thecvf.com/content/CVPR2021/html/Wang_Scaled-YOLOv4_Scaling_Cross_Stage_Partial_Network_CVPR_2021_paper.html
https://arxiv.org/pdf/2011.08036v2.pdf(该版本发表应该是最晚,2021.2,是此译文的基础)
我们证明,基于CSP方法的YOLOv4目标检测神经网络可以上下扩展,适用于小型和大型网络,同时保持最佳的速度和精度。我们提出了一种网络扩展方法,不仅可以修改网络的深度、宽度、分辨率,还可以修改网络的结构。YOLOv4 large model达到了最先进的结果:在特斯拉V100上,MS COCO数据集以约16 FPS的速度达到55.5%的AP(73.4%的AP50),而使用测试数据增强,YOLOv4 large达到了56.0%的AP(73.3 AP50)。据我们所知,这是目前COCO数据集上所有已发表作品中精度最高的。YOLOv4 tiny型号在RTX 2080Ti上以443 FPS的速度达到22.0%的AP(42.0%的AP50),而通过使用TensorRT,批量大小=4,FP16精度,YOLOv4 tiny达到1774 FPS。
1.导言
基于深度学习的目标检测技术在我们的日常生活中有很多应用。例如,医学图像分析、自动驾驶车辆、商业分析和人脸识别都依赖于目标检测。上述应用所需的计算设施可能是云计算设施、通用GPU、物联网集群或单个嵌入式设备。为了设计有效的目标检测器,模型扩展技术非常重要,因为它可以使目标检测器在各种类型的设备上实现高精度和实时推理。
最常见的模型扩展技术是改变主干的深度(CNN中卷积层的数量)和宽度(卷积层中卷积滤波器的数量),然后训练适合不同设备的CNN。例如,在ResNet[11]系列中,ResNet-152和ResNet-101常用于云服务器GPU,ResNet-50和ResNet-34常用于个人计算机GPU,ResNet-18和ResNet-10可用于低端嵌入式系统。在[2]中,蔡等人试图开发出只需一次训练就能应用于各种设备网络架构的技术。他们使用解耦训练、搜索和知识提炼等技术来解耦和训练多个子网,从而使整个网络和子网能够处理目标任务。Tan等人[34]提出使用NAS技术进行复合扩展,包括对EfficientNet-B0的宽度、深度和分辨率进行处理。他们使用这个初始网络搜索给定计算量的最佳CNN结构,并将其设置为EfficientNet-B1,然后使用线性扩展技术获得EfficientNet-B2到EfficientNet-B7等结构。Radosavovic等人[27]总结并添加了来自庞大参数搜索空间AnyNet的约束,然后设计了RegNet。在RegNet中,他们发现CNN的最佳深度约为60。他们还发现,当瓶颈比率设置为1,交叉金字塔的宽度增加率设置为2.5时,将获得最佳性能。此外,最近有专门针对目标检测提出的NAS和模型扩展方法,如SpineNet[6]和EfficientSet[35]。
通过对最先进的目标探测器[1,3,6,26,35,40,44]的分析,我们发现YOLOv4[1]的主干CSPDarknet53几乎与通过架构搜索技术获得的所有最佳架构特点相匹配。CSPDarknet53的深度、瓶颈比、阶段间的宽度增长比分别为65、1和2。因此,我们开发了基于YOLOv4的模型扩展技术,并提出了Scaled-YOLOv4。所提出的scaled-YOLOv4具有优异的性能,如图1所示。Scaled-YOLOv4的设计程序如下。首先,我们重新设计了YOLOv4并提出了YOLOv4 CSP,然后在YOLOv4 CSP的基础上开发了Scaled-YOLOv4。在提出的扩展模型中,我们讨论了线性放大/缩小模型的上界和下界,并分别分析了小模型和大模型在模型扩展时需要注意的问题。因此,我们能够系统地开发 YOLOv4-large模型和YOLOv4-tiny模型。Scaled-YOLOv4能够在速度和精度之间实现最佳折衷,能够在每秒16帧、每秒30帧和每秒60帧的视频以及嵌入式系统上执行实时目标检测。
我们总结了本文的贡献:(1)针对小模型设计了一种强大的模型扩展方法,该方法可以系统地平衡浅层CNN的计算成本和存储带宽;(2) 设计一个简单但有效的策略来扩展大型目标探测器;(3) 分析所有模型扩展因子之间的关系,然后根据最有利的组划分进行模型扩展;(4) 实验已经证实,FPN结构本质上是once-for-all结构;(5)我们利用上述方法开发了YOLOv4 tiny和YOLO4v4 large。
2 相关工作
2.1. 实时目标检测
目标探测器主要分为一阶段目标探测器[28,29,30,21,18,24]和两阶段目标探测器[10,9,31]。单阶段目标探测器的输出只需一次CNN操作即可获得。对于两阶段目标检测器,通常将第一阶段CNN得到的高分区域建议反馈给第二阶段CNN进行最终预测。单阶段对象检测器和两阶段对象检测器的推理时间可以表示为和,其中是置信度高于阈值的区域建议数。换句话说,一阶段目标检测器所需的推理时间是恒定的,而两阶段目标检测器所需的推理时间不是固定的。因此,如果我们需要实时物体探测器,它们几乎必然是单阶段物体探测器。如今流行的单阶段目标探测器主要有两种:基于锚的[30,18]和无锚的[7,13,14,36]。在所有无锚方法中,CenterNet[46]非常流行,因为它不需要复杂的后处理,例如非最大抑制(NMS)。目前,更精确的实时单阶段目标探测器是基于锚点的EfficientDet[35]、YOLOv4[1]和PP-YOLO[22]。在本文中,我们基于YOLOv4[1]开发了我们的模型扩展方法。
2.2 模型扩展
传统的模型扩展方法是改变模型的深度,即增加更多的卷积层。例如,Simonyan等人设计的VGGNet[32]在不同阶段堆叠额外的卷积层,并使用此概念设计VGG-11、VGG-13、VGG-16和VGG-19架构。后续方法通常遵循相同的模型扩展方法。对于He等人提出的ResNet[11],深度扩展可以构建非常深的网络,例如ResNet-50、ResNet-101和ResNet-152。后来,Zagoruyko等人[43]考虑了网络的宽度,他们改变了卷积层的内核数量,以实现扩展。因此,他们设计了宽ResNet(WRN),同时保持了相同的精度。虽然WRN比ResNet有更多的参数,但推理速度要快得多。随后的DenseNet[12]和ResNeXt[41]还设计了一个复合扩展版本,将深度和宽度考虑在内。对于图像金字塔推断,在运行时执行增强是一种常见的方法。它获取输入图像并进行各种不同的分辨率扩展,然后将这些不同的金字塔组合输入到经过训练的CNN中。最后,网络将整合多组输出作为其最终结果。Redmon等人[30](YOLOv3)使用上述概念来执行输入图像大小扩展。他们使用更高的输入图像分辨率对经过训练的DarkNet53进行微调,执行此步骤的目的是获得更高的精度。
近年来,网络体系结构搜索(NAS)相关研究蓬勃发展,NAS-FPN[8]一直在寻找特征金字塔的组合路径。我们可以将NAS-FPN视为一种主要在阶段级别执行的模型扩展技术。至于EfficientNet[34],它使用基于深度、宽度和输入大小的复合扩展搜索。EfficientSet[35]的主要设计理念是分解具有不同目标检测器特征的模块,然后对图像大小、宽度、#BiFPN层和#box/class层进行扩展。另一个使用NAS概念的设计是SpineNet[6],它主要针对用于网络架构搜索的鱼形对象检测器的总体架构。这种设计理念最终会产生一种规模化的结构。另一个采用NAS设计的网络是RegNet[27],它主要固定阶段的数量和输入分辨率,并将每个阶段的深度、宽度、瓶颈比率和组宽度等所有参数集成到深度、初始宽度、斜率、量化、瓶颈比率和组宽中。最后,他们使用这六个参数来执行复合模型扩展搜索。以上方法都是很好的工作,但很少有方法分析不同参数之间的关系。本文将根据目标检测的设计要求,尝试寻找一种协同复合扩展的方法。
3.模型扩展原理
在对提议的目标检测器执行模型扩展后,下一步是处理将发生变化的定量因素,包括带有定性因素的参数数量。这些因素包括模型推理时间、平均精度等。定性因素将根据所使用的设备或数据库产生不同的增益效果。我们将在3.1中分析和设计定量因素。对于3.2和3.3,我们将分别设计与运行在低端设备和高端GPU上的微小物体探测器相关的定性因素。
3.1. 模型扩展的一般原理
在设计有效的模型扩展方法时,我们的主要原则是,当向上/向下扩展时,我们希望增加/减少的量化成本越低/越高,效果越好。在本节中,我们将展示和分析各种通用CNN模型,并试图了解它们在(1)图像大小、(2)层数和(3)通道数变化时的量化成本。我们选择的CNN是ResNet、ResNext和Darknet。
对于k层CNN,基本层通道数为b,ResNet层的计算为k∗[conv(1×1,b/4)→ conv(3×3,b/4)→ conv(1×1,b)],ResNeXt层为k∗[conv(1×1,b/2)→ gconv(3×3/32,b/2)→ conv(1×1,b)]。至于Darknet层,计算量为k∗[conv(1×1,b/2)→ conv(3×3,b)]。令调整图像大小、层数和通道数的扩展因子分别为α、β和γ。当这些扩展因子发生变化时,表1总结了FLOPs的相应变化。
从表1可以看出,扩展尺寸、深度和宽度会导致计算成本增加。它们分别显示平方、线性和平方增长。
Wang等人提出的CSPNet[37]可以应用于各种CNN架构,同时减少参数和计算量。此外,它还提高了准确性,减少了推理时间。我们将其应用于ResNet、ResNeXt和Darknet,并观察计算量的变化,如表2所示。
从表2中,我们观察到,在将上述CNN转换为CSPNet后,新的体系结构可以有效地将ResNet、ResNeXt和Darknet上的计算量(FLOP)分别减少23.5%、46.7%和50.0%。因此,我们使用CSP模型作为执行模型扩展的最佳模型。
3.2 为低端设备扩展微型模型
对于低端设备,设计模型的推理速度不仅受计算量和模型大小的影响,更重要的是,必须考虑外围硬件资源的限制。因此,当执行微小模型扩展时,我们还必须考虑诸如内存带宽、内存访问成本(MACS)和DRAM流量等因素( memory bandwidth, memory access cost (MACs), and DRAM traffic)。为了考虑上述因素,我们的设计必须遵循以下原则:
使计算order小于:
轻量模型与大型模型的不同之处在于,它们的参数利用效率必须更高,以便在少量计算的情况下达到所需的精度。在进行模型扩展时,我们希望计算order尽可能低。在表3中,我们分析了具有有效参数利用率的网络,如DenseNet和OSANet[15]的计算负载,其中g表示增长率。
对于一般CNN,表3中列出的g、b和k之间的关系为k<<g<b。因此,DenseNet的计算复杂度为,而OSANet的计算复杂度顺序为。这两种方法的计算复杂度比ResNet级数的小。因此,我们在OSANet的帮助下设计了我们的微型模型,它具有较小的计算复杂度。
最小化/平衡特征图的大小:
为了在计算速度方面获得最佳的折衷,我们提出了一个新的概念,即在CSPOSANet的计算块之间执行梯度截断(gradient truncation)。如果我们将原始的CSPNet设计应用于DenseNet或ResNet架构,因为这两个架构的第层的输出是第1层和第层输出的集成,我们必须将整个计算块视为一个整体。由于OSANet的计算块属于PlainNet体系结构,因此从计算块的任何一层生成CSPNet都可以达到梯度截断的效果。我们使用此特征来重新规划基础层的通道和计算块生成的通道,并将它们拆分为两条通道数相等的路径,如表4所示。
当通道数为b+kg时,如果想要将这些通道分成两条路径,最好的分割方法是将其分成两个相等的部分,即(b+kg)/2。当我们考虑硬件的带宽峰值时,如果不考虑软件优化,则最佳值是。我们设计的CSPOSANet可以动态调整信道分配。
卷积后保持相同数量的通道:
为了评估低端设备的计算成本,还必须考虑功耗,而影响功耗的最大因素是内存访问成本(memory access cost,MAC)。通常卷积运算的MAC计算方法如下:
其中h、w、Cin、Cout和K分别表示特征映射的高度和宽度、输入和输出的通道数以及卷积滤波器的核大小。通过计算几何不等式,我们可以得出[23](ShuffleNetV2)时有最小MAC。
最小化卷积输入/输出(CIO):
CIO[4]是一个可以测量DRAM IO状态的指示器。表5列出了OSA、CSP和我们设计的CSPOSANet的CIO。当kg>b/2时,提出的CSPOSANet可以获得最佳的CIO。
3.3 为高端GPU扩展大型模型
由于我们希望在对CNN模型进行扩展后提高精度并保持实时推理速度,因此在进行复合扩展时,必须在目标检测器的多个扩展因子中找到最佳组合。通常,我们可以调整目标探测器输入、主干和颈部的比例因子。表6总结了可调整的潜在比例因子。
图像分类和目标检测的最大区别在于前者只需要识别图像中最大分量的类别,而后者需要预测图像中每个对象的位置和大小。在单阶段目标检测器中,每个位置对应的特征向量用于预测该位置处目标的类别和大小。更好地预测物体大小的能力基本上取决于特征向量的感受野。在CNN架构中,与感受野最直接相关的是金字塔,而特征金字塔网络(FPN)架构告诉我们,更高阶段更适合预测大物体。在表7中,我们说明了感受野和几个参数之间的关系。
从表7可以明显看出,宽度扩展可以独立操作。当输入图像大小增加时,如果想要对大型对象具有更好的预测效果,必须增加网络的深度或阶段数。在表7列出的参数中,{size_input,#stage}的复合物效果最好。因此,在执行扩展时,我们首先对size_input#stage执行复合扩展,然后根据实时要求,我们进一步分别对深度和宽度执行扩展。
4 扩展-YOLOv4
在本节中,我们将重点介绍为通用GPU、低端GPU和高端GPU设计扩展的YOLOv4。
4.1 CSP-ized YOLOv4
YOLOv4是为通用GPU上的实时目标检测而设计的。在本小节中,我们重新设计了YOLOv4到YOLOv4 CSP,以获得最佳的速度/精度权衡。主干:在CSPDarknet53的设计中,跨阶段过程的下采样卷积计算不包括在残差块中。因此,我们可以推断每个CSPDarknet阶段的计算量为。从上面推导的公式中,我们知道只有当k>1时,CSPDarknet阶段才会比Darknet阶段有更好的计算优势。CSPDarknet53中每个阶段拥有的残差层数量分别为1-2-8-8-4。为了获得更好的速度/精度折衷,我们将第一个CSP阶段转换为原始的Darknet残差层。
颈:为了有效减少计算量,我们在YOLOv4中对PAN[20]架构进行了CSP化。PAN架构的计算列表如图2(a)所示。它主要是将来自不同特征金字塔的特征进行整合,然后通过两组reversed Darknet残差层,无需快捷连接。CSP实现后,新计算列表的体系结构如图2(b)所示。这个新的更新有效地减少了40%的计算量。
SPP:SPP模块最初被插入到颈部的第一计算列表组的中间位置。因此,我们还将SPP模块插入到CSPANN的第一个计算列表组的中间位置。
4.2. YOLOv4 tiny
YOLOv4 tiny是为低端GPU设备设计的,设计将遵循第3.2节中提到的原则。
我们将使用带有PCB架构的CSPOSANet来构成YOLOv4的主干。我们设定g=b/2作为增长率,并使其在最后增长到b/2+kg=2b。通过计算,我们推导出k=3,其结构如图3所示。至于每个阶段的通道数和颈部分,我们遵循YOLOv3 tiny的设计。
4.3. YOLOv4-Large
YOLOv4 large是为云GPU设计的,主要目的是实现高精度的目标检测。我们设计了一个完全CSP化的模型YOLOv4-P5,并将其放大到YOLOv4-P6和YOLOv4-P7。
图4显示了YOLOv4-P5、YOLOv4-P6和YOLOv4-P7的结构。我们设计在sizeinput#stage上执行复合扩展。我们将每个阶段的深度尺度设置为,ds设置为[1,3,15,15,7,7]。最后,我们进一步使用推断时间作为约束来执行额外的宽度扩展。我们的实验表明,当宽度扩展因子等于1时,YOLOv4-P6可以在每秒30帧的视频中达到实时性能。对于YOLOv4-P7,当宽度扩展因子等于1.25时,它可以以16 FPS的视频速度达到实时性能。
5.实验
我们使用MSCOCO 2017目标检测数据集来验证所提出的scaled-YOLOv4。我们不使用ImageNet预先训练的模型,所有scaled-YOLOv4模型都是从头开始训练的,采用的工具是SGD optimizer。用于训练YOLOv4 tiny的时间是600个epoch,用于训练YOLOv4 CSP的时间是300个epoch。对于YOLOv4 large,我们先执行300个epoch,然后使用更强的数据增强方法来训练150个epoch。对于超参数的拉格朗日乘子,例如学习率的锚(anchors of learning rate)、不同数据增强方法的程度,我们使用k-均值和遗传算法来确定。与超参数相关的所有细节在附录中详细说明。
5.1 CSP模型的烧蚀研究
在本小节中,我们将对不同的模型进行CSP化,并分析CSP化对参数量、计算量、吞吐量和平均精度的影响。我们使用Darknet53(D53)作为主干,选择FPN和SPP(FPNSPP)以及PAN和SPP(PANSPP)作为颈部设计消融研究。在表8中,我们列出了不同DNN模型CSP后的AP val结果。我们分别使用LeakyReu(Leaky)和Mish激活函数来比较使用的参数、计算量和吞吐量。所有实验都是在COCO minval数据集上进行的,得到的AP显示在表8的最后一列中。
从表8中列出的数据可以看出,CSP化模型大大减少了32%的参数和计算量,并改善了Batch 8的吞吐量和AP。如果想要保持相同的帧速率,可以在CSP化后为模型添加更多层或更高级的激活函数。从表8所示的数字中,我们可以看到CD53s CFPNSPP Mish和CD53sCPANSPP Leaky与D53 FPNSPP Leaky具有相同的Batch 8吞吐量,但它们在计算资源较低的情况下,分别有1%和1.6%的AP改进。从以上的改进数据中,我们可以看到CSP模式的巨大优势。因此,我们决定使用CD53s CPANSP Mish作为YOLOv4 CSP的主干,这导致表8中AP最高。
5.2. YOLOv4-tiny的消融研究
在这一小节中,我们设计了一个实验,来展示如果在计算块中使用带有部分功能的CSPNet,它是多么的灵活。我们还与CSPDarknet53进行了比较,在CSPDarknet53中,我们对宽度和深度进行线性扩展。结果如表9所示。
从表9所示的图中,我们可以看到,设计的PCB技术可以使模型更加灵活,因为这样的设计可以根据实际需要进行调整。从以上结果中,我们也证实了线性缩小确实有其局限性。显然,在有限的操作条件下,tinyCD53s的残差加法成为推理速度的瓶颈,因为它的帧速率远低于具有相同计算量的COSA体系结构。同时,我们也看到,提出的COSA可以获得更高的AP。因此,我们最终选择了COSA-2x2x作为YOLOv4 tiny架构,它在我们的实验中获得了最佳的速度/精度权衡。
5.3. YOLOv4large的消融研究
在表10中,我们展示了YOLOv4模型在从头开始训练和微调阶段获得的AP。
5.4. 用于目标检测的Scaled-YOLOv4
我们与其他实时目标探测器进行了比较,结果如表11所示。[AP、AP50、AP75、APS、APM、APL]项中以粗体标记的值表示模型在相应项中表现最佳。我们可以看到,所有扩展的YOLOv4模型,包括YOLOv4 CSP、YOLOv4-P5、YOLOv4-P6、YOLOv4-P7,在所有指标上都是Pareto最优的。当我们将YOLOv4 CSP与相同精度的Efficientd3(47.5%对47.5%)进行比较时,推断速度是1.9倍。当YOLOv4-P5与EfficientDet-D5在相同精度(51.8%对51.5%)下进行比较时,推理速度为2.9倍。这种情况类似于YOLOv4-P6与EfficientDet-D7(54.5%对53.7%)和YOLOv4-P7与EfficientDet-D7x(55.5%对55.1%)之间的比较。在这两种情况下,YOLOv4-P6和YOLOv4-P7的推理速度分别快3.7倍和2.5倍。所有扩展的YOLOv4模型都达到了最先进的结果。
YOLOv4大型模型的测试时间增强(TTA)实验结果如表12所示。应用TTA后,YOLOv4-P5、YOLOv4-P6和YOLOv4-P7的AP分别提高1.1%、0.7%和0.5%。
然后,我们比较了YOLOv4 tiny与其他微小物体探测器的性能,结果如表13所示。很明显,与其他微型机型相比,YOLOv4 tiny实现了最佳性能。
最后,我们将YOLOv4 tiny放在不同的嵌入式GPU上进行测试,包括Xavier AGX、Xavier NX、Jetson TX2、Jetson NANO。我们还使用TensorRT FP32(如果支持FP16)进行测试。表14列出了通过不同模型获得的所有帧速率。显然,无论使用哪种设备,YOLOv4 tiny都可以实现实时性能。如果我们采用FP16和批量大小4来测试Xavier AGX和Xavier NX,帧速率可以分别达到380 FPS和199 FPS。此外,如果使用TensorRT FP16在通用GPU RTX 2080ti上运行YOLOv4 tiny,当批量大小分别等于1和4时,相应的帧速率可以达到773 FPS和1774 FPS,这是非常快的。
5.5. Scaled-YOLOv4作为naıve once-for-all模型
在本小节中,我们设计了实验,以证明类FPN的体系结构是一个简单的once-for-all模型。在这里,我们删除了YOLOv4-P7的自上而下路径和检测分支的一些阶段。YOLOv4-P7\P7和YOLOv4-P7\P7\P6代表从训练过的YOLOv4-P7中移除{P7}和{P7,P6}阶段的模型。图5显示了不同输入分辨率的修剪模型和原始YOLOv4-P7之间的AP差异。
我们可以发现,YOLOv4-P7在高分辨率下的AP最好,而YOLOv4-P7\P7和YOLOv4-P7\P7\P6分别在中分辨率和低分辨率下的AP最好。这意味着我们可以使用类FPN模型的子网来很好地执行目标检测任务。此外,我们可以对对象检测器的模型结构和输入大小进行复合扩展,以获得最佳性能。
6 结论
我们证明了基于CSP方法的YOLOv4目标检测神经网络可以上下扩展,适用于小型和大型网络。因此,我们使用TensorRT-FP16在test dev COCO数据集上为模型YOLOv4实现了最高的精度56.0%AP,在RTX 2080Ti上为小型模型YOLOv4 tiny实现了极高的速度1774 FPS,并为其他YOLOv4模型实现了最佳的速度和精度。
7. 致谢
The authors wish to thank National Center for High�performance Computing (NCHC) for providing computational and storage resources. A large part of the code is borrowed from https://github.com/AlexeyAB, https://github.com/WongKinYiu and https://github.com/glenn-jocher. Thanks for their wonderful works.