前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模块设计之 SKNet, GCNet, GloRe, Octave

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

作者头像
SIGAI学习与实践平台
发布2019-05-20 17:52:04
1.6K0
发布2019-05-20 17:52:04
举报

转载请在文首注明:本文转自微信公众号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原创

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SIGAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档