论文链接:https://arxiv.org/pdf/1911.11929.pdf
提出的CSPNet,使最先进的方法,如ResNet、ResNeXt和DenseNet成为移动gpu或cpu的轻量级方法。其中一个主要贡献是认识到冗余梯度信息问题,它导致低效的优化和昂贵的推理计算。故提出了利用跨阶段特征融合策略和截断梯度流来增强学习特征在不同层中的可变性。此外,作者还提出了引入Maxout操作来压缩由特征金字塔生成的特征映射的EFM,这在很大程度上减少了所需的内存带宽,因此推理足够高效,能够与边缘计算设备兼容。实验表明,在移动GPU和CPU上,基于EFM的CSPNet在实时目标检测任务的准确率和推理率方面显著优于竞争对手。
上图为DenseNet与Cross Stage Partial DenseNet (CSPDenseNet)的结构。CSPNet将基础层的特征图分成两部分,一部分将经过dense block和transition layer;然后将另一部分与传输的特征图结合到下一阶段。
本文从网络结构的角度出发,提出了跨阶段部分网络(CSPNet)的概念,以缓解以往工作中需要大量推理计算的问题。作者将此问题归因于网络优化中梯度信息的重复。提出的网络通过整合网络阶段开始和结束时的特征图来考虑梯度的变化性,在实验中,该结构减少了20%的计算量,在ImageNet数据集上具有同等甚至更高的准确性,在MS COCO对象检测数据集上,其AP50性能显著优于目前最先进的方法。CSPNet易于实现,并且足够通用,能够处理基于ResNet、ResNeXt和DenseNet的体系结构。
在本研究中,作者引入交叉阶段部分网络(CSPNet)。设计CSPNet的主要目的是使该体系结构在减少计算量的同时实现更丰富的梯度组合。这一目标是通过将基础层的特征图划分为两部分,然后通过提出的跨阶段层次结构将其合并来实现的。主要概念是通过分割梯度流,使梯度流通过不同的网络路径传播。通过这种方式,可以证明通过切换连接和过渡步骤,传播的梯度信息可以有较大的相关性差异。此外,CSPNet可以大大减少计算量,提高推理速度和准确性,如上图所示。提出的基于cspnet的对象检测器解决了以下三个问题:
1、加强CNN的学习能力
2、移除了计算瓶颈
3、减少内存成本
一、加强CNN的学习能力
现有的CNN经过轻量化后,准确率大大降低,所以作者希望加强CNN的学习能力,使其在轻量化的同时保持足够的准确性。提出的CSPNet可以很容易地应用于ResNet、ResNeXt和DenseNet。在上述网络中应用CSPNet后,计算量可以从10%减少到20%,但在ImageNet上进行图像分类任务时,其精度优于ResNet、ResNeXt、DenseNet、HarDNet、Elastic和Res2Net。
二、移除了计算瓶颈
过高的计算瓶颈将导致完成推理过程的周期增加,或者一些计算单元经常会闲置。因此,作者希望能够将计算量均匀的分布在CNN的每一层,从而有效的提升每个计算单元的利用率,从而减少不必要的能量消耗。本文提出的CSPNet使得PeleeNet的计算瓶颈减半。此外,在基于MS COCO数据集的对象检测实验中,作者提出的模型在基于yolov3的模型上测试时,可以有效减少80%的计算瓶颈。
三、减少内存开销
动态随机存取存储器(Dynamic random access Memory, DRAM)的晶圆制造成本昂贵,且占用大量空间。如果能够有效地降低内存开销,将大大降低ASIC的成本。此外,小面积晶圆可用于多种边缘计算器件。为了减少内存的使用,在特征金字塔生成过程中,作者采用跨通道池化来压缩特征映射。通过这种方式,提出的CSPNet和目标检测器在生成特征金字塔时可以减少75%的PeleeNet内存使用量。
由于CSPNet能够提高CNN的学习能力,作者使用更小的模型来获得更好的准确性。提出的模型可以在GTX 1080ti的109fps下实现50%的COCO AP50。由于CSPNet可以有效地减少大量的内存流动,、提出的方法可以在Intel Core i9-9900K上以52帧/秒的速度实现40%的COCO AP50。此外,由于CSPNet可以显著降低计算瓶颈,而精确融合模型(Exact Fusion Model, EFM)可以有效降低所需的内存带宽,提出的方法可以在Nvidia Jetson TX2上以49帧/秒的速度实现42%的COCO AP50。
发展历史
一、CNN的架构设计
在ResNeXt中,第一次证明基数可以比宽度和深度维度更有效。DenseNet采用了大量重用特性的策略,大大减少了参数的数量和计算量。它将前面所有层的输出特征连接起来作为下一个输入,这可以被认为是最大化基数的方法。SparseNet将密集连接调整为指数间距连接,可以有效提高参数利用率,从而得到更好的结果。partial ResNet (PRN)进一步解释了为什么高基数和稀疏连接可以通过梯度组合的概念来提高网络的学习能力。为了提高CNN的推理速度,ShuffleNet-v2被设计出来,并引入了四条需要遵循的准则。Chao等人提出了Harmonic DenseNet (HarDNet一种低内存流量CNN)以及metric Convolutional Input/Output (CIO是一种与真实的DRAM流量测量近似成比例关系的DRAM流量)
二、实时检测器
最著名的两个实时物体探测器是YOLOv3和SSD。基于SSD, LRF和RFBNet可以在GPU上实现最先进的实时对象检测性能。近年来,基于无锚的目标检测器已经成为主流的目标检测系统。这种类型的两个对象检测器是CenterNet和CornerNet-Lite,它们在效率和效能方面都表现得很好。对于CPU或移动GPU上的实时目标检测,基于ssd的Pelee、基于yolov3的PRN、基于Light-Head RCNN的ThunderNet都在目标检测上获得了优异的性能。
实现过程
一、DenseNet
DenseNet的每一阶段包含一个dense block和一个transition layer,每个dense block由k个dense
layers组成。第i个dense layers的输出与第i个dense layers的输入连接,连接后的输出成为第(i + 1)个dense layers的输入。表明上述机理的方程可以表示为:
其中∗表示卷积运算符,而 [ x 0 , x 1 , … ] [x0, x1,…] [x0,x1,…]表示连接 x 0 , x 1 , … x0, x1,… x0,x1,…, w i w_i wi和 x i x_i xi分别为第i密集层的权值和输出。
如果利用反向传播算法更新权值,权值更新方程可以写成:
其中 f f f为权值更新函数, g i g_i gi为传播到第i个dense layers的梯度。可以发现大量的梯度信息被重用来更新不同密集层的权值。这将导致在不同密集层中反复学习复制的梯度信息。
二、Cross Stage Partial DenseNet.
本文提出的CSPDenseNet的一级体系结构如上图。CSPDenseNet的一级由dense block部分和transition layer部分组成。
在dense block中,基础层特征图首先被分成两部分即, x 0 x_0 x0 = [ x 0 ′ x_0' x0′, x 0 ′ ′ x_0'' x0′′]。在 x 0 ′ ′ x_0'' x0′′和 x 0 ′ x_0' x0′之间,前者直接连接到dense block的结尾,后者将经过dense block。
在transition layer块中中:首先,dense block的输出,包括[ x 0 ′ ′ x_0'' x0′′, x 1 x_1 x1,…, x k x_k xk],后经历一个transition layer。其次,将该transition layer的输出 x T x_T xT与 x 0 ′ ′ x_0'' x0′′连接,再经过另一个transition layer,生成输出 x u x_u xu。CSPDenseNet的前馈传递和权值更新方程分别如下。
可以看到来自dense layers的梯度是分开集成的。另一方面,未经过密集层的feature map x 0 x_0 x0’'也被单独集成。对于用于更新权值的梯度信息,两边不包含属于其他边的重复梯度信息。
三、Partial Dense Block
(一)、Partial Dense Block:
1.)增加梯度路径:通过分割合并策略,可以使梯度路径的数量增加一倍。由于采用了跨阶段策略,可以缓解使用explicit特征图拷贝后进行拼接的缺点;
2)各层的平衡计算:通常情况下,DenseNet基础层的通道数远大于growth rate。由于Partial Dense Block中dense layer 运算所涉及的基础层通道数仅占原始数量的一半,因此可以有效解决近一半的计算瓶颈;
(3.)减少内存流量:假设DenseNet中一个Dense Block的基特征图大小为w × h × c,growth rate为d,共有m个dense layer 。则该Dense Block的CIO为 ( c × m ) + ( ( m 2 + m ) × d ) / 2 (c × m) + ((m^2 + m) × d)/2 (c×m)+((m2+m)×d)/2,Partial Dense Block的CIO为 ( ( c × m ) + ( m 2 + m ) × d ) / 2 ((c × m) + (m^2 + m) × d)/2 ((c×m)+(m2+m)×d)/2。虽然m和d通常比c小得多,但Partial Dense Block最多可以节省网络中一半的内存流量。
(二)、Partial Transition Layer:
设计Partial Transition Layer的目的是最大限度地发挥梯度组合的差异性。Partial Transition Layer是一种分层特征融合机制,采用截断梯度流的策略,防止不同层学习重复的梯度信息。在这里,设计了CSPDenseNet的两个变体来展示这种梯度流截断是如何影响网络的学习能力的。
上图展示了两种不同的融合策略。CSP (fusion first)是将两部分生成的特征图连接起来,再进行transition操作。如果采用该策略,将会重用大量的梯度信息。对于CSP (fusion last)策略,来自Dense Block的输出经过Transition Layer,然后与来自第一部分的feature map进行拼接。如果采用CSP(fusion last)策略,梯度信息将不会被重用,因为梯度流被截断了。使用上图所示的四个架构进行图像分类,对应的结果如图4所示。可以看出,如果采用CSP (fusion last)策略进行图像分类,计算成本明显下降,但top-1的准确率仅下降0.1%。另一方面,CSP (fusion first)策略确实有助于显著降低计算成本,但前1位的精度显著下降1.5%。通过使用跨阶段的分割和合并策略,我们能够有效地减少信息集成过程中的重复可能性。从下图的结果可以看出,如果能有效的减少梯度信息的重复,网络的学习能力将会得到很大的提高。
四、将CSPNet应用于其他体系结构
CSPNet也可以很容易地应用到ResNet和ResNeXt,架构如下图所示。因为只有一半的特性通道经过Res(X) Blocks,所以没有必要额外引入瓶颈层bottleneck layer。这使得当浮点运算(FLOPs)是固定的时,理论上的内存访问成本(MAC)达到最低。
五、Exact Fusion Model
本文提出的EFM为每个锚点捕获适当的视场(FoV),从而提高了单级目标检测器的精度。对于分割任务,由于像素级标签通常不包含全局信息,通常更倾向于考虑更大的patch以获得更好的信息检索。然而,对于图像分类和目标检测等任务,从 image-level和 image-level标签中观察到的一些关键信息可能是模糊的。CNN在学习image-level标签时经常会分心,这是两级物体检测器优于一级物体检测器的主要原因之一。
该方法能够较好地聚合初始特征金字塔。EFM基于YOLOv3,它在每个ground truth之前精确地分配一个anchor box。每个ground truth bounding box 对应一个超过阈值IoU的anchor box。如果anchor box的大小等于grid cell的FoV,那么对于某尺度的grid cell,对应的边界框的下界为第(s−1)个尺度,上界为第(s + 1)个尺度。因此,EFM将三个尺度的特征进行了组合。
由于从特征金字塔中串接的特征映射是巨大的,它引入了大量的内存和计算成本。为了缓解这个问题,加入了Maxout技术来压缩特征映射。
上图为不同特征金字塔融合策略。(a)特征金字塔网络(Feature Pyramid Network, FPN):融合当前尺度和以前尺度的特征。(b) Global Fusion Model (GFM):各尺度熔断特征。©精确融合模型(Exact Fusion Model, EFM):熔断特征取决于锚点大小。
六、实验验证策略
(一)、ImageNet
在ImageNet图像分类实验中,所有超参数,如训练步骤、学习速率调度、优化器、数据增强等,作者遵循YOLOv3: An incremental improvement文章中定义的设置。对于ResNet-based
models和 ResNeXt-based models,设置了800,000个training steps。对于DenseNet-based model,设定了160万training steps。将初始学习率设为0.1,采用polynomial衰减学习率调度策略。动量衰减和重量衰减分别设为0.9和0.005。所有的架构都使用一个GPU来统一训练128个batch size。最后,使用ILSVRC 2012的验证集来验证。
(二)、MS COCO
在MS COCO对象检测实验中,所有超参数也遵循YOLOv3: An incremental improvement文章定义的设置。总共进行了50万training steps。采用training steps学习率调度策略,在40steps和45steps分别乘以0.1。动量衰减和重量衰减分别设为0.9和0.0005。所有架构都使用单个GPU来执行64batch size的多尺度训练。最后,利用COCO测试开发集对方法进行了验证。
七、消融实验
(一)、CSPNet在ImageNet上的消融研究
在CSPNet上进行的消融实验中,我们采用了PeleeNet作为baseline,并使用ImageNet来验证CSPNet的性能。使用不同的γ比率和不同的特征融合策略进行消融研究。下表显示了CSPNet消融研究的结果。在表中,SPeleeNet和PeleeNeXt分别是将稀疏连接和分组卷积引入PeleeNet的架构。至于CSP (fusion first)和CSP (fusion last),它们是为了验证部分转换的好处而提出的两种策略。
从实验结果来看,如果在cross-stage partial dense block上只使用CSP (fusion first)策略,性能可以略优于SPeleeNet和PeleeNeXt。然而,为了减少冗余信息的学习而设计的cpartial transition layer可以达到很好的性能。例如,当计算量减少21%时,准确率仅降低0.1%。值得注意的是,当γ = 0.25时,计算量减少了11%,但精度提高了0.1%。与基准PeleeNet相比,CSPPeleeNet的性能最好,可以减少13%的计算量,但同时提高了0.2%的精度。若调整到γ = 0.25,则精度可提高0.8%,计算量可减少3%。
(二)、MS COCO上EFM的消融研究
接下来,基于MS COCO数据集对EFM进行消融研究。在这一系列的实验中,比较了三种不同的特征融合策略,如下图所示。作者选择了两个最先进的轻量级模型,PRN和ThunderNet进行比较。PRN是用于比较的特征金字塔结构,ThunderNet with Context Enhancement Module (CEM)和Spatial Attention Module (SAM)是用于比较的全局融合结构。作者设计了一个全局融合模型(GFM)来与提出的EFM进行比较。此外,GIoU、SPP、SAM也应用于EFM进行消融研究。下表中列出的所有实验结果均采用CSPPeleeNet作为骨干。
实验结果表明,提出的EFM比GFM慢了2 fps,但AP和AP50分别显著提升了2.1%和2.4%。尽管引入GIoU可以将AP升级0.7%,但ap50的性能显著下降了2.7%。然而,对于边缘计算来说,真正重要的是对象的数量和位置,而不是它们的坐标。因此,在后续的模型中不会使用GIoU训练。与SPP增加视场的机制相比,SAM采用的注意机制可以获得更好的帧率和AP,因此采用EFM (SAM)作为最终架构。另外,虽然CSPPeleeNet使用swish激活可以提高AP 1%,但其操作需要对硬件设计进行查找表加速,我们最终也放弃了swish激活功能。
(三)、ImageNet图像分类
作者将CSPNet应用于ResNet-10、ResNeXt-50、PeleeNet和DenseNet-201-Elastic,并与最先进的方法进行比较。实验结果如下表所示。
实验结果证实,无论是ResNet-based models,ResNet-based models,还是DenseNet-
based models,当引入CSPNet的概念时,计算负荷至少降低了10%,精度保持不变或提高。引入CSPNet的概念对于改进轻量级模型特别有用。例如,与ResNet-10相比,CSPResNet-10可以提高1.8%的准确性。对于PeleeNet和DenseNet-201-Elastic, CSPPeleeNet和CSPDenseNet-201-Elastic可以分别减少13%和19%的计算量,可以稍微升级,也可以保持精度。在ResNeXt-50的情况下,CSPResNeXt-50可以减少22%的计算量,top-1的精度提升到77.9%。
如果与轻量级模型——EfficientNet-B0相比,虽然它在2048个批量大小时可以达到76.8%的精度,但在实验环境相同的情况下,即只使用一个GPU的情况下,EfficientNetB0只能达到70.0%的精度。事实上,EfficientNet-B0使用的swish激活功能和SE块在移动GPU上是不高效的。在EfficientNet-EdgeTPU的开发过程中也进行了类似的分析。在这里,为了展示CSPNet的学习能力,在CSPPeleeNet中引入了swish和SE,并与EfficientNet-B0*进行了比较。在本实验中,SECSPPeleeNet-swish将计算量降低了3%,top-1准确率提升了1.1%。将提出的CSPResNeXt-50与ResNeXt-50、ResNet-152、DenseNet-264、HarDNet-138s进行比较,无论参数数量、计算量和top-1精度如何,CSPResNeXt-50均达到了最好的结果。在10-crop test中,CSPResNeXt-50也优于Res2Net-50和Res2NeXt-50。
(四)、MS COCO对象检测
在目标检测任务中,作者针对三个目标场景:
(1)GPU实时:采用CSPResNeXt50 with PANet (SPP) ;
(2)移动GPU实时:采用CSPPeleeNet、CSPPeleeNet Reference和CSPDenseNet Reference与提出的EFM (SAM);
(3) CPU实时:采用CSPPeleeNet Reference和CSPDenseNet Reference, PRN。上述模型与现有方法的比较见下表。
如果与以30 ~ 100 fps运行的目标探测器相比,CSPResNeXt50和PANet (SPP)在AP、AP50和AP75上的性能最好。他们的检出率分别为38.4%、60.6%和41.6%。如果与最先进的LRF[在输入图像大小512×512, CSPResNeXt50 PANet (SPP)比ResNet101 LRF的0.7% AP, 1.5% AP50和1.1% AP75。如果与以100 ~ 200 fps运行的物体探测器相比,CSPPeleeNet与EFM (SAM)以相同的速度提高了12.1%的AP50,与CenterNet以相同的速度提高了4.1%。如果与ThunderNet、YOLOv3-tiny[和YOLOv3-tiny-PRN等非常快的目标探测器相比,建议的带有PRN的CSPDenseNetb参考是最快的。它可以达到400fps的帧率,比ThunderNet和SNet49还要快133 fps。此外,它在AP50上高出0.5%。如果与ThunderNet146相比,CSPPeleeNet Reference与PRN (3l)增加了19帧/秒的帧率,同时保持相同的AP50水平。
八、结果分析
(一)、计算瓶颈
上图显示了PeleeNet-YOLO、PeleeNet-PRN和提出的CSPPeleeNet-EFM各层的BLOPS。从中可以明显看出,PeleeNet-YOLO在头部集成特征金字塔时出现计算瓶颈。PeleeNet- prn的计算瓶颈出现在PeleeNet主干的过渡层上。对于提出的CSPPeleeNet-EFM,它可以平衡整体的计算瓶颈,减少PeleeNet主干44%的计算瓶颈,减少PeleeNet- yolo 80%的计算瓶颈。因此,CSPNet可以提供更高的硬件利用率。
(二)、Memory Traffic
上图显示了ResNeXt50和提议的CSPResNeXt50各层的大小。CSPResNeXt的CIO值(32.6M)低于原有ResNeXt50的CIO值(34.4M)。CSPResNeXt50删除了ResXBlock中的瓶颈层,并且保持了输入通道和输出通道的相同数量,当FLOPs固定时,它将具有最低的MAC和最有效的计算。低CIO和FLOPs使我们的CSPResNeXt50在计算方面超过普通ResNeXt50 22%
(三)、推理速度
实验基于NVIDIA Jetson TX2和Intel Core i9-9900K,利用OpenCV DNN模块对CPU的推理率进行了评估。不采用模型压缩或量化来进行公平比较。结果如下表
如果比较CPU上执行的推理速度,CSPDenseNetb Ref.-PRN比SNet49TunderNet、YOLOv3-tiny和YOLOv3-tiny- prn获得更高的AP50,在帧率方面,CSPDenseNetb Ref.-PRN也比上述三种模型分别提高了55 fps、48 fps和31 fps。另一方面,CSPPeleeNet Ref.-PRN (3l)达到了与SNet146-ThunderNet相同的精度水平,但在CPU上显著提高了20帧/秒的帧率.如果我们比较在移动GPU上执行推理的速度,我们提出的EFM将是一个很好的模型。所提出的EFM在生成特征金字塔时可以大大减少内存需求,所以它绝对有利于在内存带宽受限的移动环境下工作。例如,CSPPeleeNet Ref.-EFM (SAM)可以有比YOLOv3-tiny更高的帧率,其AP50比YOLOv3-tiny高11.5%,这是显著的升级。对于同样的CSPPeleeNet Ref. backbone,虽然EFM (SAM)在GTX 1080ti上比PRN (3l)慢62帧,但在Jetson TX2上达到41帧,比PRN (3l)快3帧,AP50增长4.6%。