CSPNet

论文:https://arxiv.org/pdf/1911.11929.pdf
代码:https://github.com/WongKinYiu/CrossStagePartialNetworks

1 核心思想

CSPNet的核心思想有两部分,一个是将feature map分成两部分进行前向计算,一部分经过bottleneck的操作,另一部分直接传递到下一层,这样做的好处是减少了梯度的重复计算。

本文的第二创新点是提出了一个新的多尺度特征融合方法,称之为EFM。

1.1 CSPNet

CSPNet是Cross Stage Partial Network的缩写。

DenseNet:Fig. 2(a) 是DenseNet中一个stage的详细结构。
在这里插入图片描述
DenseNet的每个阶段都包含一个Dense Block和一个Transition层,Dense Block又是由多个Dense层组成的。第i个dense层的输出会和该层的输入concatenate之后作为下一层的输入。可以表示为:
在这里插入图片描述

在反向传播过程中,梯度更新可以表示成:
在这里插入图片描述
上式中, f f f是权重更新函数, g i g_i gi表示传递到第i个dense层的梯度。个人认为这个公式写的有问题,应该是:
w 1 ′ = f ( w 1 , g 2 , g 3 , g 4 , ⋯   , g k ) w 2 ′ = f ( w 2 , g 3 , g 4 , ⋯   , g k ) w 3 ′ = f ( w 3 , g 4 , ⋯   , g k ) ⋯ w k ′ = f ( w k , g k ) w_{1^{'}} = f(w_1,g_2,g_3,g_4,\cdots,g_k)\\ w_{2^{'}} = f(w_2,g_3,g_4,\cdots,g_k)\\ w_{3^{'}} = f(w_3,g_4,\cdots,g_k)\\ \cdots \\ w_{k^{'}} = f(w_k,g_k) w1=f(w1,g2,g3,g4,,gk)w2=f(w2,g3,g4,,gk)w3=f(w3,g4,,gk)wk=f(wk,gk)

结论是一致的,不同的dense layer之间存在了大量的梯度复用。

CSP

CSP的思路如Fig. 2(b)所示,CSPDenseNet由一个partial dense block和一个partial transition layer组成。也就是把该block的原始输入分为两部分 [ x 0 ′ , x 0 ′ ′ ] [x^{'}_0,x^{''}_0] [x0,x0] x 0 ′ x^{'}_0 x0直接传递到block的最后, x 0 ′ ′ x^{''}_0 x0则在dense block中按层依序传播。最后得到的输出 [ x 0 ′ ′ , x 1 , x 2 , ⋯   , x k ] [x^{''}_0,x_1,x_2,\cdots,x_k] [x0,x1,x2,,xk],会送入一个transition layer得到输出 x T x_T xT,然后将 x 0 ′ x^{'}_0 x0 x T x_T xT拼接得到 [ x 0 ′ , x T ] [x^{'}_0,x_T] [x0,xT],再经过另一个transition层得到输出 x U x_U xU。计算过程可以表示成:
在这里插入图片描述
这样做, x 0 ′ x_0^{'} x0没有经过Dense block的前向计算过程,计算量有所减小。同时,反向传播时,虽然依然存在梯度复用,但是因为只有 x 0 ′ ′ x_0^{''} x0参与了Dense block的计算过程,反向传播的梯度的数据量也有所减少。总之,CSP的思想就是把输入分成两部分,一部分直接传递到最后,一部分按照原有顺序传递到最后,最后前向计算和反向梯度传播的计算量相比不分成两部分都有所减少,因此大大减少了整个过程的计算量。CSP全称是cross stage partial,也就是指 x 0 ′ x_0^{'} x0这一partial,跨越多个Dense layer直接传递到后面。

partial dense block
使用partial dense block的好处有:

  • double梯度传输的路径:一条路是 x 0 ′ ′ x_0^{''} x0流经的dense block,另一条路是 x 0 ′ x_0^{'} x0流经的直连通道;
  • 平衡每一层的计算量:dense net中base layer的channel数量远大于dense block中channel数量的增加速度,通过只让 x 0 ′ ′ x_0^{''} x0流经dense block这一处理方式,几乎节约了一般的计算量;
  • 减少内存访问,没看到论文中的公式是如何计算的,按照作者的说法大概节约了一般的内存访问。

partial Transition layer
partial Transition layer的目的是最大化要结合的两份梯度的差异。作者设计了三种特征融合策略,分别是CSP(fusion first)、CSP(fusion last)和CSP使用的方式。三种情况的对比如Fig. 3所示:

在这里插入图片描述三种方式的对比效果如下图所示:
在这里插入图片描述
CSP(fusion first)方式是先将 x 0 ′ x_0^{'} x0 x 0 ′ ′ x_0^{''} x0经过dense block后的输出concatenate处理,然后再经过Transition层;CSP(fusion last)方式是先将 x 0 ′ ′ x_0^{''} x0经过dense block后的输出经过Transition层,再将Transition后的输出和 x 0 ′ x_0^{'} x0进行concatenate处理;最终作者采用的方式是先将 x 0 ′ ′ x_0^{''} x0经过dense block后的输出经过Transition层,再将Transition后的输出和 x 0 ′ x_0^{'} x0进行concatenate处理,处理后的输出再经过另一个Transition层得到最终的输出。理论上不理解为什么要这么做,只是根据Fig. 4作者给出了这样做在减少计算量的同时不会损失模型的分类准确率。

1.2 EFM

EFM,Exact Fusion Model。完成多尺度的特征融合,作者对比了三种特征融合方式,如Fig. 6所示:

在这里插入图片描述
第一种是FPN;

第二种是GFM,直接将多个不同分辨率的特征进行融合,具体融合方式是相加。

第三中是作者提出的EFM,每相邻两层之间进行特征融合,然后在FPN的基础上再添加一个bottom-up的通道。

2 实验结果

应用CSPNet,对于分类任务,可以在减少计算量的同时略微提升模型的分类准确率;对于检测任务,则可以在减少计算量的同时大幅提升模型的检测效果。

在这里插入图片描述
具体消融实验可以参考原文。

ps. 不知道是我哪方面知识储备不足,始终觉得这篇论文看不太懂,欢迎大家批评指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值