ResNeSt 2020 论文阅读笔记

ResNeSt: Split-Attention Networks
Github: https://github.com/zhanghang1989/ResNeSt
Detectron2版本Github: https://github.com/zhanghang1989/detectron2-ResNeSt

1. Introduction

主要谈了一下目前一些ResNet的变体网络存在的问题

最近大部分的下游应用还是在使用ResNet,或者ResNet的一些变体作为网络的backbone。作者认为ResNet本身是为了“图片分类”任务而设计的,它不再适用于一些下游应用,因为两个缺点:

  • 有限的感受野尺寸 (limited receptive-field size)
  • 缺少跨channel的交互 (lack of cross-channel interaction)

一些网络在ResNet的基础上做了一些改动,以使其在某些特定任务上更高效。比如,有一些网络加入了金字塔模块
Encoder-decoder with atrous separable convolution for semantic image segmentation (2018)
Pyramid scene parsing network (CVPR 2017)

有些加入了long-range connections
Non-local neural networks (2018)

有的加入了cross-channel feature-map attention:
Dual attention network for scene seg- mentation (2018)
Context encoding for semantic segmentation (CVPR 2018)

包括之前比较常见的group / depth-wise convolution --> 缺点是他们的representations都是孤立的,无法捕捉到跨channel的关系。(想到之前shuffelNet也是为了缓解这一点)

这些改进都在特定的task上表现良好,放到别的下游任务上就不一定好了。那么我们能不能有一以贯之的网络结构来提升feature representations来达到在多个任务上提升表现的效果呢?

本文提出的ResNeSt 网络主要有两个贡献:

  1. 引入了feature-map split attention block。每一个这样的block都把feature-map分成不同的groups(沿着channel dimension 分割),在每个组内又进行更细致的分组(splits)。每个group(第一次分出来的groups)内的splits进行加权组合,最后得到每一个group的feature representation。把这些Split-Attention block堆叠起来,形成了ResNet形式的变体。这样的网络架构不会比ResNet增加多余的计算量。
  2. Benchmark (不在这里多做介绍了)

2. Related Work

Multi-path首次在GoogleNet(Inception v1)中提出,主要是网络中的每个block都由几个不同大小的conv kernel组成。
ResNeXt在ResNet bottle block里面应用了group convolution,把multi-path的结构转变成了统一的操作(kernel size用的一样,但是对不同的group进行conv)。
SE-Net 引入了channel attention的机制,adaptively recalibrating the channel feature responses
SK-Net在两个network分支之间引入了feature map attention。

在前人的基础上,本文将channel-wise attention融入feature-map group representation。

3. Split-Attention Networks

3.1 Split-Attention Block

图一是SE-Net block,SK-Net block 和 ResNeSt block的对比。


ResNeSt block

Feature-map group

如图一所示,input feature 会被分成 1~k, 个组(cardinal groups)(沿着channel维度的方向分组),在每一个cardinal group里,又会被分成个splits,于是feature groups的数量一共有 对于每一个组,我们都可以再加上一系列transformations(从图中看应该是一系列conv操作,具体再看代码) ,于是就得到了每个组的intermediate representation , for

Split Attention in Cardinal Groups

Split-Attention Block

图一中每一个cardinal group里面最底下那个split attention block的内部图就是图二所示的样子了。

  1. 先对每个splits经过transformation之后得到的intermediate representations进行element-wise加和。E.g.对于第个cardinal group来说,加和公式为:
    where for
    , , 是ResNeSt block之前input feature的维度。

  2. 全局的上下文信息可以用Global Average Pooling在不同的spatial dimension间收集起来,第c个component()的计算方式为:

    公式解读:每一个channel单独拿出来,都是一个的矩形,对这个矩形所有元素加和求平均,就得到了, 而整个的是一个维度为的列向量。
    这个相当于是一个channel-wise attention的作用,它每一列上的数字,就对应着这个channel上的feature-map的重要程度(也不完全是,后面还有一个softmax的过程)。

  3. 最终,当前cardinal group里面的每一个splits都会按照一定的权重加起来,输出的feature map 就是当前cardinal group的特征图。对于中第c个channel的计算,有:

  • 是soft assignment weight:
    \begin{equation} a_i^k(c) = \left\{ \begin{array}{lr} x=\dfrac{\exp(\mathcal{G}_i^c(s^k))}{\sum_{j=1}^{R}{\exp(\mathcal{G}_j^c(s^k))}} & if \space R > 1 \\ z=\dfrac{1}{1+\exp(-\mathcal{G}_i^c(s^k))} & if \space R=1 \end{array} \right. \end{equation}

  • mapping 是基于全局上下文representation 来决定每一个split的第个channel的权重。

ResNeSt Block

最后再让我们回到图一的ResNeSt block. 经过Split-Attention Block之后得到的输出会被简单地Concat起来。最后加上ResNet经典的跳接,最终的输出则是

Relation to Existing Attention Methods

  • 利用global context来预测channel-wise attention factors 是首次在SE-Net(Squeeze-and-Excitation)中提出来的。区别是:ResNeSt的squeeze-and-attention操作是对每一个cardinal group来做的,而SE-Net是在整个block上操作,而不管多个groups。

你可能感兴趣的:(ResNeSt 2020 论文阅读笔记)