SKNet 算法的介绍

代码:SKNet-PyTorch/sknet.py at master · developer0hye/SKNet-PyTorch · GitHub

原论文:https://arxiv.org/abs/1903.06586

启发自皮质神经元根据不同的刺激可动态调节其自身的receptive field,是结合了SE operatorMerge-and-Run Mappings,以及 attention on inception block 思想的产物。从设计理念上来讲也比较simple,即对所有的 > 1 的卷积kernel进行 Selective Kernel 改造,充分利用group/depthwise卷积带来的较小的理论parameters和flops的红利,从而使增加多路与动态选择的设计也不会带来很大的overhead(但实际group/depthwise的加速优化目前还不是特别好,导致实际速度还是略有一些慢的),具体可以参考如下的结构表格。这样的设计使得任何网络进行Selective Kernel化就变得非常容易,只需要对 > 1的卷积进行无脑切换即可。经师弟 

@opteroncx

 实测目前在超分辨的任务上有明确的提升,扩展应用前景还是值得期待的~

大家知道抛开attention的引入,此前比较plain并且work的两大架构:ResNeXt 和 Inception。前者特点是用group卷积轻量化了>1 kernel的卷积核;后者特点是多路的multiple kernel设计。我们设计的一大出发点就是看是否能够combine两者的特色。那么从哪里入手呢?我们且看从ResNet到ResNeXt中的计算量分布:

非常惊人的是,从ResNet到ResNeXt,> 1 kernel的计算量从原来52.9%的占比下降到了6.6%,几乎下降了一个数量级,但却让ResNeXt的分类性能提升了。从这个观察出发,我们可以引申出这么几个点:

1) 计算量占比下降到这种程度都能够有明显提升,是否在稍微召回一些 > 1 kernel的计算量也能得到进一步的增强,得到更好的trade-off?

2) 因为本身计算量占比已经非常小,所以可以在这个部分尝试引入同样轻量的多路(multiple path)的设计去召回这些计算量;

3) 再结合之前动态的receptive field的启示以及目前普遍的attention的操作,完全可以在这个module中实现用动态attention机制建模multiple kernel selection,并且只会带来很小的理论计算overhead

那么这么一总结,Selective Kernel的模块基本就成型了,整个过程还是比较有迹可循的,设计图如下,简单一句话总结一下,即是用multiple scale feature汇总的information来channel-wise地指导如何分配侧重使用哪个kernel的表征:

实操中会将kernel 5x5近似为dilation=2的kernel 3x3。实验下来效果还是比较明显的,同样的实验setting基本上能够到达最优的性能复杂度trade-off:

另外有一点没有反映在论文中,top-1的确是有明确的提升,不过top-5只能与原来较强的模型持平,这一点目前还不是特别clear原因。

SK module对一些轻量模型如ShuffleNetV2的增益还是很明显的:

不过在迁移到MobileNetV2的时候存在一些问题,MobileNetV2是反residual的设计,中间粗两边细,之前分析到的利用中间计算轻量的特点就不存在了,所以涨点肯定有,但是带来额外的参数和计算量的增长就不是特别能接受了。

比较有意思的是在统计分析的时候我们惊人地发现了有一个middle level 的layer学到了非常鲁棒地指导attention selection的pattern——SK_3_4。几乎对于所有的测试样本(1000类,每类50个,共50000个),只要对其进行1.5倍的放大,SK_3_4一定会分配更多的selection weights给更大的kernel 5x5,相应地,更小的selection weights给到kernel 3x3(如下图)。个人认为这样的背后存在这么一种合理的趋势:对于不同scale的物体,网络可以自主地决定从底层到高层用不同大小的kernel作为一个整体的组合去extract这些物体的feature,使得在一个相同的较高层中不同scale的物体能够得到一个相同scale的feature representation,从而把scale decompose掉,让feature变得scale-insensitive,能够更加鲁棒地表征物体类别属性。(不过从这个角度来讲的话,似乎对detection回归框没有优势,因为回归框是需要feature里encode住scale信息的)

以上的这个特性对于low level的SK_2_3也是成立的,只不过差别没有SK_3_4明显,它整体上也是kernel 5x5较大地assign给较大的物体(如下图)。

然后在最高层SK_5_3这个pattern消失了(如下图),大家基本比较接近,从一定程度上也暗示着此时feature已经被decompose掉了scale,所以1.0x与1.5x没有明确的倾向去选择更大或更小的kernel。

最后是一些specific cases的attention distribution:

SKNet50和SKNet101的caffe code和model在 https://github.com/implus/SKNet,另外实验中cifar数据集的setting为了防止过拟合有一些结构的调整,具体在paper附录中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值