CV 经典主干网络 (Backbone) 系列: CSPNet

CV 经典主干网络 (Backbone) 系列: CSPNet

作者:Chien-Yao Wang 等
发表时间:2019
Paper 原文: CSPNet: A New Backbone that can Enhance Learning Capability of CNN
开源代码:Cross Stage Partial Networks

该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。

作者认为目前的网络结构虽然效果好,但是都是建立在较大的计算量上的,这阻碍了算法应用 ,特别是在移动设备等算力受限的平台上,这个问题就显得尤为突出了。作者因此想提出一个计算量小效果还好的网络结构。具体来说作者希望:

  • 增强CNN的学习能力
  • 减少计算量
  • 降低内存占用

1. 网络结构

1.1 理论

作者通过分析发现,计算量大的一个原因是因为网络优化过程中的梯度信息重复造成的,为了解决这一问题,作者提出了 CSPNet(Cross Stage
Partial Network),它可以实现更加丰富的梯度组合,从而增强网络的学习能力,减小计算量。通过实验证明,CSPNet 计算量小(减小20%),但是精度上却也表现非常好,甚至超过当时的 SOTA 算法。

对于上面的提到的三点,我们来看看作者的解决办法。

1.1.1 增强CNN的学习能力

通常轻量化后的网络,效果会下降。如果轻量化的模型要有大模型效果,就必须要有更强的学习能力。CSPNet 通过将梯度的变化从头到尾地集成到特征图中,这样实现了更加丰富的梯度组合,从而增强了网络的学习能力。

1.1.2 减少计算量

去掉计算量较高的计算瓶颈结构。比如对于 DenseNet 来说,其计算量较高的显然是在 Dense Block 里面,CSPNet 通过 Partial Dense Block 的改进,仅仅一部分 feature map 进行计算,自然可以减少计算量。

1.1.3 降低内存占用

在 FPN 的时候采用 cross-channel pooling 压缩 feature map。Partial Dense Block 应该也有助于降低内存占用。

总的来说,CSPNet 是基于 DenseNet 的一种改进网络。CSPNet 保留了DenseNet特性重用特性的优点,但同时通过截断梯度流防止了过多的重复梯度信息。

1.2 网络结构

基于上面的理论分析,作者提出了 CSPNet,CSPNet 并不是完整的网络结构,而是一个模块,或者说是一种思想,它可以被很方便的应用于很多不同的网络结构中,比如 DenseNet, ResNet 等。其思想是把特征分为 Part 1,Part 2 两部分,Part 2 进行卷积操作等得到 C,然后把 Part 1 和 C 进行 concat。比如对于 DenseNet。注意下面 Dense Block 和 Partial Dense Block 中 Dense Layer 的区别(输入的feature map 是不同的,见 Figure 2)。

CV 经典主干网络 (Backbone) 系列: CSPNet_第1张图片

CV 经典主干网络 (Backbone) 系列: CSPNet_第2张图片

对于上面的 b CSPDenseNet,c CSP(fusion first)和 d CSP(fusion first)三种不同网络结构,作者将其运用到 PeleeNet 上,通过实验发现 CSPDenseNet 在计算量和 acc 上均要优于原本的 PeleeNet。

CV 经典主干网络 (Backbone) 系列: CSPNet_第3张图片

直接看网络结构可能更清晰,比如将 CSPNet 应用到 DarkNet53(CSPDarkNet-53)。下图中左边是 DarkNet53 原本的结构,右边是应用 CSPNet 后的结构。

在这里插入图片描述

作者在把 CSPNet 应用到目标检测任务的时候,还提出了一个 EFM 模块,用于取代 FPN 操作。

CV 经典主干网络 (Backbone) 系列: CSPNet_第4张图片

  • FPN,在 YOLOv3 中使用。(ps: YOLOv3 中的 FPN 跟原始 FPN 不同,其融合的方式是 concat,而原始的融合方式是相加)

  • GFM,是 ThunderNet 中提出的 GFM,直接将多个不同分辨率的特征进行融合,具体融合方式是相加。

  • EFM,作者提出的融合方式,每两层之间特征进行融合,并且在原有 FPN 基础上再进行一次 bottom-up 的融合方式。

2. 性能

作者把 CSPNet 应用到分类和检测任务中,发现性能都有所提升,特别是在检测任务中提升更为明显。这也是为什么后续的 YOLOv4 和 YOLOv5 的 backbone 都是基于 CSPNet 修改的。

你可能感兴趣的:(Backbone,CSPNet,网络结构,EFM,原理,解析)