部署技巧之PAGCP剪枝 | Yolov5/ResNet参数降低50%速度翻倍精度不减(一)

简介: 部署技巧之PAGCP剪枝 | Yolov5/ResNet参数降低50%速度翻倍精度不减(一)

全局通道剪枝(GCP)旨在从深度模型中移除不同层的通道子集(滤波器),而不会损害性能。

先前的工作集中于单任务模型修剪或简单地将其适应多任务场景,并且在处理多任务修剪时仍然面临以下问题:

  1. 由于任务不匹配,用于分类任务的修剪良好的主干专注于保留可以提取类别敏感信息的过滤器,使得在骨干剪枝阶段期间对可能对其他任务有用的滤波器进行修剪;
  2. 对于多任务预测,层内或层间的不同滤波器比单任务预测更紧密地相关和交互,这使得多任务修剪更加困难。

因此,针对多任务模型压缩,作者提出了一种性能感知的全局通道修剪(PAGCP)框架。首先从理论上提出了实现卓越GCP的目标,通过考虑层内和层间滤波器的联合显著性。然后,提出了一种顺序贪婪修剪策略来优化目标,其中开发了一个性能感知的oracle准则来评估滤波器对每个任务的敏感性,并保留全局上与任务相关最多的滤波器。

在几个多任务数据集上的实验表明,所提出的PAGCP可以在性能下降很小的情况下将FLOP和参数减少60%以上,并在云和移动平台上实现1.2倍~3.3倍的加速。

代码:http://www.github.com/HankYe/PAGCP.git


1、简介


到目前为止,基于卷积神经网络(CNN)的模型在大规模多任务预测中发展迅速,但大多数模型仍然存在巨大的计算成本和存储开销,阻碍了它们在自动驾驶系统和边缘计算设备等实时应用中的部署。模型压缩作为缓解这一问题的有效技术,已经取得了很大的进步,大致可以分为几种类型,包括知识蒸馏、模型量化和模型剪枝。

知识蒸馏试图通过确保两个模型之间的预测一致性,将学习到的大模型知识转移到小模型中,而模型量化旨在通过将网络权重从浮点类型投影到低位类型来减小模型大小。

另一方面,已经提出了模型剪枝作为一种流行的压缩技术,它可以分为两类:

  1. 权重剪枝
  2. 通道剪枝

前者通过生成非结构化稀疏连接来保持模型的准确性。但这种非结构化连接不可避免地会产生大小不规则的滤波器,进一步导致不同硬件设备之间的泛化能力较差,而这些硬件设备具有高效推理的专门设计。

相反,通道剪枝可以通过将结构化稀疏性引入整个滤波器或通道来减少推理时间。例如,通过最小化重要特征图的重建误差,开发了一种通道修剪技术来正确选择代表性通道。此外,ThiNet根据下一层的输出确定当前层的滤波器显著性,从而开发了一种贪婪算法来选择滤波器子集来压缩模型。

最近,设计了一种与数据无关的剪枝方法,该方法根据层是否可以由这样的滤波器核心集近似来逐层构建滤波器核心集。Joo等人提出了一种线性可替换滤波器剪枝方法,该方法表明,如果滤波器可以被其他滤波器线性近似,则可以对其进行剪枝。

剪枝多任务网络比剪枝单任务网络更具挑战性,因为多任务网络中的滤波器通常需要学习可以同时服务于多个任务的表示。因此,跨不同层的过滤器呈现出更强的相关性和交互,对一个过滤器的修剪也会影响另一个过滤器在不同任务中的性能。这被以前基于单任务和多任务的压缩研究所忽视。

一个典型的例子是,如果剪枝其他过滤器,同一过滤器的多个任务的敏感度排名(意味着由于删除过滤器而导致的每个任务的性能下降)可能会发生变化。

image.png

另一个例子是修剪其他滤波器后响应区域的变化,如图1所示。这表明,滤波器的注意力图中的高响应区域可能会受到其他滤波器修剪的极大影响。

总体而言,在多任务剪枝过程中动态变化的滤波器重要性(意味着滤波器的显著性)可能会导致难以在多任务性能下降和压缩比之间找到最佳平衡。

尽管一些工作开始为多任务应用设计剪枝技术,但它们主要基于基于分类的剪枝策略,即在多任务基准上用多个特定任务的分支微调预剪枝的分类主干,或在多任务设置下调整基于分类的剪枝策略。然而,这些方法面临以下2个限制:

  • 首先,基于预剪枝分类的主干中的特征不能很好地用于多任务使用,这可以被认为是单任务图像分类和不同多任务模型之间的滤波器失配问题。例如,许多具有丰富空间细节的浅层通道可以在分类主干中被预剪枝,因为这些通道包含分类所需的有限的高级语义信息。但是,这种通道剪枝将对检测模型的定位性能产生负面影响,因为空间细节对对象定位很重要,这最终限制了在基于检测任务微调基于分类的主干时的总检测性能。
  • 其次,在以前的工作中忽略了来自不同层的剪枝滤波器对压缩性能的联合影响。这种忽略可能不会损害分类模型的压缩性能,因为存在许多冗余信息,如背景特征和低级特征,这些信息对分类任务几乎没有帮助,并且可以丢弃。换句话说,分类模型中来自不同层的大量相关滤波器是冗余的,并且具有很大的去除潜力。
    然而,如上所述,对于多任务模型,复杂的交互会导致一个滤波器的剪枝对另一个滤波器性能产生很大影响。因此,当在多任务设置下适应各种基于分类的剪枝策略时,忽视联合影响可能会导致对多任务模型中滤波器剪枝潜力的评估更差。

为此,作者重点研究了多任务模型压缩,并提出了一个性能感知的全局通道剪枝(PAGCP)框架。首先,提出了在多任务设置下全局通道剪枝(GCP)的公式化目标,其中在GCP过程中充分考虑了联合滤波器显著性。联合滤波器显著性是指通过设计的性能相关度量来评估层内和层间多个滤波器的共同重要性。

根据理论推导,提出了顺序贪婪剪枝策略和性能感知预言准则来解决GCP的客观问题。所开发的顺序剪枝策略基于先前修剪的结构动态计算联合滤波器显著性,并以贪婪的方式选择要剪枝的滤波器和层。

此外,为了解决滤波器不匹配问题,性能感知预言准则评估滤波器对每个任务的敏感性,并自适应地保留每一层中与任务相关最多的滤波器。通过这种方式,该模型可以通过控制每一层中最敏感任务的局部性能下降来保持优异的多任务性能。

与以前将分类模型的滤波器显著性准则适应多任务分类模型的方法相比,本文的方法以贪婪的方式动态计算每个滤波器的显著性,以近似最优GCP,并通过性能感知的预言准则自动控制剪枝的性能下降,这提供了以下优点。

image.png

  • 首先,剪枝是在没有惩罚的情况下进行的,但参数数量和FLOP都有很大的减少。
  • 其次,如图2所示,与以前的工作相比,本文的方法实现的性能下降更可控。传统的修剪率的确定依赖于分层修剪策略中的独立敏感性分析,或全局修剪策略中全局小阈值,导致修剪后性能下降。

为了证明所提出的方法可以推广到不同的多任务设置,将所提出的PAGCP应用于包含分类和定位任务的检测模型,例如SSD、Faster R-CNN、CenterNet和YOLOv5m,以及包括多个密集预测任务的其他传统多任务模型,例如MTI-Net。

在几个目标检测和多任务学习(MTL)数据集上进行了实验,包括PASCAL VOC、COCO、NYUD_v2和PASCAL Context。经验结果和深入分析表明,在相同的压缩约束下,所提出的PAGCP在这些模型上取得了优于最先进方法的性能。

作者还将PAGCP专门用于单个任务设置,即像ResNet这样的图像分类模型,进一步验证了它在压缩各种CNN模型方面的优越性。最后,报告了剪枝后的模型在云和移动平台上的延迟,以显示提出的方法的加速效果。

本文工作的主要贡献可以概括为以下3点:

  1. 将多任务模型的全局通道剪枝公式化为联合滤波器显著性优化问题,该问题考虑了层内和层间滤波器对多任务模型压缩性能的共同影响,并从理论上证明了滤波器的联合显著性是独立显著性和条件显著性之和的上界。这是首次研究多任务模型通道剪枝中的联合滤波器显著性。
  2. 根据理论分析开发了一种新的剪枝范式,包含顺序贪婪通道修剪算法和性能感知预言准则,以近似解决GCP的派生目标问题。所开发的剪枝策略基于前一步剪枝后的结构,以贪婪的方式动态计算滤波器显著性,并通过性能感知预言准则的约束来控制每一层的剪枝率。
  3. 在不同的多任务设置下,包括典型的目标检测和传统的多任务学习,在不同的基准上进行了广泛的实验。结果表明,本文的方法在所有任务中都一致地优于现有的基于剪枝的多任务模型和其他轻量级模型。同时,剪枝模型在云和移动平台上都实现了更快的推理速度,接近其他轻量级模型的延迟。

3、问题与解决方案


这项工作的目的是通过考虑不同层滤波器的联合显著性来研究优越的全局通道修剪。与联合滤波器显著性类似,这里的显著性表示通过某个度量评估的滤波器重要性,确定要修剪哪个滤波器。

通常,显著性得分越高,表示保留该过滤器的机会就越多。基于这一定义,首先推导了性能感知全局通道修剪的目标,然后提出了剪枝策略来解决目标问题。该战略的总体框架如图3所示。

3.1、准备工作

给定具有个目标层(表示要修剪的层)已经训练好的模型,传统的基于显著性的方法旨在最小化附加惩罚的目标,其中惩罚表示设计的显著性标准,可以公式化如下:

其中表示与任务相关的目标函数(例如,分类任务的交叉熵,或多任务学习的多个目标的加权和),代表显著性标准,例如滤波器的“范数”,用于评估滤波器的重要性。和分别表示输入图像及其GT标签,其中服从的分布。

为了方便起见,在下面的部分省略了。此外,表示由包括FLOP和参数的减少率在内的几个因素确定的约束向量,而α是阈值向量,每个维度对应于上述每个元素。这个是原始模型中所有修剪选择(解决方案)的集合,θ表示, 其中元素θ是一个二进制变量,表示第层滤波器的修剪状态,即,其中是第层的滤波器数目。θ表示参数的总集合。

通常,约束由θ参数化,但其表达式在不同类型的模型中有所不同。θ的显式约束为:θ,其中表示θ的零范数,η是剩余滤波器数的阈值。

正如ResRep中所分析的那样,一旦第二项(惩罚)附加到目标上,第一项(性能损失)的梯度将与第二项竞争。惩罚的梯度使每个滤波器的参数偏离原始目标函数的最优值,改变了每个通道的原始重要性。

与ResRep设计掩码和压缩器来解耦两项的优化过程不同,本文的方法提出固定训练的模型的参数,并基于原始滤波器参数评估每个通道的重要性。通过这种方式,可以在不影响滤波器对最终性能的贡献的情况下删除等式1中的第一项,从而消除两个项目之间的竞争。

请注意,这里将性能损失添加到约束列表中,以补偿丢弃第一项后对性能损失的忽略。这种调整背后的动机是,可以通过探索模型中冗余滤波器的潜在最大数量来压缩训练的模型,而不会惩罚权重,这不会影响重要滤波器对最终性能的影响。因此,本文的目标是根据当前的网络结构和滤波器权重自适应地确定压缩比。

因此,将等式1转换为等式2,其目的是去除那些在几个压缩约束下产生最小显著性分数的滤波器。

image.png

为了获得要修剪的最优滤波器子集θ,与之前独立计算滤波器显著性而不考虑修剪其他滤波器对显著性的影响的工作不同,本文提出了一个性能感知全局通道剪枝(PAGCP)框架,该框架考虑了层内和层间的联合滤波器显著性,并且通过性能感知准则来控制每个目标层的剪枝比率。

在下文中,首先推导了PAGCP的优化目标,然后介绍了一种近似解决方案:基于性能感知预言准则的顺序贪婪通道剪枝。

3.2、PAGCP目标的理论推导

通常,在不同的剪枝选择(即θ,0用于剪枝,1用于不剪枝)中,候选滤波器w.r.t样本的显著性可以公式化为:

image.png

式中是模型的预定义状态函数,例如,模型预测损失,或下一层中激活图的输出。、 和分别表示输入、状态和范数的维数。这种基于范数的显著性公式试图测量两个高维状态之间的距离。是指以样本为输入的第层中的第个滤波器的显著性。

1、两个任意滤波器的联合显著性

为了执行全局通道剪枝,首先考虑一个简单的情况:2个任意滤波器θθ的联合显著性,这2个滤波器可以灵活地扩展到更大数量的滤波器。根据等式3,联合滤波器显著性可以定义为:θθ

其中,θθ表示2个滤波器都被剪枝。

为了简单起见,在下面的推导中忽略了。然而,这个结论适用于的所有值。现在有了关于联合滤波器显著性的以下定理。

定理1

假设和分别满足等式3和等式4。类似地,条件显著性被定义为剪枝滤波器θ后滤波器θ的导出显著性。则方程中的以下内容成立:

image.png

等式5的等号成立,当且仅当设计状态满足:

image.png

其中表示元素的中值映射。

根据定理1,联合显著性的上界由2部分决定:θ的独立显著性和θ的条件显著性。受典型分类任务的启发,其中使用运算将输出映射到概率空间,进一步探索将原始显著性值映射到新的概率空间,其中概率表示滤波器剪枝概率。设表示的负指数映射,即。类似地,。然后将等式5转化为以下公式:

image.png

其中对于对称性,。

从等式7中可以观察到两个见解。

  • 首先,由于的非负性质,,因此可以通过设计适当的状态函数来满足方程6,从概率的角度理解通道剪枝,也就是说,为每个滤波器引入剪枝概率(滤波器被剪枝的概率)。因此,2个随机滤波器的联合剪枝也是概率性的。
  • 另一个见解是,尽管它与方程6时的概率相等,但方程7实际上表明了的下限。因此,正如期望最大化EM算法所证明的那样,该算法迭代优化下界以接近局部最大值,可以向上推由边际和条件“概率”的乘积得出的下界,该下界比更容易获得,以全局近似的最大值。

2、任意滤波器的一般联合显著性

接下来,进一步推广了等式5和等式7对于具有任意数量的过滤器的情况,例如,个过滤器。计算公式如下:

image.png

其中,,,是第层的滤波器数。这可以用绝对值的方程内性质来证明。

3、逐步优化目标

将方程(8)的上界代入方程(2),我们得到以下目标:

image.png

也就是说,使联合显著性最小化的全局通道修剪的目标通过组合目标来近似,该组合目标包括服从相同压缩要求的多个条件显著性项。由于等式9包括条件显著性项的和,因此其优化可以自然地划分为与每个步骤中的局部约束相关联的多步骤过程。

3.3、解决方案:连续通道剪枝策略

具体来说,在一个优化步骤中将同一层中的滤波器作为候选修剪集,固定其他层中的过滤器,并将θ的全局约束分解为局部约束,从而将目标方程9分解为逐层通道修剪问题的串联。

为了解决逐步优化问题,建议贪婪地找到每个步骤中的候选修剪层和每个修剪层中的候选剪枝滤波器,这被称为顺序贪婪剪枝策略。在该策略中,滤波器之间的压缩性能关系可以分为两种类型:层间和层内滤波器关系,这两种关系都由显著性准则和压缩约束明确表示。

注意,这种关系随着每个滤波器的修剪状态而变化,因此在修剪过程中是动态的,这与以前静态处理滤波器关系并同时筛选出所有候选滤波器的方法不同。

此外,由于每个层的滤波器对不同的任务具有不同的敏感性,全局约束的分解充分考虑了每个层对每个任务性能的贡献,以及每个修剪层中的压缩潜力。通常,对FLOP减少贡献更大的层将在相对性能下降约束中分配更大的容差。性能下降的约束取决于层对哪个任务最敏感,并表示为性能感知预言机标准。

1、状态功能和显著性标准

如上所述,将目标分解为逐层修剪步骤的级联,以近似最优GCP。设θ表示第层中的候选修剪集。对于第层中的修剪步骤,局部目标可以公式化为以下表达式:

其中表示在第层中的第个滤波器的显著性。是第层中的候选集合的滤波器编号。α是从全局约束导出的局部约束。

因此,根据以上推导,可以通过以贪婪模式组合层内修剪和层间修剪来优化等式5中的目标。通常,单层内部或层之间的贪婪修剪应该是一个连续的筛选过程;然而,由于大多数层的筛选空间较大,每层的计算复杂度成为修剪过程中的主要瓶颈,达到。

为了解决这一问题,可以设计一个显著性标准,满足同一层中滤波器的显著性彼此独立(意味着滤波器的显著得分与同一层的其他滤波器无关。),并且不同层中的显著性保持相互依赖,使得每一层中的计算复杂度降低到。

特别地,状态函数和显著性准则可以合理地设计为范数的形式,如下所示:

其中ωθθ表示第层中第个滤波器在θθ状态下的权重。等式11中定义的状态函数满足等式6中的等式约束,使得最小化滤波器的联合显著性等于最大化它们的联合修剪概率。当候选滤波器在同一层时,由于滤波器权重的独立性,每个滤波器的条件显著性等于其边缘显著性。因此,修剪每一层的局部目标被转换为以下目标:

2、具有性能感知的Oracle标准

由于目标函数优化被分解为分层修剪步骤,也应该将约束分解为分层步骤,以与目标函数分解保持一致。如第3.1节所述,性能下降被添加到约束中,以补偿目标中性能损失项目的丢弃。为了将总性能下降的约束分解为逐层修剪步骤,考虑了性能损失分解和阈值分解。

对于性能损失的分解,作者认为不同滤波器提取的特征对所有层的每个任务都有不同的重要性。以目标检测为例,大多数浅层滤波器专注于提取更详细的空间信息,这有利于定位任务。因此,浅层对定位任务更鲁棒,对分类任务更敏感。

相反,由于滤波器提取的语义信息丰富,大多数深层滤波器对分类任务是鲁棒的,对定位任务是敏感的。因此,每一层的局部性能下降约束应该关注最敏感任务的性能下降。

换言之,当最敏感任务的性能下降达到局部约束边界时,一层中可重设过滤器的数量将达到最大值,即性能感知预言准则。特别地,准则的公式是多任务损失变化的范数:

image.png

其中θ表示修剪状态θ下第个任务的相对损失变化。通过这种方式,该标准对比例因子和绝对损失变化不敏感。是模型的任务编号。

注意,这里的任务数是指学习目标中损失成分的数量。因此,为两个任务设计的一些模型,例如语义分割和深度估计,可能包含两个以上的损失分量,例如每个任务的多尺度预测的损失。

可以观察到,全局约束的形式与等式3相同,其中的向量对应于;因此,它也可以通过组合约束来近似,包括第一修剪层的独立约束和多个条件约束(意味着在先前修剪状态的条件下的性能下降约束)。

对于局部阈值的分解,作者认为每个目标层的冗余度不同,因此建议将性能下降的全局阈值分解为渐进下降约束,如下所示:

其中,表示第一修剪层候选的初始丢弃阈值(意味着第一修剪层的最大可接受相对性能丢弃为),λ表示基于先前丢弃阈值的每个步骤的阈值的恒定比例因子。α是全局性能下降约束的阈值。因此,可以通过用λ缩放来计算第个修剪步骤处约束的下降阈值。

因此,修剪过程的最终逐步目标优化在Alg1中进行了说明。

注意,为了实现每次迭代的高修剪效率,对那些对FLOP减少有更多贡献的层施加了更宽松的局部约束。具体来说,首先评估具有相同修剪率的所有候选层的FLOP减少程度,如果λ,则按FLOP减少的降序对这些层进行排序,否则按升序排序。然后,对于每一步,从重新排序的队列中弹出一层进行修剪。

考虑到模型轻量级和预测性能之间的权衡,进一步评估了要修剪的每个滤波器对FLOP总减少的贡献,并去除了那些压缩贡献很小但性能有一定下降的滤波器。在实验中,用变量来调整修剪层的过滤率。

修剪策略的框架如Alg2所示。


相关文章
|
3天前
|
机器学习/深度学习 编解码 自然语言处理
南开提出全新ViT | Focal ViT融会贯通Gabor滤波器,实现ResNet18相同参数,精度超8.6%
南开提出全新ViT | Focal ViT融会贯通Gabor滤波器,实现ResNet18相同参数,精度超8.6%
80 0
|
12月前
|
机器学习/深度学习
部署技巧之PAGCP剪枝 | Yolov5/ResNet参数降低50%速度翻倍精度不减(二)
部署技巧之PAGCP剪枝 | Yolov5/ResNet参数降低50%速度翻倍精度不减(二)
218 0
|
12月前
|
算法 数据挖掘 计算机视觉
CVPR2023部署Trick | 解决量化误差振荡问题,让MobileNetv2的能力超过ResNet家族(二)
CVPR2023部署Trick | 解决量化误差振荡问题,让MobileNetv2的能力超过ResNet家族(二)
283 0
|
12月前
|
机器学习/深度学习 算法 计算机视觉
CVPR2023部署Trick | 解决量化误差振荡问题,让MobileNetv2的能力超过ResNet家族(一)
CVPR2023部署Trick | 解决量化误差振荡问题,让MobileNetv2的能力超过ResNet家族(一)
142 0
|
12月前
|
机器学习/深度学习 人工智能 算法
部署教程 | ResNet原理+PyTorch复现+ONNX+TensorRT int8量化部署
部署教程 | ResNet原理+PyTorch复现+ONNX+TensorRT int8量化部署
240 0
|
机器学习/深度学习 人工智能 自然语言处理
Meta实习生让AI「调教」AI?ResNet-50无需训练,2400万参数秒级预测
Meta实习生让AI「调教」AI?ResNet-50无需训练,2400万参数秒级预测
138 0
|
3天前
|
机器学习/深度学习 PyTorch 语音技术
Pytorch迁移学习使用Resnet50进行模型训练预测猫狗二分类
深度学习在图像分类、目标检测、语音识别等领域取得了重大突破,但是随着网络层数的增加,梯度消失和梯度爆炸问题逐渐凸显。随着层数的增加,梯度信息在反向传播过程中逐渐变小,导致网络难以收敛。同时,梯度爆炸问题也会导致网络的参数更新过大,无法正常收敛。 为了解决这些问题,ResNet提出了一个创新的思路:引入残差块(Residual Block)。残差块的设计允许网络学习残差映射,从而减轻了梯度消失问题,使得网络更容易训练。
121 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
ResNet代码复现+超详细注释(PyTorch)
ResNet代码复现+超详细注释(PyTorch)
729 1
|
3天前
|
机器学习/深度学习 数据采集 PyTorch
PyTorch搭建卷积神经网络(ResNet-50网络)进行图像分类实战(附源码和数据集)
PyTorch搭建卷积神经网络(ResNet-50网络)进行图像分类实战(附源码和数据集)
104 1
|
8月前
|
机器学习/深度学习 人工智能 PyTorch
ResNet详解:网络结构解读与PyTorch实现教程
ResNet详解:网络结构解读与PyTorch实现教程
558 0

热门文章

最新文章