CSPNet论文笔记

    论文:CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN. Chien-Yao Wang,Hong-Yuan Mark Liao,I-Hau Yeh...


摘要

    NN在CV领域取得了很大的成功,然而这个成功依赖于巨大计算量,不利于在移动设备上部署。本文提出了Cross Stage Partial Network(CSPNet)来解决这个问题。这里认为当前深度神经网络计算量大的原因是网络优化时重复计算梯度信息,CSPNet通过直接连接网络头部和尾部的特征图来增加梯度的多样性。实验中在ImageNet数据集上可以减少20%的计算量,精度甚至更高。在MS COCO目标检测数据集上超过了SOTA方法。CSPNet很容易实现,可以替代各种架构中的ResNet、ResNeXt和DenseNet,代码开源: https://github.com/WongKinYiu/CrossStagePartialNetworks   


引言

    随着NN的发展,所需的计算量越来越大,因此轻量级模型越来越受到关注。本文研究了SOTA模型:ResNet、ResNeXt、DenseNet的计算代价,然后设计了一些高效的组件,提出了CSPNet。CSPNet在减小计算量的同时增加了更多的梯度信息通路,将bese层的特征图划分为两个部分,然后通过跨阶段层级后将其合并。CSPNet的主要思想是通过对梯度流进行分割使其通过不同网络通路进行传播,这种方法表明通过 switching concatenation和transition steps,传播的梯度信息可以有很大的相关差异。CSPNet不仅计算量减小,速度提高,而且精度更高,如下图所示:

图片1.jpg

    本文提出的基于CSPNet的目标检测器,特点如下:

    1)增强了CNNs的学习能力。通常将网络轻量化后精度会下降,而CSPNet能保持网络的学习能力。CSPNet可以应用在ResNet、ResNeXt、DenseNet上,计算量减少了10%-20%,但是精度反而提高。

    2)去除了计算瓶颈。过高的计算瓶颈( bottlenecks )会导致更多的周期来完成推理过程,或者某些运算单元常常会闲置。因此CSPNet希望在CNN的每一层都能均匀地分配计算量,从而有效地提高每个计算单元的利用率,从而减少不必要的能量消耗。

    3)减小内存占用。为了减小内存占用,CSPNet在特征金字塔生成时采用跨通道池化来压缩特征图。

因此CSPNet能以更小的模型达到更高的精度,能在GTX 1080ti上以109fps的速度达到50% COCO AP50。



CSPNet

DenseNet:DenseNet由多个Dense Block和Transition layer组成,如下图左所示:

图片2.jpg

    每个block有k层,第i层的输出将与第i层的输入进行拼接,拼接后的结果将作为i+1层的输入,公式表示如下:

图片3.jpg

    其中*表示卷积运算,[]表示拼接操作。如果使用反向传播算法来更新权重,则权重更新的方程可以写成:

图片4.jpg

    其中f是权重更新的函数,gi表示传播到第i层的梯度。可以发现更新时大量梯度信息被重用,这导致不同层重复学习复制的梯度信息。

Cross Stage Partial DenseNet:如图1(b)所示,CSPNet的每个阶段由一个partial dense block和一个partial transition layer组成。在partial dense block中,base layer的特征图根据通道被划分为两个部分x0=[x0’,x0’’]。x0’直接连接到阶段的尾部,而x0’’则穿过一个dense block。在partial transition layer中,第一个transition layer以所有层的输出[x0’’,x1,...,xk]拼接作为输入,得到输出xT,然后拼接[x0’,xT]作为第二个transition层的输入,得到最终的输出xU,整个过程如下所示:

图片5.jpg

    可以看到,dense block中各层的梯度是分开集成的,而且没有经过dense block的x0’也是单独集成的。因此对于更新权重的梯度信息来说,两边都不包含属于另一边的重复的梯度信息。总体而言,本文提出的CSPDenseNet保留了DenseNet的特征重用特性,但同时通过截断梯度流来防止过多的重复梯度信息。该思想通过设计层次化的特征融合策略来实现,并应用于部分过渡层。

Partial Dense Block:设计partial dense blocks的出发点:

    1)增加梯度路径。通过split and merge策略,梯度通路的数量翻倍。cross-stage策略减少了由于显式特征图拷贝拼接带来的缺点。

    2)平衡各层计算量。DenseNet中base layer的通道数大于增长率。而这里base layer的通道被一分为二,故可以解决一半的计算瓶颈。

    3)减少内存占用。若DenseNet中base layer的大小为wxhxc,增长率为d,共m层,则该dense block的CIO为(cxm)+(m^2+m)xd/2。而对应的partial dense block是((cxm)+(m^2+m)xd)/2。通常m和d小于c,则partial dense block能节省一半的内存占用。

Partial Transition Layer:设计partial transition layers的出发点是最大化梯度组成的差异。partial transition layer是一个分层的特征融合机制,采用截断梯度流的策略来防止不同层学习重复的梯度信息。除了原始版本外,这里还设计了其它两个CSPDenseNet的变体来展示梯度流截断是如何影响网络的学习能力的。如Figure 3(c)和Figure 3(d)是两种不同的融合策略。如果采用Figure 3(c)这种策略,那么大量的梯度信息将被重用;若采用Figure 3(c)这种策略,则由于梯度流被截断,那么梯度信息将不会被重用。

图片6.jpg

    采用fusion first和fusion last的结果对比如下,可以看到fusion last在精度仅下降0.1%的情况下计算量大幅减小。而使用split and merge策略的情况,不仅计算量下降,而且精度也得到了提高。

图片7.jpg

CSPNet与其它架构结合:CSPNet可与ResNet、ResNeXt进行结合,架构如下:

图片8.jpg

    因为仅仅一半的特征通道穿过Res(X)Blocks,所以不需要引入bottleneck layer。而且使得原本的模型所需的计算量和内存更低。


Exact Fusion Model

EFM:本文提出EFM架构,可以对每个anchor获得合适的Field of View(FoV),可以提高单阶段目标检测系统的精度。

图片9.jpg

    上图是当前常用三种Backbone架构:

    第一个如(a)图所示,是最常见的FPN,在YOLOv3中使用。(ps: YOLOv3中的FPN跟原始FPN不同,其融合的方式是concate)。

    第二个如(b)图所示,是ThunderNet中提出的GFM, 之前的文章中有详解,直接将多个不同分辨率的特征进行融合,具体融合方式是相加。

    第三个如(c)图所示,是EFM,也就是本文提出的融合方式,没两层之间特征进行融合,并且在原有FPN基础上再进行一次bottom-up的融合方式。


实验

1.CSPNet的消融实验

图片10.jpg

2.EFM的消融实验

图片11.jpg

3.分类性能比较

图片12.jpg

4.目标检测性能比较

图片13.jpg





上一篇:
下一篇:

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于