SKNet——SENet孪生兄弟篇

论坛 期权论坛 金融     
期权匿名问答   2022-7-7 00:58   12251   20
Selective Kernel Networks 启发自皮质神经元根据不同的刺激可动态调节其自身的receptive field,是结合了SE operator,Merge-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附录中。
最后期待在Kaggle,天池等比赛中能够看到SKNet的身影~
最后取名SKNet,致敬胡组长的SENet~
分享到 :
0 人收藏

20 个回复

正序浏览
您好,怎么看出来是两个全连接层的?谢谢!
请问有没有试过把senet挪到sknet的位置呢?(也就是sknet里只保留3*3 branch)好奇这种情况下的acc
我咋还没看明白A,B是咋算出来的?
将卷积核大于1的卷积替换为sk卷积~
请问你在ShuffleNet V2上有添加SK,添加的位置是和SE相同的位置?还是将ShuffleNet V2的DepthWise Conv替换成SK Convolutions?论文中没有写清楚。
噢噢,应该是两个全连接层吧[捂脸]。 感谢分享[拜托]
你好,请问一哈,刚在看paper,第3页末尾的矩阵A和B(用来产生attention vector的权重矩阵),好像没有说是如何得到的?还是我漏了啥...[思考]
PPT...
感谢分享;另外想问下论文中的figure 1是用什么画的,:)
感觉seg上应该会work,有没有搞过实验,相比fcn ?但感觉也不会提升太多。
检测上不work?? 之前我试过CBAM就提点啊,感觉应该会提吧
不太一样,有点 merge-and-run 的意思,可以参考一下
额,主要的几个比较的strong baseline都用了label smoothing,包括SENet, BAM, CBAM 等。
没错,目前初步的实验情况也是这样,检测上还不太容易找到好的姿势work,貌似可能需要调整attention到spatial level
好棒棒!欢迎投稿到paper reading专栏哦  Paper Reading
两个SENet加一起?
我看到paper里用了label smoothing,这个performance的比较是不是就不fair了?
翔哥牛逼!
个人觉得检测问题中,一张图里会存在不同大小的物体,SKNet不能选出一个kernel适用所有尺度(而且global pooling会混淆多个物体的尺度信息)。所以暴力的加SK应该没有显著效果。但是如果改造成deformable convolution那样不同位置可以不同感受野大小,讲道理是会work的。
请问你们有做Det方面的实验吗,效果如何?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:391757
帖子:78352
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP