模块设计之 SKNet, GCNet, GloRe, Octave

转载请在文首注明:本文转自微信公众号SIGAI

全文PDF见:

http://www.tensorinfinity.com/paper_157.html

小编推荐:

六期飞跃计划还剩9个名额,联系小编,获取你的专属算法工程师学习计划(联系小编SIGAI_NO1)


SIGAI特约作者

Fisher Yu

CV在读博士

研究方向:情感计算

由于最近要做新的网络模块设计与优化,所以看了4篇相关的较新较火的文章,总结下以方便对比:

1.Selective Kernel Unit, SKNet [1],对多个不同感受野大小的branch进行融合,融合中使用的是类SENet [5]结构,最后使用类似门机制的softmax attention来分配branch的重要性。

2.Global Context (GC) block, GCNet [2], 将 Non-local Block [6]进行简化(position间共享context feature,channel间不共享)来高效提取global context,并融合SENet来进行轻量地channel context计算。

3.Global Reasoning Unit, GloRe [3], 对特征从坐标空间映射到交互空间,使用图卷积网络GCN进一步推理来获取global context,最后反映射回坐标空间,可看成是 Non-local Block的优化版本。

4. Octave Convolution [4], 将特征分解成低空间分辨率和原始空间分辨率的branch,并进行intra & inter branch间的信息交互;通过分解成低空间分辨率,可使卷积操作更加轻量级。

联系与比较

1.其中 SKNet, GCNet 中都能找到 SENet 的身影;而 GCNet, GIoRe 中又都能找到 Non-local 的身影;而 SKNet 和 Octave Convolution 中又都是基于 dual branch 来进行信息交互融合的。

2.SKNet, GCNet, GIoRe 都是需要额外增加参数和运算量的功能模块,尽管它们都相对轻量;而 Octave Convolution 的目的是致力于在提高性能同时,压缩网络参数及减少运算量。

一、Selective Kernel Networks (SKNet) [1],CVPR2019

本文的motivation是发现过去的卷积网络在每层都share相同的感受野大小,而在神经科学中,视觉皮层单元中的感受野大小应该是受stimulus变化而自适应调整,故SK unit 就是实现这个功能。

算法核心

我们来直接看看核心的 SK Convolution做了什么:

SK Convolution

1.Split 即进行不同感受野卷积操作,上面的branch为3x3 kernel, dilate size=1的,而下面的为3x3 的dilate size=2的卷积。

2. Fuse 即进行特征融合,对两个branch卷积后的特征进行叠加,然后标准SE过程(Global AVG, FC-BN-ReLU,FC),这里最后的FC是分别出来两个branch的channel weight vector

3. Select 即对Fuse最后的两个branch的channel weight vector进行每个位置各自的Softmax操作,类似门机制,可得到两个branch中每个channel各自的权值,乘回原始特征中,最后进行特征叠加。

实验结果

具体的Ablation Study感兴趣的看原文,这里贴下在ImageNet上的结果,在等同量级的参数和运算量下,SKNet50 和 SKNet101 能超过state-of-the-art,特别是在比DPN-98轻量一大截的情况下,性能还能比它好。

ImageNet上SKNet性能

最后我们来看看文中比较有价值的可视化分析:

SK units在验证集1000类上的平均注意力权值差异

蓝色曲线是表示原始图像,而橙色曲线是代表把原始图像中心物体放大1.5倍再作为输入;若橙色线值比蓝色值大,则表示赋予 5x5 大kernel的attention权值变大。从上图可见,对于Low-level 和 mid-level 的SK2_3 和 SK_3_4,当输入物体变大,自适应调整,对应的 5x5 kernel权值也更大;而对于 high-level SK_5_4,则没有赋予5x5更大权值,因为本身已经具有足够大的感受野了。

二、GCNet [2]

本文致力于设计轻量且高效的模块来对global context建模,个人看完文章后感觉主要贡献是下面两点:

1.通过可视化Non-local中不同position的attention map来发现其almost一样,故而设计了position-independent 的简化版non-local网络(SNL)

Non-local block里特征图可视化

2.通过几个Ablation实验说明(下图是其中一个在ImageNet测的),non-local based pooling 方式性能与 vanilla average pooling 基本差不多(稍好一点),而对于GCNet 或者SENet来说,前者比后者性能有显著提高的操作源于 how global context is aggregated to query positions:SENet中是 sigmoid 然后 boardcast 相乘;而GCNet 中是直接 boardcast 相加。

文中Block设计如下

从上图可见,一、(b) SNL中的 Context modeling 采用的是 position-share but channel-independent的 global attention pooling,故输出tensor维度为 Cx1x1 (而老版本Non-local这里输出的是 CxHxW)。二、 (d)GC block就是在 (b)SNL 中嵌入了 SE block(FC-LN-ReLU-FC),来减少参数同时增强channel间的信息交互。

实验结果

文中的实验结果非常充分,做了四个vision task:图像分类,目标检测,实例分割,动作识别;但是实验结果有点太不惊喜了,基本都提高不多,感觉像是靠调参做工程试出来的block。下面列个在Kinetics上的结果,基本跟老版Non-local 相比,性能提升有限。

三、Graph-Based Global Reasoning Networks (GloRe) [3],CVPR2019

此文的目标其实跟Non-local一样,希望能得到全局的上下文信息,即reasoning globally。该文的story说得非常动听,每一步实现起来很简单,但看起来挺爽的,开头的图1比较炫酷:

从上图可以看出文章的主要做的事情,就是希望推理不同区域间的上下文关系;而在Coordinate Space去做比较难处理且低效,就映射到Interaction space,然后通过图卷积网络来进行reasoning,刚好这也是图网络所擅长的。

核心算法

GloRe Unit

如上图所示,GloRe Unit主要做了几件事情:

1.空间映射(中间黄色区域的 左边是从坐标空间映射到交互空间;而 右边是从交互空间映射回坐标空间):空间映射目的是找到子空间可以 more friendly for global reasoning over disjoint and distant regions,但又不想像 I3D-GCN[7] 一样用额外的 detector 或者 label 来框出区域, 故采取类似 non-local 中的做法,直接来 weighted global pooling:假定输入 X的维度为[C,H,W],则最后子空间上的 node states V 可表示为

这里的 N 是超参,即交互空间中节点的个数(好像后面可视化环节设 N=128 ),而C '为reduced channel number。

2.图卷积推理:这里假定Nodes间都有交互,就形成了fully connected graph,然后需要学习的是affine matrix Ag和图网络参数Wg,上图中间黄色区域典型的图卷积公式如下:

而文中把它巧妙地分解成两个步骤,则先进行节点间的message information propagation,然后再更新节点内部的states,如下图所示,分别使用两个1D卷积来实现。

实验结果

文中在图像分类,语义分割和动作识别三个视觉任务里进行实验,对于GCN的个数,使用1个时比不使用性能有大幅度提升;而当stack 2 or 3个GCN时,效果提升极小。贴个在Kinetics上的结果:

Kinetics val 实验结果

四、Octave Convolution [4]

文中的初衷和story出发点是挺好的,就是借图像中高频(细节,非结构性)和低频(边缘形状,结构性)信息一说,来构造卷积来分解成低频和高频信息,其中低频用更低的空间分辨率来表示,达到去除空间冗余的目的,从而节省模型参数及计算量。但是文章从头到尾都没证明自己学到的就是这个,能否找个适当的方式可视化一下呀。

Octave卷积

Detailed design of the Octave Convolution

文中扯了一堆无聊的公式,和如何如何下采样,如何Pooling,意思不大,直接看上面的模块设计图就行了。上面橙色branch表示High frequency,下面蓝色branch表示Low frequency;绿色箭头表示 intra-branch information update,红色箭头表示 inter-branch information exchange。看到这里,恐怕有点 SKNet 的小感觉了。

这里的超参α就是文中的卖点了,tradeoff 了参数&计算量和性能:

实验结果

首先来看看在ImageNet下的效率与性能,可以发现当α越来越大时,需要的FLOPs变小,但性能降得厉害,比较好的 tradeoff 是α=0.125

Ablation study results on ImageNet

最后来看看在动作识别Kinetics上的结果,还是挺惊喜的,α=0.1和α=0.2都能在提高效率的前提下,提高性能:

总结与展望

这篇文章后,可能其中的一些block会被继续改善(性能 or 效率),更多的应该会是把block迁移到一些视觉任务里,或者NAS里;更多未来工作应该是基于Bio-inspired的,然后也应该把探索过程及实验结果尽量可视化出来,来匹配验证。

Reference:

[1] Xiang Li et al., Selective Kernel Networks, CVPR2019

[2] Yue Cao et al., GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

[3] Yunpeng Chen et al. ,Graph-Based Global Reasoning Networks, CVPR2019

[4] Yunpeng Chen et al. ,Drop an Octave: Reducing Spatial Redundancy in

Convolutional Neural Networks with Octave Convolution

[5] Jie Hu et al. ,Squeeze-and-Excitation Networks, CVPR2018

[6] Xiaolong Wang et al. ,Non-local Neural Networks, CVPR2018

[7] Xiaolong Wang ,Videos as Space-Time Region Graphs, ECCV2018

本文为SIGAI原创

原文发布于微信公众号 - SIGAI(SIGAICN)

原文发表时间:2019-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券