Scaled-YOLOv4: Scaling Cross Stage Partial Network

Scaled-YOLOv4: Scaling Cross Stage Partial Network

Abstract

我们展示了基于CSP方法的YOLOv4对象检测神经网络,可以上下缩放,并且适用于小型和大型网络,同时保持最佳的速度和准确性。我们提出了一种网络缩放方法,该方法不仅可以修改深度,宽度,分辨率,还可以修改网络的结构。OLOv4-large模型达到了最先进的结果:在Tesla V100上以15 FPS的速度,MS COCO数据集的AP为55.4%(AP50为73.3%),而随着测试时间的增加,YOLOv4-large的模型达到55.8% AP(73.2 AP50)。据我们所知,这是目前所有已发表作品中COCO数据集的最高准确性。 YOLOv4-tiny模型在RTX 2080Ti上以〜443 FPS的速度达到22.0%AP(42.0%AP50),而通过使用TensorRT,批处理大小为 4和FP16精度,YOLOv4-tiny模型达到1774 FPS。

1. Introduction

基于深度学习的对象检测技术在我们的日常生活中有许多应用。 例如,医学图像分析,自动驾驶车辆,业务分析和面部识别都依赖于对象检测。 以上应用程序所需的计算设备可能云计算设施,如通用GPU,IoT集群或单个嵌入式设备。 为了设计有效的物体检测器,模型缩放技术非常重要,因为它可以使物体检测器在各种类型的设备上实现高精度和实时推断。最常见的模型缩放技术是更改主干的深度(CNN中卷积层的数量)和宽度(卷积层中卷积滤波器的数量),然后训练适用于不同设备的CNN。 例如,在ResNet [10]系列中,ResNet-152和ResNet-101经常用于云服务器GPU,ResNet-50和ResNet-34经常用于个人计算机GPU,而ResNet-18和ResNet-10可以用作 用于低端嵌入式系统。In [2], Cai et al.尝试开发只需训练一次即可应用于各种设备网络架构的技术。他们使用解耦训练,搜索和知识蒸馏等技术来解耦和训练多个子网络,以便整个网络和子网都能够处理目标任务。 Tan等人 [30]提出使用NAS技术执行复合缩放,包括在EfficientNet-B0上处理宽度,深度和分辨率。 他们使用此初始网络搜索给定计算量的最佳CNN架构,并将其设置为EfficientNet-B1,然后使用线性缩放技术获得诸如EfficientNet-B2到EfficientNet-B7的体系结构。 Radosavovic等人 [23]总结并添加了来自庞大参数搜索空间AnyNet的约束,然后设计了RegNet。 在RegNet中,他们发现CNN的最佳深度约为60。他们还发现,当瓶颈比率设置为1且跨平台的宽度增加率设置为2.5时,将获得最佳性能。另外,最近有专门针对对象检测而提出的NAS和模型缩放方法,例如SpineNet [5]和EfficientDet [31]。

通过对目前最先进的物体检测器[1,3,5,22,31,36,40]的分析,我们发现YOLOv4[1]的主干CSPDarknet53几乎匹配所有通过网络架构搜索技术得到的最优架构特征。CSPDarknet53的深度、瓶颈比、各阶段之间的宽度生长比率分别为65、1和2。因此,我们开发了基于YOLOv4的模型缩放技术,提出了scale -YOLOv4。提出的scaled-YOLOv4 具有出色的性能,如图1所示。Scale - yolov4的设计过程如下。首先对YOLOv4进行了重新设计,提出了YOLOv4- CSP,然后在YOLOv4- CSP的基础上开发了Scale -YOLOv4。在提出的scale - yolov4中,我们讨论了线性缩放模型的上界和下界,并分别分析了小模型和大模型缩放时需要注意的问题。因此,我们能够系统地开发YOLOv4-large和YOLOv4-tiny模型。Scaled-YOLOv4能够在速度和精度之间实现最好的平衡,能够在15 fps、30 fps和60 fps的影片以及嵌入式系统上进行实时对象检测。

我们总结了本文的工作:(1)设计了一种针对小模型的强大的模型缩放方法,系统地平衡了浅层CNN的计算代价和存储带宽;(2)设计一种简单有效的大型目标检测器缩放策略;(3)分析各模型缩放因子之间的关系,基于最优组划分进行模型缩放;(4)实验证实了FPN结构本质上是一种一次性结构;(5)利用上述方法开发了YOLOv4-tiny和YOLO4v4-large。

2. Related work

2.1. Real-time object detection

物体探测器主要分为单阶段物体探测器[24,25,26,18,16,20]和两阶段物体探测器[9,8,27]。只需一次CNN操作就可以得到一级目标检测器的输出。对于两阶段目标检测器,通常将第一阶段CNN得到的高分区域建议输入到第二阶段CNN进行最终预测。 one-stage object detectors和 two-stage object detectors的推理时间可以表示为Tone= T1st and Ttwo= T1st + mT2nd,m为置信度得分高于阈值的区域建议编号。换句话说,单级对象检测器所需的推理时间是固定的,而两级对象检测器所需的推理时间不是固定的。因此,如果我们需要实时对象检测器,则它们几乎必然是一级对象检测器。 当今流行的一级目标探测器有两种:基于锚点的[26,16]和无锚点的[6,12,13,32]。 在所有无锚方法中,CenterNet [42]非常受欢迎,因为它不需要复杂的后处理,例如NMS。 目前,更准确的实时一级目标检测器是基于锚的EfficientDet [31],YOLOv4 [1]和PP-YOLO [19]。 在本文中,我们基于YOLOv4 [1]开发了模型缩放方法。

2.2. Model scaling

传统的模型缩放方法是改变模型的深度,即增加更多的卷积层。例如,Simonyan等人设计的VGGNet[28]在不同的阶段叠加了额外的卷积层,并使用这个概念设计了vgg11、vgg13、vgg16、vgg19架构。后续的方法通常遵循相同的模型缩放方法。对于He等人提出的ResNet[10],深度扩展depth scaling 可以构建非常深的网络,如ResNet-50、ResNet-101和ResNet-152。后来Zagoruyko等人[39]考虑到了网络的宽度,他们改变了卷积层核的数量来实现缩放。因此,他们设计了wide ResNet (WRN),同时保持同样的精度。虽然WRN的参数量比ResNet大,但推理速度要快得多。随DenseNet[11]和ResNeXt[37]也设计了一个复合缩放版本,将深度和宽度考虑在内。对于图像金字塔推理,在运行时进行扩充是一种常用的方法。它取一个输入图像,做各种不同的分辨率缩放,然后输入这些不同的金字塔组合到一个训练好的CNN。最后,网络将多组输出整合为最终结果。Redmon等人[26]使用上述概念来执行输入图像的大小缩放。他们使用更高的输入图像分辨率来对训练好的Darknet53进行微调,执行这一步的目的是获得更高的精度。

近年来,网络架构搜索(NAS)相关研究得到大力发展,NASFPN[7]搜索特征金字塔的组合路径。我们可以把NAS-FPN看作是一种主要在阶段级执行的模型缩放技术。对于EfficientNet [30],它使用了基于深度、宽度和输入大小的复合缩放搜索。EfficientNet [31]的主要设计理念是将具有不同功能的目标检测器模块拆解,然后对图像大小、宽度、#BiFPN层、#box/class层进行缩放。另一种采用NAS概念的设计是SpineNet[5],主要针对fish-shaped object detector 的整体架构进行网络架构搜索。该设计概念最终可以产生比例排列的结构。另一种具有NAS设计的网络是RegNet [23],它主要确定级数和输入分辨率,并将每个级的深度,宽度,瓶颈比率和组宽等所有参数集成到 深度,初始宽度,斜率,量化,瓶颈比率和群组宽度。 最后,他们使用这六个参数执行复合模型缩放搜索。 上面的方法都是很好的工作,但是很少分析不同参数之间的关系。 在本文中,我们将尝试找到一种基于目标检测设计要求的协同复合缩放方法。

3. Principles of model scaling

在对所提出的对象检测器进行模型缩放后,下一步是处理将发生变化的定量因素,包括带有定性因素的参数的数量。这些因素包括模型推理时间、平均精度等。根据使用的设备或数据库,定性因素会有不同的增益效果。我们将在3.1中对定量因素进行分析和设计。在3.2和3.3中,我们将分别设计运行在低端设备和高端gpu上的微型对象检测器的定性因素。

3.1. General principle of model scaling

在设计有效的模型比例方法时,我们的主要原则是当比例上升或下降时,我们想要增加或减少的定量成本越低/越高越好。在这一节中,我们将展示和分析各种常用的CNN模型,并试图了解它们在面对(1)图像大小,(2)层数,(3)通道数的变化时的定量代价。我们选择的cnn是ResNet, ResNext和Darknet。

对于具有b个基本通道的k层CNN,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 layer,计算量为k * {conv1×1,b / 2 – conv 3×3,b}。 令可用于调整图像大小,层数和通道数的缩放因子分别为α,β和γ。 当这些比例因子变化时,表1总结了FLOP(计算量)的相应变化。

由表1可以看出,尺度大小、深度和宽度都会导致计算成本的增加。它们分别按照平方,线性和平方形式增加。Wanget al.提出的CSPNet[33]可以应用于各种CNN架构,同时减少了参数和计算量。此外,它还提高了准确性,减少了推理时间。我们将它应用到ResNet、ResNeXt和Darknet中,观察计算量的变化,如表2所示

从表2所示的图中,我们可以看到,在将上述CNNs转换为CSPNet之后,新的架构可以有效地减少ResNet、ResNeXt和Darknet上的计算量(FLOPs),分别减少23.5%、46.7%和50.0%。因此,我们使用csp化的模型作为执行模型伸缩的最佳模型。

3.2. Scaling Tiny Models for Low-End Devices

对于低端设备,设计模型的推理速度不仅受到计算量和模型大小的影响,更重要的是必须考虑外围硬件资源的限制。因此,在执行微小模型缩放时,我们还必须考虑诸如内存带宽、内存访问成本(MACs)和DRAM流量等因素。为了考虑到以上因素,我们的设计必须遵循以下原则:

使计算量小于O(whkb^2):轻量化模型与大模型不同,轻量化模型的参数利用效率必须更高,才能在计算量较小的情况下达到所需的精度。在进行模型缩放时,我们希望计算的次数尽可能的低。在表3中,我们分析了有效利用参数的网络,如DenseNet和OSANet的计算负荷。

对于一般的CNN,表3中列出的g,b和k之间的关系为k << g <b。 因此,DenseNet的计算复杂度顺序为O(whgbk),而OSANet的计算复杂度顺序为O(max(whbg,whkg^2))。 以上两者的计算复杂度小于ResNet系列的O(whkb^2)。 因此,我们借助OSANet设计了较小的模型,该模型具有较小的计算复杂性。

最小化/平衡feature map的大小:为了在计算速度上得到最好的平衡,我们提出了一个新的概念,即在CSPOSANet的计算块之间进行梯度截断。如果我们将原始的CSPNet设计应用到DenseNet或ResNet架构中,因为这两种架构的第j层输出是第1到第(j − 1)层输出的集成,所以我们必须将整个计算块作为一个整体来对待。 因为OSANet的计算块属于PlainNet体系结构,所以从计算块的任何层制作CSPNet都可以实现梯度截断的效果。 我们使用此功能来重新计划基础层的b通道和由计算块生成的 kg 通道,并将它们分成具有相等通道号的两条路径,如表4所示。

当通道数为b + kg时,如果要将这些通道分为两条路径,则最好的划分方法是将其分为两个相等的部分,即(b + kg)/ 2。 当我们实际考虑硬件的带宽τ时,如果不考虑软件优化,则最佳值为ceil((b + kg)/2τ)×τ。 我们设计的CSPOSANet可以动态调整通道分配。

卷积后保持相同的通道数:在评估低端设备的计算成本时,还必须考虑功耗,影响功耗的最大因素是内存访问成本(MAC)。通常一个卷积运算的MAC计算方法如下:

其中h, w, Cin, Cout, K分别表示feature map的高度和宽度,输入和输出的通道数,卷积滤波器的核大小。通过计算几何不等式,可以推导出Cin= Cout时的最小MAC。

最小化卷积输入/输出(CIO):CIO是一个可以测量DRAM IO状态的指示器。表5列出了OSA、CSP和我们设计的CSPOSANet的CIO。当kg > b/2时,CSPOSANet可以获得最佳的CIO。

3.3. Scaling Large Models for High-End GPUs

由于我们希望在对CNN模型进行缩放后提高准确性并保持实时推理速度,所以在进行复合缩放时,必须在目标检测器众多的缩放因子中找到最佳的组合。通常,我们可以调整对象检测器的输入、主干和颈部的比例因子。表6总结了可以调整的潜在缩放因子。

图像分类和目标检测之间最大的区别是,前者只需要识别分类组件的分类,而后者需要预测图像中每个目标的位置和大小。在单级目标检测器中,利用每个位置对应的特征向量来预测该位置的目标类别和大小。更好地预测物体大小的能力基本上取决于特征向量的感受野。在CNN的架构中,与感受野最直接相关的是stage, feature pyramid network (FPN)结构告诉我们,更高的stage更适合预测大的物体。表7说明了感受野与几个参数之间的关系。

从表7可以看出,宽度缩放可以独立操作。当输入图像尺寸增大时,要想对大对象有更好的预测效果,就必须增大the depth or number of stages of the network.。在表7中列出的参数中,{sizeinput, #stage}的组合效果最好。因此,当执行缩放时,我们首先对sizeinput, #stage,然后根据实时性要求,我们进一步分别对深度和宽度进行缩放。

4. Scaled-YOLOv4

在本节中,我们将重点放在为一般gpu、低端gpu和高端gpu设计缩放YOLOv4上。

4.1. CSP-ized YOLOv4

YOLOv4设计用于在通用GPU上进行实时对象检测。 在本小节中,我们将YOLOv4重新设计为YOLOv4-CSP,以获得最佳的速度/精度权衡。

Backbone:在CSPDarknet53的设计中,计算残留块中不包括跨阶段处理的下采样卷积。 因此,我们可以推断出每个CSPDarknet阶段的计算量为whb^2(9/4 + 3/4 + 5k / 2)。 从公式推导由上可知,只有满足k> 1时,CSPDarknet阶段才会比Darknet阶段具有更好的计算优势。 CSPDarknet53中每个阶段拥有的剩余层数分别为1-2-8-8-4。 为了获得更好的速度/精度权衡,我们将第一个CSP阶段转换为原始的Darknet残留层

Neck:为了有效地减少计算量,我们对YOLOv4中的PAN体系结构进行了CSP-ize。PAN体系结构的计算列表如图2(a)所示。它主要整合来自不同特征金字塔的特征,然后通过两组反向的暗网残留层,没有捷径连接。经过csp化,新的计算列表的架构如图2(b)所示。这个新的更新有效地减少了40%的计算量。

SPP:SPP模块最初是插入在颈部第一个计算列表组的中间位置。因此,我们也将SPP模块插入到CSPPAN的第一个计算列表组的中间位置。

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。

YOLOv4-P5、YOLOv4P6、YOLOv4-P7的结构如图4所示。我们设计在sizeinput, #stage上执行复合缩放。我们设置每个阶段的深度尺度为2^dsi, 并且ds 为[1,3,15,15,7,7,7]。最后,我们进一步使用推断时间作为约束来执行额外的宽度缩放。实验表明,当宽度缩放因子为1时,YOLOv4-P6可以在30帧/秒的视频中达到实时性能。对于YOLOv4-P7来说,当宽度缩放因子等于1.25时,它可以在15 fps的视频中达到实时性能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值