自动驾驶车辆中使用的目标检测器可能具有较高的内存和计算开销。在本文中介绍了一种新的半结构化剪枝框架R-TOSS,它克服了现有模型剪枝技术的缺点。
JetsonTX2上的实验结果表明,R-TOSS在YOLOv5目标检测器上的压缩率为4.4倍,推理时间加快了2.15倍,能耗降低了57.01%。
R-TOSS还可以在RetinaNet上实现2.89倍的压缩,推理时间加快1.86倍,能耗降低56.31%。与各种最先进的剪枝技术相比R-TOSS展示了显著的改进。
1、简介
近年来,自动驾驶汽车(AVs)因其提高驾驶舒适性和减少车辆碰撞伤害的潜力而受到极大关注。美国国家公路交通安全管理局(NHTSA)的一份报告显示,2021年美国公路上发生了31720多起致命事故。这些事故被发现主要是由司机分心造成的。AVs可以借助其感知系统帮助减轻人为错误并避免此类事故。感知系统通过一系列传感器(包括激光雷达、雷达和摄像头)帮助AVs了解周围环境。目标检测是此类感知系统的重要组成部分。
飞行器必须实时处理大量数据,以向车辆控制器提供精确的修正,以保持其航向、速度和方向。为了协助车辆路径规划和控制,AVs依靠目标检测器来提供有关其周围障碍物的信息。这些目标检测器必须满足两个重要条件:
- 保持高精度
- 提供实时推断(几十毫秒)
近年来,研究人员已经能够设计用于高精度目标检测的机器学习模型,但这些模型通常非常计算密集,并且经常与传感器融合任务相结合,这有助于通过组合来自各种传感器的数据来向这些模型提供输入。除了这些目标检测器外,Avs还必须处理大量数据,作为高级驾驶员辅助系统(ADAS)的一部分,以实现操作安全和安保,例如车内通信和车对x(V2X)协议,这会增加计算成本和电力使用。这是一个挑战,因为AVs中的机载计算机资源有限,功耗和计算能力受到严格限制。
目标检测是一项涉及分类和回归的计算和内存密集型任务。通常,所有基于机器学习的对象检测器可以分为两种类型:
1)两阶段检测器
2)单阶段检测器
两阶段检测器由两个检测过程组成,包括区域建议阶段和随后的目标分类细化阶段。区域建议阶段通常由区域建议网络(RPN)组成,该网络在输入图像(例如,来自AV中的相机传感器)中建议多个感兴趣区域(ROI)。这些ROI用于对其中的目标进行分类。然后,目标被边界框包围以定位它们。两阶段检测器的示例包括R-CNN、Fast R-CNN和Faster R-CNN。
与两阶段检测器不同,单阶段检测器使用单一前馈网络,该网络包括分类和回归,以创建边界框来定位目标。单阶段目标检测器重量轻,比两阶段检测器更快。单阶段检测器的一些经典的方法有YOLOv5、RetinaNet、YOLOR和YOLOX等等。不幸的是,即使是单阶段检测器也是计算和内存密集型的,因此在AV中的嵌入式和物联网板上部署和执行它们仍然是一个瓶颈。
为了解决这一瓶颈,近年来提出了许多技术,例如剪枝、量化和知识蒸馏,以压缩和优化目标检测器的推理过程,重点是在保持模型精度的同时提高推理时间。特别是,通过仔细去除不影响总体精度的冗余权重,剪枝技术已被证明在增加目标检测器模型的稀疏性方面非常有效。这样的稀疏模型需要更少的计算,并且可以被压缩以减少延迟、内存和能源成本。
在本文中介绍了R-TOSS目标检测器修剪框架,以实现AVs中使用的目标检测器的有效剪枝。与通常可分类为结构化剪枝或非结构化剪枝的传统修剪算法不同,作者使用了一种涉及半结构化剪枝的方法。本文的方法涉及应用特定的kernel模式来修剪卷积kernel和相关的连接性。
提出的目标检测器修剪框架的贡献如下:
- 通过使用深度优先搜索来生成要一起修剪的父子核计算图来降低迭代修剪的计算成本的方法;
- 提出一种剪枝技术用于修剪1×1核权重,以增加模型稀疏性;
- 提出一种在不进行连通性修剪的情况下实现kernel修剪,以保留kernel信息用于推断,这有助于保持模型的准确性;
- 与多种最先进的修剪方法进行详细比较,以展示本文新框架在mAP、延迟、能耗和实现的稀疏性方面的有效性。
2、相关工作
修剪目标检测模型旨在通过使用某些标准从模型中移除权重参数来减少模型大小和计算复杂性。考虑具有个层的深度学习模型。深度学习模型最复杂的操作是卷积(Conv)层。如果每个Conv层具有个kernel和个非零权重,则在推断过程中,模型的计算成本是的函数。
随着所涉及参数的增加,计算成本急剧增加,这是现代深度学习模型的趋势。通过执行参数修剪,可以在模型中引入稀疏性,这将减少中的参数,通过kernel修剪,还可以减少。这降低了总体计算成本。新兴计算平台提供了软件压缩技术,该技术可以响应于零值(删减)参数的存在来压缩输入矩阵和权重矩阵,从而在模型执行期间完全skipping它们。skipping操作也可以可选地由具有专门设计的硬件的硬件执行。
先前工作中的修剪方法可分为3大类:
- 非结构化剪枝
- 结构化剪枝
- 半结构化剪枝或基于模式的剪枝
2.1、非结构化剪枝
在非结构化修剪中,多余的权重(图1(a))被随机地修剪,同时将损失保持在最小,这有助于保持模型的准确性。
已经提出了几种非结构化的修剪方案,例如:
- weight magnitude pruning,其重点是将一组低于预定义阈值的权重替换为零;
- gradient magnitude pruning,其修剪梯度低于预定义阈值的一组权重;
- synaptic flow pruning,这是一种迭代修剪技术,使用全局评分方案并修剪一组权重,直到全局评分降至阈值以下;
- 以及second order derivative pruning,其通过将一组权重替换为零并保持网络的损失接近原始损失来计算权重的二阶导数。
由于来自不同权重矩阵的不同稀疏度导致的负载失衡,这些方法对线程级并行性产生了负面影响。不规则的稀疏性也会影响内存性能,因为它会在数据访问位置中产生变化,从而降低跨各种平台(GPU、CPU、TPU)缓存的性能。
2.2、结构化剪枝
在结构化修剪中,对整个滤波器(图1(c))或连续通道(图1)(b))进行修剪,以增加模型的稀疏性。滤波器/通道修剪提供了更均匀的权重矩阵,并减小了模型的大小。与非结构化修剪相比,简化的矩阵有助于减少乘法和累加(MAC)操作的数量。
然而,结构化修剪也会降低模型的准确性,因为可以有助于模型整体准确性的权重也将与冗余权重一起被修剪。结构化修剪也可以与TensorRT等加速算法一起使用。
与非结构化修剪不同,由于权重矩阵的统一性质,结构化修剪可以更好地利用各种平台在内存和带宽方面提供的硬件加速。
2.3、半结构化剪枝
半结构化剪枝,也称为模式剪枝,是结构化剪枝和非结构化剪枝方案的组合(图1(d))。这种类型的剪枝利用了可以用作kernel掩码的kernel模式。掩码防止其覆盖的权重被修剪,从而导致kernel中的部分稀疏。通过评估修剪kernel的有效性,例如利用范数,可以在推理过程中识别和部署最有效的模式掩码。由于kernel模式只能修剪kernel内固定数量的权重,因此它们将比其对应的稀疏性更少。
为了克服这个问题,模式剪枝与连接剪枝一起应用,连接修剪会完全剪枝一些kernel。然而,大多数现代目标检测器都有大量的1×1卷积核,这些核包含在这个过程中不被修剪的冗余权重。这是因为,模式修剪技术通常侧重于大小为3×3或更大的卷积核,这些卷积核具有更多的候选权重用于修剪。
连接修剪也会降低模型的准确性,因为在这个过程中,特定卷积核中的几个重要权重也会被移除。然而,由于其半结构化性质,kernel模式修剪仍然可以利用硬件并行性来减少模型的推理时间。
3、本文动机
设计用于AVs的目标检测器需要高精度,但因此这些模型也有开销,如大内存占用和更高的推理时间。为了克服这些问题,需要提出一个能够实现高精度的轻量级模型。YOLOv5、RetinaNet、Detection Transformer(DETR)和YOLOR等检测器是实现实时检测目标的良好起点,但这些模型仍具有较高的内存占用量,可能会降低模型性能。表2总结了Jetson TX2上随着目标检测器模型的大小增加的推断时间。
为了减少操作延迟,同时保持模型精度,可以采用剪枝技术。在剪枝技术中,基于模式的半结构化剪枝可以提供比非结构化剪枝更好的稀疏性,同时确保比结构化剪枝技术更好的准确性。
半结构化剪枝还允许更规则的权重矩阵形状,从而允许硬件更好地加速模型推断。同时,与结构化剪枝不同,它不会剪枝整个卷积核权重,从而保留更多信息,从而确保更好的准确性。因此,理想情况下,基于模式的剪枝技术可以生成具有高稀疏性和高精度的模型。
然而,基于模式的剪枝的一个警告是,当前的技术主要集中在3×3卷积核上,这限制了可实现的稀疏性,因此限制了推理加速的好处。大多数最先进的模型,如YOLOv5、RetinaNet和DETR,分别由68.42%、56.14%和63.46%的1×1小卷积核组成。因此,为了增加此类模型的稀疏性,基于模式的剪枝技术有时会在这3×3个卷积核上使用连通性修剪。但是,连接剪枝中使用的“每层最后一个内核”标准会导致重要信息的丢失,从而影响模型的准确性。因此,作者选择在剪枝框架中避免连接剪枝。
此外,如上所述,该技术仍然没有处理1×1卷积核,这是卷积核的重要组成部分。
为了解决这些缺点,作者提出了一种三步剪枝方法来剪枝1×1卷积核:
- 将1×1个卷积核组成3×3个临时权重矩阵;
- 对这些权重矩阵应用kernel模式修剪;
- 将临时权重矩阵分解为1×1卷积核,并重新分配给它们的原始层。
因此,本文的方法增加了模型的稀疏性,同时保留了有助于模型准确性的重要信息。