加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。点击文末“阅读原文”立刻申请入群~
本文转自微信公众号SIGAI
由于最近要做新的网络模块设计与优化,所以看了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 的目的是致力于在提高性能同时,压缩网络参数及减少运算量。
本文的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更大权值,因为本身已经具有足够大的感受野了。
本文致力于设计轻量且高效的模块来对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 相比,性能提升有限。
此文的目标其实跟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 实验结果
文中的初衷和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
*延伸阅读
点击左下角“阅读原文”,即可申请加入极市目标跟踪、目标检测、工业检测、人脸方向、视觉竞赛等技术交流群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
觉得有用麻烦给个好看啦~