集智书童 | 英伟达和斯坦福基于 Transformer 的异常检测最新研究!

news/2024/12/21 20:44:56/

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。

原文链接:英伟达和斯坦福基于 Transformer 的异常检测最新研究!

在作者推动各种视觉任务性能边界的同时,模型的大小也在相应增长。为了跟上这种增长,作者需要在边缘设备上进行高效推理和部署的非常激进的剪枝技术。

现有的剪枝方法仅限于通道剪枝,并且在大幅减少参数时遇到困难。在本文中,作者提出了一种新颖的多维剪枝框架,它可以在遵守延迟约束的同时,跨通道、层和块联合优化剪枝

作者开发了一种能够准确捕捉剪枝期间全模型延迟变化的延迟建模技术,这对于在高剪枝比下实现延迟-准确度最优权衡至关重要。

作者将剪枝重新定义为混合整数非线性规划(MINLP),以高效地仅通过一次遍历确定最优剪枝结构。作者广泛的结果表明,与之前的方法相比,特别是在大剪枝比下,作者的方法有显著改进。

在分类任务中,作者的方法在Top-1准确度上显著优于HALP,达到70.0(对比68.6),并且在每秒帧数(FPS)上达到5262 im/s(对比4101 im/s)。

3D目标检测中,作者通过在45%的剪枝比下剪枝StreamPETR [60],比密集 Baseline 实现了更高的FPS(37.3 对比 31.7)和mAP(0.451 对比 0.449),确立了新的最先进水平。

1 Introduction

深度神经网络已经成为高级计算机视觉应用的事实标准,从图像分类[25]到目标检测[43]和分割[46]。当代网络[65, 15, 60]通常由基于卷积神经网络(CNN)的特征提取器和 Transformer 块组成,以捕捉全局线索。随着性能的提升,模型的大小也相应地膨胀,包含数百万甚至数十亿个参数[33]。这种模型大小的增长对于在资源受限的边缘设备上部署提出了挑战,阻碍了自动驾驶等实时推理任务,并且在云系统上进行训练和推理也产生了显著的成本。剪枝[50, 23, 54],即从网络中移除多余的参数,已成为一种有效的策略,以减少模型计算和大小,满足实时要求,而不会显著降低其准确性。为了跟上不断增长的模型大小,作者需要非常激进的剪枝技术来显著降低延迟,以便高效和实时地部署模型。

特别是通道剪枝作为减少模型计算的有效剪枝技术,已经引起了广泛关注,通常可以减少30% - 50%的计算量,实际上不需要对硬件进行更改。通道剪枝涉及根据某些重要性标准[39, 40, 50]移除多余的卷积滤波器,通常从预训练模型开始。尽管有所进步,但这些方法有两个关键限制。首先,通道剪枝方法仅限于通道 Level 的剪枝,而作者不能避免移除整个块或层以实现所需的更大剪枝比例(70%-90%)。只有少数工作涉及层或块剪枝。这些方法可以提供比通道剪枝更大的加速,但它们仅限于在层或块粒度上进行剪枝,并且不能同时引入通道稀疏性,导致次优的准确性。

其次,当前剪枝方法直接减少推理延迟时使用的延迟模型只考虑了每层输出通道数的变体,忽略了剪枝同时对输入通道的影响。这种不准确的延迟估计导致了在准确性和延迟之间的次优权衡,特别是在边缘上进行推理所需的大剪枝比例下。在大剪枝比例下,引导剪枝向最优结构变得更加具有挑战性,同时还要紧密遵循所需的延迟,而没有精确的建模。

本文提出了一种新颖的剪枝框架,有效克服了现有方法的局限性。具体来说,作者没有单独对通道或层进行建模。相反,作者首先在作者的公式中将同一块内的通道和层分组,使它们能够在优化过程中一起处理。这种统一的方法无缝集成了通道、层和块剪枝,使作者能够高效地确定所有 Level 的最优剪枝结构。其次,为了准确建模各层在不同配置下的延迟,作者提出了“双层面配置延迟”的概念,它考虑了所有层输入和输出通道数的同时变化。为了融合这两种策略,作者将剪枝重新定义为混合整数非线性规划(MINLP)。这使得作者能够直接求解符合特定延迟预算的最优剪枝结构,仅需一次遍历。因此,作者的框架在显著减少延迟的同时提高了剪枝性能。总的来说,作者将作者的方法称为多维剪枝(MDP)。作者的代码将在接受后提供。

作者在图1中简要展示的广泛实验验证了作者的方法在高度剪枝比例下的优越性能。在具有激进85%剪枝比例的分类任务中,作者明显超过了之前的工作HALP [54],速度提高了+1161 im/s,准确度提升了+1.4%。对于3D目标检测,作者对由CNN特征提取器和基于变换的解码器组成的StreamPETR [60]模型进行了剪枝。作者在45%的剪枝比例下建立了新的最新技术水平,与稠密 Baseline 相比,在FPS(37.3 vs. 31.7)和mAP(0.451 vs. 0.449)方面取得了更高的成绩。在70%的更大剪枝比例下,作者在FPS(43.3 vs. 42.5)和mAP(0.394 vs. 0.373)方面明显超过了HALP [54]。作者的贡献总结如下:

  • 作者引入了一种用于同时进行通道和块剪枝的“块分组”策略,允许在优化中进行集体决策。

  • 作者提出了一种准确制定不同层配置延迟的方法,捕捉输入和输出通道的变化。

  • 作者将上述策略与一个新的剪枝框架有机结合,将剪枝重新定义为混合整数非线性规划(MINLP),它可以直接有效地在一次遍历中求解特定延迟约束内的全局最优剪枝结构。

  • 作者进行了大量实验,并在各种设置中观察到了最先进的准确度-延迟权衡,包括:(a)用于分类的ImageNet [16],用于2D检测的Pascal VOC [20],以及用于3D检测的Nuscenes [9];(b)三种模型架构:ResNet-50 [25],SSD [43]和StreamPETR [60];(c)在各种延迟降低剪枝比例下。

2 Related Works

作者的工作可以归类为一般的剪枝方法。接下来,作者将简要概述该领域,并突出作者与先前方法的区别。剪枝方法主要设计重要性标准来对参数进行排序,并移除排名最低的参数,然后通过额外的微调来恢复准确度。

通道剪枝 一些剪枝方法在结构约束下操作,例如从CNN中移除卷积通道[39],从而在不使用特定硬件或库支持的情况下立即获得性能提升。典型的通道重要性标准依赖于诸如权重范数、泰勒展开[41, 50, 68]、几何中位数[28]和特征图排名[40]等指标。作者的方法利用了泰勒[50]的通道重要性标准,但将其扩展到评估整个层和块的配置,不仅限于剪枝通道,还包括层和块的移除。

层和块剪枝 通道剪枝方法在移除适量参数时有效减少了性能损失。然而,当涉及到更广泛的剪枝时,它们的效果有限。这是因为它们仅关注移除通道,但在实现显著剪枝的最优结果时,有必要移除整个层或块。只有少数工作关注剪枝层和块。[12]和[19]使用每层的中间特征来计算层排名分数,使用线性分类器 Prob [12]或印记[19]并移除排名最低的层。[61]在每个块后引入线性分类器 Prob 来检查性能,并从上一个块中移除改进最小的块。最近的方法[62]还研究单独移除每个块,并根据性能下降计算重要性。

尽管这些方法已经显示出比通道剪枝提供更大的加速,但它们仅在层或块粒度上操作,如果同时想要引入通道稀疏性则会失败。此外,有些方法还添加了额外的模块或参数,如线性 Prob [12, 61],这需要额外的训练并使流程复杂化。作者的方法_无缝地统一了通道和块剪枝,这使得作者可以在仅一次预训练模型传递的情况下,有效地确定通道和块 Level 的最优剪枝结构,无需任何额外的训练或参数。_

硬件感知剪枝

由于参数压缩比例并不直接转化为计算减少比例,一些工作[63, 67, 38]主要关注于减少模型的FLOPs。最新的方法更进了一步,执行硬件感知剪枝,旨在直接减少硬件推理延迟。代表性工作HALP[54]首先为目标硬件上所有可剪枝参数配置准备了一个延迟查找表,然后将剪枝公式化为一个背包问题[55],在给定预算内最大化总参数重要性同时约束总关联延迟。[52]后来证明了HALP可以应用于自主系统以实现实时检测性能。为了增强剪枝模型的学习能力,SMCP[31]在HALP框架内引入了软 Mask ,使得在迭代剪枝设置中可以重新考虑早期剪枝的权重。

尽管这些方法[52, 54, 31]在准确性和速度方面取得了显著进展,但它们依赖于不准确的延迟估计,导致准确性和延迟权衡次优。它们考虑了输出通道的变化,但忽略了由于剪枝前一层引起的输入通道的同时变化。当旨在实现大的延迟减少时,这个问题变得更加明显,因为没有准确的延迟建模,更难以引导剪枝以满足所需的延迟预算。在作者的工作中,作者也关注硬件感知剪枝,_但引入了一种更准确的延迟建模技术,该技术考虑了所有层输入和输出通道数的同时变化,使作者能够全局确定最优配置_。

混合整数非线性规划(MINLP)[37, 6, 7]:由于作者的块剪枝策略和精确延迟建模统一采用了MINLP公式化,作者将简要介绍这个领域。在文献[37]中正式定义,MINLP是同时包含整数和连续变量的优化问题,其中目标和约束都是非线性函数。有效地解决MINLP[3, 4, 5, 17, 21, 22, 23]是优化研究中的一个关键领域,其关键组成部分通常涉及将问题分解为混合整数线性规划(MILP)和非线性规划(NLP)。最近,使用Python方便地建模和解决MINLP已成为可能,这要归功于Pyomo[8]和MindtPy[2]。在本文中,作者使用Pyomo[8]和MindtPy[2]结合外近似(OA)[17, 21]方法来解决作者的剪枝MINLP。

3 Methodology

作者现在将介绍作者的剪枝框架。作者首先建立基础知识,定义作者的目标并声明相关符号。然后详细描述作者提出的剪枝公式。

Multi-Dimensional Pruning (MDP)

4 Experiments

为了验证作者提出的方法,作者在一系列全面的场景中进行了大量实验。作者在3个任务上展示了作者的剪枝结果:使用ImageNet [16]和ResNet50 [25]的图像分类,使用Pascal VOC [20]和SSD [43]的2D目标检测,以及使用Nuscenes [9]和StreamPETR [60]的3D目标检测

作者的方法相较于先前的方法有所改进,主要体现在:(a)更精确的延迟估计和(b)能够处理整个层和块结构的移除。这些改进在作者更优的结果中得到了体现,与先前技术[31, 54]和其他竞争 Baseline [38, 59]相比,作者在更高的剪枝比例下显著提高了准确度-延迟的权衡。为了全面理解作者提出的剪枝框架,作者还进行了深入消融研究,突出了改进(a)和(b)各自的贡献。

设置对于ResNet50和SSD,作者的目标是优化它们在Nvidia TITAN V GPU上的推理延迟,批量大小为256。在剪枝StreamPETR [60]时,作者调整了方法,以Nvidia GeForce RTX 3090 GPU批量大小为1为目标,与StreamPETR原文的关注点保持一致。这使作者能够公平地评估速度提升的好处,并展示作者的方法针对不同硬件平台的泛化能力。

作者所有的训练都使用了8块Nvidia Tesla V100 GPUs,并使用PyTorch [51] V1.4.0进行。作者的CPU是Intel Xeon E5-2698,用于解决MINLP优化问题(方程式4)。

Classification Results on ImageNet

在表1中,作者报告了在ResNet50 [25]和ImageNet [16]上与 Baseline 方法的剪枝结果及比较。作者使用Top-1准确率和Top-5准确率来评估微调后恢复的准确率。此外,作者还包括推理FPS(每秒图像数)以直接展示在目标硬件上的速度提升。为了完整性,作者还呈现了FLOPs。

与HALP [54]和SMCP [31]等先前方法相比,作者在准确率-延迟权衡方面取得了显著改进。例如,SMCP在3784 im/s的推理速度下达到72.7的Top-1准确率;作者的方法在Top-1准确率上略高于其,达到72.8,但推理速度显著更快,达到4210 im/s。在更大的剪枝上,HALP达到68.6的Top-1准确率和4101 im/s的推理速度,作者的方法在Top-1准确率上显著优于它,为70.0,并且FPS达到令人印象深刻的5262 im/s。值得注意的是,从表1作者可以看出,当从预训练模型中进行大量剪枝以追求高FPS时,作者的方法尤其出色,这证实了作者的方法改进的有效性。作者的改进在FPS对Top-1帕累托曲线上表现得更为清晰,如图1所示。

作者还包括与专门讨论层和块移除的方法[19, 61, 64]的直接比较。如表1所示,作者的结果显著更好。例如,与LayerPrune [19]相比,作者实现了更高的Top-1准确率(74.6 对 74.3)和大幅度提高的FPS(3092 对 1828)。

2D Object Detection Results on PascalVOC

为了展示作者方法的广泛应用性,作者还使用了广受认可的Pascal VOC数据集[20]在2D目标检测领域进行了实验。在图2(b)中,作者展示了将作者的剪枝方法应用于具有ResNet50 Backbone 网络的SSD512[43]模型的结果。作者的性能与各种竞争 Baseline 进行了对比,包括HALP[54]和SMCP[31]。作者绘制了帕累托前沿图,展示了FPS和平均精度(mAP)之间的权衡。

作者的结果明显优于该领域的现有方法,标志着实质性的进步。与SMCP直接对比,作者的方法在各个推理FPS水平上一致获得显著更高的mAP分数。例如,作者以mAP 79.2 (相较于78.3)超越SMCP,同时还将FPS略微提升到 146.4 (相较于144.4)。值得注意的是,作者剪枝后的模型甚至在mAP上超过了预训练的密集SSD512-RN50(80.0 对比 78.0),同时在FPS上大幅提升(125.4 对比 68.2)。

3D Object Detection Results on Nuscenes

图3:使用SSD512的PascalVOC结果。FPS在配备256批量大小的NVIDIA TITAN V上进行测量。作者的方法比 Baseline 在mAP-FPS和mAP-FLOPs权衡上取得了更好的效果。

到目前为止,作者已经证明了作者的剪枝方法对于完全由卷积层组成的模型(如ResNet50和SSD)是有效的。现代系统使用卷积层提取特征和 Transformer 层捕捉全局线索[15, 65]。在本节中,作者探讨这些混合模型的剪枝效果。作者关注的是具有挑战性的3D目标检测任务,使用广泛认可的Nuscenes[9]数据集和最先进的StreamPETR[60]模型,该模型由一个基于重CNN的编码器和一个基于 Transformer 的解码器组成。作者对系统延迟的分析显示,基于CNN的编码器延迟(16.7ms)高于 Transformer 解码器(14ms)。这表明将作者的方法应用于卷积层仍然可以有效加速整个网络。

详细的实验结果和与几个竞争 Baseline 的比较如表2所示。作者的评估包含了3D目标检测任务常用的多样化度量标准集[9, 42, 60],包括平均精度(mAP)和归一化检测分数(NDS)。此外,作者报告了FPS以突出速度的改进。

值得注意的是,与密集预训练的StreamPETR模型相比,作者的技术实现了大约18%的显著加速,达到了令人印象深刻的37.3 FPS,而 Baseline 为31.7 FPS。重要的是,这种速度提升没有牺牲性能:作者的剪枝模型获得了更高的mAP(0.451 对 0.449)和NDS(0.551 对 0.546)。与先前的剪枝方法HALP[54]相比,作者的方法在各个剪枝比例下在准确度-延迟权衡上表现出了显著的改进。例如,HALP设法生成了一个剪枝后的StreamPETR模型,其mAP为0.373,NDS为0.489,推理FPS为42.5。相比之下,作者的方法超过了这些结果,实现了mAP为0.394,NDS为0.512,推理FPS为43.3

Ablation Study

正如在第3.1节中详细讨论的,作者的剪枝方法从前置方法中引入了两项关键改进:**(a)“双层配置延迟”用于精确的延迟建模;(b)**“块分组”用于将块移除与通道稀疏性集成。

作者现在将探讨(a)(b)各自对剪枝性能的影响。这里的_基准线_是一个没有(a)(b)的纯延迟剪枝算法。然后作者通过在基准线上分别添加每个组件来检查单独的改进。基准线性能在图4中用标签“_Baseline_”表示。

双层配置延迟在这种设置中,作者在基准线上加入了“_双层配置延迟_”,但放弃了“块分组”步骤,以将块决策变量从MINLP程序4中排除。这个变体通过考虑输入和输出通道数量的变化来准确估计剪枝的延迟影响,但它无法处理整个块的移除。图4中标记为“_Ours(仅双层延迟)_”的结果明显比基准线在准确度-延迟权衡上表现更好,即使单独使用也证明了其有效性。

块分组在这种设置中,作者在基准线上加入了“_块分组_”步骤,但没有使用作者的“_双层配置延迟_”来建模剪枝的延迟影响。相反,作者使用了之前方法的延迟建模[31, 52, 54],这些方法只考虑输出通道数量的变化。这个变体可以有效处理块的移除结构,以适应高的剪枝比例,但不能准确地通过考虑输入和输出通道数量的变化来估计延迟影响。图4中标记为“_Ours(仅块分组)_”的结果与基准线相比,在准确度-延迟权衡上有明显改善,特别是在大的剪枝比例和延迟减少(曲线最右端的点)方面。这表明即使独立使用,“块分组”也是有效的。

通过将上述两种策略集成到一个统一的MINLP框架中,作者实现了高效的单次剪枝

单次剪枝与迭代剪枝作者的单次剪枝方法只需一步即可实现目标延迟,而像HALP [54]这样的迭代方法需要多达30步。表3展示了作者的方法与HALP在不同剪枝步骤之间的性能比较。

如观察所示,无论剪枝步骤如何,作者的方法表现始终一致良好。作者的单次剪枝性能甚至优于作者的30步迭代剪枝。作者认为这可能是由于一次性使用数据集中所有样本的重要性分数所带来的好处。

相比之下,HALP的性能随着剪枝步骤的减少而恶化,特别是在单次剪枝中,它违反了延迟预算并且过度剪枝,导致Top-1为65.1和FPS为4444。这种行为是因为多次剪枝步骤可以某种程度上减轻(a)和(b)的疏忽,但在一次或更少的步骤中变得更加明显。

5 Conclusion

在本文中,作者提出了一种名为MDP的新颖剪枝框架,它将通道、层和块剪枝整合到一个统一的优化过程中,并开发了一种精确的延迟建模技术,捕捉输入和输出通道的同时变化。

为了融合这些策略,作者将剪枝重新定义为混合整数非线性规划(MINLP),以在单次传递中高效地识别在特定延迟预算内的最优剪枝结构。

作者的结果显示,与之前的方法相比,在需要大量剪枝的场景中,作者的方法取得了显著的改进。

作者还提供了深入的消融研究,以单独调查每个贡献的效果。

参考

[1].Multi-Dimensional Pruning: Joint Channel, Layer and Block Pruning with Latency Constraint.

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。


http://www.ppmy.cn/news/1473682.html

相关文章

自动化一些操作

下拉选择框 from selenium import webdriver from time import sleep # 导包 from selenium.webdriver.support.select import Select driver webdriver.Edge() driver.get(r"D:\WORK\ww\web自动化_day01_课件笔记资料代码\web自动化_day01_课件笔记资料代码\02_其他资料…

JCEF 在idea 开发 java 应用

JCEF(Java Chromium Embedded Framework)是一个Java库,用于在Java应用程序中嵌入Chromium浏览器引擎。如果您想在IDEA开发环境中使用JCEF,您可以按照以下步骤进行操作: 1. 下载JCEF库文件:您可以从JCEF的官…

KIVY 3D Rotating Monkey Head¶

7 Python Kivy Projects (With Full Tutorials) – Pythonista Planet KIVY 3D Rotating Monkey Head kivy 3D 旋转猴子头How to display rotating monkey example in a given layout. Issue #6688 kivy/kivy GitHub 3d 模型下载链接 P99 - Download Free 3D model by …

【算法笔记自学】第 6 章 C++标准模板库(STL)介绍

6.1vector常见用法详解 #include <cstdio> #include <vector> using namespace std;int main() {int n, x;scanf("%d", &n);vector<int> v;for (int i 0; i < n; i) {scanf("%d", &x);v.push_back(x);}for (int i 0; i <…

优化路由,优化请求url

1、使用父子关系调整下使其更加整洁 2、比如说我修改了下url,那所有的页面都要更改 优化&#xff1a;把这个url抽出来&#xff0c;新建一个Api文件夹用于存放所有接口的url&#xff0c;在业务里只需要关注业务就可以 使用时 导包 发请求 如果想要更改路径&#xff0c;在这里…

Go 语言多版本管理的最佳实践 —— Linux 和 Windows 专题20240702

Go 语言多版本管理的最佳实践 —— Linux 和 Windows 专题 引言 在软件开发的世界里&#xff0c;保持开发环境的最新和兼容至关重要。特别是 Go 语言&#xff0c;随着版本的更新&#xff0c;不同项目可能需要不同的 Go 版本。这时&#xff0c;如何在同一台机器上高效管理多个…

cpp http server/client

httplib 使用httplib库 basedemo server.cpp #include "httplib.h" #include <iostream> using namespace httplib;int main(void) {Server svr;svr.Get("/hello", [](const Request& req, Response& res) {std::cout << "lo…

Hi3861 OpenHarmony嵌入式应用入门--wifi hotspot

鸿蒙WiFi AP模式相关的API接口文件路径 foundation/communication/interfaces/kits/wifi_lite/wifiservice/wifi_hotspot_config.h foundation/communication/interfaces/kits/wifi_lite/wifiservice/wifi_hotspot.h 所使用的API接口有&#xff1a; API 接口说明 WifiErro…