Abstract
神经网络使得在像目标检测这样的计算机视觉任务中取得了SOTA的效果。然而,这巨大的成功十分依赖计算资源的消费,这阻碍了使用廉价芯片的用户使用先进的技术。本文我们提出了Cross Stage Partial Network(CSPNet),从网络结构的角度缓解之前的工作依赖大量前向计算的问题。我们将问题归结为网络优化过程中梯度重复的问题。我们提出的方法从网络从始至终的不同阶段通过考虑到梯度变化的特征图整合,在我们的实验中,模型在ImageNet数据集降低了20%的计算量,并取得了相同甚至更好的准确率,在MS COCO目标检测数据集上明显提升了SOTA方法在AP50情况下的表现。CSPNet很容易复现,且足够通用,可以容易的替换到基于ResNet,ResNeXt与DenseNet的结构中。源码见 https://github.com/WongKinYiu/CrossStagePartialNetworks。
1.Introduction
神经网络越来越深【7,39,11】,越来越宽【40】,展现出了巨大的潜力。然而,神经网络结构的拓展通常会带来许多额外的计算量,使得像目标检测这样的计算密集型任务变得大多数人都无法接受。由于现实世界的应用通常需要小设备上的快速推理,轻量计算逐渐受到更强的关注,给计算机视觉算法带来了严重的挑战。尽管有些方法是专门针对移动CPU设计的【9,31,8,33,43,24】,他们使用的深度可分离技术与例如边缘计算侧的应用专用集成电路等工业IC设计并不适配。本文中,我们研究例如ResNet、ResNeXt与DenseNet等SOTA中计算量哪部分比较大。我们还进一步开发了高效计算组件,是的提到的网络可以在不牺牲表现的前提下部署到CPU与GPU上。
本文我们介绍Cross Stage Partial Network(CSPNet)。设计CSPNet的目标是使得网络结构取得更丰富的梯度结合,同时降低大量的计算。这个目标是通过将base layer的特征图分解成两部分,然后利用提出的跨阶段策略将他们合并。通过这样,我们确认梯度传播的信息可以保持大的相关差异通过concatenation与transition步骤。此外,CSPNet可以极大的降低计算量,同时改进推理速度与精度,如图1中所示,提出的CSPNet-based目标检测方法处理了以下3个问题:
- 增强了CNN的学习能力。现有的CNN准确率在轻量化后显著的退化了,所以我们希望增强CNN的学习能力,这样它可以保持足够的准确率并轻量化。提出的CSPNet可以轻易应用在ResNet,ResNeXt与DenseNet。通过应用CSPNet到上述网络,计算量降低了10%-20%,但准确率效果比ResNet【7】,ResNeXt【39】,DenseNet【11】,HarDNet【1】,Elastic【36】与Res2Net【5】在ImageNet【2】数据集图片分类效果要好。
- 移除高计算量瓶颈。高计算瓶颈会导致推理进程更多的循环,或者一些计算模块会经常闲置。因此,我们希望能够平均的将计算量分布在CNN的不同层上,这样我们可以giao的提升每个计算单元的利用率,减少没必要的能量消耗。值得注意的是,提出的CSPNet使得PeleeNet【37】计算瓶颈降低了一半。此外,在基于MS COCO【18】数据集目标检测试验中,在基于YOLOV3方法我们提出的模型可以高效的降低80%的计算瓶颈。
- 降低显存消耗。动态随机存储器(DRAM)的芯片制造成本相当昂贵,它也占用许多空间。如果能够高效的降低显存消耗,那么就可以极大降低ASIC的花费。此外,小面积的芯片额可以用在众多边缘计算终端上。为了降低内存使用率,我们使用的cross-channel pooling【6】,来降低特征金字塔生成过程中的特征图大小。这样,提出的使用CSPNet的目标检测器可以与PeleeNet相比在特征金字塔生成阶段减少75%的内存使用率。
由于CSPNet可以提升CNN的学习能力,因此我们可以使用更小的模型来取得更好的效果。我们提出的模型在GTX 1080Ti卡,COCO数据集上达到50%的AP50,并达到109fps。由于CSPNet可以高效的明显降低内存流量,我们提出的方法可以达到40%的COCO AP50,52fps在Intel Core i9-9900K。此外,由于CSPNet可以显著的降低计算瓶颈,Exact Fusion Model(EFM)可以高效的降低小的内存带宽,我们出的方法可以达到42%的COCO AP50,49fps,在Nvidia Jetson TX2。
2.Related work
CNN结构设计。在ResNesNeXt【39】中,展示了基数比宽高的维度更有效。DenseNet【11】通过使用大量特征复用的策略可以显著的减少参数的数量与计算量。它将所有预测层的输出特征进行级联作为下一层的输入,这也可以认为是最大化基数的方法。SparseNet【46】将dense connection调整到指数空间,可以高效的改进擦护的利用率,因此得到更好的输出。【35】进一步解释了为什么高基数与稀疏连接可以改进网络的学习能力,通过梯度融合的概念,并提出了ResNet(RPN)。为了提升CNN的推理速度,【24】引入了四个设计原则并设计了ShuffleNet-v2。【1】提出了低内存交互CNN称为Harmonic DenseNet(HarDNet)与一种卷积IO的度量方法(CIO)用于近似评估DRAM的流量,与真实的DRAM流量成这里。
实时目标检测器。最有名的两个实时目标检测器为YOLOv3【29】与SSD【21】。基于SSD,LRF【38】,RFBNet【19】可以在GPU上取得SOTA的实时目标检测表现。当前,anchor-free的目标检测器【3,45,13,14,42】成为目标检测系统的主流。这类中两个模型是CenterNet【45】与CornerNet-Lite【14】,他们都表现出高效与低延时。对于CPU与移动GPU上的实时目标检测,基于SSD的Pelee【37】,基于YOLOv3的RPN【35】与基于Light-Head RCNN的ThunderNet【25】都在目标检测中取得了优秀的表现。
- Method
3.1 Cross Stage Partial Network
DenseNet。图2(a)展示【11】中提出的一阶段DenseNet的细节结构。每个阶段包含一个dense block与一个transition layer,每个dense block由k个dense layers组成。第i个dense layer的输出会与第i个dense layer的输入层组合,组成的结果会被作为i+1个dense layer的输入层。上述机制可由公式表示:
这里*表示卷积操作,表示的级联,与分别表示权重与第i个dense layer的输出。
如果用反向传播算法来更新权重,权重更新权重可以表达为:
这里f是权重更新函数,表示传播到第i个dense layer的权重。这会导致不同dense layers分别学习到重复的梯度信息。
Cross Stage Partial DenseNet。本文提出的单阶段CSPDenseNet结构如图2(b)所示。一阶段CSPDenseNet是由一个partial dense block与一个transition layer。在partial dense block中,每个阶段的base layer特征图都别从特征维度分为两个部分。所有与partial transition layer相关的表示如下:首先,dense layer的输出会经过一个transition layer。第二,transition layer的输出会与进行级联并经过另外一个transition layer,产生输出。CSPDenseNet的前向传播与权重更新的公式分别如式3与式4所示。
我们可以看到来自不同dense layers的梯度分别集成到了一起。换句话说,没有通过dense layer的特征图也分别被整合。对于用于权重更新的梯度信息来说,两边都没有包含属于另外一边的重复梯度信息。
整体来说,本文提出的CSPDenseNet保留了DenseNet特征复用的优点,但是同时通过截断梯度流防止梯度信息过度重复量。这个理念是通过分层特征融合策略与partial transition layer的使用实现的。
Partial Dense Block。设计partial dense block的目的是1)增加梯度传播路径:通过分割与合并策略,梯度路径的数量可以翻倍。由于cross-stage strategy,可以缓和使用concatenation直接复制特征图的劣势;2)平衡每层的计算量:通常,DenseNet中base layer的通道数比增长率要大得多。由于在partial dense block中只有一半dense layer操作与base layer通道相关,这样可以高效的减少接近一半的计算瓶颈;3)降低内存流量:假设dense block基础特征图的尺寸为wxhxc,增长率为d,总共有m个dense layer。那么,dense block的CIO是,partial dense block的CIO为。这里m与d通常比c更小,partial dense block可以在大多数情况下节省一半内存流量。
Partial Transition Layer。设计partial transition layers的目的是最大化梯度组合的差异性。Partial transition layer是分层特征融合机制,通过这种策略阶段梯度流从而防止不同层学习重复的梯度信息。这里我们设计了两种CSPDenseNet来展示这类梯度流的阶段是如何影响网络的学习能力的。3(c)与3(d)展示了两种不同的融合策略。CSP(先融合)意思是先将两部分产生的特征图级联在进行transition操作。如果使用这种策略,大量的梯度信息会被复用。CSP(后融合)策略dense block的输出会通过transition layer然后在与来自第一部分的特征进行级联。如果使用CSP(后融合)策略,梯度信息由于梯度流的阶段而不会复用。如果我们使用图3中第四种结构进行图像分类,相应的结果如图4所示。可以看出来如果在图像分类任务中使用CSP(后融合)策略,模型的计算量显著下降,但是top-1准确率仅下降了0.1%。另外一方面,CSP(前融合)策略确实帮助显著降低了计算小号,但是top-1准确率显著的下降了1.5%。通过使用跨通道分割与合并策略,我们可以高效的降低特征整合过程中的重复问题。通过图4种展示的结果,明显看出如果可以高效降低重复的梯度信息,网络的学习能力会极大的改进。
Apply CSPNet to Other Architecture。CSPNet还可以很容易的应用到ResNet与ResNeXt网络中,结构如图5所示。由于只有一半特征通道经过了Res(X)Blocks,就没有必要介绍bottleneck层了。这样在FLOPS是固定的前提下,使得理论上的内存访问消耗(MAC)达到下线。
3.2 Extact Fusion Model
准确的预测。我们提出了EFM来获取每个anchor的适当的视场(FoV),增强了阶段检测器的准确率。对于分割任务,由于像素级别标签通话才能够不包含全局信息,通常更倾向于使用大图像块从而获得更好的信息搜索【22】。然而,对于类似图像分类与目标检测任务,有些重要信息会由于从图像级别或者目标框级别的标签观察而丢失。【15】发现CNN在学习图像级别标签的时候会混淆信息,这也是为什么两阶段检测器会比一阶段检测器表现要好。
聚合特征金字塔。提出的EFM使得在原始特征金字塔上取得更好的聚合效果。EFM是基于YOLOv3【29】,为每个真实目标制定唯一一个bbox。每个真实bbox对应一个anchor box并超过IoU阈值。如果anchor box与网格的FoV等价,对于第s个尺度的昂个,对应的bbox会比s-1个小,比s+1个要大。因此,EFM从三个尺度聚合特征。
平衡计算。由于从特征金字塔级联的特征图数量很多,这引入了大量的内存与计算量花销。为了缓和这个问题,我们集合Maxout技术来抑制特征图。
4.Experiments
我们使用ILSVRC2012里的ImageNet图像分类数据集【2】来评估我们提出的CSPNet。除此之外,我们还是用MS COCO目标检测数据集【18】来区分提出的EFM。提出结构的细节会再附件中详细展示。
4.1Implementation Details
ImageNet。在ImageNet图像分类实验中,所有的超参例如训练steps,leaning rate schedule,optimizer,data augmentation等,我们都遵循【29】中的设置。对于基于ResNet或者基于ResNeXt模型,我们设置8000000训练steps。对于基于DenseNet模型,我们设置160000训练steps。我们将初始学习率设置为0.1,使用polynomial学习率衰减策略。Momentum与weight decay分别为0.9与0.005。所有结构都是用单GPU训练并统一使用128batchsize。最后,我们使用ILSVRC2012验证集来验证我们的方法。
MS COCO。在MS COCO目标检测始终,所有的超参设置按照【29】中的定义。我们总共训练500000训练steps。我们使用step decay learning rate调整策略,分别在400000steps与450000steps乘以0.1。Momentum与weight decay分别设置为0.9与0.0005。所有结构都是用单GOU来执行batchsize为64的多尺度训练。最后COCO dev-test用来验证我们方法。
4.2Ablation Experiments
CSPNet在ImageNet上的消融实验。在CSPNet上进行的消融实验中,我们还用PeleeNet【37】作为baseline,ImageNet来验证CSPNet的表现。我们在消融实验中使用不同的划分率γ与不同的特征融合策略。表1展示CSPNet的消融研究结果。表1中,SPeleeNet与PeleeNeXt是PeleeNet分别引入稀疏连接与Group convolution。对于CSP(先融合)与CSP(后融合),提出了两种策略来评估partial transition的效果。
从实验结果看,如果只在cross-stage partial dense block使用CSP(先融合)策略,结果会比SPeleeNet与PeleeNeXt效果稍好。然而,partial transition层设计用来减少冗余信息可以取得很好的表现。例如,当计算量下降21%,准确率仅下降了0.1%。则注意的是,当γ=0.25时,计算量降低了11%,准确率提升了0.1%。与PeleeNet baseline相比,我们提出的CSPPeleeNet得到了最佳表现,降低了13%计算量,同时将识别准确率提升了0.2%。如果我们将partial ratio调整为γ=0.25,我们可以提升准确率0.8%,同时降低3%的计算量。
EFM在MS COCO上的消融实验。下一步我们需要基于MS COCO数据进行基于MS COCO数据集的EFM消融实验。在这一系列实验中,我们对比了图6中的三种不同特征融合策略。我们选择了两种SOTA轻量级模型,PRN【35】与ThunderNet【25】,用于对比。PRN是他金字塔结构用于对比,包含上下文增强模块CEM与空间注意力模块SAM的ThunderNet是用于对比的全局融合结构。我们设计了全局融合模型GFM来与提出的EFM对比。GIoU【30】,SPP与SAM也用在了EFM上进行消融实验。所有实验结果列在在表2中,将CSPPeleeNet作为backbone。
如结果反映的,提出的EFM比GFM要慢2fps,但是AP与AP50显著分别提升了2.1%与2.4%。尽管引入的GIoU可以提升0.7%AP,然而AP50下降了2.7%。然而,对于边缘计算来说,真正关键的是目标的数量与位置而不是他们的坐标。因此,我们在随后的模型训练中不使用GIoU。SAM使用了注意力机制可以获得比使用FoV机制SPP更好的帧率与AP,所以我们使用EFM(SAM)作为最终结构。此外,尽管使用swish激活的CSPPeleeNet提升1%的AP,但是它的查表操作需要设计专门的硬件加速,我们最终也放弃使用swish 激活函数。
4.3ImageNet Image Classification
我们将提出的CSPNet同于ResNet10【7】,ResNeXt50【39】,PeleeNet【37】与DenseNet201-Elastic【36】,并与SOTA方法对比。实验结果如表3。
实验结果证明,无论是基于ResNet、基于ResNeXt还是基于DenseNet模型,当引入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%。
如果与SOTA轻量级模型EfficientNet-B0相比,尽管它可以在batchsize为2048的时候达到76.8%的准确率,当实验环境与我们的一致只有一块GPU的时候,EfficentNet-B0只能达到70%的准确率。实际上,EfficentNet-B0中的swish激活函数与SEblock在移动GPU上并不高效。相同的结论在发展EfficientNet-EdgeTPU的时候也得到了相似的分析结果。
这里,为了展示CSPNet的学习能力,我们在CSPPeleeNet中引入了swish与SE,与EfficientNet-B0做了对比。在这个实验中,SECSPPeleeNet-swish降低了3%的计算量,提升了1.1%的top-1准确率。
提出的CSPResNeXt-50与ResNeXt-50【39】、ResNet-152【7】、DenseNet-264【11】与HarDNet-138s【1】相比,CSPResNet-50无论是在参数质量、计算量、top-1准确率都取得了最佳的结果。在10-crop实验中,CSPResNeXt-50也比Res2Net-50【5】和Res2NeXt-50【5】表现好。
4.4 MS COCO Object Detection
在目标检测任务中,我们聚焦在三个目标场景:(1)实时GPU:我们将CSPResNeXt50适配PANet(SPP)【20】;(2)实时移动GPU:我们将CSPPeleeNet、CSPPeleeNet Reference与CSPDenseNet Reference与提出的EFM(SAM)适配;(3)实时CPU:我们将CSPPeeleeNet Reference与CSPDenseNet Reference与RPN适配【35】。以上模型与SOTA方法如表4。关于CPU与移动GPU上速度的对比分析会在下一节进行。
如果对比帧率在30-100的目标检测器,CSPResNeXt50与PANet(SPP)的组合在AP、AP50、AP75上取得了最佳的表现。他们分别得到了38.4%,60.6%,41.6%的检测率。如果与SOTA的LRF【38】在输入图片尺寸为512*512的条件下对比,CSPResNeX50与PANet(SPP)的组合比ResNet101与LRF的组合好了0.7%AP,1.5%AP50,1.1%AP75。如果与帧率在100~200的目标检测器相比,CSPPeleeNet与EFM(SAM)提升了12.1%的AP50,且速度与Pelee【37】一致,提升了4.1%【37】并取得与CenterNet【45】相同的速度。
如果与特快目标检测器例如ThunderNet【25】,YOLOv3-tiny【29】与YOLOv3-tiny-PRN【35】,提出的CSPDenseNETenseNetb Reference与PRN的组合最快。可以达到400fps,比基于SNet49de TunderNet快144fps。此外,AP50高0.5%。如果与ThunderNet146相比,CSPPeleeNet Reference与PRN【31】在保持相同级别AP50的基础上,提升了19fps。
4.5 Analysis
计算瓶颈。图7展示了PeleeNet-YOLO,PeleeNet-PRNeleeNet-PRN与提出的CSPPeleeNet-EFM每一层的BLOPS。图7可以观察到,PeleeNet-YOLO的计算瓶颈是在特征金字塔集成的时候出现的。PeleeNet-PRN的计算瓶颈是PeleeNet骨干网络里阿尼额transition层的时候出现。对于提出的 CSPPeleeNet-EFM,它可以均衡整体的计算瓶颈,降低了PeleeNet骨干网络44%的计算瓶颈,PeleeNet-YOLO80%的计算瓶颈。因此,我们可以说提出的CSPNet可以提供更高的硬件使用率。
内存通信量。图8展示了ResNeXt50与提出的CSPResNeXt50每层的尺寸。提出的CSPResNeXt50(32.6M)的CIO比原始的ResNeXt50(34.4M)要低。此外,我们的CSPResNeXt50移除了ResXBlock的瓶颈层并且保持了相同的输入与输出通道,如【24】所示当FLOPs固定的时候MAC最低且计算最高效。低CIO与FLOPS是的我们CSPResNeXt50在计算量上比ResNeXt50好了22%。
推理速度。我们进一步评估提出来的方法是否可以作为在移动GPU或者CPU上部署的实时检测器。我们的实验室基于NVIDIA Jetson TX2与Intel Core i9-9900K,CPU的推理是在OpenCV DNN上评估的。为了对比公平,我们没有进行模型压缩与量化。结果如表5所示。
如果我们对比CPU上的推理速度, CSPDenseNetb Ref.-PRN取得了比 SNet49-
TunderNet,YOLOv3-tiny与YOLOv3-tiny-PRN更高的AP50,并且比三个模型的帧率分别快了55fps,48fps与31fps。此外,CSPPeleeNet Ref.-PRN(31)与SNet146-ThunderNet取得了类似的准确率但是在CPU上提升了20fps帧率。
如果我们对比在移动GPU上的推理速度,我们提出的EFM模型是个比较好的选择。因为我们提出的EFM可以极大的减少生成特征金字塔时候的内存消耗,它绝对对内存带宽限制移动环境有效。举例来说,CSPPeleeNet Ref.-EFM (SAM)可以取得比YOLOv3-tiny更高的帧率,AP50比YOLOv3-tiny高11.5%,这是一个显著的提升。对于相同的 CSPPeleeNet Ref.骨干网络,尽管在GTX1080Ti上EFM (SAM)比PRN(31)要慢62fps,但是在Jetson TX2上达到了41fps,比PRN(31)快3fps,且AP50高4.6%。
5.Conclusion
我们提出的CSPNet使得类似ResNet,ResNeXt与DenseNet这些SOTA的方法在移动GPU或者CPU上变得轻量化。其中一个主要贡献是我们认识到了梯度信息冗余的问题带来了低效的优化与高消耗的推理计算。我们提出了利用跨阶段特征融合策略与梯度流阶段的方法来增强学习不同层特征的多样性。此外,我们提出了EFM利用Maxout操作来压缩从特征金字塔生成的特征,这样大力减少了需要的内存带宽并且因此推理别的足够高效以便视频边缘计算设备。实验表明,我们真是了提出的CSPNet与EFM组合极大的提升了目标检测任务无论是在移动GPU还是CPU上的推理准确率与帧率。