Skip to main content

RepLKNet

论文名称:Scaling Up Y our Kernels to 31x31: Revisiting Large Kernel Design in CNNs

作者:Xiaohan Ding, Xiangyu Zhang, Jungong Han, Guiguang Ding

Code:https://github.com/megvii-research/RepLKNet

摘要​

本文重新审视了现代卷积神经网络中的大核设计,证明了使用一些大核比一堆小核可能更加强大,同时提出了五个设计准则,依据这些准则设计了 RepLKNet——一个纯粹的 CNN 架构,其中卷积核的最大尺寸达到了 31×3131\times 31。

RepKLNet 在 ImageNet 以及各种下游任务上取得了更好的结果,缩短了 CNN 与 ViT 之间的差距。基于大核的研究进一步表明,与小核相比,大核的 CNN 具有更大的有效感受野和更高的形状偏置(shape bias)

CNN 与 ViT​

Transformer 性能强的原因​

众所周知,Transformer 是由 self-attention 构成的,相较于 Convolution,self-attention 主要有两点区别:

一是 self-attention 多是在全局尺度内进行计算,即使是最近的 Local Transformer 也是在 7×77\times 7 的窗口内计算;

二是 self-attention 的核心机制——QKV 运算。

那么其中的关键是哪一点呢?

目前很多相关工作都表明,更大的窗口大小或许才是 Transformer 强大的关键。

Demystifying local vision transformer: Sparse connectivity, weight sharing, and dynamic weight 证明了即使将 Swin 中的 self-attention 换成同样大小的卷积性能不变甚至更好; Mlp-mixer 证明将 ViT 中的 attention 替换为 MLP 性能也很好;Metaformer 将 attention 替换为 pooling 性能还是很好。

CNN 的感受野​

自 VGG 以来,不断堆叠小 kernel、加深网络层数成为了卷积神经网络设计的主流范式,因为我们相信,三层 3×33\times 3 的卷积核的感受野与一层 7×77\times 7 的感受野相同,并且性能更好,因为其中可以加入更多的非线性,层数越多就代表着拟合能力越强。

这是真的吗

image-20220402214110912

上图为各个网络的输入对于输出中心点的贡献度,可以看到,即使 ResNet 堆叠了 100 多层,其有效感受野也没有多少变化,而 RepLKNet-31 的有效感受野几乎覆盖全图。

该观点在论文 Understanding the effective receptive field in deep convolutional neural networks. NeurIPS 2016.中有所提及,其认为模型的有效感受野正比于 KLK\sqrt L,即有效感受野的增长与堆叠层数成开方关系。

为什么我们不用大 Kernel​

这是一个很显而易见的问题,大 kernel 太大了,我们都清楚卷积核的参数量相对于 kernel size 是呈平方增长的,其速度也会慢很多。

另一个问题就是某些相关工作表明大 kernel 反而会掉点。

虽然历史淘汰了大 Kernel,但是这不表明现在不能复兴它。

虽然标准的 dence 卷积参数量很大并且速度很慢,但是 Depth-with 卷积的参数增长并没有那么大,加上适当的底层优化速度或许也可以很快。

现代神经网络的架构设计或许可以使大 kernel 绽放出新的光彩,比如 swin 的结构。

如何复兴大 Kernel​

本文提出了使用使用大 kernel 的五大准则。

Depth-wise+ 底层优化​

由于 dence 卷积的参数量与输入输出通道数都有关系,而 Depth-wise 卷积只与输入通道数有关系,一般来说其参数大小是 dence 卷积的几百分之一,即使增大 kernel size,其参数量也只和 dence 卷积相当,论文中也给出了参数表格:

image-20220402215821752

可以看到即使 kernel size 提升了很多,参数量和浮点计算量也没有增加很多。

虽然解决了参数和计算量的问题,但是速度的问题怎么解决呢?

image-20220402220122237

dence 卷积处于上图中的 Compute Bound 区域,其计算密度已经不会再增长了,除非计算能力上升。

depthwise 卷积处于上图中的 Memory Bound 区域,其计算密度会随着 kernel size 的增长而增长,所以更大的 kernel 速度并不会太慢。

底层优化略过。。。

效果如下:

image-20220402220424469

相比于 Pytorch 最高可加速 20 倍。

使用 shortcut​

image-20220402220545649

在 MobileNet V2 上的实验,可以看到没有 shortcut 掉点十分严重;这里的解释原因与 RepVGG 中的相同,使用 shortcut 相当于集成了很多隐式的模型,有很多不同大小组合式感受野;没有 shortcut,感受野则单一且巨大,难以捕捉小的特征。

使用小 kernl 做重参数化​

继续发扬重参数化,与 RepVGG 类似,同时使用一个并行的小 kernel,推理时重参数化即可。

image-20220402220854590

不论大 kernel 有多大,同时添加一个 3×33\times 3 的小 kernel,使得组合式的感受野更加丰富,更易提取小的特征。

但是在数据量很大(MegData-73M)时,小 kernel 重参数化效果不大。

看下游任务​

7×77\times 7 的大 kernel 在 ImageNet 分类任务上已经达到极限,即使 size 再增大,性能也不会变化,这点可能是因为 ImageNet 上主要依靠纹理信息。

而对于下游任务,如语义分割、目标检测等,更大的 kernel 还能获得更好的性能。

小 feature map 上使用大 kernel​

即使 feature map 尺寸小于 kernel size 也没有关系,底层实现会使用 feature 来卷 kernel,虽然这样会一定程度上失去平移不变性,但是相关工作表明平移不变性不一定就是好的。

RepLKNet​

image-20220402221621267

基于上述准则设计了 RepLKNet,并且借鉴了 Swin 的宏观架构,并且继续加大 kernel size,从 7 到 13 到 25,再到最大 31,在各类任务上都取得了十分优秀的效果。

Shape bias​

人类用来分辨视觉信息多是因为 shape bias,很多情况下都是根据形状来进行判断的。

而之前的小 kernel 模型由于有效感受野有限,其判断结果使用的为纹理信息,也有很经典的相关工作表明将不同类别的纹理进行替换,网络会错误的给出判断。

经过一些实验发现或许大 kernel 的 shape bias 会更高,而和 attention 的关系不大,这些都是后来的研究目标了。

科研哲学(鸡汤)​

最后来喝一碗鸡汤,来看看从小 kernel 到大 kernel 的辛酸发展历程吧。

image-20220402222844882