又对ConvNets下手了!详解SLaK:51×51超大kenel如何优化?

作者 |  科技猛兽 编辑 | 极市平台

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【全栈算法】技术交流群

导读

 

本文作者从稀疏性的角度提出了一个应用超大 Kernel 的方法,它可以平滑地将 Kernel 扩展到 61×61,并具有更好的性能。因此作者将模型命名为稀疏大 Kernel 网络 (SLaK),一种配备 51×51 卷积核的纯 CNN 架构。

1 SLaK:从稀疏性的角度将卷积核扩展到 51×51

论文名称:More ConvNets in the 2020s: Scaling up Kernels Beyond 51 × 51 using Sparsity

https://arxiv.org/pdf/2207.03620.pdf

1.1 SLaK 原理分析

本文的背景是超大 Kernel 的卷积神经网络的出现,大核卷积的思路来自 ViT 模型建模全局信息的性质。其中代表性的工作就是 RepLKNet,将卷积核的大小增加到了 31×31,同时获得了和 Swin Transformer 相当的分类性能和更好的下游任务性能。本文作者探索了训练大于 31×31 的极端卷积的可能性,本文发现持续地增加卷积核会带来性能饱和,所以本文意在探索是否可以通过策略性地扩大卷积来消除性能差距。经过不断探索,本文作者从稀疏性的角度提出了一个应用超大 Kernel 的方法,它可以平滑地将 Kernel 扩展到 61×61,并具有更好的性能。因此作者将模型命名为稀疏大 Kernel 网络 (SLaK),一种配备 51×51 卷积核的纯 CNN 架构。

1.1.1 背景和动机

在现代计算机视觉任务中,通用视觉模型最早以深而 Kernel 小的 CNN 为主。自从 ViTs 出现之后,人们渐渐发现建模全局信息的重要性:人们开始觉得 ViTs 的几本构件:类 Self-attention 模块具有建模全局信息的能力[1]。很多工作也证明了,即使 Token-Mixer 不设计成 Query-Key-Value 的形式,模型也能够训练出很出色的性能。所以大家觉得,Self-attention 的这种在全局尺度或较大的窗口内进行运算的模式,才是模型性能提升的关键。来自单个 Self-attention 层的每个输出能够从相对大的区域收集信息。与 CNN 共享权重的小滑动窗口 (3×3 或 5×5) 相比,ViTs 中具有较大窗口大小的全局注意或局部注意直接使每一层能够捕获大的感受野。

受这种趋势的启发,最近一些关于 CNN 的工作 (RepLKNet[2],ConvNeXt[3]) 通过设计较大的 Kernel 获得了与Swin Transformer 相当的结果。但即使是使用了重参数化技术,使用平行的小 Kernel 分支来辅助训练,大 Kernel 仍然存在难以训练的问题。本文发现,随着 Kernel 大小的不断增加,RepLKNet 的性能逐渐趋于饱和。我们是否可以通过进一步将 Kernel 的大小从 31×31 再向上扩展,以超越基于 Transformer 的模型,这仍然是一个谜,所以本文意在探索是否可以通过策略性地扩大卷积来消除性能差距。

具体而言,本文作者从稀疏性的角度来探索这个问题。稀疏性是人类视觉系统中视觉皮层 (V1) 的重要特点,视觉皮层中传入的刺激可以假设为稀疏编码 (sparsely coded) 并被选择。作者广泛研究了大 Kernel 的可训练性,并在本文章给出了3个主要观察结果:

  1. 直接训练大 Kernel 模型,或者辅助结构重新参数化技术都不能将核的大小缩放到 31×31 以上。

  2. 用两个矩形的并行内核 (M×N 和 N×M,其中 N < M) 代替一个大的 M×M Kernel,可以平滑地将内核大小缩放到 61×61,并改进性能。

  3. 使用稀疏方法,同时加大模型的宽度,可以再显著提升性能。

基于这些观察,本文提出的稀疏大 Kernel 网络 (SLaK),一种新的纯 CNN 架构,配备了前所未有的 51×51 的超大 Kernel。在包括 ImageNet 图像分类、ADE20K 语义分割和 PASCAL VOC 2007 上的物体检测在内的各种任务中进行评估,SLaK 实现了比 SOTA CNN (如 ConvNeXt 等) 以及 SOTA Transformer (如 Swin 等) 更高的准确性。有效感受野 (ERF) 的分析也证明了 SLaK 能够覆盖比现有更大的 ERF 区域,同时引入更多的 human-like peripheral shape bias。

1.1.2 动态稀疏化技术

动态稀疏化技术是一种从头开始训练稀疏神经网络的技术。后训练剪枝 (post-training pruning) 一般是指先训练好一个密集的大模型,再对其参数进行剪枝。但在动态稀疏化中,模型从一开始就是稀疏的,训练和推理的 FLOPs 以及内存的需求只是密集模型的一小部分。不涉及任何预训练。

如下图1所示,动态稀疏化技术来自 Sparse Evolutionary Training (SET) 方法,该方法首先随机初始化层之间的稀疏连接,并在训练过程中通过参数修剪-增长方案动态调整模型的稀疏连接。这个方案允许模型的稀疏结构逐渐进化,比单纯训练静态稀疏网络获得更好的性能。

864b59f6cfc3d94ee37323dbed958923.jpeg
图1:动态稀疏化技术

1.1.3 缩放卷积核的大小使之超过 31×31 的三个观察

作者首先研究大于 31×31 的极限 Kernel 的性能,并分享3个主要的观察结果。以最近的 SOTA CNN 架构ConvNeXt 和 ImageNet-1K 数据集作为基准。

作者遵循骨干模型的一般训练策略,即数据增强方式为 Mixup,Cutmix,RandAugment,Random Erasing 。正则化方法是:Stochastic Depth 和 Label Smoothing。AdamW 作为优化器,分析性试验都是训练 120 Epochs 目的是快速观察方法的效果,正式实验训练 300 Epochs,以便能够与最先进的模型进行公平的比较。

观察1:已有方法 (结构重参数化技术) 无法进一步将 Kernel 的大小从 31×31 再向上扩展

RepLKNet 通过结构重新参数化技术成功地将卷积扩展到 31×31,同时使得模型获得了和 Swin Transformer 相当的性能。本文作者进一步将内核大小增加到 51×51 和 61×61,看看更大的 Kernel 是否能够带来更多的性能增益。按照 RepLKNet 中的设计,作者相继将每一个 Stage 的 Kernel 大小设置为 [51, 49, 47, 13] 和 [61, 59, 57, 13],结果如下图2所示。结果显示,仅仅将 Kernel 的大小从 7×7 增加到 31×31 会显著降低性能,而 RepLKNet可以克服这个问题,将精度提高 0.5%。然而,这种趋势不适用于较大的内核,因为将 Kernel 的大小增加到51×51 会开始损害性能。

3ed8a4b8da52158dcd1b5857e9269ec4.jpeg
图2:在 ImageNet-1K 上用各种大 Kernel 训练的 ConvNeXt-T 的测试精度,naive 是指直接增加 Kernel 的大小,RepLKNet 是指使用了结构重参数化技术

对于这种现象,一种合理的解释是:我们把卷积核扩大到 51×51 或者 61×61 之后,虽然模型的感受野增加了,但是它可能无法保持某些期望的特性,比如局部性。由于标准 ResNet 和 ConvNeXt 的 Stem 模块已经把输入降采样了4倍,所以 51×51 这种超大的 Kernel 其实就基本相当于是 global convolution (对于 224×224 的 ImageNet 而言)。因此,这种观察是有意义的,因为在 ViTs 的类似机制中,局部注意力 (如 Swin) 通常优于整体注意力 (如 DeiT) 。借此启发,作者希望借助局部性来解决这个问题,同时要使模型保留捕捉全局关系的能力。

观察2:把一个正方形的大 Kernel 分解成两个矩形的、平行的不规则 Kernel 可以平滑地将 Kernel 的大小扩展到61

作者的方法是用两个平行的矩形卷积来逼近超大 M×M 的 Kernel,这两个卷积的 Kernel 大小分别是 M×N 和N×M (其中 N < M),如下图2所示。这种等于是改进得 RepLKNet,只是并行的分支变为了两支。同时再多一支 5×5 的分支,并且在 BN 层的输出合并这3个分支。

33398ac2e883ed80c6a0107c4cf8040b.jpeg
图2:用两个平行的矩形卷积来逼近超大 M×M 的 Kernel,这两个卷积的 Kernel 大小分别是 M×N 和N×M (其中 N &lt; M)

这种分解不仅继承了超大 Kernel 捕捉长距离关系的能力,而且可以提取具有较短边缘的局部上下文特征。此外,如下图3所示,现有的大 Kernel 训练技术 (RepLKNet) 随着 Kernel Size 的增加,计算和存储开销也呈平方增长。N=5 被记为 Decomposed,由于不再有 31×31 的大 Kernel,所以 Decomposed 相比于结构重参数化的 31×31 会牺牲一定的精度。但是,随着卷积大小增加到全局卷积,它可以令人惊讶地将内核大小扩展到61,同时提高性能。

bc2bf5d786f86bb7ec213d0c0a89b0e8.jpeg
图3:应用于 ConvNeXt-T 时各种大 Kernel 训练方法的缩放效率

观察3:使用更多稀疏的 Group,可以提高模型的容量

ConvNeXt 的卷积操作设计原则是使用 Depth-wise Convolution,同时加大宽度,因此这个设计思路可以概括成 "use more groups, expand width"。本文的设计思路可以概括成 "use sparse groups, expand more"。具体来讲,作者首先用稀疏卷积替换密集卷积,其中稀疏核基于 SNIP 构建。在构建之后,作者用动态稀疏化技术来训练稀疏模型。其中稀疏化的权重在训练期间动态调整:先随机剪掉一部分,再随机增加相同数量的权重。这样做允许稀疏权重的动态适应,从而产生更好的局部特征。由于核在整个训练过程中是稀疏的,相应的 Params 和训练/推理的 FLOPs 都不大。作者用 40% 的稀疏度,结果被记为 Sparse Decomposed。

bc9e1bc3f2aec15f905550007295a601.jpeg
图4:ConvNeXt 在不同实验设置下的测试精度

如上图4所示为 ConvNeXt 在不同实验设置下的测试精度。从第2列可以看到,用 40% 的稀疏度之后,模型的参数量和计算量出现了明显下降,但是性能出现了暂时的下降。但是动态稀疏可以提高模型的可扩展性 (scalability)。具体而言就是,动态稀疏性允许我们扩大模型的规模。例如,使用相同的稀疏度 (40%),可以将模型宽度 (width) 扩展1.3倍,同时保持参数计数和 FLOPs 与密集模型大致相同。这带来了显著的性能提升,使用 51×51Kernel 时,性能从 81.3% 提高到 81.6%。

1.1.4 稀疏大 Kernel 网络:SLaK

到目前为止,已经可以成功地将 Kernel 的大小扩展到 61,同时不会牺牲模型的性能。扩展的方法包括2个稀疏启发的设计。在宏观层面上,构建了一个系数模型,通过动态稀疏化技术提高模型的容量。在微观层面上,作者将一个超大 Kernel 分解为两个互补的动态稀疏核,以提高超大 Kernel 的可扩展性。作者直接从头开始训练 SLaK,不涉及任何预训练或微调。

SLaK 是基于 ConvNeXt 的架构构建的,Stem 的设计继承了 ConvNeXt。SLaK-T 的每个 Stage 的块数为 [3, 3, 9, 3],SLaK-S/B 的每一阶段的块数为 [3, 3, 27, 3],Stem 层是一个 K=S=4 的卷积层。作者将 ConvNeXt 各个 Stage 的 Kernel 的大小分别增加到 [51, 49, 47, 13],并将每个 M×M 的 Kernel 替换为 M×5 和 5×M 的组合。作者发现在 M×5 和 5×M 之后加一个 BN 层之后再求和非常有必要,同时按照使用更多稀疏的 Group 的原则,作者进一步稀疏化整个网络,并将各个 Stage 的宽度扩展1.3倍,最终得到 SLaK-T/S/B 模型。

1.1.5 SLaK 实验结果

图像分类实验设置: ImageNet 数据集,300 Epochs,AdamW 优化器,Batch size:4096,weight decay:0.05,lr:4e-3,20-epoch linear warmup rate,cosine lr decay schedule,数据增强:RandAugment (rand-m9-mstd0.5-inc1), Label Smoothing (coefficient of 0.1), Mixup (α = 0.8), Cutmix (α = 1.0), Random Erasing (p = 0.25), Stochastic Depth with drop rate (0.1 SLaK-T, 0.4 SLaK-S, 0.5 SLaK-B),EMA (decay factor=0.9999)。

语义分割实验设置: ADE20K 数据集,ImageNet pre-trained 的预训练模型,UperNet 语义分割模型,训练 80K-iteration,测试 single-scale mIoU。

目标检测实验设置: PASCAL VOC 数据集,ImageNet pre-trained 的预训练模型,Faster-RCNN 目标检测模型,训练 36 Epochs,遵循 Swin。

ImageNet 实验结果

如下图4所示,在模型 Params 和 FLOPs 相似的情况下,SLaK 优于现有的卷积模型,如 ResNe(X)t 、RepLKNet 和 ConvNeXt。在不使用任何复杂的 Self-attention 模块和 Patch embedding 的情况下,SLaK 能够实现比最先进的视觉 Transformer (Swin,PVT 等)更高的精确度。更有趣的是,直接将 ConvNeXt-S 的 7×7 替换为 51×51能够提高 0.7% 的精度。

606648bdd189b387068cdf852320982e.jpeg
图4:ImageNet 实验结果

语义分割实验结果

ADE20K 数据集使用了 180K-iteration training schedule。结果如下图5所示,可以看到一个非常明显的趋势,性能随着 Kernel 大小的增加而增加:RepLKNet 将 ConvNeXt-T 的 Kernel 大小从 7×7 扩展到 31×31,mIoU 提高了 1.6%。值得注意的是,具有更大 Kernel (51×51) 的 SLaK-T 比具有 31×31 内核的 ConvNeXt-T (RepLKNet) 进一步提高了 0.9% mIoU,而所需的 FLOPs 更少。

26a59c8a1505abd4330495b5cd537127.jpeg
图5:语义分割实验结果

目标检测实验结果

如下图6所示显示了 SLaK-T、ConvNeXt-T、RepLKNet 和传统卷积网络 (ResNet) 的比较结果。同样,大 Kernel 会带来更好的性能。具体来说,具有 31×31 Kernel 的 ConvNeXt-T 比 7×7 Kernel 的平均精度 (mAP) 高 0.7%,具有 51×51 Kernel 大小的 SLaK-T 进一步带来了 1.4% 的 mAP 提升,突出了超大 Kernel 在下游视觉任务中的关键作用。

deafb3dd9fa7fa44ce9639101e814fe7.jpeg
图6:目标检测实验结果

1.1.6 SLaK 的其他讨论

浅而大 Kernel 的 CNN 比深而小 Kernel 的 CNN 具有更大的有效感受野

RepLKNet 的作者在原论文中讨论了几种网络模型的有效感受野:RepLKNet 作者认为, 就获得大的有效感受野而言, 单个大 Kernel 比许多小 Kernel 有效得多。根据有效感受野 (ERF) 理论 , ERF的大小与  成正比, 其中  是卷积核大小,  是深度, 即层数。换句话说, ERF 随 Kernel 的大小线性增长, 而随深度亚线性增长。

因此,SLaK 中的 Kernel 分解操作背后的假设是,两个独立的 M×N 和 N×M 的 Kernel 可以很好地保持大 Kernel 在捕获很大的有效感受野方面的能力,同时卷积核的短边 (N) 也有利于捕捉细粒度的局部特征。为了评估这一假设,作者对 SLaK 和 RepLKNet 捕获的 ERF 进行了比较。

作者从验证集中选择50张图像并将其大小调整为 1024×1024,测量输入图像上的像素对最后一层中生成的特征图的中心点的贡献,并将它们相加得到 1024×1024 矩阵。如下图7所示作者分析了 ResNet 和 RepLKNet 的有效感受野。可视化有效感受野的方法是:

令  表示输入图片,  表示最终的输出特征, 我们希望测量一下输入图片的每一个像素对于最终输出特征中心位置  的贡献。这可以通过 autograd 机制通过计算  对输入的导数来得到。形式上, 得分矩阵  由下式给出:

f7139c945a1ff4292d2e999a9c299350.jpeg

最后, 把得分矩阵  rescale 到 0-1。简而言之, 得分矩阵  测量输入图像上的对应像素对由最后一层产生的特征图的中心点的贡献。如上图1所示, 暗色区域分布得越离散, 代表有效感受野 (ERF) 越大。结果发现, 更多的层 (例如从 ResNet-101 到 ResNet-152) 对扩大 ERF 几乎没有帮助。相反, 较浅的大 Kernel 模型的有效感受野非常大。

f3ec00e1699b8438e43c7cde56b11d99.jpeg
图7:ConvNeXt,RepLKNet 和 SLaK 的有效感受野,以及所使用的的卷积核大小

从图7中可以看到,尽管原始的 ConvNeXt 已经将 Kernel 大小提高到 7×7,但是对输出的某个像素具有高贡献度的输入图片的像素仅出现在中心部分。对于 RepLKNet,即使它使用了 31×31 的 Kernel,也不足以让 ConvNeXt 的有效感受野覆盖整个输入。相比之下,SLaK 的高贡献像素分布在更大的输入范围内,表明 ERF 更大。另外,SLaK 的感受野呈现出了明暗交替的现象,中心区域更加明亮,外围区域更暗淡一点。这一发现与假设完全一致,即 SLaK 不仅能够捕获长程距离的依赖性,还能够捕获局部特征。

作者还做了定量分析:给定一个阈值 , 作者报告了覆盖面积的贡献分数达到了阈值  的最小矩形的面积比  ,如下图8所示。比如对于 ResNet-101 模型, 中间 102×102 的区域的贡献分数达到了阈值 20%, 所占面积为  。较大的值代表模型考虑更大范围的像素来做决策。可以看到, 有了全局内核, SLaK 自然会比 ConvNeXt 和 RepLKNet 的最小矩形的面积比  值高。

f3ffa0453a0ed6765b1f7bede69d5094.jpeg
图8:ERF 的定量分析结果

使用更多稀疏的 Group,可以提高模型的容量

除此之外,本文的第3点观察 "使用更多稀疏的 Group,可以提高模型的容量"。为了维持模型的参数量和计算量尽量接近,当模型的稀疏度足够低时,宽度就得小一些;当模型的稀疏度很高时,宽度就可以大一些。因此,存在一个 Sparsity-Width 的权衡。为了更好地理解这种权衡,作者选择了 Sparsity-Width 的5种组合,所有设置都有大约 5.0M 的 FLOPs,但网络宽度不同。实验在 SLaK-T 上进行。正如作者预期的那样,随着模型宽度的增加,模型的性能不断提高,直到宽度因子达到1.5倍。

之后,随着稀疏度的进一步增大,模型开始变得高度稀疏,使得训练变得很困难,所以此时再增加宽度,就会开始损害性能。

5199f3bd6cf5d74a18d18ee9b283e280.jpeg
图9:Sparsity-Width 的权衡

总结

本文发现持续地增加卷积核会带来性能饱和,所以本文意在探索是否可以通过策略性地扩大卷积来消除性能差距。经过不断探索,本文作者从稀疏性的角度提出了一个应用超大 Kernel 的方法,它可以平滑地将 Kernel 扩展到 61×61,并具有更好的性能。因此作者将模型命名为稀疏大 Kernel 网络 (SLaK),一种配备 51×51 卷积核的纯 CNN 架构。主要的策略是把一个正方形的大 Kernel 分解成两个矩形的、平行的不规则 Kernel,以及使用更多稀疏的 Group,同时提高模型的宽度。

往期回顾

卡尔曼滤波及其变种有哪些?究竟滤了个啥?

95733d16e638bccf60745994295bf737.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

ab9c0b68709a38e6c94b91a7ed88de4b.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

bfe6e31562ffddf791481280aa9bcb05.jpeg

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值