【深度学习】CNN的反击!InceptionNeXt: 当 Inception 遇上 ConvNeXt

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

导读

 

受 Inception 的启发,本文作者提出将大 Kernel 的 Depth-Wise 卷积沿 channel 维度分解为四个并行分支。本文提出了 IncepitonNeXt,InceptionNeXt-T 的训练吞吐量比 ConvNeXt-T 高1.6倍,在 ImageNet-1K 上的 top-1 精度提高了 0.2%。

本文目录

1 InceptionNeXt: 当 Inception 遇上 ConvNeXt
(来自 NUS, Sea AI Lab)
1 InceptionNeXt 论文解读
1.1 背景和动机
1.2 MetaNeXt 架构
1.3 Inception Depthwise Convolution
1.4 InceptionNeXt 模型
1.5 实验结果

太长不看版

受 Vision Transformer 长距离依赖关系建模能力的启发,最近一些视觉模型开始上大 Kernel 的 Depth-Wise 卷积,比如一篇出色的工作 ConvNeXt。虽然这种 Depth-Wise 的算子只消耗少量的 FLOPs,但由于高昂的内存访问成本 (memory access cost),在高性能的计算设备上会损害模型的效率。举例来说,ConvNeXt-T 和 ResNet-50 的 FLOPs 相似,但是在 A100 GPU 上进行全精度训练时,只能达到 60% 的吞吐量。

针对这个问题,一种提高速度的方法是减小 Kernel 的大小,但是会导致显著的性能下降。目前还不清楚如何在保持基于大 Kernel 的 CNN 模型性能的同时加速。

为了解决这个问题,受 Inception 的启发,本文作者提出将大 Kernel 的 Depth-Wise 卷积沿 channel 维度分解为四个并行分支,即小的矩形卷积核:两个正交的带状卷积核和一个恒等映射。通过这种新的 Inception Depth-Wise 卷积,作者构建了一系列网络,称为 IncepitonNeXt,这些网络不仅具有高吞吐量,而且还保持了具有竞争力的性能。例如,InceptionNeXt-T 的训练吞吐量比 ConvNeXt-T 高1.6倍,在 ImageNet-1K 上的 top-1 精度提高了 0.2%。

本文的目标不是扩大卷积核。相反,本文以效率为目标,在保持相当的性能的前提下,以简单和速度友好的方式分解大卷积核。

1 InceptionNeXt: 当 Inception 遇上 ConvNeXt

论文名称:InceptionNeXt: When Inception Meets ConvNeXt

论文地址:

https://arxiv.org/pdf/2303.16900.pdf

1.1 背景和动机

回顾深度学习的历史,卷积神经网络 (CNN) 无疑是计算机视觉中最受欢迎的模型。2012年,AlexNet 在 ImageNet 竞赛中获胜,开启了 CNN 在深度学习特别是计算机视觉领域的新时代。从那时起,众多的 CNN 已经成为潮流的引领者,如 Network In Network,VGG,Inception Nets,ResNe(X)t,DenseNet 等。

受 Transformer 在 NLP 中成就的影响,研究人员尝试将其模块或块集成到视觉 CNN 模型里面,比如 Non-local Neural Networks 和 DETR。此外,Image GPT (iGPT)[1]受语言生成预训练的启发,将像素视为 token,并采用纯Transformer 进行视觉自监督学习。然而,由于将像素视为 token 导致的计算成本太高,iGPT 处理高分辨率图像的能力也受限。

ViT 开创性地解决了这个问题,通过将图片 Patch 视为 token,并提出了一个简单的 patch embedding 模块来生成 input 的 Embedding。ViT 利用一个纯 Transformer 模型作为图像分类的 Backbone,在经过了大规模监督图像预训练后得到了惊人的表现。而且,ViT 进一步点燃了 Transformer 在计算机视觉中的应用热情。许多 ViT 变体,如 DeiT 和 Swin,在多种视觉任务中取得了显著的性能。类 ViT 模型优于传统 CNN 的性能 (Swin-T 81.2% ImageNet-1K v.s.ResNet-50 76.1% ImageNet-1K) 使得许多研究者相信 Transformer 最终将取代 CNN 并统治计算机视觉领域。

CNN 是时候反击了!通过引入 DeiT 和 Swin 中先进的训练技术,ResNet strikes back 这个工作表明,ResNet-50 的性能可以提高 2.3%,达到 78.4%。此外,ConvNeXt 表明,使用像 GELU 激活函数这样的现代模块和类似于注意力窗口大小的大 Kernel,CNN 模型在各种设置和任务中可以稳定地优于 Swin Transformer。ConvNeXt 为代表的现代 CNN 模型中,共同的关键特征是接受野较大,且使用了 Depthwise Convolution 获得。

尽管 Depthwise Convolution 的 FLOPs 很小,但是它实际上是一个“昂贵的”运算符,因为它带来了很高的内存访问成本 (memory access cost),这个问题使它成为了计算密集型设备的瓶颈。如下图1所示,尽管 FLOPs 相似,但是 Kernel Size 为 7×7 大小的 ConvNeXt-T 比 3×3 的 ConvNeXt-T 慢1.4倍,比 ResNet-50 慢1.8倍。如果强行把 Kernel Size 减掉,会导致性能下降。比如与 ConvNeXt-T/k7 相比,ConvNeXt-T/k3 在 ImageNet-1K 数据集上的 top-1 精度下降了 0.6%。

b38e57443a19a137fa48b48f33975885.jpeg
图1:模型精度和训练吞吐量之间的 Trade-off

目前还不清楚如何在保持大 Kernel CNN 性能的同时加速它们。本文最初的发现表明,并不是所有的输入通道都需要经历计算成本高昂的 Depth-wise Convolution 运算。因此,作者提出保留部分信道不变,只对部分信道进行深度卷积运算。首先对大核进行分解,分成几组小的卷积核。1/3 的通道以 3×3 为核,1/3 的通道以 1×k 为核,剩下的 1/3 的通道以 k×1 为核。这个新的简单,廉价的运算符称为 Inception Depthwise Convolution,基于它构建的模型 InceptionNeXt 在精度和速度之间实现了更好的平衡。比如 InceptionNeXt-T 获得了比 ConvNeXt-T 更高的精度,同时享受了类似于 ResNet-50 的1.6倍训练吞吐量提升。

c27c33ad5ba673a775c4be32e23d8ca3.jpeg
图2:MetaFormer, MetaNext, ConvNeXt 和 InceptionNeXt

1.2 MetaNeXt 架构

MetaNeXt 是一种对于 ConvNeXt 的抽象架构。在一个 MetaNeXt Block 中,输入 首先这样操作:

8c2b99fbd2d8155e763e411b66dada4e.png

式中,,分别代表 Batch size,通道数,高和宽。然后以上的输出进行归一化操作:

5eba0f681aff14e700a653e82aa08027.png

经过归一化后,将得到的特征输入到由两个全连接层组成的 MLP 模块中,两层之间夹有 GELU 激活函数,与 Transformer 中的 FFN 相同。两个全连接层也可以通过 1×1 卷积实现。同时采用 Short-cut 连接:

74ec95680a42b7dc17309fe47ba872d9.png

和 MetaFormer 对比

如上图2所示,可以发现 MetaNeXt 块与 MetaFormer 块共享类似的模块,例如 token mixer 和 MLP。然而,这两种模型之间的关键区别在于 Shortcut 的数量。MetaNeXt 是一种单残差的架构,而 MetaFormer 是一种双残差的架构。从这个角度来看,MetaNeXt 块可以看作是把 MetaFormer 的两个 Sub-Block 进行合并,以简化整体架构。因此,与 MetaFormer 相比,MetaNeXt 体系结构的速度更快。但是,这种更简单的设计有一个限制,即:MetaNeXt 中的 token mixer 不能太复杂,比如把 ConvNeXt 中的 Depthwise Convolution 换成 Attention 以后,作者发现精度掉到了 3.9%。

1.3 Inception Depthwise Convolution

针对传统的大 Kernel Depthwise Convolution 阻碍模型速度的问题, 本文提出了 Inception Depthwise Convolution。Inception 这个模型利用了小 Kernel (如 和大 Kernel (如 5×5) 的几 个分支。同样地, Inception Depthwise Convolution 采用了 作为基本分支之一, 但避免了大 的矩形 Kernel, 因为它们的实际速度较慢。大的 矩形 Kernel 被分解为 和 。

对于输入 , 首先沿着 channel 的维度分为 4 个 group:

1e1d358c604bb2b49f0963ad4c815115.png

然后,这4个特征分别通过4个不同的算子:

eed54c5ac12f5c20b04c4ac2edaa24cf.png

其中, 表示默认设置为3的小矩形 Kernel 大小, 表示默认设置为11的大 Kernel 大小。最后, 每个分支的输出被拼接起来:

05101bedb8a22b0d577d8e3bdaadff17.png

以上过程的 PyTorch 伪代码如下:

import torch.nn as nn

class InceptionDWConv2d(nn.Module):
    def __init__(self, in_channels, square_kernel_size=3, band_kernel_size=11, branch_ratio=1/8):
        super().__init__()
        
        gc = int(in_channels * branch_ratio) # channel number of a convolution branch
        
        self.dwconv_hw = nn.Conv2d(gc, gc, square_kernel_size, padding=square_kernel_size//2, groups=gc)
        
        self.dwconv_w = nn.Conv2d(gc, gc, kernel_size=(1, band_kernel_size), padding=(0, band_kernel_size//2), groups=gc)
        
        self.dwconv_h = nn.Conv2d(gc, gc, kernel_size=(band_kernel_size, 1), padding=(band_kernel_size//2, 0), groups=gc)
        
        self.split_indexes = (gc, gc, gc, in_channels - 3 * gc)
        
    def forward(self, x):
        # B, C, H, W = x.shape
        x_hw, x_w, x_h, x_id = torch.split(x, self.split_indexes, dim=1)
        
        return torch.cat(
            (self.dwconv_hw(x_hw), 
            self.dwconv_w(x_w), 
            self.dwconv_h(x_h), 
            x_id), 
            dim=1)

Inception Depthwise Convolution 和其他几种算子的计算复杂度比较如下图3所示。可以看出,比普通卷积的效率要高得多。

5bae074b3cbadebaa3ed27b429f06e30.png
不同类型算子的特性

1.4 InceptionNeXt 模型

基于 InceptionNeXt Block,作者构建了一系列 InceptionNeXt 模型。与 ResNet 和 ConvNeXt 类似,InceptionNeXt 也采用了4 Stage 的模型框架。InceptionNeXt 采用 Batch Normalization,因为强调推理速度。与 ConvNeXt 的另一个不同之处在于,InceptionNeXt 在 Stage 4 的 MLP 模块中使用的 Expansion Ratio 为3,并将保存的参数移动到分类器中,这可以帮助减少一些计算量。不同大小的 InceptionNeXt 模型的参数配置如下图4所示。

3051688f9a51f83c9317d30647e55f15.jpeg
图4:不同大小的 InceptionNeXt 模型的参数配置

1.5 实验结果

ImageNet-1K 图像分类

评价视觉基础模型的重要指标之一是 ImageNet-1K 直接训练的图像分类结果。InceptionNeXt 使用的超参数如下图5所示,实验结果如图6所示。数据增强的方式依然包括:random resized crop, horizontal flip, RandAugment, Mixup, CutMix, Random Erasing 和 color jitter。正则化的方式依然包括:label smoothing, stochastic depth, 和 weight decay。

80e5478daa74356f55dbd3d5c82e60aa.jpeg
图5:ImageNet-1K 实验的训练超参数
8aee841fea0bfc3f1da9c5122689e19c.jpeg
图6:ImageNet-1K 图像分类实验结果

作者将 InceptionNeXt 与各种最先进的模型进行比较,包括基于注意力的模型和基于卷积的模型。从图6中可以看出,InceptionNeXt 不仅具有较高的竞争性能,而且具有较高的速度。例如,InceptionNeXt-T 不仅比 ConvNeXtT 高出 0.2%,而且训练/推理吞吐量也比 ConvNeXts 高 1.6×/1.2×,与 ResNet-50 相似。也就是说,InceptionNeXt-T 既享有 ResNet-50 的速度,又享有 ConvNeXt-T 的精度。

同样作者也遵循 ConvNeXt 的做法做了一些直筒架构的模型,实验结果如下图7所示。实验结果如下图7所示。可以看到,在直筒形状的架构下,InceptionNeXt 也可以表现得很好,证明了 InceptionNeXt 在不同的框架之间表现出良好的泛化性能。值得注意的是,把 ConvNeXt 中的 Depthwise Convolution 换成 Attention 以后,得到的 MetaNeXt-Attn 无法训练收敛,仅达到 3.9% 的精度。这个结果表明,与 MetaFormer 中的 token mixer 不同,MetaNeXt 中的令牌混合器不能太复杂。

ff43e8fe2cd83714aa49752144771e85.jpeg
图7:直筒架构模型实验结果

ADK20K 语义分割

作者使用 ImageNet-1K 预训练的权重,使用 UperNet 作为分割头,使用 AdamW 优化器训练模型,学习率为 6e-5,Batch Size 大小为16,迭代次数为 160K。使用 Semantic FPN 作为分割头,Batch Size 大小为32,迭代次数为 40K。实验结果如图8和图9所示。

a19c4b04be7aab8fefe02e6f0a9ed46e.jpeg
图8:以 UperNet 为分割头的 ADE20K 语义分割实验结果
2e1f14c379427281662f8418c38c58c5.jpeg
图9:以 Semantic FPN 为分割头的 ADE20K 语义分割实验结果

对于以 UperNet 为分割头的实验结果,可以看出,在不同的模型尺寸下,InceptionNeXt 的性能始终优于 Swin 和ConvNeXt。对于以 Semantic FPN 为分割头的实验结果,可以看出,在不同的模型尺寸下,InceptionNeXt 的性能始终优于 PVT 和 PoolFormer。这些结果表明,InceptionNeXt 对于密集预测任务也有很高的潜力。

总结

本文认为在一个卷积视觉模型中,并不是所有的输入通道都需要经历计算成本高昂的 Depth-wise Convolution 运算。因此,作者提出保留部分信道不变,只对部分信道进行深度卷积运算。首先对大核进行分解,分成几组晓得卷积核。1/3 的通道以 3×3 为核,1/3 的通道以 1×k 为核,剩下的 1/3 的通道以 k×1 为核。这个新的方式称为 Inception Depthwise Convolution,基于它构建的模型 InceptionNeXt 在精度和速度之间实现了更好的平衡。比如 InceptionNeXt-T 获得了比 ConvNeXt-T 更高的精度,同时享受了类似于 ResNet-50 的1.6倍训练吞吐量提升。

参考

  1. ^Generative Pretraining From Pixels

 
 

8e2fae9908caef03e26cb62cbd18bc47.jpeg

 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
当"Inception"遇上"ConvNet"的时候,我们可以想象到一种全新的神经网络模型,结合了二者的精华,提升了模型的表达能力和性能。 首先,"Inception"是一种著名的卷积神经网络模型,以其高度模块化和多尺度特征提取而闻名。而"ConvNet"指的是卷积神经网络,它主要用于图像处理、计算机视觉等任务。 当这两种模型相结合时,我们可以期望到以下优势。首先,通过引入"Inception"的模块化设计,我们可以更好地平衡不同层级的特征提取,从而充分利用图像中的多尺度信息。这将更好地捕捉到图像中的细节和全局特征。 其次,将"Inception"的思想融入"ConvNet"中,可以增加模型的层数和宽度,从而增强模型的非线性拟合能力和表示能力。这将对于更复杂的图像任务来说,如物体识别、目标检测等,具有重要的意义。 此外,结合了两者的特点,我们可以通过精心的设计,进一步提高模型的计算效率。例如,可以通过引入空间金字塔池化等技术,减少模型的参数量和计算复杂度,提高模型的训练和推理速度。 总的来说,当"Inception"遇上"ConvNet",我们可以期待到一个更强大、更高效的神经网络模型。它将继承"Inception"的模块化设计和多尺度特征提取能力,同时结合了"ConvNet"的表达能力和广泛应用性。这将推动图像处理和计算机视觉领域的发展,为更广泛的应用场景提供更好的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值