赞
踩
论文:CSPNet: A new backbone that can enhance learning capability of CNN
代码:https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/backbones/csp_darknet.py
出处:CVPR2019
CSPNet 的提出解决了什么问题:
为了实现更好的效果,深度神经网络一直在往更深和更宽的方向发展,但也带来了一系列计算量的上升,难以在边端小型设备使用。有一些为移动端 CPU 设计的方法,如深度可分离卷积,不适用于工业 IC,如 Application-Specifific Integrated Circuit (ASIC)。
本文作者认为,这种大量计算主要来自于梯度的冗余,就是同一个梯度会在不同的模块中被计算。所以提出了高效计算模块,可以让诸如 ResNet、DenseNet 的网络同时在 CPU 和 GPU 上无损耗的部署。
实现方法:分割梯度流,让梯度在不同的路径中传播,降低梯度冗余
Cross Stage Partial Network (CSPNet) 的主要设计思想:让网络中的梯度进行丰富的结合,降低冗余,减少计算量
在介绍 CSPNet 之前,先看看 DenseNet 的结构
图 2a 展示了 DenseNet 的一个 stage 结构:
DenseNet 的过程可以用如下方式表示,其中 * 表示卷积, x i x_i xi 表示第 i i i 个 dense layer 的输出。
反向传播过程表示如下, g i g_i gi 表示传递给第 i 个 dense layer的梯度。可以看出,大量的梯度信息是被不同 dense layer 重复使用的:
重点:Concat 操作后,不同通道的梯度是如何传递的
DenseNet 为什么有大量的梯度重用:
CSPNet 怎么解决这种梯度重用:
图 2b 展示了 CSPDenseNet 的一个 stage,CSPDenseNet 的组成:
Partial dense block:
每个 stage 的特征图都根据 channel 被分为两个部分 x 0 = [ x 0 ′ , x 0 ′ ′ ] x_0 = [x_0', x_0''] x0=[x0′,x0′′]
Partial transition layer
由于这里 transition layer 使用的是 concat 方法,而 concat 方法的梯度传播会分开进行,就是还是会传递到对应的来源处去,所以经过密集 block 和未经过密集 block 的特征是分别优化的,梯度单独更新。
CSPNet 的前向传播和反向传播如公式 3 和 4 所示:
CSPDenseNet 保留了DenseNet 特性重用特性的优点,但同时通过截断梯度流防止了过多的重复梯度信息。该思想通过设计一种分层的特征融合策略来实现,并应用于局部过渡层。
图 3 也展示了不同融合方式:
作者也对比了不同的融合方式的效果:
使用 Fusion First 中梯度会被大量重复利用,没有明显的计算量下降, top-1 acc 下降了 1.5%
使用 Fusion Last 先使用 transition 降低了 dense block 的维度,极大降低了计算量,top-1 acc 仅仅下降了0.1个百分点
同时使用 Fusion First 和 Fusion Last 相结合的 CSP 所采用的融合方式可以在降低计算代价的同时,提升准确率。
如图 5 所示,CSPNet 可以和 ResNet、ResNeXt 进行结合,由于每个 Res block 只有一半的 channel 会经过,所以不需要引入 bottleneck。
1、不同模块的消融实验
2、在分类任务上和 SOTA 对比
3、在检测任务上和 SOTA 对比
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。