即插即用 | CNN与Transformer都通用的Trick,即插即涨点即提速!(二)

简介: 即插即用 | CNN与Transformer都通用的Trick,即插即涨点即提速!(二)

3、本文方法


3.1、ParC Operation

1、Vanilla Depth-wise Convolution

为了描述在B×C×H×W形状的4D输入张量上以水平维进行的一维深度卷积(称为Conv1d-H),可以首先关注一个特定的通道。将输出表示为 ,输入为,卷积权重为 。然后,带零填充的Pytorch型卷积(即F.conv1d)可以表示为:

其中,用于抵消输入两侧标量的额外填充。等式1中,是其局部相邻输入,邻域的大小由卷积核大小控制。因此,单个小卷积核卷积层不可能收集远距离信息。为了解决标准卷积的这个缺点,作者提出了具有全局感受野的ParC

2、ParC: 位置感知循环卷积

image.png

定义作为卷积核权重,作为位置嵌入。对应图2,ParC可以描述为:

image.png

其中。是固定大小的可学习kernel(由超参数指定),而是调整后的可学习kernel,其大小与相应的输入特征映射大小匹配。表示位置嵌入。这里采用插值函数(例如bi-linear, bi-cubic)来适应kernel的大小和位置嵌入(从到H)。mod表示模运算。与普通卷积相比,ParC算子有4个主要区别:

  1. Global kernel
  2. Circular Convolution
  3. Positional Embedding
  4. 1-D Decomposition

为了有效地提取全局特征,这些设计都是必不可少的,这在后面的消融实验中得到了证明。

Global kernel and Circular Convolution

为了在整个输入映射中提取全局关系,ParC采用了Global kernel,其大小与相应特征映射的大小相同,表示为或。在某些架构中,每个阶段都会缩小一半。例如,在ResNet50ConvNeXt中,4阶段的特征分辨率分别为[56、28、14、7]。但仅仅增大普通卷积核本身的大小并不能有效地提取全局关系。由于使用了零填充,即使kernel大小增加到分辨率,kernel权重也会与零填充对齐,除了绝对位置之外,零填充无法提供有用的信息。当kernel与图片边缘对齐时,这种影响最为严重——对于2D卷积,3/4的输入实际上是零。因此,还建议使用Circular Convolution。在进行Circular Convolution时,在窗口滑动期间,kernel权重总是与有效像素对齐,如图2所示。

Positional Embedding

正如在之前的工作中得出的结论,标准卷积可以在使用零填充时对位置信息进行编码。然而,Circular Convolution会周期性地重用输入图片,这会丢失部分位置信息。为了克服这个问题,引入了可学习的位置编码,它被插入到Circular Convolution之前。在接下来的实验中证明了这对模型的性能非常重要,特别是对于对空间信息敏感的下游任务。

1D Decomposition

最后,为了确保模型尺寸和计算的可接受成本。将2D卷积和位置编码分为H(水平)和V(垂直)方向,这样可以将参数和FLOP的数量从O(H×W)减少到O(H+W),当分辨率较大时,这是一个相当大的压缩。

Implementation of Circular Convolution

从概念上讲,Circular Convolution需要与普通卷积分开实现,因为在计算卷积像素的索引时有额外的模op。实际上,在调用普通的1D卷积例程之前,可以使用“concat”函数将输入特征映射与其副本填充,从而轻松实现该功能(参见算法1)

当考虑垂直尺寸W和通道尺寸C时,公式2可以扩展为

image.png

和,这是通道C的单层深度ParC-H的完整表示,输入分辨率为H×W。在ResNet50 ParC中,还将每个通道的ParC扩展到其稠密对应项,并重新引入通道相互作用,可以表示为:

image.png

这里 和。

3.2、Fast-ParC: 用FFT等价形式加速ParC

image.png

如图3所示,当特征分辨率较小时(如7×7),应用ParC可以有效地提取全局特征并降低计算复杂度。但随着输入分辨率的提高,ParC的复杂度迅速超过7×7卷积。为了克服这个问题提出了一个名为Fast ParCParC加速版本。当特征分辨率较大时(例如,56×56),Fast ParCParC效率更高。事实上,Fast ParC虽然具有全局提取能力,但在较宽的分辨率区间内,其效率甚至比7×7卷积更高。

借助于快速傅里叶变换(FFT)设计了Fast ParC。众所周知,FFT可以简化线性卷积运算。但根据卷积定理,对于离散信号,傅里叶域的点积更接近于空间域的Circular Convolution。这正是ParC和普通卷积的区别之一。

此外,ParC的另外两个特征,global kernelright padding,也很好地符合傅里叶域卷积的默认模式。这一有趣的事实能够为ParC开发一个非常整洁、漂亮的频域实现。将、和定义为时域中的输入、权重和输出序列,、和定义为傅里叶域中的序列,可以得到以下等价关系:

定理1:ParC等价定理

image.png

公式5显示了两个严格等效的数学表达式。空间域中的ParC需要卷积式运算,而在傅里叶域中,它变成了简单的逐元素乘法。基于此提出了一种傅里叶域形式的ParC运算,称为Fast ParC

理论上可以证明,Fast ParC在空间域上严格等价于ParC。这两种实现之间的误差可以忽略不计。可以根据实际使用的平台,分别选择适当的ParC实现进行训练和推理。这为ParC提供了强大的灵活性。Fast ParC的优势显而易见:

首先,长度为N的一维傅里叶变换的乘法复杂度仅为,而空间域的一维卷积需要。

image.png

与表1相对应,当N较大时,空间卷积的复杂度明显超过了基于FFT的卷积。ParC使用Global kernelCircular Convolution,这与傅里叶卷积的默认空间格式相匹配。考虑到下游任务,如多实例检测或分割,通常需要更高的分辨率。例如,对于COCO,常用的测试分辨率为1280×800,对于ADE20k为2048×512。当N较大时,Fast ParC可以节省模型的FLOP并实现更好的加速。Fast ParC还允许在计算预算可接受的情况下,将ParC用于较浅的阶段。这对于在新架构中实现ParC是必要的。

另一个优势实际上来自对FFT的软件/硬件支持。由于FFT是一种经典的信号处理算法,许多平台都对其加速提供了现成的支持。当ParC应用于FPGA等定制平台时,许多资源(如片上DSP、预先设计的IP核)可以得到有效利用。

此外,通用计算平台也有现成的工具包(例如CPU:torch.fftnumpy.fftGPU:cuFFT)。Fast ParC的灵活性使之能够根据不同的标准(例如,最大吞吐量、最小内存占用)以及不同计算平台中算法的实际偏好选择更好的实现。

幸运的是,FastParC完全等同于ParC,并且替换不需要任何额外的转换。可以根据平台的要求选择ParC的具体实现形式。由于ParCFast ParC拥有最高级别的灵活性,用于训练和推理的实现也可以解耦。

3.3、在ViT和ConvNets上应用ParC

为了验证ParC作为即插即用元运算符的有效性,基于第3.1节中提出的操作构建了一系列基于ParC的模型。这里,基线模型包括ViTConvNets。具体而言,对于ViTMobileViT被选为基线,因为它在最近提出的轻型混合结构中实现了最佳参数/精度权衡。

采用ResNet50MobileNetv2MobileViTConvNext作为ConvNet基线。ResNet50是实际应用中使用最广泛的模型。MobileNetV2是移动设备中最流行的轻量化模型。ConvNext是第一个ConvNet,它保留了纯ConvNets架构,同时集成了ViT的一些特性。在这里采用的4种模型都具有代表性。

1、ParC-ViTs

image.png

ParC-MetaFormer Block

如图4和图5所示,ConvNetsViTs的外层结构差异较大。vit通常采用 meta-former block作为基本架构。为了在ViTs上应用ParC运算符,作者设计了ParC-MetaFormer block,并使用它来替换ViTs中的transformer blocks

Adopting MetaFormer like structure

MetaFormer块是ViT最常用的块结构,它通常由2个组件组成:token mixer channel mixer。这两个组件都使用残差结构。采用ParC作为token mixer来构建ParC MetaFormer块。这样做是因为ParC可以从全局空间中提取全局特征并交互像素之间的信息,这满足了token mixer模块的要求。

与复杂度为二次的自注意力不同,ParC在计算上效率更高。用ParC替换此部分可以显著降低计算成本。在ParC MetaFormer区块,采用了ParC-HParC-V的串行结构。考虑到对称性,一半通道首先通过ParC-H,其他通道首先通过ParC-V(如图4所示)。

Adding channel wise attention in channel mixer part

尽管ParC保持了全局感受野和位置嵌入,但ViTConvNets的另一个好处是数据驱动。在ViT中,自注意力模块可以根据输入调整权重。这使得ViT数据驱动模型能够专注于重要特性并抑制不必要的特性,从而带来更好的性能。

以前的文献已经解释了保持模型数据驱动的重要性。通过用提出的全局循环卷积代替自注意力,得到了一个能够提取全局特征的纯卷积网络。但被替换的模型不再是数据驱动的。为了进行补偿,将通道注意力模块插入 channel mixer部分,如图4所示。

遵循SENet,首先通过全局平均池化聚合输入特征并获取聚合特性,然后将馈入多层感知机以生成通道权重,然后乘以通道,生成最终输出。

MobieViT-ParC Network

目前,现有的混合结构基本上可以分为3种主要结构,包括串行结构、并行结构和分叉结构。在所有三种结构中,第三种结构目前性能最佳。MobileViT也采用了分叉结构。受此启发,基于MobileViT,还构建了具有分叉结构的模型。MobileViT由两种主要类型的模块组成。浅层由MobileNetV2区块组成,具有局部感受野。深层阶段由ViT块组成,享有全球接受场。保留所有MobileNetV2块,并用相应的ParC块替换所有ViT块。此替换将模型从混合结构转换为纯ConvNet,同时保留其全局特征提取能力。

2、ParC-ConvNets

image.png

对于ParC ConvNets,专注于为ConvNet提供全局感受野。用ParC操作替换标准卷积(如图5(a)所示),作者构建了不同的基于ParC的块。以往的混合结构工作得出了类似的结论:早期使用局部模块,深层使用全局提取模块的模型性能最佳。由于ParC拥有一个全局感受野,按照这个规则将基于ParC的块插入ConvNets(如图5(e)所示)。

ParC BottleNeck and ResNet50-ParC Network

ResNet是最经典的ConvNet之一。只需将原始ResNet50BottleNeck的3×3卷积替换为ParC运算符,即可获得ParC BottleNeck(见图5(b))。由于ParC-HParC-V的特性可能有显著差异,因此它们之间没有引入通道相互作用。这类似于采用group=2的组卷积。ResNet的主要部分可以分为4个阶段,每个阶段由几个重复的瓶颈块组成。

具体来说,ResNet50在4个阶段中分别有[3、4、6、3]个块。通过将ResNet50倒数第二阶段的最后1/2和最后阶段的最后1/3替换为ParC BottleNeck,获得了ResNet50 ParC

ParC-MobileNetV2 Block and MobileNetV2-ParC Network

MobileNetV2是轻量级模型的典型代表。通过将Inverted Bottleneck中的3×3深度旋转替换为depthwise ParC,得到了ParC-MobileNetV2块(见图5(c))。MobileNetV2Resnet50要更细更深,7个阶段的块数分别为[1、2、3、4、3、3、1]。通过将第4阶段的最后1/2块和第[5,6]阶段的最后1/3块替换为ParC-MobilenetV2块,可以获得MobilenetV2 ParC

ParC-ConvNeXt Block and ConvNeXt-ParC Network

ConvNeXt对原始ResNet50结构进行了一系列修改,以学习transformers。在此期间,3×3卷积替换为7×7深度卷积。这扩大了局部感受野,但仍无法分级全局信息。作者进一步用depthwise ParC替换ConvNeXt块中的7×7深度卷积。由此得到了ParC ConvNeXt区块(见图5(d))。将ConvNeXt最后两个阶段的最后1/3块替换为ParC ConvNeXt块,得到了ConvNeX t ParC的一个示例。将ConvNeXt-T中的基本通道数减少到48(即每个阶段为[48,96,192,384]),以获得一个轻量级ConvNeXt-XT,这在部署边缘计算设备时更受欢迎,而且实验周期也更短。

请注意,在ParC MetaFormer中,采用了ParC-HParC-W序列,以保持感受野与自注意力一致,因为这种设计用于取代自注意力。在ParC ConvNets中采用了ParC-HParC-V的并行结构(每一层都是单层),如图5所示。根据实验结果,这种设置已经可以提供足够的性能增益来对抗普通ConvNet。事实上,由于不仅使用一个ParC ConvNet块,ParC ConvNets仍然具有全局感受野。


4、实验


4.1、ImageNet-1K

image.png

image.png

4.2、语义分割与目标检测

image.png

4.3、实例分割

4.4、速度与参数对比


5、参考


[1].Fast-ParC:Position Aware Global Kernel for ConvNets and ViTs.


6、推荐阅读


非广告 | AI全栈工程师学习+进阶+实战笔记

TensorRT系列 | 开篇

Pillar-Base | 超越SECOND、PointPillar等一系列3D目标检测,PillarNet=Pillar王者

相关文章
|
1天前
|
机器学习/深度学习 自然语言处理 异构计算
Python深度学习面试:CNN、RNN与Transformer详解
【4月更文挑战第16天】本文介绍了深度学习面试中关于CNN、RNN和Transformer的常见问题和易错点,并提供了Python代码示例。理解这三种模型的基本组成、工作原理及其在图像识别、文本处理等任务中的应用是评估技术实力的关键。注意点包括:模型结构的混淆、过拟合的防治、输入序列长度处理、并行化训练以及模型解释性。掌握这些知识和技巧,将有助于在面试中展现优秀的深度学习能力。
42 11
|
1天前
|
机器学习/深度学习 编解码
LeViT-UNet:transformer 编码器和CNN解码器的有效整合
LeViT-UNet:transformer 编码器和CNN解码器的有效整合
54 0
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
一文介绍CNN/RNN/GAN/Transformer等架构 !!
一文介绍CNN/RNN/GAN/Transformer等架构 !!
20 4
|
1天前
|
机器学习/深度学习 自然语言处理 并行计算
神经网络结构——CNN、RNN、LSTM、Transformer !!
神经网络结构——CNN、RNN、LSTM、Transformer !!
155 0
|
1天前
|
机器学习/深度学习 并行计算 算法
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
66 0
|
1天前
|
机器学习/深度学习 编解码 算法
助力目标检测涨点 | 可以这样把Vision Transformer知识蒸馏到CNN模型之中
助力目标检测涨点 | 可以这样把Vision Transformer知识蒸馏到CNN模型之中
49 0
|
1天前
|
机器学习/深度学习 编解码 测试技术
超强Trick | 如何设计一个比Transformer更强的CNN Backbone
超强Trick | 如何设计一个比Transformer更强的CNN Backbone
44 0
|
10月前
|
机器学习/深度学习 编解码 计算机视觉
LeViT-UNet:transformer 编码器和CNN解码器的有效整合
levi - unet[2]是一种新的医学图像分割架构,它使用transformer 作为编码器,这使得它能够更有效地学习远程依赖关系。levi - unet[2]比传统的U-Nets更快,同时仍然实现了最先进的分割性能。
154 0
|
12月前
|
机器学习/深度学习 编解码 边缘计算
即插即用 | CNN与Transformer都通用的Trick,即插即涨点即提速!(一)
即插即用 | CNN与Transformer都通用的Trick,即插即涨点即提速!(一)
290 0
|
12月前
|
机器学习/深度学习 编解码 计算机视觉
建议背诵 | 字节用4大准则教你设计一个拥有CNN的速度,Transformer精度的模型!
建议背诵 | 字节用4大准则教你设计一个拥有CNN的速度,Transformer精度的模型!
48 0

热门文章

最新文章