极市导读
本文提出了一种名为LAUDNet的延迟感知统一动态网络,该网络通过综合空间自适应计算、动态层跳过和动态通道跳过三种动态推理范式,实现了高效图像识别,并在多个硬件平台上显著降低了实际延迟。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
题目:Latency-aware Unified Dynamic Networks for Efficient Image Recognition
延迟感知的统一动态网络用于高效图像识别
作者:Yizeng Han; Zeyu Liu; Zhihang Yuan; Yifan Pu; Chaofei Wang; Shiji Song; Gao Huang
https://www.github.com/LeapLabTHU/LAUDNet
论文创新点
统一动态推理框架(LAUDNet):提出了一个综合框架,将空间自适应计算、动态层跳过和动态通道跳过三种代表性的动态推理范式统一在一个框架下,以提高深度网络的推理效率。 延迟感知的算法设计与调度优化:通过一个延迟预测模型,准确估计不同动态操作员在各种计算平台上的实际延迟,并将此延迟预测结果用于指导算法设计和调度优化,以实现理论与实际效率之间的有效匹配。 粗粒度动态网络和批量推理:提出了粗粒度动态网络设计,通过在块/组级别而不是单个像素/通道级别上做出“是否计算”的决策,以减少内存访问延迟,并允许批量推理,进一步提升了网络的实际加速性能。
摘要
动态计算已成为提高深度网络推理效率的有前途策略。它允许选择性激活各种计算单元,如层或卷积通道,或自适应分配计算到图像特征中的高信息空间区域,从而显著减少每个输入样本的条件不必要计算。然而,动态模型的实际效率并不总是与理论结果相对应。这种差异源于三个关键挑战:1)由于研究领域的分散,各种动态推理范式缺乏统一的公式;2)过分强调算法设计,而忽视了调度策略,这对于优化CUDA启用GPU环境中的计算性能和资源利用至关重要;3)评估实际延迟的繁琐过程,因为大多数现有库都是为静态操作员量身定制的。为了解决这些问题,我们引入了延迟感知统一动态网络(LAUDNet),这是一个综合框架,将三种基石动态范式——空间自适应计算、动态层跳过和动态通道跳过——统一在一个统一的公式下。为了协调理论和实际效率,LAUDNet将算法设计与调度优化相结合,辅以一个延迟预测器,该预测器准确高效地衡量动态操作员的推理延迟。这个延迟预测器协调了算法、调度策略和硬件属性的考虑。我们在一系列视觉任务中,包括图像分类、目标检测和实例分割,验证了LAUDNet框架内的各种动态范式。我们的实验证实LAUDNet有效地缩小了理论与现实世界效率之间的差距。例如,LAUDNet可以在V100、RTX3090和TX2等硬件平台上将其静态对应物ResNet-101的实际延迟降低50%以上。此外,LAUDNet在准确性和效率之间的权衡中超过了竞争方法。代码可在:https://www.github.com/LeapLabTHU/LAUDNet 获取。
关键字
动态网络 高效推理 卷积神经网络 视觉Transformers
1 引言
深度神经网络在计算机视觉[1]、[2]、[3]、[4]、[5]、自然语言处理[6]、[7]、[8]、[9]和多模态理解/生成[10]等多个领域展现出了卓越的能力。尽管它们表现出色,但这些深度网络的密集计算需求常常限制了它们在资源受限平台(如移动电话和IoT设备)上的部署,突显了对更高效深度学习模型的需求。与统一处理所有输入的传统静态网络[2]、[3]、[4]不同,动态模型[11]以数据依赖的方式自适应地分配计算。这种自适应性涉及有条件地绕过某些网络层[12]、[13]、[14]、[15]或卷积通道[16]、[17],并执行空间自适应推理,将计算工作集中在图像的最信息区域[18]、[19]、[20]、[21]、[22]、[23]。随着该领域的不断发展,各种动态模型显示出了希望,这就引出了一个问题:我们如何为实际使用设计一个动态网络?
解决这个问题是具有挑战性的,因为很难公平地比较不同的动态计算范式。这些挑战分为三类:1)缺乏一个统一的框架来包含不同的范式,因为这一领域的研究通常是分散的;2)专注于算法设计,这通常导致实际效率与它们的理论计算潜力不匹配,因为调度策略和硬件属性对实际延迟有重大影响;3)在不同硬件平台上评估动态模型的延迟是一项繁琐的任务,因为常见的库(例如cuDNN)不是为加速许多动态操作员而构建的。作为回应,我们引入了一个延迟感知统一动态网络(LAUDNet),一个统一框架,它统一了三种代表性的动态推理范式。具体来说,我们检查了层跳过、通道跳过和空间动态卷积的算法设计,通过一个“掩码和计算”方案(图1(a))将它们整合在一起。接下来,我们深入探讨了将理论效率转化为实际加速的挑战,特别是在多核处理器如GPU上。传统文献通常采用与硬件无关的FLOPs(浮点操作)作为粗略的效率度量,未能为算法设计提供延迟感知指导。在动态网络中,自适应计算与次优调度策略相结合,加剧了FLOPs和延迟之间的差距。此外,大多数现有方法在最细粒度上执行自适应推理。例如,在空间动态推理中,对每个特征像素是否计算的决定是独立的[19]、[20]、[21]。这种细粒度的灵活性导致非连续内存访问[21],需要专门的调度策略(图1(b))。鉴于动态操作员显示出独特的内存访问模式和调度策略,为静态模型设计的库,如cuDNN,无法有效优化动态模型。缺乏库支持意味着每个动态操作员需要单独的调度优化、代码改进、编译和部署,使得在硬件平台上评估网络延迟变得劳动密集。为了解决这个问题,我们提出了一个新颖的延迟预测模型,通过考虑算法设计、调度策略和硬件属性,有效地估计网络延迟。与传统的硬件不可知FLOPs相比,我们预测的延迟提供了动态模型效率的更现实表示。在延迟预测模型的指导下,我们在延迟感知统一动态网络(LAUDNet)框架内解决了上述挑战。对于给定的硬件设备,我们使用预测的延迟作为算法设计和调度优化的指导指标,而不是传统使用的FLOPs(图1(c))。在这种情况下,我们提出了粗粒度动态网络,其中“是否计算”决定是在块/组级别而不是单个像素/通道级别上做出的。尽管这种方法在灵活性方面不如先前工作中的像素/通道级适应性[16]、[17]、[19]、[20]、[21],但这种方法鼓励连续内存访问,增强了硬件上的实际加速。我们的改进调度策略进一步允许批量推理。我们研究了动态推理范式,重点关注准确性-延迟权衡。值得注意的是,先前的研究已经建立了CPU上延迟和FLOPs之间的相关性[21]、[23],因此本文主要针对GPU平台,这是一个更具挑战性但较少探索的环境。
LAUDNet被设计为一个通用框架,有两种方式:1)多种自适应推理范式可以轻松实现在各种视觉骨干网络中,如ResNets[2]、RegNets[24]和视觉Transformers[25]、[26];2)延迟预测器作为一个现成的工具,可以立即应用于各种计算平台,如服务器端GPU(Tesla V100、RTX3090)、桌面级GPU(RTX3060)和边缘设备(Jetson TX2、Nvidia Nano)。我们评估了LAUDNet在多个骨干网络上的性能,包括图像分类、目标检测和实例分割。我们的结果表明,LAUDNet在理论和实践上都显著提高了深度CNN的效率。例如,ResNet-101在ImageNet[1]上的推理延迟在不同类型的GPU上(例如V100、RTX3090和TX2)减少了超过50%,而没有牺牲准确性。此外,我们的方法在低FLOPs场景中超过了各种轻量级网络。尽管这部分工作最初在会议版本[27]中发表,但本文在几个关键领域显著扩展了我们之前的工作:
提出了一个统一的动态推理框架。虽然初步论文[27]主要关注空间自适应计算,本文深入研究了两个额外的重要动态范式,特别是动态层跳过和通道跳过(图1和第3.1节)。此外,我们将这些范式整合到一个统一的框架中,并提供了更全面的架构设计和复杂性分析(第3.2节)。 延迟预测器已增强,以支持包括层跳过和通道跳过在内的更广泛的动态操作员集合(第3.3节)。此外,我们采用Nvidia Cutlass[28]来优化调度策略。硬件评估表明,我们的延迟预测器可以准确预测实际硬件上的延迟(图5)。 LAUDNet框架已扩展以适应Transformers架构,如第3.2节所述。这一扩展显著增强了通过实现动态令牌跳过(空间自适应计算)、头部(通道)跳过和层跳过来优化延迟。这些改进显著扩大了LAUDNet的适用性。实证评估,如图10(c)和第4.3.2节所讨论的,为高效Transformers的设计提供了有价值的见解,支撑了框架的多功能性和有效性。 我们首次将批量推理纳入我们的动态操作员(第3.4节)。这一创新导致了更一致的预测结果和在GPU平台上增强的加速比(图8、12)。 我们对各种动态粒度(图9)和范式(图10、11、13、表2、3)进行了详尽的分析,涵盖了不同的视觉任务和平台,并在当代GPU如RTX3060和RTX3090上增加了评估。我们相信我们的结果将为研究人员和实践者提供宝贵的见解。
III. 方法
本节首先介绍三个动态推理范式的基本概念(第3.1节)。然后,我们提出了我们的LAUDNet框架的架构设计,该框架将这些范式统一在一个连贯的掩码和计算公式下(第3.2节)。接下来,我们解释了延迟预测模型(第3.3节),该模型指导确定粒度设置和调度优化(第3.4节)。最后,我们描述了我们的LAUDNet的训练策略(第3.5节)。
3.1 准备工作
空间自适应计算。现有的空间动态网络通常在CNN骨干网络的每个卷积块中包含一个掩码器Ms。给定一个输入x ∈ RH×W×C到一个块,其中H和W分别表示特征高度和宽度,C表示通道数。假设卷积步长为1,掩码器Ms以x为输入并生成一个二进制空间掩码Ms = Ms(x) ∈ {0, 1}H×W。Ms中的每个元素决定是否在相应的输出位置执行卷积操作。未选择的区域用跳跃连接[19]、[20]的值填充。在推理过程中,空间动态卷积的当前调度策略通常涉及三个步骤[52](图1(b)):1)收集,它沿着批量维度重新组织选定的像素(如果卷积核大小大于1×1,还需要邻居);2)计算,对收集的输入执行卷积;3)分散,将计算出的像素填充到输出特征的相应位置。与传统的在整个特征图上执行卷积相比,这种调度策略减少了计算,但增加了掩码生成和非连续内存访问的开销。因此,总体延迟甚至可能增加,特别是在动态卷积的粒度在像素级别(图6)时。动态层跳过[14]、[15]、[53]自适应地确定是否执行每个层或块,利用深度模型的结构冗余实现数据依赖的网络深度。动态层跳过的实现与空间自适应推理类似,但是使用标量0, 1决策变量Ml而不是空间H×W掩码。与空间自适应推理相比,层跳过提供了较少的灵活性但更规则的计算模式。此外,它通常不需要特殊的调度策略,因为原始的卷积操作保持不变。动态通道跳过[16]、[17]、[54]采用了一种更保守的方法来动态架构,与完全层跳过相比。它使用C维向量Mc ∈ {0, 1}C来自适应地确定卷积层的运行时宽度,C表示输出通道数。例如,仅当Mc_i = 1时,才计算第i个(1 ≤ i ≤ C)通道。动态通道跳过的调度通常需要收集卷积核,而不是像空间动态计算中那样收集特征像素(比较图2(b)和(c))。
3.2 LAUDNet架构
概述
我们在第3.1节中的分析表明,三种动态推理范式共享一个共同的”掩码和计算”方案,关键区别在于掩码的形状。利用这一洞见,我们提出了一个统一框架(图2),其中轻量级模块生成通道掩码 和空间/层掩码 。值得注意的是, 层跳过可以被视为空间自适应推理的特殊情况, 通过引入动态计算中的粒度概念来实现。
动态粒度
如第3.1节所述, 使用像素级动态卷积[19]、[20]、[21]对多核处理器上的实际加速提出了实质性挑战,因为非连续内存访问。为了解决这个问题,我们提出了优化动态计算的粒度。对于空间自适应推理,我们不是直接产生一个 掩码,而是首先生成一个低分辨率掩码 ,其中 是空间粒度。 中的每个元素决定对应 特征块的计算。例如,在第一阶段的ResNet中处理56×56特征。然后 的有效选择是 。然后, 掩码 上采样到 的大小。值得注意的是, 对应于像素级粒度[19]、[20]、[21],而 自然实现了层跳过。同样,我们为通道跳过引入了通道粒度 。 中的每个元素决定了 个特征通道的计算。每个块的空间粒度 和通道粒度 的选择将由我们的延迟预测器(第3.3节)指导,以平衡灵活性和效率。请注意,我们将通道掩码应用于块内的前两个卷积层。这种设计与各种骨干架构兼容, 包括那些具有任意瓶颈比或组卷积[24]的架构。
掩码器设计
我们为空间(层)和通道动态计算设计了不同的结构。如图3 (a) 所示, 空间掩码器使用自适应池化层将输入 下采样到 的大小, 然后是一个 卷积层产生软 logits 。对于通道掩码器, 我们使用一个 2 层MLP(图3(b))来产生通道跳过决策。给定输入通道 和目标掩码维度 ,我们将MLP中的隐藏单元设置为 ,其中 表示向下取整操作。附录C.1显示这种设计有效地减少了通道掩码器的延迟,特别是在具有更多通道的后期阶段。
计算复杂性
我们首先指出, 与骨干卷积相比, 掩码器的FLOPs可以忽略不计。因此, 我们主要分析标准卷积块的复杂性。对于空间自适应计算,我们定义激活比率 来表示计算像素的分数。遵循[20], 我们进一步计算 一个膨胀空间掩码的激活比率, 以表示块中第一个卷积的激活比率。我们的实验观察到 通常接近 。给定三个卷积层的FLOPs , 理论加速比是 。对 于 通 道 跳 过 , 激 活 比 率 是 。在3 3卷积之前和之后应用掩码使其复杂性与 成二次关系。整体加速比是 。
3.3 延迟预测器
如前所述,在不同硬件平台上评估动态操作员的延迟是一项繁琐的任务。为了有效地寻找任何目标设备上的首选动态范式和粒度设置,我们提出了一个延迟预测模型G。给定硬件属性H、层参数P、动态范式D、空间/通道粒度S/C和激活率rs/rc,G直接预测块执行延迟ℓ = G(H, P, D, S, C, rs, rc)。
硬件建模
我们用多个并行计算的处理引擎(PEs)来建模一个设备(图4)。内存系统有三个级别[58]:1)离芯片内存,2)芯片上的全局内存,以及3)PE中的内存。在实践中,延迟主要来自两个过程:数据移动和并行计算:
其中ℓConst是一个特定于硬件的常数。这个模型准确地预测了ℓdata和ℓcomputation,比FLOPs提供了更实际的效率度量。
延迟预测
给定硬件属性和模型参数,采用适当的调度策略是关键,以便通过增加并行性和减少内存访问来最大化资源利用。我们使用Nvidia Cutlass[28]来寻找动态操作的最优调度(平铺和PE内并行性配置)。数据移动延迟可以从数据形状和目标设备带宽轻松获得。此外,计算延迟从硬件属性中得出。更多细节请参考附录A。实证验证。我们使用RTX3090 GPU上的ResNet-101块评估我们的延迟预测器的性能,改变激活率r。蓝色曲线代表预测值,散点图是通过使用Nvidia Cutlass[28]寻找适当的调度策略(用自定义CUDA代码实现)获得的。测试了所有三种动态范式。图5比较了预测值和实际GPU测试延迟,显示出在广泛的激活率范围内的准确估计。
3.4 调度优化
我们使用一般优化方法,如将激活函数和批量归一化(BN)层融合到卷积层中。我们还包括以下优化我们的动态卷积块。空间掩码器的操作融合。如第3.2节所述,空间掩码器的计算可以忽略不计,但是它们以完整的特征图为输入,使它们受到内存限制(延迟主要由内存访问主导)。由于掩码器与第一个1×1卷积(图2(b)中的MaskerConv1×1)共享其输入,融合它们避免了重复的输入读取。然而,这使得卷积在空间上变为静态,可能会增加计算。为了简单起见,我们在所有测试模型中采用这种操作融合。实际上,我们发现操作融合在大多数情况下都有助于提高效率。收集和动态卷积的融合。传统方法首先收集块中第一个动态卷积的输入像素。收集操作也是一个受内存限制的操作。此外,当内核大小超过1×1时,输入补丁重叠,导致重复的加载/存储。我们将收集融合到动态卷积中以减少内存访问(图2(b)中的Gather-Conv3x3)。请注意,对于动态通道跳过(图2(c)),收集是在卷积核上进行的,而不是在特征上。我们的调度优化也将权重收集操作与卷积融合。融合分散和添加。传统方法在分散最终卷积输出之前进行元素-wise添加。我们将这两个操作融合在一起(图2(b)中的Scatter-Add),以减少内存访问成本。第4.2节的消融研究验证了所提出的融合方法的有效性。批量推理通过记录收集和分散期间的补丁、位置和样本对应关系来启用。使用更大的批量大小进行推理有助于并行计算,使延迟更多地依赖于计算而非内核启动或内存访问。附录C.1提供了实证分析。
3.5 训练
非可微掩码器的优化。掩码器模块为离散决策产生二进制变量,不能直接通过反向传播优化。遵循[20]、[21]、[23],我们采用直通Gumbel Softmax[55]、[56]进行端到端训练。以空间动态推理为例,让˜Ms ∈RH×W×2表示空间掩码生成器Ms的输出。决策是在推理期间使用argmax函数获得的。训练使用不同的Softmax近似:
其中τ是Softmax温度。类似地,通道掩码器Mc产生一个2C维向量˜Mc ∈ R2C,其中C是块中3×3卷积的通道数。我们首先将˜Mc重塑为C×2的大小,并沿第二维应用Gumbel Softmax以产生ˆMc ∈ [0, 1]C。遵循[20]、[23],我们让τ从5.0指数衰减到0.1以促进掩码器的优化。训练目标。如第3.2节所分析的,每个动态卷积块的FLOPs可以根据我们定义的激活率rs(或rc)计算。让Fdyn和Fstat分别表示整体动态和静态网络FLOPs。我们优化它们的比率以近似目标0
其中Ltask代表与任务相关的损失,例如分类中的交叉熵损失。KL(·||·)表示Kullback–Leibler散度,α、β是平衡这些项的系数。我们用σ表示log-Softmax函数,T是计算KL散度的温度。
IV. 实验
在本节中,我们首先介绍实验设置(第4.1节)。然后分析不同粒度设置的延迟(第4.2节)。进一步评估LAUDNet在ImageNet上的性能(第4.3节),随后是可视化结果(第4.4节)。我们最后在目标检测和实例分割任务上验证我们的方法(第4.5节)。为了简单起见,我们在模型名称前加上“LAUDs/c/l-”来表示我们的LAUDNet具有不同的动态范式(s代表空间,c代表通道,l代表层),例如LAUDs-ResNet-50。
4.1 实验配置
图像分类实验在ImageNet[1]数据集上进行。我们在五种代表性架构上实现我们的LAUDNet,涵盖了广泛的计算成本:四个CNN(ResNet-50, ResNet-101[2], RegNetY-400M, RegNetY-800M[24])和一个视觉Transformers,T2T-ViT[26]。CNN和Transformers使用不同的训练设置。对于CNN,按照[20]中建立的方法,我们从torchvision预训练检查点(https://pytorch.org/vision/stable/models.html)初始化骨干参数,并使用方程(3)中的损失函数微调整个网络100个周期。对于所有动态模型,我们固定α=10, β=0.5和T=4.0。请注意,我们采用预训练-微调范式主要是为了减少训练成本,因为Gumbel Softmax通常需要更长的训练时间才能收敛。对于T2T-ViT的研究,我们使用AdaViT[57]中描述的相同设置,并通过我们的延迟预测器评估其各种动态推理方法的效率。延迟预测。我们在各种类型的硬件平台上评估我们的LAUDNet,包括两个服务器GPU(Tesla V100和RTX3090)、一个桌面GPU(RTX3060)和两个边缘设备(例如,Jetson TX2和Nvidia Nano)。我们的延迟预测模型考虑的主要属性包括处理引擎的数量(#PE)、处理引擎中的浮点计算(#FP32)、频率和带宽。从表4可以看出,服务器GPU通常比IoT设备拥有更多的#PE。除非另有说明,否则V100、RTX3090和RTX3060 GPU的批量大小设置为128。在边缘设备TX2和Nano上,测试批量大小固定为1。更多细节请参见附录B。
4.2 延迟预测结果
本小节展示了使用两种不同的骨干网:ResNet-50[2](在V100上)和RegNetY-800MF[24](在TX2上)的动态卷积块的延迟预测结果。每个块都具有不同的通道数和卷积组的瓶颈结构,RegNetY采用Squeeze-and-Excitation (SE) [59]模块。我们定义ℓdyn作为动态卷积块的延迟,ℓstat作为静态块的延迟。两者的比率表示为rℓ = ℓdyn / ℓstat,当rℓ
尽管实施了我们的优化调度策略,像素级动态卷积(S=1)并不总是增强实际效率。这种细粒度自适应推理方法在以前的工作[20]、[21]、[60]中被采用。我们的发现有助于阐明为什么这些研究只在性能较低的CPU[21]或专用设备[60]上实现了实际加速; 相比之下,粗粒度设置(S > 1)在两个设备上显著缓解了这一问题。当S > 1时,可以在更大的激活值(rs)下获得实际加速(rℓ
延迟预测结果进一步用于确定前三个阶段的首选空间粒度设置。注意,对于特征分辨率为7×7的最后阶段,S =1和S =7对应两种不同的动态范式(空间自适应推理和层跳过)。图6b(V100上的ResNet)和图6d(TX2上的RegNetY-800M)中rℓ与S之间的关系曲线揭示了以下内容:
对于给定的r,延迟比率rℓ通常随着S的增加而减少在V100上; 过大的S(表示适应性推理不够灵活)在两个设备上提供了微不足道的改进。特别是,在TX2上,将LAUD-RegNetY-800MF的第二阶段的S从7增加到14对效率产生了负面影响。这可能是由于过大的补丁大小在该设备上引起了额外的内存访问成本,该设备的处理引擎(PEs)较少; 层跳过(用⋆标记)始终优于空间动态计算(用•标记)。我们将在第4.3节和第4.5节中分析它们在不同视觉任务中的性能。
基于这些结果,我们可以通过为不同的模型和设备选择适当的S来在灵活性和效率之间取得平衡。例如,我们可以简单地将Snet设置为44-2-13,以实现LAUDs-ResNet-50的实际加速。
通道粒度的影响。我们进一步研究通道粒度G对通道跳过动态模型的实际延迟的影响。以LAUDc-ResNet为例,图7中的结果表明通道跳过的性能对通道粒度G不太敏感。在更深的阶段,将G设置为2可以提高效率,而将G扩展到2以上则收益递减。这与我们的理解相符,即通道跳过需要比空间稀疏卷积更规则的操作,意味着G = 1已经可以产生显著的加速。此外,图7a中的曲线通常是凸的,因为3 × 3卷积的计算与rc呈二次关系(第3.2节)。操作融合的消融研究。在探索我们操作融合的影响时,如第3.4节所述,我们关注LAUDs-ResNet-50的初始阶段的卷积块(S=4, rs=0.6)作为案例研究。发现,如表1所示,操作融合在不同计算环境中一致有助于降低实际延迟,通过最小化内存访问开销。值得注意的是,掩码器和第一个卷积的融合在服务器端V100上显著降低了延迟。相比之下,在边缘设备TX2上,结合散射和添加操作在降低延迟中发挥了关键作用。
批量大小的消融研究。为了建立合适的测试批量大小,我们为LAUD-ResNet-50绘制了每图像延迟与批量大小之间的关系图(见图8),测试了两个服务器端GPU(V100和RTX3090)。结果突出显示,随着批量大小的增加,延迟减少,当批量大小超过128时,在两个平台上延迟达到稳定平台。这是可以理解的,因为更大的批量大小有利于增强计算并行性,使延迟更多地依赖于理论计算。桌面级GPU RTX3060(图12,附录C.1)的结果也显示了类似的现象。基于这些观察,我们在此后的报告中使用服务器端和桌面级GPU上的批量大小128的延迟。
4.3 ImageNet 分类
4.3.1 空间/通道粒度的对比
我们首先比较空间和通道动态计算的不同粒度。基于第4.2节的分析, 空间和通道粒度的候选者分别为 和 。我们选择ResNet-50和RegNetY-800M作为骨干网,并在TX2和V100上比较各种设置。图9的结果表明:
关于空间动态计算,最优粒度Snet取决于网络结构和硬件设备。例如,Snet=8-4-7-1在V100上对两个模型都实现了更好的性能,但在TX2上却造成了大量效率低下。这与我们在图6中的结果相符;
将通道粒度G从1提高到2确实为ResNet-50提供了一定程度的加速,但在RegNetY-800M的情况下性能相当。我们假设更大的G只对具有更多通道数的模型有益,这也与图7中的观察结果一致。
4.3.2 动态范式比较
在确定了最优粒度之后,我们将不同的动态范式进行更详细的比较。此外,我们的LAUDNet与各种竞争基线进行比较。结果如图10所示。标准基线比较:ResNets。比较的基线包括各种类型的动态推理方法:1)层跳过(SkipNet [14]和Conv-AIG [15]);2)通道跳过(BAS [17]);3)像素级空间动态网络(DynConv [20])。对于我们的LAUDNet,我们为空间动态和通道动态推理选择了最佳粒度设置。我们还包括了在框架中实现的层跳过。我们为动态模型设置了训练目标(参见第3.5节)t ∈ {0, 4, · · · , 0.8},以评估它们在不同稀疏性下的性能。我们统一应用调度优化(第3.4节)[15]、[20],以进行公平比较。结果在图10(a)中展示。我们在左侧绘制了准确性与FLOPs之间的关系图。很明显,我们的LAUD-ResNets,具有各种粒度设置,大大超过了竞争动态网络。此外,在ResNet-101上,三种范式看起来相当可比,而在ResNet-50上,层跳过落后,特别是当训练目标很小的时候。这是可以理解的,因为层跳过对于更浅的模型可能过于激进。有趣的是,当我们探索实际延迟时(TX2上的中间和V100上的右侧),情况发生了变化。在性能较低的TX2上,延迟通常与理论FLOPs显示出更强的相关性,因为在这种IoT设备上它是计算受限的(即,延迟主要围绕计算)。然而,在服务器端GPU V100上,不同的动态范式产生了不同的加速影响,因为延迟可能受到内存访问成本的影响。例如,在更深的ResNet-101上,层跳过优于其他两种范式。在目标激活率为t = 0.4时,我们的LAUDl-ResNet-101将其静态对应物的推理延迟减少了约53%。在较浅的ResNet-50上,通道跳过在一些低FLOPs模型上与层跳过保持同步。尽管我们提出的粗粒度空间自适应推理落后于其他两种方案,但它明显优于使用像素级动态计算的先前工作[20]。附录C.2中的额外结果也展示了层跳在RTX3060和RTX3090上的优势。通道跳过仅在边缘设备Nvidia Nano上优于其他两种范式。轻量级基线比较:RegNets。我们进一步在轻量级CNN架构中评估我们的LAUDNet,即RegNets-Y[24]。测试了两个不同大小的模型:RegNetY-400MF和RegNetY-800MF。比较的基线包括其他类型的高效模型,例如MobileNets-v2[30]、ShuffletNets-v2[32]和CondenseNets[35]。结果在图10(b)中展示。我们观察到,尽管通道跳过在准确性-FLOPs权衡中大大超过了其他两种范式,但在大多数模型上它不如层跳过高效,除了RegNetY-800M。值得注意的是,层跳过成为了最占优势的范式。我们认为,这是因为RegNet-Y的模型宽度(通道数)有限,推理延迟仍受内存访问限制。此外,层跳过能够跳过内存受限的SE操作[59]。桌面级和服务器端GPU(附录C.2)的结果进一步展示了层跳过的优势。在视觉Transformers上的实验。基于第3.2节的基础,我们的LAUDNet可以无缝地使用AdaViT[57]框架与视觉Transformers集成。尽管现有研究中没有直接比较三种动态范式,[57]同时使用了所有三种,留下了哪种范式在准确性和效率之间提供最佳平衡的问题。我们通过展示LAUD-T2T-ViT在各种平台(TX2、RTX3060和V100)上的准确性-延迟权衡曲线来解决这个问题(RTX3090上的性能与V100相似)-图10(c)。发现几个关键见解:
层跳过和头部(通道)跳过在高激活率时更有利于保持高准确性,尽管两者在降低激活率时都会经历显著的准确性下降。
当评估实际延迟和准确性之间的平衡时,层跳过在所有平台上始终优于头部(通道)跳过。
尽管理论上的准确性上限较低,空间自适应计算(令牌跳过)可能在较低激活率时超过其他范式,这归因于在GPU上执行索引和选择操作的实际延迟优势,而无需像CNN中那样需要专门的操作。
综合应用所有三种范式进一步提升了准确性-效率权衡,展示了每种方法的互补优势。
4.4 可视化和可解释性
我们呈现了LAUDNet的可视化结果,从网络结构冗余和图像空间冗余的角度深入探讨其可解释性。激活率。图11(a)显示了LAUDs/c/l-ResNet-101(t=0.5)在ImageNet验证集上每个块的平均激活率rs/c/l。结果揭示了:
空间动态卷积和层跳过的激活率模式相似。激活率rs和rl在第1、2和4阶段似乎更加二值化(接近0或1)。动态区域/层选择主要发生在第3阶段;
这两种范式倾向于在第2、3和4阶段的第一个块中保持整个特征图(rs/l=1.0),其中卷积步长为1。这与[15]、[54]中的设置一致,这些研究中这些块的训练目标手动设置为1。值得注意的是,我们训练我们的LAUDNet以满足整体计算目标,而不是像[15]、[54]那样限制不同块的目标;
通道跳过导致的激活率在整个网络中更集中在0.5左右。
动态补丁选择。我们在图11(b)中可视化了LAUDs-ResNet-101(Snet=4-4-2-1)的第三块生成的空间掩码。突出显示的区域表示掩码中1元素的位置,而暗淡区域的计算被我们的动态模型跳过。很明显,掩码器擅长定位与任务相关的区域,甚至是图像角落的小型飞机等细节,从而减少了背景区域的不必要计算。这些发现意味着,S=4的粒度足够灵活,能够识别关键区域,为准确性和效率之间的和谐平衡铺平了道路。有趣的是,掩码器能够挑选出未标记的物体-例如,蜂鸟旁边的花或紧握相机的人。这表明我们的空间动态网络能够识别富含语义的区域,其能力不受分类标签的限制。这种特性对于一系列下游任务来说是无价的,如目标检测和实例分割(第4.5节),这些任务需要在图像中识别多个类别和对象。有关更多可视化结果,读者可参考附录C.3。
4.5 密集的预测任务
我们的LAUDNet进一步在下游任务上进行测试,即COCO[61]目标检测(见表2)和实例分割(见表3)。对于目标检测,平均精度均值(mAP)作为网络效能的衡量标准。对于实例分割,APmask进一步深入测量密集预测的细微差别。平均骨干FLOPs和验证集上的平均骨干延迟用于测量网络效率。由于LAUDNet的多功能性,我们可以无缝替换各种检测和分割框架中的骨干网络,用我们在ImageNet上的预训练模型,然后在COCO数据集上进行微调,标准协议为12个周期-除了基于Mask2Former[62]的模型,这些模型按照基线配置训练50个周期(详细设置在附录B.3中详细说明)。在目标检测领域,我们的实验涵盖了三个框架:带有特征金字塔网络[64]的两阶段Faster R-CNN[63]、单阶段RetinaNet[65]和基于DETR的模型,即Dense Distinct Query (DDQ)-DETR[67]。我们将结果与一系列最新进展进行比较,如Deformable DETR[68]、DINO-DETR[69]、RankDETR[70]和Stable-DINO[71]。对于实例分割,我们使用成熟的Mask R-CNN[72]和基于查询的Mask2Former[62]。结果在表2(目标检测)和表3(实例分割)中展示,明确表明LAUDNet在经典和最先进的(SOTA)框架中持续提高mAP和效率。值得注意的是,尽管通道跳过和层跳过通常在效率上超过了空间动态计算,但理想的动态范式可能因具体检测框架、骨干架构和硬件平台而异。
5 结论
在本文中,我们提出了在延迟预测模型的指导下构建延迟感知统一动态网络(LAUDNet)。通过综合考虑算法、调度策略和硬件属性,我们可以准确估计不同动态操作员在任何计算平台上的实际延迟。基于对空间和通道自适应推理粒度与延迟之间相关性的实证分析,优化了算法和调度策略,以在一系列多核处理器上实现实际加速,如Tesla V100和Jetson TX2。我们在图像分类、目标检测和实例分割任务上的实验证实,所提出的方法显著提高了深度CNN的实际效率,并超过了众多竞争方法。我们相信我们的研究为动态网络的设计提供了有用的见解。未来的工作包括探索更多类型的模型架构(例如Transformers、大型语言模型)和任务(例如低级视觉任务和视觉-语言任务)。
公众号后台回复“数据集”获取100+深度学习各方向资源整理
极市干货
点击阅读原文进入CV社区
收获更多技术干货