CSPNet

YOLOv4中的backbone使用的是CSPNET,还是得到了AlexAB大神的认可的。同时,轻量化以及神经网络表达能力一直是研究的热点,本文也是在此范畴。因此本文对其原始论文进行解读。如有任何问题或建议,请在文末留言。

神经网络使用最先进的方法,在对象检测之类的计算机视觉任务上实现令人难以置信的结果。 然而,这种成功极大地依赖于昂贵的计算资源,这不便于人们在廉价设备使用最先进的技术。 在本文中,我们提出了跨阶段局部网络(CSPNet:Cross Stage Partial Network),以缓解以前需要大量推理计算的问题。 我们将问题归因于网络优化中的重复梯度信息。 The proposed networks respect the variability of the gradients by integrating feature maps from the beginning and the end of a network stage,在我们的实验中,该过程将ImageNet数据集上的计算减少了20%,具有获得了更高的精度,并且性能明显优于状态 MS COCO对象检测数据集中的AP50方面的最先进方法。 CSPNet易于实施,并且通用性足以应付基于ResNet,ResNeXt和DenseNet等网络结构。项目源代码位于http://github.com/WongKinYiu/CrossStagePartialNetworks

1. 背景介绍

当神经网络变得更深[7,39,11]和更宽[40]时,它显示出特别强大的功能。 但是,扩大神经网络规模通常会带来更多的计算量,这使大多数人难以承受诸如对象检测之类的计算量繁重的任务。 轻量级计算已逐渐受到越来越多的关注,因为现实世界中的应用程序通常需要在小型设备上进行,这对计算机视觉算法提出了严峻的挑战。 尽管某些方法是专门为移动CPU设计的,但是它们采用的深度可分离卷积技术与工业IC设计(例如专用集成电路(ASIC))不兼容。 在这项工作中,我们研究了诸如ResNet,ResNeXt和DenseNet等最先进方法的计算开销。 我们将提出的计算高效的网络组件部署到CPU和GPU设备中,不会导致性能丢失。

在这项研究中,我们介绍了跨阶段局部网络(CSPNet)。 设计CSPNet的主要目的是使该体系结构能够实现更丰富的梯度组合信息,同时减少计算量。 通过将基础层的特征图划分为两个部分,然后通过提出的跨阶段层次结构将它们合并,可以实现此目标。 我们的主要概念是通过分割梯度流,使梯度流通过不同的网络路径传播。 这样,我们已经确认,通过切换串联和过渡步骤,传播的梯度信息可以具有较大的相关性差异。 此外,CSPNet可以大大减少计算量,并提高推理速度和准确性,具体情况如图1所示。提出的基于CSPNet的对象检测器解决了以下三个问题:

  • 增强CNN的学习能力。
  • 移除计算瓶颈。
  • 减少内存开销。

2.论文方法

2.1 Cross Stage Partial Network

DenseNet图二详细的展示了DenseNet的网络结构。DenseNet的每个阶段均包含一个dense block(密集连接层)和transition layer(过渡层),同时,每个dense block由K个密集层连接。第 [公式] 个密集层的输出将会同第[公式]个密集层的输入相连接,同时拼接后的输出结果作为[公式]个密集层的输入。等式表示如下所示:

[公式]
[公式]
[公式]
[公式]

其中的[公式]表示卷积操作,同时[公式]表示对[公式]拼接。[公式][公式]代表[公式]密集层的权重和输入。如果使用反向传播算法更新权重,则权重更新方程可写为:

[公式]
[公式]
[公式]

[公式]

[公式]

其中f是权重更新的函数,[公式]表示传播到第[公式]个密集层的梯度。 我们发现大量重复的梯度信息被用来更新不同密集层的权重。 这将导致不同的密集层重复学习复制的梯度信息。

跨阶段局部DenseNet(示意图如下图3 (b)所示)。 我们提出的CSPDenseNet的一级结构如图2(b)所示。CSPDenseNet的一个阶段由部分密集块和过渡层组成。 在部分密集块中,通过通道[公式]将各阶段中基础层的特征图分为两部分。 在[公式][公式]之间,前者直接链接到dense block的末尾,而后者将通过密集块。 涉及的所有步骤如下:首先,密集层的输出[公式]将经历过渡层。 其次,此过渡层的输出[公式]将与[公式]拼接并经历另一个过渡层,然后生成输出[公式]。 CSPDenseNet的前馈传递和权重更新的方程式分别显示在方程式3和4中。

[公式]
[公式]
[公式]

[公式]

我们可以看到,来自密集层的梯度是分别计算的。 另一方面,未穿过密集层的特征图[公式]也被计算。 关于用于更新权重的梯度信息,两条路径中都不包含属于另一方的重复的梯度信息。

总体而言,文中提出的CSPDenseNet保留了DenseNet的特征重用特性的优点,但同时通过截断梯度流,防止了过多的梯度信息重复。 通过设计分层特征融合策略来实现此思想,并将其用于部分过渡层。

局部密集块。 设计局部密集块的目的是为了:1.)增加梯度路径:通过拆分和合并策略,梯度路径的数量可以增加一倍。 由于采用了跨阶段策略,因此可以缓解使用显式特征映射副本进行级联而造成的不利影响。 2.)平衡每层的计算量:通常,DenseNet的基础层中的通道数远大于增长率。 由于部分密集块中的密集层操作所涉及的基础层通道仅占原始数目的一半,因此它可以有效解决近一半的计算瓶颈; 3)减少内存流量:假设DenseNet中一个密集块的基本特征图大小为[公式],增长率为[公式],总共有[公式]个密集层。 那么,那个密集块的CIO为[公式],部分密集块的CIO为[公式]。 虽然m和d通常远小于c,但部分密集的块最多可以节省网络一半的内存流量开销。

局部转移层。设计局部过渡层的目的是使梯度组合的差异最大化。 局部3(c)过渡层是分层特征融合机制,它使用截断梯度流的策略来防止不同的层学习重复的梯度信息。 在这里,我们设计了CSPDenseNet的两个变体,以显示这种梯度流截断如何影响网络的学习能力。 图3(c)和[公式]示出了两种不同的融合策略。 先融合)是指将由两部分生成的特征图连接起来,然后进行过渡操作。 如果采用这种策略,大量的梯度信息将被重用。 对于后融合)策略,密集块的输出将通过过渡层,然后与来自第1部分的特征图进行级联。如果使用CSP(最后融合)策略,则梯度信息 由于梯度流将被截断,因此将不会重用。 如果我们使用图3中所示的四种架构进行图像分类,则相应的结果如图4所示。可以看出,如果采用后融合策略进行图像分类,则计算成本将大大降低, 但top-1的准确性仅下降0.1%。 另一方面,先融合策略确实有助于显着降低计算成本,但是top-1的准确性显着降低了1.5%。 通过跨阶段使用拆分和合并策略,我们能够有效地减少信息集成过程中重复的可能性。 从图4所示的结果来看,很明显,如果可以有效地减少重复梯度信息,则网络的学习能力将大大提高。

fusion first 会损失大量的梯度信息是因为 局部密集块 一侧没有过渡层,生成的特征缺乏融合,导致梯度损失。

fusion last 稠密块的输出特征与原始特征进行连接。没有融合操作,所以两部分梯度无法共享,造成梯度流被截断。

将CSPNet应用到其他网络结构上。CSPNet也可以轻松地应用于ResNet和ResNeXt,其架构如图5所示。由于只有一半的功能通道通过[公式],也没有必要去介绍bottleneck layer了。当固定浮点运算(FLOP)时,这使理论上的内存访问成本(MAC)下限成为可能。

3. 实验部分

CSPNet在ImageNet上不同策略的对比。

CSPNet与其他典型的state of the art方法在ImageNet上的效果对比。

CSPNet作为Backbone时,与其他不同网络在COCO目标检测上的对比。

4. 未完待续

各位小伙伴们,不妨给点赞评论一下好不好?在此谢过各位了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值