(五十二)论文阅读 | 轻量级网络之CSPNet


简介

在这里插入图片描述

图1:论文原文

为了降低神经网络的计算量,论文提出跨阶段局部网络。该网络可以继承到任何其他网络中,因此可以作为计算机视觉任务如图像分类和目标检测等的骨干网络。论文原文 源码


0. Abstract

该论文简化神经网络的思路是减少重复梯度的计算,即将输入特征图按通道划分,同时采用跳跃连接来减少特征损失。

论文贡献:(一)提出跨阶段局部网络减少重复梯度的计算;(二)提出 E F M {\rm EFM} EFM模块以增强目标检测中的特征提取;(三) C S P N e t {\rm CSPNet} CSPNet在图像分类和目标检测等任务上均取得了优异的结果。


1. Introduction

随着神经网络的加深与变宽,其性能往往也更好,但随之带来的是计算量的急剧增加。因此,为了满足实际环境中的实时性要求,轻量级网络的研究受到大家的广泛关注。在论文中,作者分析了 R e s N e t {\rm ResNet} ResNet等模型的特点,提出的计算高效的模块在不减少模型精度的前提下显著减少其所需计算量。

论文提出的主要模块是跨阶段局部网络 C S P N e t {\rm CSPNet} CSPNet,该模块的主要特点是更丰富的梯度组合,同时减少计算量。具体地,首先将特征图划分为两个部分,然后基于跨阶段分层结构将其合并,其主要思路是通过分割梯度流来使梯度流通过不同网络路径传播。通过切换级联和转换的步骤,传播的梯度信息可以有很大的差异。
在这里插入图片描述

图2:Comparsion

Strengthening learning ability of a CNN. 论文提出的 C S P N e t {\rm CSPNet} CSPNet可以提高当前如 R e s N e t {\rm ResNet} ResNet等模型的性能,同时减少其计算量。

Removing computational bottlenecks. 作者指出,神经网络中的瓶颈块产生了大量的计算代价,因此 C S P N e t {\rm CSPNet} CSPNet的提出用于平衡神经网络中各层的计算量,从而提高每个计算单元的利用率。

Reducing memory costs. 在特征金字塔中,作者提出跨通道池化对特征图进行压缩。


2. Related work

CNN architectures design. 这部分主要介绍了 R e s N e t {\rm ResNet} ResNet等高性能神经网络模型。

Real-time object detector. 这部分主要介绍了 Y O L O v 3 {\rm YOLOv3} YOLOv3等实时性目标检测模型。


3. Method

3.1 Cross Stage Partial Network

Cross Stage Partial Network. 一个 k k k层神经网络的输出可表示为: y = F ( x 0 ) = x k = H k ( x k − 1 , H k − 1 ( x k − 2 ) , H k − 2 ( x k − 3 ) , . . . , H 1 ( x 0 ) , x 0 ) (1) y=F(x_0)=x_k=H_k(x_{k-1},H_{k-1}(x_{k-2}),H_{k-2}(x_{k-3}),...,H_1(x_0),x_0)\tag{1} y=F(x0)=xk=Hk(xk1,Hk1(xk2),Hk2(xk3),...,H1(x0),x0)(1)

其中, H H H表示卷积操作和非线性激活操作等的组合。则 R e s N e t {\rm ResNet} ResNet D e n s e N e t {\rm DenseNet} DenseNet可分别表示为: x k = R k ( x k − 1 ) + x k − 1 = R k ( x k − 1 ) + R k − 1 ( x k − 2 ) + . . . + R 1 ( x 0 ) + x 0 (2) x_k=R_k(x_{k-1})+x_{k-1}=R_k(x_{k-1})+R_{k-1}(x_{k-2})+...+R_1(x_0)+x_0\tag{2} xk=Rk(xk1)+xk1=Rk(xk1)+Rk1(xk2)+...+R1(x0)+x0(2)

x k = [ D k ( x k − 1 ) , x k − 1 ] = [ D k ( x k − 1 ) , D k − 1 ( x k − 2 ) , . . . , D 1 ( x 0 ) , x 0 ] (3) x_k=[D_k(x_{k-1}),x_{k-1}]=[D_k(x_{k-1}),D_{k-1}(x_{k-2}),...,D_1(x_0),x_0]\tag{3} xk=[Dk(xk1),xk1]=[Dk(xk1),Dk1(xk2),...,D1(x0),x0](3)

上式中的 R R R D D D分别表示残差层和密集连接层,其通常包含多个卷积层。

残差层和密集连接层可最小化梯度流经的路径长度,使其进行更加有效的反向传播。然而,这种连接同时也会增加大量的冗余信息,如第 k k k层的信息需要传递给第 k − 1 , k − 2 , . . . , 1 k-1,k-2,...,1 k1k2,...,1层。

当前存在大量改善 H H H的工作, S p a r s e N e t {\rm SparseNet} SparseNet提出 H k H_k Hk仅与 H k − 1 , H k − 2 , H k − 4 , . . . , H k − 2 i , . . . H_{k-1},H_{k-2},H_{k-4},...,H_{k-2^i},... Hk1,Hk2,Hk4,...,Hk2i,...直接关联; S h u f f l e N e t V 2 {\rm ShuffleNetV2} ShuffleNetV2基于通道切分技术使 H k H_k Hk仅与 H k − 1 H_{k-1} Hk1的一半通道数相关联,其操作可表示为: S ( [ H k ( x k − 1 [ 1 : c / 2 ] ) , x k − 1 [ ( c / 2 + 1 ) : c ] ] ) (4) S([H_k(x_{k-1}[1:c/2]),x_{k-1}[(c/2+1):c]])\tag{4} S([Hk(xk1[1:c/2]),xk1[(c/2+1):c]])(4)

其中, S S S表示通道混洗操作, x k − 1 [ 1 : c / 2 ] x_{k-1}[1:c/2] xk1[1:c/2]表示 x k − 1 x_{k-1} xk1的前一半通道。

论文提出直接优化 F F F y = M ( [ x 0 ′ , T ( F ( x 0 ′ ′ ) ) ] ) (5) y=M([x_{0'},T(F(x_{0''}))])\tag{5} y=M([x0,T(F(x0))])(5)

其中, x 0 x_0 x0沿通道维度被划分成两部分,即 x 0 = [ x 0 ′ , x 0 ′ ′ ] x_0=[x_{0'},x_{0''}] x0=[x0,x0] T T T表示截断 H 1 , H 2 , . . . , H k H_1,H_2,...,H_k H1H2,...,Hk的梯度流的转换函数, M M M表示融合函数。

DenseNet.
在这里插入图片描述

图3:DenseNet

D e n s e N e t {\rm DenseNet} DenseNet中,每个阶段包含一个密集模块和一个转换层,每个密集模块由 k k k个密集层组成。可由如下式子表示: x 1 = w 1 ∗ x 0 x 2 = w 2 ∗ [ x 0 , x 1 ] . . . x k = w k ∗ [ x 0 , x 1 , . . . , x k − 1 ] (6) \begin{aligned} &x_1=w_1*x_0 \\ &x_2=w_2*[x_0,x_1] \\ &... \\ &x_k=w_k*[x_0,x_1,...,x_{k-1}] \end{aligned}\tag{6} x1=w1x0x2=w2[x0,x1]...xk=wk[x0,x1,...,xk1](6)

其中, ∗ * 表示卷积操作, [ x 0 , x 1 , . . . ] [x_0,x_1,...] [x0,x1,...]表示拼接操作, w i w_i wi x i x_i xi表示第 i i i层的权重的输出。

如果利用反向传播算法来更新权重,则权重更新可写作:
w 1 ′ = f 1 ( w 1 , { g 0 } ) w 2 ′ = f 2 ( w 2 , { g 0 , g 1 } ) . . . w k ′ = f k ( w k , { g 0 , g 1 , . . . , g k − 1 } ) (7) \begin{aligned} &w_1'=f_1(w_1,\{g_0\}) \\ &w_2'=f_2(w_2,\{g_0,g_1\}) \\ &... \\ &w_k'=f_k(w_k,\{g_0,g_1,...,g_{k-1}\}) \end{aligned}\tag{7} w1=f1(w1,{g0})w2=f2(w2,{g0,g1})...wk=fk(wk,{g0,g1,...,gk1})(7)

其中, f i f_i fi表示第 i i i的权重更新函数, g i g_i gi表示传到第 i i i层的梯度。通过上式可以发现,存在大量梯度信息被重用来更新不同层的权重,这就导致不同层重复学习相同的梯度信息。

Cross Stage Partial DenseNet.
在这里插入图片描述

图4:CSPDenseNet

C S P D e n s e N e t {\rm CSPDenseNet} CSPDenseNet中,每个阶段包含一个局部密集模块和一个局部转换层。在每个局部密集模块中,普通层沿通道被划分成两部分,即 x 0 = [ x 0 ′ , x 0 ′ ′ ] x_0=[x_{0'},x_{0''}] x0=[x0,x0]。在 x 0 ′ x_{0'} x0 x 0 ′ ′ x_{0''} x0间,前者直接通过一个跳跃连接直接连接到阶段末尾,后者将通过一个密集模块。最后通过一个局部转换层:首先,密集层的输出 [ x 0 ′ ′ , x 1 , . . . , x k − 1 ] [x_{0''},x_1,...,x_{k-1}] [x0,x1,...,xk1]通过一个转换操作;其次,该转换层的输出 x T x_T xT x 0 ′ x_{0'} x0拼接后通过另一个转换操作,得到输出 x U x_U xU。可由如下式子表示:
x k = w k ∗ [ x 0 ′ ′ , x 1 , . . . , x k − 1 ] x T = w T ∗ [ x 0 ′ ′ , x 1 , . . . , x k ] x U = w U ∗ [ x 0 ′ , x T ] (8) \begin{aligned} &x_k=w_k*[x_{0''},x_1,...,x_{k-1}] \\ &x_T=w_T*[x_{0''},x_1,...,x_k] \\ &x_U=w_U*[x_{0'},x_T] \end{aligned}\tag{8} xk=wk[x0,x1,...,xk1]xT=wT[x0,x1,...,xk]xU=wU[x0,xT](8)

w k ′ = f k ( w k , { g 0 ′ ′ , g 1 , . . . , g k − 1 } ) w T ′ = f T ( w T , { g 0 ′ ′ , g 1 , . . . , g k } ) w U ′ = f U ( w U , { g 0 ′ , g T } ) (9) \begin{aligned} &w_k'=f_k(w_k,\{g_{0''},g_1,...,g_{k-1}\}) \\ &w_T'=f_T(w_T,\{g_{0''},g_1,...,g_k\}) \\ &w_U'=f_U(w_U,\{g_{0'},g_T\}) \end{aligned}\tag{9} wk=fk(wk,{g0,g1,...,gk1})wT=fT(wT,{g0,g1,...,gk})wU=fU(wU,{g0,gT})(9)

可以看到,对于 w T ′ w_T' wT w U ′ w_U' wU中互不包含对方的重复梯度信息。

简单来说, C S P D e n s e N e t {\rm CSPDenseNet} CSPDenseNet继承了 D e n s e N e t {\rm DenseNet} DenseNet中特征复用的特点,同时也减少了重复梯度的计算。

Partial Dense Block. 局部密集模块的特点包括:(1)基于划分合并的策略,梯度路径变为两倍,同时跨阶段策略能够缓解重复特征图带来的梯度重复计算;(2)在 D e n s e N e t {\rm DenseNet} DenseNet中,通常普通层的通道数远大于增长率。由于局部密集模块仅使用特征图的一半通道数,其有效减少了计算量;(3)设 D e n s e N e t {\rm DenseNet} DenseNet中的层大小为 w × h × c w\times h\times c w×h×c,增长率为 d d d,共有 m m m层。则密集模块的 C I O {\rm CIO} CIO ( c × m ) + ( ( m 2 + m ) × d ) / 2 (c\times m)+((m^2+m)\times d)/2 (c×m)+((m2+m)×d)/2,局部密集模块为 ( ( c × m ) + ( m 2 + m ) × d ) / 2 ((c\times m)+(m^2+m)\times d)/2 ((c×m)+(m2+m)×d)/2。通常 m m m d d d远小于 c c c,则局部密集模块能节省约一半的内存。

Partial Transition Layer.
在这里插入图片描述

图5:不同的特征合并策略

在这里插入图片描述

图6:Accuracy vs. BFLOPS

Apply CSPNet to Other Architectures.
在这里插入图片描述

图7:CSPResNe(X)t

3.2 Exact Fusion Model

**Looking Exactly ot predict perfectly.**

图8:EFM


4. Experiments

在这里插入图片描述

图9:Ablation of CSPNet

在这里插入图片描述

图10:Ablation of EFM

在这里插入图片描述

图11:与其他分类模型的对比

在这里插入图片描述

图12:与其他检测模型的对比

在这里插入图片描述

图13:在CPU和GPU上的推理时间


5. Conclusion

论文提出的 C S P N e t {\rm CSPNet} CSPNet可以提高 R e s N e t {\rm ResNet} ResNet等模型的性能,同时减少计算量以应用于移动端。论文的一大贡献是发现冗余梯度的问题,并针对该问题提出跨阶段的合并策略。此外, E F M {\rm EFM} EFM模块能够压缩特征金字塔的特征图,从而降低所需内存带宽和提高计算效率。


6. ResNet50的CSPNet可视化

在这里插入图片描述


参考

  1. Wang C Y, Liao H Y M, Wu Y H, et al. CSPNet: A new backbone that can enhance learning capability of CNN[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition workshops. 2020: 390-391.


  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值