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是图案掩模的大小。然后,使用以下两个标准来减少使用的内核模式的数量:
- 丢弃所有没有相邻非零权重的模式;这样做是为了保持kernel模式的半结构化性质;
- 通过使用范围[-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修剪
算法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.