CSPNET:一种能够增强CNN学习能力的新骨干网络
0.论文摘要
神经网络在计算机视觉任务(如目标检测)中实现了最先进的方法,取得了令人瞩目的成果。然而,这种成功在很大程度上依赖于昂贵的计算资源,这使得使用廉价设备的人们难以享受到这一先进技术。在本文中,我们提出了跨阶段部分网络(CSPNet),从网络架构的角度缓解了以往工作对大量推理计算的需求。我们将这一问题归因于网络优化过程中梯度信息的重复。所提出的网络通过整合网络阶段开始和结束时的特征图,尊重了梯度的变异性。在我们的实验中,该方法在ImageNet数据集上减少了20%的计算量,同时保持了同等甚至更高的准确率,并且在MS COCO目标检测数据集上的AP50指标显著优于最先进的方法。CSPNet易于实现,并且具有足够的通用性,能够应对基于ResNet、ResNeXt和DenseNet的架构。
1.引言
神经网络在更深[7, 39, 11]和更宽[40]时表现出特别强大的能力。然而,扩展神经网络架构通常会带来更多的计算量,这使得诸如目标检测等计算密集型任务对大多数人来说变得难以承受。由于实际应用通常需要在小型设备上实现较短的推理时间,轻量级计算逐渐受到更多关注,这对计算机视觉算法提出了严峻挑战。尽管一些方法专门为移动CPU设计[9, 31, 8, 33, 43, 24],但它们采用的深度可分离卷积技术与工业IC设计(如用于边缘计算系统的专用集成电路ASIC)不兼容。在本研究中,我们探讨了ResNet、ResNeXt和DenseNet等最先进方法中的计算负担。我们进一步开发了计算高效的组件,使上述网络能够在CPU和移动GPU上部署而不牺牲性能。
在本研究中,我们提出了跨阶段部分网络(CSPNet)。设计CSPNet的主要目的是在减少计算量的同时,使该架构能够实现更丰富的梯度组合。这一目标通过将基础层的特征图分为两部分,然后通过提出的跨阶段层次结构进行合并来实现。我们的核心概念是通过分割梯度流,使梯度流通过不同的网络路径传播。通过这种方式,我们确认了通过切换连接和过渡步骤,传播的梯度信息可以具有较大的相关性差异。此外,CSPNet可以大大减少计算量,并提高推理速度和准确性,如图1所示。基于CSPNet的目标检测器解决了以下三个问题:
- 增强CNN的学习能力 现有的CNN在轻量化后准确率大幅下降,因此我们希望增强CNN的学习能力,使其在轻量化的同时保持足够的准确率。提出的CSPNet可以轻松应用于ResNet、ResNeXt和DenseNet。在应用CSPNet后,上述网络的计算量可以减少10%到20%,但在ImageNet上进行图像分类任务时,其准确率优于ResNet [7]、ResNeXt [39]、DenseNet [11]、HarDNet [1]、Elastic [36]和Res2Net [5]。
- 消除计算瓶颈 过高的计算瓶颈会导致推理过程需要更多的周期完成,或者某些计算单元经常处于空闲状态。因此,我们希望能够在CNN的每一层均匀分配计算量,从而有效提升每个计算单元的利用率,减少不必要的能耗。值得注意的是,所提出的CSPNet将PeleeNet [37] 的计算瓶颈减少了一半。此外,在基于MS COCO [18] 数据集的目标检测实验中,我们提出的模型在基于YOLOv3的模型上测试时,能够有效减少80%的计算瓶颈。
- 降低内存成本 动态随机存取存储器(DRAM)的晶圆制造成本非常高昂,并且占用大量空间。如果能有效降低内存成本,将大大降低专用集成电路(ASIC)的成本。此外,小面积晶圆可用于各种边缘计算设备。在减少内存使用方面,我们采用跨通道池化[6]技术,在生成特征金字塔的过程中压缩特征图。通过这种方式,所提出的CSPNet与目标检测器在生成特征金字塔时,可以将PeleeNet的内存使用量减少75%。
2.相关工作
CNN架构设计。在ResNeXt [39]中,Xie等人首次证明了基数(cardinality)比宽度和深度的维度更为有效。DenseNet [11]由于采用了大量重用特征的策略,能够显著减少参数数量和计算量。它将所有前序层的输出特征拼接作为下一层的输入,这可以被视为最大化基数的方式。SparseNet [46]通过将密集连接调整为指数间隔的连接,有效提高了参数利用率,从而带来更好的结果。Wang等人进一步通过梯度组合的概念解释了为什么高基数和稀疏连接能够提升网络的学习能力,并开发了部分ResNet(PRN)[35]。为了提高CNN的推理速度,Ma等人[24]提出了四条设计准则,并设计了ShuffleNet-v2。Chao等人[1]提出了一种低内存流量的CNN,称为Harmonic DenseNet(HarDNet),并提出了一种度量卷积输入/输出(CIO),该度量是对DRAM流量的近似,与实际DRAM流量测量成正比。
实时目标检测器。最著名的两种实时目标检测器是YOLOv3 [29] 和 SSD [21]。基于SSD,LRF [38] 和 RFBNet [19] 可以在GPU上实现最先进的实时目标检测性能。最近,基于无锚点的目标检测器 [3, 45, 13, 14, 42] 已成为主流的目标检测系统。这类目标检测器中的两个代表是CenterNet [45] 和 CornerNet-Lite [14],它们在效率和效果方面都表现非常出色。对于在CPU或移动GPU上进行实时目标检测,基于SSD的Pelee [37]、基于YOLOv3的PRN [35] 以及基于Light-Head RCNN [17] 的ThunderNet [25] 都在目标检测中取得了优异的性能。
3.方法
3.1 跨阶段部分网络
DenseNet。图2(a)展示了Huang等人[11]提出的DenseNet中一个阶段的详细结构。DenseNet的每个阶段包含一个密集块和一个过渡层,每个密集块由k个密集层组成。第i个密集层的输出将与第i个密集层的输入进行拼接,拼接后的结果将成为第(i + 1)个密集层的输入。上述机制的公式可以表示为:
图2:(a) DenseNet 和 (b) 我们提出的跨阶段部分密集网络(CSPDenseNet)的示意图。CSPNet 将基础层的特征图分为两部分,一部分将通过密集块和过渡层;另一部分随后与传输的特征图结合,进入下一阶段。
其中 ∗ 表示卷积运算符,[x0, x1, …] 表示将 x0, x1, … 进行拼接,wi 和 xi 分别是第 i 个全连接层的权重和输出。
如果使用反向传播算法来更新权重,权重更新的方程可以写成:
其中,f 是权重更新的函数,gi 表示传播到第 i 个密集层的梯度。我们可以发现,大量的梯度信息被重复用于更新不同密集层的权重。这将导致不同的密集层反复学习复制的梯度信息。
跨阶段部分密集网络(CSPDenseNet)。图2(b)展示了所提出的CSPDenseNet的一个阶段的架构。CSPDenseNet的一个阶段由部分密集块和部分过渡层组成。在部分密集块中,一个阶段中基础层的特征图通过通道被分割为两部分,即x0 = [x′0, x′′0]。在x′′0和x′0之间,前者直接连接到该阶段的末尾,而后者将通过一个密集块。部分过渡层中涉及的所有步骤如下:首先,密集层的输出[x′′0, x1, …, xk]将经过一个过渡层。其次,该过渡层的输出xT将与x′′0进行拼接,并经过另一个过渡层,最终生成输出xU。CSPDenseNet的前向传播和权重更新公式分别在公式3和公式4中给出。
图2:(a) DenseNet 和 (b) 我们提出的跨阶段部分密集网络(CSPDenseNet)的示意图。CSPNet 将基础层的特征图分为两部分,一部分将通过密集块和过渡层;另一部分随后与传输的特征图结合,进入下一阶段。
我们可以看到,来自密集层的梯度是分别进行整合的。另一方面,未经过密集层的特征图x′0也是单独进行整合的。至于用于更新权重的梯度信息,双方都不包含属于对方的重复梯度信息。
总体而言,所提出的CSPDenseNet保留了DenseNet特征重用特性的优势,同时通过截断梯度流,避免了过多的重复梯度信息。这一思想通过设计一种分层特征融合策略并在部分过渡层中应用得以实现。
部分密集块。设计部分密集块的目的是:1)增加梯度路径:通过拆分和合并策略,梯度路径的数量可以翻倍。由于跨阶段策略,可以缓解因使用显式特征图复制进行连接而带来的缺点;2)平衡每层的计算量:通常,DenseNet基础层的通道数远大于增长率。由于部分密集块中参与密集层操作的基础层通道数仅为原始数量的一半,因此可以有效解决近一半的计算瓶颈;3)减少内存流量:假设DenseNet中密集块的基础特征图大小为w × h × c,增长率为d,总共有m个密集层。那么,该密集块的CIO为(c × m) + ((m² + m) × d)/2,而部分密集块的CIO为((c × m) + (m² + m) × d)/2。由于m和d通常远小于c,部分密集块最多能够节省网络一半的内存流量。
部分过渡层。设计部分过渡层的目的是最大化梯度组合的差异。部分过渡层是一种层次化的特征融合机制,它通过截断梯度流的策略来防止不同层学习重复的梯度信息。这里我们设计了两种CSPDenseNet的变体,以展示这种梯度流截断如何影响