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 网络主要有两个贡献:
- 引入了feature-map split attention block。每一个这样的block都把feature-map分成不同的groups(沿着channel dimension 分割),在每个组内又进行更细致的分组(splits)。每个group(第一次分出来的groups)内的splits进行加权组合,最后得到每一个group的feature representation。把这些Split-Attention block堆叠起来,形成了ResNet形式的变体。这样的网络架构不会比ResNet增加多余的计算量。
- 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的对比。
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
图一中每一个cardinal group里面最底下那个split attention block的内部图就是图二所示的样子了。
先对每个splits经过transformation之后得到的intermediate representations进行element-wise加和。E.g.对于第
个cardinal group来说,加和公式为:
wherefor
,
,
是ResNeSt block之前input feature的维度。
全局的上下文信息可以用Global Average Pooling在不同的spatial dimension间收集起来,第c个component(
)的计算方式为:
公式解读:每一个channel单独拿出来,都是一个的矩形,对这个矩形所有元素加和求平均,就得到了
, 而整个的
是一个维度为
的列向量。
这个相当于是一个channel-wise attention的作用,它每一列上的数字,就对应着这个channel上的feature-map的重要程度(也不完全是,后面还有一个softmax的过程)。
最终,当前cardinal group里面的每一个splits都会按照一定的权重加起来,输出的feature map
就是当前cardinal group的特征图。对于
中第c个channel的计算,有:
是soft assignment weight:
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。