全新剪枝框架 | YOLOv5模型缩减4倍,推理速度提升2倍(二)

简介: 全新剪枝框架 | YOLOv5模型缩减4倍,推理速度提升2倍(二)

4、R-TOSS剪枝框架


在本节中,我们描述了我们的新型R-TOSS修剪框架,并详细介绍了我们如何在YOLOv5和RetinaNet对象检测器上实现了前面提到的对内核修剪技术的改进。在保持模型大部分原始性能的同时,一种简单的修剪方法是采用迭代修剪方法。但这是一种幼稚的方法,因为随着模型大小的增加,迭代方法在计算成本和时间要求方面会很快变得笨拙。如第III.C节所述,现代物体探测器的模型尺寸正在增加,但对于许多使用它们的应用领域,如AVs,其精度不能降低。我们的R-TOSS框架(图2)采用了迭代修剪方案,并进行了若干优化,以减少计算成本和时间开销。我们首先使用深度优先搜索(DFS)算法,该算法用于查找模型中的父子层耦合。由此获得的父子图用于减少修剪的计算要求。当父层的修剪反映在图中的子层中时,计算成本会降低。我们跟踪DFS,识别子图中的3×3和1×1内核,并对其应用内核大小特定的修剪。这些算法将在以下小节中详细讨论。

4.1、DFS算法

算法1显示DFS算法的伪代码。

使用预训练的模型作为输入,使用从反向传播获得的梯度来计算计算图(G)。初始化一个空列表(group_list)(第2行)以存储父子图层组。然后遍历模型层(),并在计算图G上应用DFS搜索以识别该层的父层。

如果一个层没有任何父层,那么将该层指定为它自己的父层()(第7-9行),这将成为一个组。

如果一个层被标识为group_list(第5行)中任何层的子层(),则该层现在成为子层()的父层()并添加到该组(第5-6行)。每个父层()可以有多个子层(),但每个子层只能有一个父层()。

此过程将继续,直到所有图层都指定给一个组。由于每个组中的层都有耦合通道,因此它们也共享其kernel weight,因此可以共享相同的kernel模式。

4.2、选择kernel模式

通过标准组合法在所有可能的组合中生成模式掩模,使用以下公式:

其中,是矩阵的大小,k是图案掩模的大小。然后,使用以下两个标准来减少使用的内核模式的数量:

  1. 丢弃所有没有相邻非零权重的模式;这样做是为了保持kernel模式的半结构化性质;
  2. 通过使用范围[-1,1]内的随机初始化计算kernel的范数来选择最常用的kernel模式。的值可以从1到8,这可以生成8种不同类型的图案组。

为了增加模型的稀疏度,模式中非零权重的数量应该更低。先前关于kernel模式修剪的工作使用了由kernel中的4个非零权重组成的4项模式。但这导致模型具有相对较低的稀疏性,为了克服这一问题,这些工作的作者利用了连通性修剪。

由于第二节中讨论的连接修剪的缺点,作者建议在R-TOSS框架中使用3入口模式(3EP)和2入口模式(2EP)kernel模式,它们分别使用3个和2个非零权重。

4.3、3×3 kernel修剪

image.png

算法2显示了使用所提出的内核模式进行3×3 kernel模式修剪的伪代码,其示例如图3所示。

首先使用来自算法1的3×3父核权重(KW)作为输入,并初始化一个变量(形状)以存储核权重的形状(第1行)。还创建了一个由3EP(图3(a))和2EP(图2(b))模式组成的模式字典(kernel_patterns_dict)(第3行)。然后遍历3×3 kernel,并将当前3×3 kernel的权重矩阵存储在层中作为temp_kernel(第5行)。然后,初始化一个空列表(L2_dict),在应用模式字典中的kernel模式后,该列表可以存储temp_kernel的范数。

然后,遍历kernel_patterns_dict中的kernel模式,并在应用kernel模式后计算kernel的L2norm。该L2norm与来自kernel_patterns_dict的当前模式的key一起存储在L2_dict列表中(第7-10行)。然后,使用L2_dict中的L2norm值找到temp_kernel的最佳kernel模式,并将kernel模式的索引存储在最佳拟合变量中(第11行)。

来自bestfit的索引现在被用作kernel的kernel模式,并更新为其原始权重矩阵(第12-14行)。然后,遍历父层中的所有kernel,并将其存储为算法1中父层组(lP)中其余3×3 kernel的 kernel 掩码。一旦找到适合于父kernel的模式,这些模式也将通过利用卷积映射应用于相应的子kernel。

还通过执行1×1到3×3 kernel转换,将这种模式匹配方法应用于1×1 kernel。由于将相同的kernel掩码应用于特定组中的所有kernel,因此可以减少框架修剪整个模型所需的时间。

通过实验,将所需的图案总数减少到21个。由于在推理时只有21个预定义的kernel模式,因此具有类似模式的kernel被分组在一起,这可以降低总体计算成本并加快推理。

4.3、1×1 kernel修剪

通过执行1×1到3×3变换,从内核修剪中删除了连接性修剪。这可以确保能够保持模型的准确性,并减轻连接修剪带来的损失。

1×1 kernel剪枝还可以通过将相似的kernel模式分组在一起来加速推理。算法3显示了执行1×1内核修剪的伪代码。

首先使用来自算法1(group_list)的父层的1×1 kernel权重作为输入。然后,初始化一个列表FL,该列表用于存储(第1-2行)中扁平的1×1 kernel权重。随后,初始化用于存储临时权重矩阵的temp_array。我们遍历展平数组FL,并将列表中的每9个权重分组为3×3个临时权重矩阵,这些矩阵存储在temp_array中(第5-11行)。这个过程一直持续到列表末尾,或者如果值小于9。此时,剩余的权重被视为零权重并被修剪(第13行)。然后,使用算法2对temp_array中的临时3×3权重矩阵执行3×3 kernel修剪(第14行)。

算法2的输出矩阵被存储回temp_array中,temp_arra被转换回1×1 kernel,并附加回原始的1×1 kernel权重(第15-16行)。


5、实验


5.1、精度对比

5.2、速度对比

在图6中的推断时间结果表明,在RTX 2080 Ti上,R-TOS-3EP和R-TOS-2EP能够实现YOLOv5s的1.86倍和1.97倍的执行时间加速,与BM相比,在RetinaNet上实现1.87倍和2.1倍的速度加速。

优于目前性能最佳的现有工作框架(PD),YOLOv5s分别为8%和13.3%,分别地类似地,与BM相比,在Jetson TX2上,R-TOSS-3EP和R-TOSS-2EP能够在YOLOv5s模型上实现2.12倍和2.15倍的推理时间加速,在RetinaNet上实现1.56倍和1.87倍的加速。

R-TOS-3EP和R-TOS-2EP也优于PD,在YOLOV5上执行时间分别快2.6%和4.27%,在Retina Net上执行时间快5.94%和21.62%。

5.3、可视化结果

图8说明了不同框架在KITTI数据集测试用例上的性能。从结果中可以观察到,R-TOS-2EP特别保留了检测微小目标(本例中的汽车)的能力,以及比NP和PD更好的置信度分数。由于AVs依靠快速准确的推断来做出时间关键的驾驶决策,R-TOSS可以帮助实现速度和精度,同时保持比所比较的其他最先进修剪技术更低的能耗。


6、参考


[1].R-TOSS: A Framework for Real-Time Object Detection using Semi-Structured Pruning.

相关文章
|
6月前
|
机器学习/深度学习 编解码 人工智能
ICLR 2024:泛化递归Transformer,降低超分辨率复杂度
【2月更文挑战第16天】ICLR 2024:泛化递归Transformer,降低超分辨率复杂度
232 1
ICLR 2024:泛化递归Transformer,降低超分辨率复杂度
|
人工智能 搜索推荐 物联网
VeRA: 性能相当,但参数却比LoRA少10倍
2022年的LoRA提高了微调效率,它在模型的顶部添加低秩(即小)张量进行微调。模型的参数被冻结。只有添加的张量的参数是可训练的。
74 0
|
机器学习/深度学习 存储 人工智能
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
346 0
DeepSpeed ZeRO++:降低4倍网络通信,显著提高大模型及类ChatGPT模型训练效率
|
2月前
英伟达玩转剪枝、蒸馏:把Llama 3.1 8B参数减半,性能同尺寸更强
【9月更文挑战第10天】《通过剪枝和知识蒸馏实现紧凑型语言模型》由英伟达研究人员撰写,介绍了一种创新方法,通过剪枝和知识蒸馏技术将大型语言模型参数数量减半,同时保持甚至提升性能。该方法首先利用剪枝技术去除冗余参数,再通过知识蒸馏从更大模型转移知识以优化性能。实验结果显示,该方法能显著减少模型参数并提升性能,但可能需大量计算资源且效果因模型和任务而异。
77 8
|
5月前
|
算法 测试技术 异构计算
【SAM模型超级进化】MobileSAM轻量化的分割一切大模型出现,模型缩小60倍,速度提高40倍,效果不减
【SAM模型超级进化】MobileSAM轻量化的分割一切大模型出现,模型缩小60倍,速度提高40倍,效果不减
|
6月前
|
机器学习/深度学习
YOLOv5改进 | Conv篇 | 利用轻量化PartialConv提出一种全新的结构CSPPC (参数量下降约42W)
YOLOv5改进 | Conv篇 | 利用轻量化PartialConv提出一种全新的结构CSPPC (参数量下降约42W)
315 4
|
6月前
|
机器学习/深度学习
YOLOv8改进 | Conv篇 | 利用轻量化PartialConv提出一种全新的结构CSPPC (参数量下降约100W)
YOLOv8改进 | Conv篇 | 利用轻量化PartialConv提出一种全新的结构CSPPC (参数量下降约100W)
1051 0
|
缓存 算法 PyTorch
比标准Attention提速5-9倍,大模型都在用的FlashAttention v2来了
比标准Attention提速5-9倍,大模型都在用的FlashAttention v2来了
387 0
|
并行计算 Python
只用两行代码,我让Transformer推理加速了50倍
只用两行代码,我让Transformer推理加速了50倍
310 0
|
人工智能 自然语言处理 测试技术
只用几行代码,我让模型『训练』加速了3倍以上!
只用几行代码,我让模型『训练』加速了3倍以上!
155 0
只用几行代码,我让模型『训练』加速了3倍以上!
下一篇
无影云桌面