2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读


title: 2022_07_11_10_51x51的超大kernelsize真的管用吗:SLaK论文解读
date: 2022-07-11 22:33:33
category: 默认分类

本文介绍 2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

今天有一篇论文很有意思,也就是SLaK,直接把卷积的kernelsize加大到了51x51。你要说之前超越transformer的纯卷积模型ConvNext是把7x7再一次带入了人们的视野,让我们有了一种返璞归真的感觉,那么前段时间旷世的RepLKNet,让人们再一次刷新了认知,直接31x31的卷积也能work的很好,甚至超越了Swin-Transformer等结构。而今天,SLaK再次刷新了我们的认知,好家伙,人家直接把卷积kernel 搞到了51x51. 那我这图片丢进去卷积几次就没了啊。。所以我看到这篇论文的时候就很好奇,他到底是怎么做的。

我们主要有几个疑问,抛砖引玉,一起来思考思考,本人纯属菜鸡观点:

  • 为什么大卷积也能work?
  • 是什么动力让大家在探索大卷积?是更高效?是要探索出了transformer之外的更原始的路?
  • 他有没有什么应用缺点。

SLaK对比Convnext

首先说一下ConvNext,笔者最近也在检测算法中尝试了ConvNext,结论是效果非常不错,简单的convnext-tiny就可以轻松超越resnet50,基于YOLO的检测架构(类似于YOLOX的AnchorFree结构),可以在tiny上做到44左右,这还是没有加augmentation,并且warmup等参数没有细调的情况下,训练尺寸也没有像convnext官方paper训练maskrcnn一样加到1024这么大。

尽管如此,如果你自己去训convnext + YOLO是肯定会训崩的,为什么?因为非常难训,训练及其不稳定,你需要用训transformer的那一套去训这种组合的检测才能得到一个稍微稳定的结果,需要有足够的耐心外加一点点运气,而且收敛速度非常非常慢。这就引入了大卷积的一个思考:类似于SLaK这样的超大卷积核结构,是怎么确保训练稳定的? 我可以很明确的告诉你,没有一些手段,这种大卷积的结构是不太可能收敛的

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读_第1张图片

上图可以很直观的看到Slak里面使用的的大卷积核的结构实现。SLak并没有直接暴力的简单吧RepLKNet的31x31卷积核增加到61x61,而是进行了上面结构的更改,基于两个观察:

  • 第一个是直接暴力加到51x51,就会导致精度下降,说明此路不通;
  • 改为分拆成两个小卷积核组合,可以解决这个问题;
  • 最后加上Sparsity,可以大大提高精度,也就是 用更多的组卷积,加宽宽度

最后就有了:

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读_第2张图片

可以看到,精度超越了Convnext-Tiny,参数量差不多,但是flops增加了(比了个寂寞)。

最后在检测上的精度如上图,检测上提高了一个点,但是没有对比coco的结构,不知道是不是不敢放,还是没做这个实验,其实对比一下mAP-Large可能更有意思。

动机

为什么大家现在开始探索大卷积结构的可行性?我认为主要原因有3个:

  • transformer结构正在不断的超越Convnet-based模型,可以说,出来一个吊打一个,因此convnets应该予以还击了;
  • 一直以来我们都是用的小卷积,smaller convs, deeper networks,探索大卷积核下可行性是必然的;
  • 最后就是SLak作者在一个talk中提到的:

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读_第3张图片

小卷积的设计一直以来是跟随者硬件水平来的,以前算量不足的时候,我们尽可能的减少kernelsize,现在在一些根本不缺算力的场合下,是否有可能大力出奇迹呢?
小卷积的设计虽然可以让模型参数更少,但flops其实不一定低,这些传统的设计也是有一些代价的:例如,在GPU下太小的卷积就无法做到更高效,另外,小卷积也会让模型缺乏全局视野能力,这也就是为什么目标检测有时候很难检测超大物体,或者无法根据全局去推断一个物体的类别,而这个人类是可以做到的。

最后其实还有一个动机,我不知道各位有没有发现,反正我是发现了。也就是Transformer这一脉方法的缺点,这些缺点,如果不在实际场合下以非常高的要求去使用,你会觉得还可以忍受,但是一点要求高了,这些缺点就不容忽视,主要是:

  • 平方级的计算复杂度上升,随着输入的尺寸增大,如果你做自动驾驶,你用的是8k的resolution,那你应该可以感受到;
  • 参数很多,transformer的参数量(模型体积)通常比conv大很多,这是有结构决定的,那么多FNN,参数不多才怪;
  • 难以叠加太复杂的结构,难以像conv一样复用多层次的结构(例如FPN PAN等);

而这些,或许是大卷积核的Convnets才是出路。当然,就像我前面所说,要让他work,可能还是离不开transformer。

总结

大卷积核结构还是有点用,但我觉得更大的价值还是在于,怎么解决transformer结构带来的平方级计算复杂度上升问题。毫无疑问,未来会有更多transformer + conv结合的工作。这些结果,在充分利用GPU算力上还是大有用途。例如像Convnext这种结构,我个人认为就很优雅,集众家之长,补自家之短,非常英明的一个模型结构

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读_第4张图片

你可能感兴趣的:(分割,GPU,深度学习,计算机视觉,机器学习)