基于上面发现的感受域差异,论文尝试通过引入少量大核卷积层来弥补ViTs和CNNs之间的性能差异。借此提出了RepLKNet网络,通过重参数化的大卷积来建立空间关系。RepLKNet网络基于Swin Transformer主干进行改造,将MHSA替换为大的深度卷积,性能比ViTs网络更好。另外,论文通过图1的可视化发现,引入大卷积核相对于堆叠小卷积能显著提升有效感受域(ERFs),甚至可以跟ViTs一样能够关注形状特征。 Guidelines of Applying Large Convolutions
<hr/> 直接使用大卷积会导致性能和速度大幅下降,论文通过实验总结了5条高效使用大卷积核的准则,每条准则还附带了一个备注。 Guideline 1: large depth-wise convolutions can be efficient in practice.
如表1所示,目前的深度学习框架对深度卷积的实现较为低效。为此,论文尝试了不同的方法来优化CUDA内核,最后选择了block-wise(inverse) implicit gemm算法并集成到了MegEngine框架中。相对于Pytorch,深度卷积带来的计算延迟从49.5%降低到了12.3%,几乎与计算量成正比。
具体的相关分析和实现,可以去看看这篇文章《凭什么 31x31 大小卷积核的耗时可以和 9x9 卷积差不多?》(https://zhuanlan.zhihu.com/p/479182218)。 Guideline 2: identity shortcut is vital especially for networks with very large kernels.
这个准则同样也适用于ViTs中。近期有研究发现,如果移除短路连接,ViTs中的注意力会随着深度的增加而双倍地减少,最后出现注意力过度平滑的问题。尽管大卷积核性能下降的原因可能跟ViT不一样,但同样也有难以捕捉局部特征的现象。为此,论文认为如参考文献《Residual networks behave like ensembles of relatively shallow networks》所说的,短路连接能够使得模型显式地变为多个不同感受域大小的模型的组合(小感受域与大感受域不断直接累加),从而能够在更大的感受域中得到提升并且不会丢失捕捉小尺度特征的能力。 Guideline 3: re-parameterizing with small kernels helps to make up the optimization issue.
ViTs在小数据集上会有优化问题,通常需要添加前置卷积层来解决。比如在每个self-attention前面添加一个深度卷积层,这跟论文提出的并行卷积的做法类似。添加的卷积层能为ViT网络预先引入平移不变性和局部特征,使其在小数据集上更容易优化。论文在RepLKNet上也发现了类似的现象,当预训练数据集增大到7300万时,不再需要结构重参数化来辅助优化。 Guideline 4: large convolutions boost downstream tasks much more than ImageNet classification.