模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

794次阅读
没有评论

点击下方卡片,关注「集智书童」公众号

点击加入👉「集智书童」交流群

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

传统按通道逐一削减的方法难以有效削减深度卷积神经网络模型(如具有深度卷积层和某些高效模块的流行反向残差模块)以及某些高效模型(如某些正则化层存在的情况下)。先前的深度削减方法(通过减少网络深度)不适合削减某些高效模型。此外,直接通过直接删除激活层微调子网会破坏原始模型权重,从而阻碍了修剪后的模型实现高性能。

为解决这些问题,作者提出了一种新颖的深度削减方法。UPDP提出了子网的新的模块削减策略和渐进训练方法。此外,作者还扩展了作者的削减方法到视觉 Transformer 模型。

实验结果表明,UPDP在各种修剪配置下始终优于现有的深度削减方法。作者使用UPDP在ConvNeXtV1上获得三个修剪的ConvNeXtV1模型,这些模型在可比的推理性能下超过了大多数最先进的有效模型。UPDP还在视觉 Transformer 模型上实现了最先进的修剪性能。

Introduction

深度神经网络(DNNs)在各种任务上取得了显著的进展,在工业应用中取得了显著的成功。在这些应用中,模型优化的追求突出地表现为一个普遍的需求,它提供了提高模型推理速度的潜力,同时最小化精度折衷。这一追求包括各种技术,尤其是模型削减、量化以及高效模型设计。高效模型设计包括神经架构搜索(NAS)和手工设计方法。模型削减已成为工业应用中优化模型的主要策略。作为主要加速方法,模型削减关注于有意去除冗余权重,同时保持准确性。

这个过程通常涉及三个连续步骤:

  1. 初始基准模型训练
  2. 后续削减不太重要的权重或层通道
  3. 最后对修剪后的模型进行微调阶段

值得注意的是,模型削减可以分为非结构削减和结构削减。结构削减是工业应用中模型部署的首选方法,主要是因为硬件限制。与非结构方法不同,结构削减在卷积核层中的不太重要权重以稀疏方式在每个核通道中零化,而结构削减包括通道削减和模块削减等技术。通道削减关注于在核内消除整个通道滤波器,而模块削减则涉及更大的规模,通常针对完整的模块。由于模块削减通常导致模型深度减少,因此也称为深度削减器。

卷积神经网络(CNN)模型的设计演变导致了更高效模型的开发。例如,MobileNetV2 采用许多深度卷积层和反转残差模块堆叠,实现了高性能,同时最小化了参数和浮点运算。ConvNeXtV1 利用大核技巧并堆叠反转残差模块,实现了显著的效率。传统的按通道削减方法面临深度卷积层的挑战,因为稀疏计算和更少的参数。此外,现在模型平台更喜欢更高的并行计算,如GPU,按通道削减方法会使高效模型更薄、更稀疏,导致低硬件利用率,从而降低可实现的硬件效率。

为了解决这些问题,DepthShrinker  和 Layer-Folding 提出了通过重参化技术对MobileNetV2 进行优化以降低模型深度的方法。然而,这些方法存在一定的局限性。

  • 首先,直接通过移除激活层微调子网可能会损害基准模型权重的完整性,从而阻碍获得高性能。
  • 其次,这些方法的使用受到限制,它们无法剪枝具有某些规范化层(如LayerNorm 或 GroupNorm 层)的模型,因为重参化技术无法将不是BatchNorm层的规范化层合并到相邻卷积层或全连接层。
  • 最后,这些方法无法应用于视觉 Transformer 模型进行优化,因为存在LayerNorm层。

为了缓解这些问题,作者提出了一个渐进训练策略和一种新的模块削减方法,该方法可以剪枝CNN和视觉 Transformer 模型。渐进训练策略可以在充分利用基准模型权重的子网结构上平滑地转移基准模型结构,从而实现更高的准确性。

作者提出的模块削减方法可以处理现有的规范化层问题,理论上可以处理所有激活和规范化层。因此,UPDP可以剪枝视觉 Transformer 模型,这是现有深度削减方法不适用的。实验评估涵盖了ResNet34、MobileNetV2和ConvNeXtV1,展示了优越的剪枝能力。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

如图1所示,UPDP修剪的ConvNeXtV1模型超过了大多数最先进的有效模型,具有可比的推理性能。值得注意的是,作者将探索延伸到视觉 Transformer 模型,与其他视觉 Transformer 剪枝方法相比,取得了领先的剪枝结果。

主要贡献可以总结如下:

  1. 提出了一种统一的、高效的深度剪枝方法,用于优化CNN和视觉 Transformer 模型
  2. 提出了一种用于子网优化的渐进训练策略,并与使用重参化技术的新的模块削减策略相结合
  3. 在CNN和视觉 Transformer 模型上进行了全面的实验,以展示深度剪枝方法的优秀剪枝性能。

Related Work

网络剪枝。剪枝算法可以大致分为两类。一类是非结构化剪枝算法。它根据某些标准在权重中删除冗余元素。然而,非结构化剪枝需要特殊的软件或硬件加速器,因此其适应性不强。与非结构化剪枝不同,结构化剪枝剪枝整个参数结构,例如丢弃权重矩阵中的整行或整列,或卷积层中的整滤波器。

当VGG 和ResNet 崛起时,剪枝滤波器采用L1范数来选择不重要的通道并剪枝它们。网络FPGM 利用卷积滤波器的几何中位数来找到冗余滤波器。随后,各种高效的DNN网络,如MobileNet及其变体,采用了深度卷积来加速速度并提高准确性,使其能够在各种硬件平台上实现实时部署。

MatePruning 提出了剪枝网络(PruningNet)的概念,它自动为剪枝后的模型生成权重,从而避免了再训练。然而,尽管深度卷积在计算和参数方面具有优势,但也存在一个缺点,即增加了内存占用,对于计算密集型的硬件如GPU和DSP来说是一个挑战。不幸的是,通道剪枝方法无法提供直观和有效的解决方案来应对这个内存占用挑战。

对作者工作最相关的是层剪枝,它可以完全移除一个块或层,从而减少网络的深度,有效地缓解内存使用问题。允许深度网络和LayerPrune提出他们自己的卷积层重要性评估策略。ESNB和ResConv分别通过进化算法和可微参数识别需要剪枝的层。Layer-Folding和DepthShrinker在块内移除非线性激活函数,并使用结构重参化技术将多个层合并为单个层。Layer-Folding和DepthShrinker只在一个或几个有限模型上进行了验证,而ReLU的硬性移除可能会对子网的准确性产生影响。

Transformer家族模型在各种视觉任务中表现出色;然而,其高推理成本和显著的内存占用限制了其广泛的应用。为了解决内存占用问题,层剪枝是一种有效的解决方案。动态跳过以移除某些层已经成为Transformer压缩的主流方法。DynamicViT动态地筛选需要传递到下一层的Token数量。通过鼓励维度稀疏性,VTP选择具有强烈冗余性的维度进行剪枝。

结构重参化。在一个块内如果没有非线性激活函数,结构重参化技术可以将多个卷积层合并为一个卷积层。这种合并有效地降低了神经网络在推理过程中的内存需求,从而实现了加速模型处理。RepVGG区分训练和测试结构,使简单的网络超越ResNet的性能。此外,DBB将多分支结构合并为一个卷积,显著地超过了传统多分支单元的速度。

神经架构搜索(NAS)。权共享NAS已成为剪枝方法的主流,因为它具有灵活性和训练超网络并部署多个子网的方便性。Once-for-All使用渐进训练超网络。BigNAS使用一系列简单而实用的训练方法来提高训练超网络的效率。一旦超网络训练完成,典型的搜索算法,如遗传搜索,可以应用于寻找各种部署场景下的Pareto最优网络。

在这项工作中提出了一种统一的深度剪枝方法,适用于高效的卷积神经网络(CNN)和视觉 Transformer (VT)模型,采用渐进训练策略、新的模块剪枝方法和重参化技术。与DepthShrinker和Layer-Folding直接剪枝子网(通过移除激活层)不同,UPDP在子网训练过程中逐步移除剪枝块中的激活层。

此外,UPDP处理了DepthShrinker和Layer-Folding无法剪枝带有LayerNorm或GroupNorm层的块的问题。此外,它们无法剪枝视觉 Transformer 模型。尽管UPDP与VanillaNet的训练过程类似,而VanillaNet是为了设计一个全新的网络结构而提出的,但UPDP是针对CNN和视觉 Transformer 模型的通用深度剪枝框架。

Method

Unified Progressive Depth Pruner

作者的深度剪枝方法旨在通过使用具有重参化技术的新的模块剪枝策略来减少模型深度,而不是直接删除模块。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

如图2所示,作者的模块剪枝策略将一个复杂的慢速模块转换为简单快速的模块,通过模块合并实现。对于一个模块,作者用恒等层替换激活层,用BatchNorm层替换LayerNorm或GroupNorm(GN)层,并在模块末尾插入一个带有BatchNorm层的激活层,以创建参数重参化的条件。然后,重参化技术可以合并BatchNorm层、相邻的卷积或全连接层以及跳过连接,如图2所示。

概述。UPDP主要包含四个主要步骤,分别是超网络训练、子网络搜索、子网络训练和子网络合并。首先,根据 Baseline 模型构建一个超网络,其中对模块进行如图2所示的修改。在超网络训练后,使用搜索算法搜索最优子网络。然后,采用提出的渐进训练策略优化最优子网络,以最小化精度损失。最后,子网络将使用重参化技术合并为一个更浅的模型。

超网络训练。高效的卷积神经网络(CNN)和视觉 Transformer (VT)模型通常包含几个基本模块,如图2所示的一些高效模型结构。首先,根据 Baseline 模型构建一个超网络,并使用夹层规则方法训练一个健壮的超网络模型,以确保每个子网络具有有意义的一致性。将 Baseline 模块和相应的剪枝模块组合成一个超网络块,该块具有 Baseline 块和剪枝块的流程。对于超网络块,选择 Baseline 块流程意味着不剪枝,选择剪枝块流程意味着剪枝块。然后,子网络选择是一个选择系列,其中选择数量等于 Baseline 模型的块数。选择的子网络具有更多的剪枝块,因此更快。

受到BigNAS的启发,作者采用夹层规则在每个步骤前采样子网络。在每个步骤中,采样四个连续的子网络,其中第一个子网络保留所有未剪枝的块,接下来的两个子网络随机选择要剪枝的块,最后一个子网络保留所有剪枝的块。然后,用四个子网络的累积梯度优化超网络。夹层规则可以有效地保证训练超网络的上限和下限。许多方法也表明,夹层规则可以用于训练高效超网络,即使周期数较小且子网络的准确性分布与训练更多周期相同。这样可以减少超网络的训练成本。

子网络搜索。作者的深度剪枝器的主要目标是根据指定的剪枝标准(如要剪枝的块的数量)确定一个最优子网络。如图1所示,作者将这个问题形式化为一个最优问题。

对于所有样本及其标签,子网络搜索的目标是找到具有最高准确度的子网络是一个二进制向量,表示子网络的剪枝设置。如果第-块被剪枝,则将设置为。每个子网络的剪枝块数等于。遗传算法用于解决这个问题。

在搜索过程之后,得到了一个具有指定剪枝块数的子网络,其他块保持与 Baseline 模型相同。

子网络训练。作者需要从前一步得到的最优子网络中恢复其准确性。与直接训练子网络不同,UPDP采用渐进训练策略,通过控制因素平滑地将 Baseline 模型权重转移到剪枝子网络结构。子网络训练包括两个阶段。在第一个训练阶段,作者采用渐进训练策略,逐渐将 Baseline 模型结构转移到剪枝子网络结构,通过控制因子。在第二个阶段,作者继续将剪枝子网络进行细致调整,以达到高精度。

关于第一阶段,从0到1逐渐调整允许作者实现一个受控过程,将 Baseline 模块的块()转移到剪枝模块的块()中,如图2所示,其中是块的输入。因此,子网络的所有剪枝块都经过相同的过程,并平滑地获得剪枝子网络。

在第一阶段的训练过程中,UPDP控制从0到1进行过渡,然后保持在训练的第二阶段不变,如图3所示,其中是超参数,是当前训练周期,是总训练周期。

值得注意的是,为了在子网络合并后减少误差,需要在剪枝块的子网络训练之前修改相关的卷积层的相关参数。例如,将所有非零的填充值向前累积到块的第一卷积层,并将剩余卷积层的填充值设置为零。同时,将所有非1的步长值向后累积到块的最后卷积层,并将其他卷积层的步长值设置为1。

在子网络合并阶段,得到一个子网络,其中一些激活层被替换为恒等层,一些LayerNorm层被替换为带有部分激活层的BatchNorm层,并在剪枝块的末尾插入一些BatchNorm层。在这个阶段,采用重参化技术使子网络更浅。

在神经网络的推理阶段,可以将BatchNorm层的操作与卷积层融合,以加速模型推理。假设卷积层的参数为,BatchNorm层的参数为。在卷积层和BatchNorm层合并后,卷积层的参数将按照以下方式修改:

两个相邻的全连接(FC)层可以通过权重融合简单地合并为一个FC层。假设这两个FC层,它们的权重分别为,它们的偏置分别为。对于给定的输入特征,这两个FC层的输出可以表示为,这可以通过一个权重等于且偏置等于的等效FC层得到。

作者主要介绍卷积层之间的融合方法。对于顺序的1×1卷积层与卷积层的融合,采用DBB提出的融合方法将两个层合并为一个等效的卷积层。对于顺序的卷积层与卷积层的融合,它将获得一个等效的卷积层,与卷积层相比具有更多的参数和浮点运算。

作者提出了一种简单的方式来解决这个问题,即用一个卷积层替换第一个卷积层,其中卷积层的参数来自卷积层的中点,并使用重训练模型。然后采用DBB融合方法将两个卷积层转换为等效的卷积层。

RepVGG提出了一种将多分支模型转换为等效单路径模型的方法。根据卷积的加法性质,对于具有相同核大小的两个卷积层,它们满足以下方程5:

在这个等式中,表示卷积操作,是卷积核参数,而是输入数据。RepVGG证明了恒等和卷积可以等效地转换为卷积。然后,根据卷积的加法性质,多分支卷积层可以合并为等效卷积层,跳过连接的恒等也可以合并为卷积层。

Depth Pruner on CNN

将UPDP应用于CNN模型,可以参考图2中的流程。首先,需要找到基本模块,并通过参考图2中的剪枝块设计相应的剪枝模块。对于块中的激活层,用恒等层替换。对于非块中的归一化层,用带BatchNorm层替换,否则无需做任何事情。最后,将在块的末尾插入一个带有BatchNorm层的激活层。如果块中的激活层已经存在,如ResNet34块,只需在块的末尾激活层后插入一个BatchNorm层。

剪枝块完成后,检查超网络训练、子网络搜索、子网络训练和子网络合并过程。可以得到剪枝的CNN模型。对于普通的CNN模型,作者可以定义可以包含两个或多个连续卷积层的模块。

Depth Pruner on Vision Transformer

作者也将提出的深度剪枝器应用于视觉 Transformer (Vision Transformer)模型。视觉 Transformer 块通常具有多头自注意力(MHSA)模块和包括两个全连接层的多层感知器(MLP)模块。特别是,作者使用DeiT作为剪枝流程的示例。

如图2所示,为了构建超网络,在原始模型中的LN和激活(GELU)层之后添加了BN旁路,并在残差加法操作之后插入了一个GELU&BN块。在子网络搜索和子网络训练之后,得到了一个子网络,其原始LN和GELU操作都被剪枝块的BN替换。在残差加法操作之后,附加了一个GELU&BN块。然后,将子网络合并以获得一个快速的剪枝模型,如图2所示。

Experiments

在这个部分将展示深度剪枝器的有效性。首先,说明实验配置,并概述如何将深度剪枝器应用于CNN模型和视觉 Transformer (Vision Transformer)模型。然后,将与最先进的剪枝方法进行比较,以突出UPDP的优势。最后,将进行消融研究,阐述子网络搜索和渐进训练策略在UPDP中的作用。

Datasets

所有实验均在ImageNet-1K上进行。ImageNet-1K数据集是一个广泛使用的图像分类数据集,包括1000个目标类别,包含1,281,167个训练图像,50,000个验证图像和100,000个测试图像。在训练期间,作者对输入图像进行常规数据增强处理,并将输入图像缩放到,所有实验均在验证数据集上报告性能。

Experiments Setting on Different Models

将深度剪枝器应用于一系列卷积神经网络(CNN)模型,包括ResNet34,MobileNetV2,ConvNeXtV1和视觉 Transformer ,以验证UPDP的有效性。使用4个GPU训练作者的模型,总批量大小为256。在训练过程中,用10个周期训练超网络,除了MobileNetV2,其余模型都进行子网络搜索并找到最优子网络。然后,使用提出的渐进训练策略训练这些子网络,并完成子网络合并以获得更高效的浅层模型。

ResNet34。对于ResNet34的剪枝实验,分别剪枝6和10个块,并经过整个剪枝过程以获得两个剪枝和浅层子网络。对于子网络训练,方程3中的超参数K为3,总训练周期为150。在周期100时,将剪枝块中第一个卷积层的核大小从3×3更改为1×1。将UPDP与MetaPruning 和通道剪枝方法Universally Slimmable Networks(US)进行比较,以验证剪枝性能。

MobileNetV2。对于MobileNetV2的剪枝实验,采用DepthShrinker中的三种剪枝配置。作者跳过超网络训练和子网络搜索阶段,获得三个相同的子网络。作者直接训练这三个子网络到结束,并与相应的子网络进行比较。作者还使用NAS方法搜索三种具有相似加速比的三个子网络,以与UPDP进行比较。对于子网络训练,超参数K为3,总训练周期为450。

ConvNeXtV1。对于ConvNeXtV1的剪枝实验,设置三种剪枝配置,使子网络在ImageNet-1k上的top-1精度约为81%。然后,将这些子网络与许多包括CNN和视觉 Transformer 结构的SOTA模型进行比较,以验证UPDP剪枝性能。对于子网络训练,超参数K为4.5,总训练周期为450。为了实现更好的加速,作者将剪枝块中的深度卷积核的核从7更改为3。

DeiT。对于DeiT的剪枝实验,进行了一个6层剪枝实验,以与最先进的视觉 Transformer 剪枝方法进行比较。对于子网络训练,超参数K为6,总训练周期为450。

Comparisons with SOTA Models

在单个AMD MI100 GPU上,使用可比推理速度,将深度剪枝器与最先进的剪枝方法进行了比较。作者测量了压缩网络的平均推理速度,批量大小为128。在本论文中将具有可比速度的模型准确性进行了比较。

ResNet34。表1比较了UPDP与MetaPruning和NAS US方法在ResNet34上的表现。作者将深度剪枝器应用于ResNet34,剪枝6和10个块,分别获得了两个子网络,速度比分别为1.25倍和1.43倍。

在可比速度下,UPDP在1.43倍速度比上超过了MetaPruning by 0.8%,超过了NAS US方法 by 1.6%,尽管搜索时间更长。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

MobileNetV2。表2显示了在MobileNetV2-1.4上的实验结果。作者采用与DepthShrinker相同的子网络,但子网络训练过程与作者的渐进训练策略不同。在2.16倍速度比下达到0.7%更高的准确率,与MBV2-1.4-DS-C相比,与DepthShrinker在其他速度比上也有所改进。

作者还与MetaPruning进行了比较,与ResNet34类似,复制了MetaPruning-0.35倍,与MBV2-1.4-DS-C的可比推理速度相当,而作者的深度剪枝在更高的速度比下实现了2.1%更高的准确率。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

ConvNeXtV1。表3与一些常见的有效模型进行了比较,因为ConvNeXtV1没有压缩方法。在AMD平台上使用表中较慢的网络EfficientFormerV2-S2作为基准,测试所有网络的速度。作者将模型分为不同 Level ,深度剪枝方法在不同 Level 上实现了可比速度下的更高精度。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

DeiT。如表4所示,UPDP在准确率和速度比方面都超过了其他最先进的剪枝方法。提出的深度剪枝器仅在1.9%的top-1精度损失下,实现了1.26倍的加速比。通过替换可合并模块并应用重参化技术,作者提出的方法可以缩小网络并带来真正的推理加速。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

Ablation Study

在这个部分,将分析子网络搜索和渐进训练策略的有效性。

子网络搜索的有效性。通过比较基于ResNet34的不同精度子网络在子网络微调(FT)前后的性能,验证了ResNet34子网络搜索的有效性。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

表5显示了ResNet34-P10-A在子网络微调前具有更高精度的子网络可以实现更高的微调精度,这证明了超网络训练和子网络搜索对于找到具有最终高性能的优化子网络的有效性。

渐进训练策略的有效性。与直接移除非线性激活函数相比,作者的渐进训练在每个子网络的准确性上都有显著提高。如表6所示,对于各种子网络,作者观察到渐进训练相对于直接训练方法提高了0.3%-0.8%的准确性。

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

Conclusion

在本文中提出了一种统一的深度剪枝器,用于对高效的卷积神经网络(CNN)和视觉 Transformer (VT)模型进行剪枝,以减少模型的深度。

作者的深度剪枝器包括4个步骤:超网络训练子网络搜索子网络训练子网络合并

作者提出了一种新的模块剪枝方法和一种渐进训练策略,以更好地利用 Baseline 模型权重。在子网络合并时,使用重参化技术使子网络变得更浅并更快。作者对几种CNN模型和VT模型进行了UPDP。最先进的剪枝性能证明了UPDP的优势。在未来,作者将探索在更多VT模型和任务上应用UPDP。

参考

[1]. UPDP: A Unified Progressive Depth Pruner for CNN and Vision Transformer

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

扫码加入👉「集智书童」交流群

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

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%

模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%想要了解更多:

前沿AI视觉感知全栈知识👉「分类、检测、分割、关键点、车道线检测、3D视觉(分割、检测)、多模态、目标跟踪、NerF

行业技术方案👉AI安防、AI医疗、AI自动驾驶AI模型部署落地实战👉CUDA、TensorRT、NCNN、OpenVINO、MNN、ONNXRuntime以及地平线框架」

欢迎扫描上方二维码,加入集智书童-知识星球,日常分享论文、学习笔记、问题解决方案、部署方案以及全栈式答疑,期待交流!

免责声明凡本公众号注明“来源:XXX(非集智书童)”的作品,均转载自其它媒体,版权归原作者所有,如有侵权请联系我们删除,谢谢。
点击下方“阅读原文”,了解更多AI学习路上的「武功秘籍」

 

Read More 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)
Generated by Feedzy