YOLOv5模型压缩方法:综述
@[toc]
YOLOv5模型压缩方法:综述
摘要
Model Compression Methods for YOLOv5: A Review (arxiv.org)
在过去的几年里,广泛的研究致力于增强YOLO目标检测器。自YOLO提出以来,为了提高其准确性和效率,已经推出了8个主要版本。虽然YOLO的明显优点已被其在许多领域的广泛使用所取代,但将其部署在资源有限的设备上提出了挑战。为了解决这个问题,各种神经网络压缩方法被开发出来,这些方法主要分为三类,即网络剪枝、量化和知识蒸馏。利用模型压缩方法的丰硕成果,如降低内存使用和推理时间,使其有利于在硬件受限的边缘设备上部署大型神经网络。本文的重点是修剪和量化,因为它们比较模块化。对这些方法进行了分类,并分析了将这些方法应用于YOLOv5的实际效果。确定了在自适应剪枝和量化以压缩YOLOv5方面的差距,并提供了该领域的未来方向以供进一步探索。在几个YOLO版本中,我们特别选择了YOLOv5,因为它在文学中的近代性和流行度之间有很好的权衡。这是第一篇从YOLOv5的实现角度调研剪枝和量化方法的综述论文。该研究还可扩展到较新版本的YOLO,因为在资源有限的设备上实现它们带来了相同的挑战,即使在今天仍然存在。本文针对那些对在YOLOv5上实际部署模型压缩方法感兴趣的人,并探索可用于YOLO后续版本的不同压缩技术。
关键词:模型压缩,剪枝,量化,YOLO
1、介绍
目标检测作为一个基本问题,多年来一直是一个活跃的研究领域。目标检测的主要目标是在给定的图像中从不同类别中识别和定位感兴趣的目标。目标检测是许多其他高级计算机视觉任务的基础[1],从语义分割[2]到目标跟踪[3]到活动识别[4]。近年来,基于深度学习的方法如卷积神经网络(cnn)在目标检测任务中取得了最先进的性能。由于计算能力和前沿算法的进步,目标检测变得更加准确,从而实现了广泛的现实世界应用。与经典的目标检测方法相比,使用cnn缓解了目标检测中的特征提取、分类和定位问题[5,6,7,8,9,10]。
在各种单阶段目标检测方法中,YOLO自2016年发表以来受到了广泛关注。YOLO背后的主要思想是将输入图像划分为单元格网格,并预测每个单元格的边界框和类别概率。YOLO将目标检测视为回归问题。此外,由于它使用单个神经网络进行目标检测和分类,因此可以对这两个任务进行联合优化,最终提高整体检测性能。YOLOv1配备了一个包含24个卷积层和两个全连接层的简单结构,在末端传递概率和坐标[5]。自提出以来,YOLO经历了多次改进和变化。2017年,YOLOv2(又名YOLO9000)发布,通过使用多尺度训练、锚框、批量归一化、Darknet-19架构和修改的损失函数[16],性能得到了改进。随后,Redmon和Farhadi介绍了YOLOv3,该网络采用了特征金字塔网络、带有锚框的卷积层、空间金字塔池化(SPP)块、Darknet-53架构和改进的损失函数[17]。与以前的版本不同,YOLOv4是由不同的作者引入的。A. Bochkovskiy等人利用CSPDarknet53架构、Bag-of-Freebies、Bag-of-Specials、mish激活函数、加权残差连接(WRC)、空间金字塔池(SPP)和路径聚合网络(PAN)增强了YOLO的性能[18]。
2020年,Ultralytics推出了五种不同尺寸的YOLOv5,从nano到XL[19]。YOLO经历了从新的骨干架构到自动超参数优化的重大修改。在骨干网络中,YOLOv5采用了一种新的CSPDarknet53结构[20],该结构在Darknet53的基础上增加了交叉阶段部分(Cross Stage Partial, CSP)策略。YOLOv5的颈部设计利用了CSP-PAN[21]和SPP block (SPPF)的更快变化。输出是通过使用YOLOv3的Head结构的Head生成的。YOLOv5l的结构如图2所示,其中CSPDarknet53包含C3个块,它们是CSP融合模块。CSP策略将基础层的特征图划分为两个部分,然后通过跨阶段的层次合并它们。因此,C3模块可以有效处理冗余梯度,同时提高残差块和密集块内的信息传递效率。C3是BottleNeckCSP的简化版本,目前用于YOLOv5的最新版本中。为了进行比较,图3描述了C3和BottleNeckCSP模块的设计。总的来说,这些修改使YOLOv5在几个目标检测基准上取得了最先进的性能,包括COCO数据集。此外,不同的模型大小为用户提供了根据需要进行选择的机会。2022年,美团发布了YOLOv6,以双向级联(BiC)模块、锚点辅助训练(AAT)策略和新的骨干和颈部设计[22]为首的增强。经过很短的时间,由原作者介绍的YOLOv7[23]是一个突破。Wang等人提出了一种免费袋(Bag-of-Freebies)、一种复合模型缩放方法和一种扩展的ELAN架构,用于扩展、洗牌和合并基数。Bag-of-Freebies指的是受ResConv[24]启发,设计的重新参数化卷积,在网络中间层中额外的辅助head用于深度监督[25],以及一个软标签分配器,通过先导head预测来引导辅助head和先导head。最后,Ultralytics在2023年提出了YOLOv8,在 backbone, neck和head进行了多次交替[26]:使用C2f模块代替C3:一个分离的head提供输出:该模型直接预测物体的中心,而不是锚框。虽然YOLOv6/7/8是更有特色的模型,但我们的工作重点是YOLOv5,因为它已经完成了更完善的研究。但是,这项研究可以扩展到更新版本的YOLO,特别是YOLOv8。
目前使用和扩展超参数模型的趋势导致了更高的精度:然而,所需的浮点操作(FLOPs)和参数显著增加了[27]。由于内存、功耗和计算能力的限制,这一问题阻碍了复杂模型在边缘设备上的部署。为了解决这个问题,可以使用云计算(CC)。然而,由于网络成本的原因,在云服务上运行复杂的模型可能不是一个可行的选择:1)将图像数据传输到云端消耗相对较大的网络带宽:2)时间关键任务的延迟:云服务的访问延迟无法保证:3)可访问性:云服务依赖于设备对无线通信的访问,在许多环境情况下可能会中断。因此,在许多情况下,边缘计算是一种更有成效的解决方案。因此,人们引入了各种方法来压缩神经网络,以便使大型模型可以部署在边缘设备上。模型压缩方法可以分为三类:剪枝、量化和知识蒸馏。在剪枝过程中,去除模型中不重要的冗余参数,以获得稀疏/紧凑的模型结构。量化涉及使用较低精度的数据类型表示模型的激活值和权重。最后,知识蒸馏指的是将一个大而精确的模型作为教师,使用教师模型提供的软标签来训练一个小模型[29,30]。
本文的重点是剪枝和量化方法,因为它们被广泛用作模块压缩技术,而利用知识蒸馏需要有两个模型或修改目标网络的结构。回顾了近年来用于YOLOv5压缩的剪枝和量化方法,并从压缩术语的角度对结果进行了比较。我们选择关注YOLOv5,因为它是最新的YOLOv5,在修剪和量化方面进行了足够的研究。尽管新版本的YOLO最近在许多领域的性能优于YOLOv5,但它们应用的压缩方法仍然不足以进行回顾。对神经网络压缩方法进行了大量综述:然而,在这里,我们将回顾这些方法在现实情况下在YOLOv5上的实际实现。本文介绍了与修剪和量化YOLOv5相关的所有工作,以及它们从不同方面的结果。通常,压缩结果可以表示有关内存占用、功耗、FLOPs、推理时间、FPS、精度和训练时间的变化。
文章的组织结构如下:第2节综述了各种剪枝技术,并分析了近年来将剪枝应用于YOLOv5的实际研究。类似地,第3节将回顾量化技术,以及它们在YOLOv5上的经验实现。最后,在第4节中,讨论了通过剪枝和量化压缩YOLOv5面临的挑战,并根据该领域目前的差距,提出了可能的未来方向。
2、剪枝
神经网络剪枝最初在OBD和OBS中提出。它们都依赖于二阶泰勒展开来估计剪枝的参数重要性。即上述方法需要部分或全部计算Hessian矩阵。然而,可以使用其他准则来识别参数的重要性,也称为显著性。假设,虽然最佳准则是准确评估每个参数对网络的影响,但这种评估的计算成本过高。因此,其他评估,包括ℓn范数、特征图激活的均值或标准差、批量归一化缩放因子、一阶导数和互信息,都可以用于显著性分析。在下一节中,我们将讨论这种显著性评估方法。我们不会在这里量化每个方案的有效性,因为不同的工作很难进行比较,从超参数到学习率调度到实现架构的各种因素都会影响结果。相反,我们将介绍每个标准背后的思想,并表达应用它们来压缩YOLOv5的结果。
2.1、修剪的显著性标准
显著性标准是指基于神经网络的某些特性或属性,用于确定神经网络中单个权重、神经元、滤波器或一组权重的重要性或相关性的度量或指标。我们建议读者参考[33]对显著性标准的详细审查。
2.1.1、 ℓn-norm
基于ℓn范数的模型剪枝是本文讨论范围内的主要方法。由于权重值通常形成均值为零的正态分布,这是一种选择不太重要的权重个体或结构的直观方法。使用该准则的挑战是定义一个可以进行修剪的阈值。这样的阈值可以为整个网络或每一层静态设置。此外,人们也可以将其作为一个动态参数,并为该阈值定义调度器。例如,[34]提出了一种将阈值调度视为隐式优化问题的方法,并在使用迭代收缩阈值算法(ISTA)的基础上提供了阈值调度器。
ℓn-norm通常与网络的稀疏训练相结合,以推送具有相同效果的参数,使其具有相似的值[33] (参见2.1.3节)。为此,通常将ℓ1或ℓ2正则化添加到代价函数中,并在(每一步)训练后修剪具有低ℓ2范数的参数[35,36]。
2.1.2、 特征图激活
当在层的末尾使用激活函数时,其输出可以解释为参数对预测的重要性。例如,对于ReLU函数,输出越接近于零,则可以认为不显著,并选择作为修剪的候选者。此外,从更广泛的角度来看,激活张量的均值或标准差可以表明显著性[33,37]。
2.1.3、批量归一化缩放因子(BNSF)
虽然它可以归类为ℓ1-norm和特征图激活准则之间的融合,但BN缩放因子主要用于修剪YOLOv5,更一般地用于CNN。该方法由[38]提出,为每个通道引入一个缩放因子γ,并在训练过程中对其进行惩罚,以获得可剪枝的稀疏网络。作者提出了BN缩放因子作为网络压缩所需的γ。在他们的方法中,他们使用ℓ1-范数惩罚通道的γ,然后用接近零的缩放因子修剪通道。
2.1.4、一阶导数
与前一个准则不同,一阶导数度量使用通过梯度反向传播期间提供的信息。这类标准可以结合从激活到梯度的信息,如[33,39]所示。
2.1.5、交互信息
一层参数与预测或另一层参数之间的互信息(MI)可以表示显著性。在[40]中,作者试图最小化两个隐藏层之间的互信息,同时最大化最后一个隐藏层与预测之间的交互信息。
2.2、剪枝粒度
剪枝的粒度定义了要剪枝的模型参数类型。大体上,修剪可以用结构化的方式,也可以用非结构化的方式。
2.2.1、非结构化的修剪
非结构化或细粒度剪枝是指当剪枝的目标参数是模型的权重时,而不考虑它们在相关张量或层中的位置。在权重剪枝中,通过显著性评价识别出不必要的权重,然后进行掩盖或删除。由于消除权重可能会损害模型架构,因此在此过程中它们大多被屏蔽了[37]。虽然屏蔽权重而不是删除它们会增加训练期间的内存使用,但可以在每个步骤中使用掩码权重的信息来比较修剪后的模型与原始模型。细粒度剪枝并不总是有益的,因为它需要特殊的硬件来利用这种不规则的稀疏操作[41]。虽然使用非结构化剪枝可以实现更高的压缩率,但存储剪枝权重的索引可能会导致更高的存储使用率[42,43]。
2.2.2、结构化的修剪
与前一类不同,模型权重可以根据其结构进行剪枝。结构化剪枝在评估权重张量的重要性时观察它们中的模式,以便可以用低索引开销来描述它们,如步长或块。在卷积层中,第j个通道是通过将第j个滤波器与输入的特征图卷积得到的。因此,可以选择一组参数(如滤波器、通道或核)进行结构化修剪。图4描述了这些结构修剪范式之间的差异。
基于通道修剪。它的目的是去除每层中通向输出特征图的第j个通道的权重滤波器。许多现有的通道剪枝技术利用ℓ2-范数作为识别权重的最不重要张量的标准。然而,关于这一过程对整体模型结构的影响存在争议。在[44]中,作者指出通道修剪过程对模型结构的破坏很小。相反,在[45]中,观察到通道剪枝导致网络结构的剧烈变化。尽管如此,通过掩盖参数而不是完全消除它们,可以减轻结构损伤。然而,这种方法可能不会在训练期间产生任何节省,因为整个模型需要存储在内存中。
基于过滤器的修剪。基于滤波器的剪枝消除了输入特征图的第i个通道对应的权重。也就是说,修剪卷积层中所有滤波器的第i个特定核。在这种剪枝方法中,结构损伤最小,并且由于输出通道数量保持完整[27],可以类似于原始模型进行处理。值得一提的是:1)基于通道的第l层剪枝等价于基于滤波器的第(l+1)层剪枝,2)滤波器剪枝不等价于基于滤波器的剪枝。在过滤器剪枝中,一个层的一个或一些过滤器被剪枝,从粒度角度来看,可以分为基于通道的剪枝。
基于修剪。在这种情况下,连接输入特征图的i通道和输出特征图的j通道的第l层滤波器的核上的所有参数都被剪枝为[46]。这种修剪粒度不会损害模型结构。我们将感兴趣的读者介绍到[27]以了解修剪粒度的彻底调查。
无论修剪粒度和显著性标准如何,修剪过程都可以以单次方式或迭代方式执行。在单次剪枝[47,48,49]中,较不显著的参数在训练之前或之后被删除/屏蔽。在训练后剪枝中,网络性能可能会永久下降,而迭代剪枝则将性能下降考虑在内,重新训练网络。与单次剪枝相比,迭代剪枝虽然计算量更大且耗时,但在某些情况下可以防止精度下降甚至提高精度。此外,一些方法修改了网络代价函数,如添加正则化[38,50],使模型更适合剪枝。因此,它们不能用作训练后的修剪。
2.3、剪枝YOlOv5的最新应用研究
表1展示了最近在YOLOv5上按剪枝粒度分类的实验剪枝结果。[51]专注于实现所需的推理时间,而不是特定的压缩比。提出了一种基于动态规划搜索(DYnamic programming search, SPDY)的剪枝方法,可用于oneshot和迭代方案。在[72]中,研究人员实现了一种基于非支配排序遗传算法(NSGA) II的算法,该算法将剪枝作为一个优化问题来处理。也就是说,如何修剪通道以最小化GFLOPs和最大化mAP0.5。[50]引入了一种自适应稀疏正则化(ASR),根据滤波器权重渲染稀疏约束。也就是说,在正则化损失函数中为具有弱通道输出的滤波器分配一个惩罚项,而不是直接用批量归一化缩放因子的l1范数来调节损失。在训练后,缩放因子小于全局阈值的滤波器被修剪为所有层,并执行查找调整以检索精度下降。[52]的工作利用PReLU激活函数和使用Ghost Bottleneck代替BottleNeckCSP修改了YOLOv5结构。然后,基于BNSF方法,使用小批量归一化缩放因子对除Ghost瓶颈外的通道进行剪枝(参见2.1.3节)。[61]提出了一种特征融合层和选择性核网络,以改进模型的通道和核注意力。它将transformer编码器模块附加到盘颈的输出上,以通过自注意力过程探索模型预测的潜力,并在部署到NVIDIA Jetson Xavier NX之前使用BNSF方法压缩模型。此外,[69]以所需数量的参数和FLOPs为目标,并利用计算正则化损失稀疏训练(CRLST)。在稀疏训练后,它根据它们的批量归一化缩放因子迭代地修剪通道。[69,61]中的两个压缩YOLOv5模型都部署在NVIDIA Xavier NX上。[74]将滤波器视为空间中的点,并采用滤波器修剪几何中值(FPGM)方法来修剪卷积层的滤波器,与ℓn范数准则不同,该方法明确利用了滤波器之间的相互关系。计算整个层权值的几何中值,如果滤波器的几何中值接近于该层的几何中值,则对其进行修剪。[63]与BNSF方法类似,丢弃上采样、级联和检测层并修剪滤波器,但它嵌入稀疏系数的余弦衰减(CDSC-BNFS)并使用软掩码策略。[67, 68]通过基于BNSF通道的修剪使模型更轻,并在颈部网络中添加了另一个具有BottleNeckCSP模块的上采样级别,以从小目标中提取更多的语义信息。后者还在颈部网络中的每个瓶颈csp模块的输出中添加了一个卷积块注意力模块(CBAM),然后将它们馈送到头部。论文[76]考虑了瓶颈CSP中每个捷径之前每个Conv层的平均值,并压缩骨干。它还使用BNSF方法进行基于通道的剪枝。下面列出了YOLOv5上剪枝的几个最新实现:
- [71,53]通过BNSF方法修剪网络,但将微调与知识蒸馏相结合,以在保持精度的同时节省训练时间。[54]的作者用MobileNetV3替换了CSPDarknet骨干[77],并在用BNSF方法修剪滤波器后使用TensorRT。
- [55,56,57,60,64]的工作重点是使用BNSF策略和微调修剪滤波器。
- 在[58]中,主干被修剪,由于所需的对象具有相对相同的大小,因此PAN模块的最大特征图被删除。此外,在颈部,提出了混合注意力模块,以从通道中提取最全面的特征。
- [59]采用t分布随机邻域嵌入算法降低锚帧预测维度,并将其与加权聚类融合预测帧大小,以实现更准确的目标帧预测。然后,通过BNSF方法对滤波器进行剪枝。
- [62]在主干中利用多光谱通道注意力机制来生成更多的信息特征,并提高模型检测小目标的准确性。然后,使用BNSF过程对模型的滤波器进行剪枝。
- [65]通过使用BNSF标准修剪滤波器来减轻模型,并引入软非极大值抑制,使模型能够检测重叠的葡萄簇,而不是丢弃它们。
- [66]使用空间金字塔扩张卷积(SPDCs)结合来自不同感受野的特征图,以在多个尺度上整合缺陷信息。在颈部嵌入通道注意力机制,在每次连接操作后将更多的注意力引导到有效的特征通道上。然后,通过基于BNSF通道的剪枝和微调来压缩模型。
- [70]对YOLOv5结构进行了许多修改,例如将注意力机制添加到颈部,并将上下文提取模型添加到主干。至于剪枝,它使用BNSF标准删除过滤器。
- [75]使用层和内核修剪来压缩YOLOv5的颈部和主干。
- [73]用MobileNetV3替换YOLOv5的主干,并通过基于通道的修剪来修剪颈部网络。
近85%的关于修剪YOLOv5的研究是使用基于通道的修剪完成的,其余的与其他结构化和非结构化粒度相关。用于剪枝的显著性准则主要是BNSF稀疏训练方法,在我们的调查范围内,大约60%的论文采用了该方法,其余的论文采用ℓ1-norm或ℓ2-norm或提出了一种新的显著性准则。
3.量化
神经网络量化旨在用比原始精度更少的比特来表示深度神经网络的权重和激活,通常是32位单精度浮点数(FP32)。这个过程是在对模型的性能/精度的影响保持最小的情况下进行的。量化通过利用更快的硬件整数指令,可以减少模型的大小并提高推理时间[78]。在[30]中,Gholami等人综述了神经网络量化的不同方面,其中包括该主题的理论细节。在这里,我们将简要介绍和讨论其中的关键点。
在不损失一般性的情况下,解释了实数有限变量上量化的概念,这些变量可以表示神经网络中的权重或激活。假设是一个有限变量,限定在的范围内,我们想用一组位于的离散数字将其值映射到q。在映射之前,我们可能想将输入r的范围剪辑到一个较小的的集合。
3.1、量化区间:均匀和非均匀
均匀量化将r映射为一组均匀间隔的离散值,而在非均匀量化中,离散值之间的距离不一定相等。通过非均匀量化,人们可以更好地从权重和激活分布中捕获重要信息,因为例如,可以将更紧密间隔的步骤分配到更密集的分布区域。因此,尽管采用非均匀量化比均匀量化需要更多的设计,但它可能会实现更低的精度下降[79]。此外,由于权重和激活的分布通常倾向于具有长尾的钟形,非均匀量化可以导致更好的结果[80,81,82]。图5显示了上述量化方案之间的差异。
3.2、静态量化和动态量化
对于一组输入,裁剪范围,其中,可以动态确定,也可以静态确定。前者动态计算每个输入的裁剪范围,而后者使用预先计算的范围来裁剪所有输入。动态量化比静态量化具有更高的精度,但计算开销较大。
3.3、量化方案:QAT和PTQ
由于累积的数值误差,量化训练模型可能会对模型的准确性产生负面影响。为了恢复这种性能下降,通常需要调整网络参数。因此,量化可以以两种方式进行:量化感知训练(QAT),指的是对网络进行再训练,或训练后量化(PTQ),其中不包括再训练。在QAT中,量化模型的前向和后向遍历以浮点数形式进行,并在每次梯度更新后对网络参数进行量化。另一方面,PTQ在不重新训练网络的情况下进行量化和参数调整。与QAT方法相比,该方法虽然会受到模型精度下降的影响,但其计算开销要低得多。通常,PTQ使用一小部分校准数据来优化量化参数,然后对模型进行量化[83]。由于PTQ依赖于最少的信息,通常不可能在保持精度的同时达到低于4或8位的精度[84]。
3.4、量化部署方案
一旦模型被量化,就可以使用假量化(也称为模拟量化)或纯整数量化(也称为定点量化)来部署它。在前者中,权值和激活值的存储精度较低,但从加法到矩阵乘法等所有操作都是以浮点精度进行的。虽然这种方法需要在浮点运算前后进行不断的去量化和量化,但它有利于模型的准确性。然而,在后者中,操作以及权重/激活值存储都是使用低精度的整数运算进行的。通过这种方式,该模型可以利用大多数硬件支持的快速整数运算的优势。图6说明了单个卷积层的PTQ和QAT部署之间的差异。
3.5、量化YOLOv5的最新应用研究
表2是最近对YOLOv5按量化方案分类的实际量化结果。在文献[85]中,作者提出了一种QAT方法,该方法在训练过程中考虑权重更新的方向,动态地选择权重的舍入方式,并调整相应的梯度。他们逐层量化模型,同时分别对网络的权重和激活采用对称/非对称裁剪范围。
噪声注入伪量化(Noise Injection Pseudo Quantization, NIPQ)[86]作为QAT方法,首先用伪量化噪声对网络进行预训练,然后在后训练中对模型进行量化。该方法自动调整比特宽度和量化间隔,同时对神经网络的黑森迹求和进行正则化。作者在YOLOv5上评估了他们的方法,并实现了低至3位的精度,而精度没有明显下降。
此外,[87]使用ShuffleNetV2[88]修改骨干网络,减少PAN和head的层数,使模型更适合移动设备。它利用TensorFlow Lite Micro[89]以8位精度量化权重和激活,并最终将其部署在STM32系列的超低功耗微控制器上。作者在[90]中引入了Deeplite Neutrino,它可以自动量化低于4位的CNN模型,并将Deeplite Runtime作为推理引擎提出,这使得在ARM cpu上部署超低位量化模型成为可能。他们的QAT方法可以实现低于4位的权重和网络激活精度,通过使用位串行计算设计自定义卷积算子使其变得可行。也就是说,通过popcount和按位操作来计算低位权值和激活值的点积。他们通过在树莓派4B上部署YOLOv5来评估他们的方法。[91]用MobileNetV2[92]取代了骨干网,并在其上增加了一个协调关注机制。在NVIDIA Xavier NX上部署模型之前,作者利用PyTorch通过8位精度的静态方案对训练后的模型进行量化。类似地,在[93]中,Pytorch以8位精度和静态裁剪范围的伪量化方式对修改后的YOLOv5进行量化。[73]的工作使用Nihui卷积神经网络(NCNN)框架对训练后的压缩模型进行量化,并将其部署在具有联发科Dimensity处理器的实际移动设备上。[94]提出了一种对数尺度量化方法,该方法重新缩放了激活的分布,使其适合于对数尺度量化。这种方法最大限度地减少了YOLOv5中由于对数尺度量化而导致的精度下降。
总的来说,超过一半的论文使用了QAT方案,这导致量化精度低至3位。然而,没有PTQ方案达到低于8位精度。虽然使用量化方法对YOLOv5进行的研究较多,但本文综述的重点主要是那些采用新颖量化方法的研究。因此,我们排除了仅使用TensorRT[95]、PyTorch量化[96]和ONNX量化[97]实现的结果。
4、结论
模型压缩方法近年来得到了广泛的关注,其应用也越来越具体。本文综述了目前应用于YOLOv5的常用剪枝和量化方法,并从不同方面对其进行了分类。通过我们的分析,我们发现了专门针对YOLOv5的修剪和量化方法的差距。这一点很重要,因为这些压缩方法应用于YOLOv5,由于许多结构互连,需要进一步探索和优化。我们的评论为对模型压缩方法的实际部署感兴趣的研究人员提供了资源,特别是在YOLOv5及其后续版本上的修剪和量化。随着YOLOv8的出现,YOLO在性能方面经历了一个新的边界,如图7所示,它推动了目标检测的边界,建立了新的SOTA性能。然而,在大小和flop方面的减少是相对微不足道的,当硬件限制是关键时,需要对较新的yolo应用修剪和量化。因此,我们的综述可扩展到后续版本的YOLO,并可作为有兴趣压缩任何版本的YOLO的研究人员的指导方针。
4.1、 修剪的挑战和未来方向
与常规的CNN不同,修剪YOLOv5由于其复杂且高度优化的深度神经网络架构而面临一些挑战。YOLOv5使用CSP-Darknet53神经网络架构作为主干,PANet作为颈部,两者都由许多卷积层组成,这些层通过串联紧密相连。此外,脊柱和颈部之间的相互连接增加了模型的复杂性。总的来说,这些层的结构复杂性阻碍了在不影响网络整体结构性能的情况下去除不必要过滤器的过程。否则,与拼接相关的特征图的空间分辨率将不匹配。因此,在修剪YOLOv5之前应该进行一些补偿。例如,[63]没有考虑修剪上采样层、连接层和YOLOv5的头部。此外,它忽略了瓶颈模块中的快捷连接,以允许输入具有不同数量的通道。在这方面,更多的研究应该考虑基于滤波器和基于核的剪枝,因为这种剪枝策略不会改变输出通道的数量:因此,它简化了修剪过程。
如表1所示,目前的研究方向是利用BNSF进行稀疏性训练和基于信道的微调剪枝。然而,在使用其他显著性标准使用一次性修剪存在差距。在这里,我们介绍一些尚未应用于YOLOv5的新方法。
EagleEye[100]将修剪过程视为一个优化问题,并指出使用评估的准确性可能不是一个有希望的标准来指导修剪候选者的选择。因此,该算法根据问题约束对每一层提出一个随机剪枝比,然后根据它们的1-范数对滤波器进行剪枝。它使用训练数据的子样本,通过自适应的基于bn的候选评估模块来评估修剪候选的影响。在[101]中,作者介绍了HRank滤波器剪枝,迭代剪枝具有低秩激活映射的滤波器。[102]提出了一种掩模多样性评估方法,将结构化剪枝与期望精度联系起来。它还引入了一种称为AdaPrune的修剪算法,该算法将非结构化稀疏模型压缩为细粒度稀疏结构化模型,该模型不需要重新训练。类似地,[103]提出了变分贝叶斯剪枝算法,该算法考虑通道BN比例因子的分布,而不是像2.1节那样确定性地使用通道BN比例因子。
4.2、量化的挑战和未来方向
虽然不是特定于YOLO,但量化FP32到INT8并不是一个平滑的转换,如果梯度景观很苛刻,它可能会阻碍结果的最优性。此外,实现低比特(<使用PTQ的4位)精度几乎是不可能的,因为它很可能会破坏模型的性能。目前,有一种趋势是使用现成的量化模块,如TensorRT [95], PyTorch量化[96]和ONNX量化[97],由于它们的精度限制在8位,因此无法实现非常低的精度。然而,由于我们的重点是在YOLOv5上寻找新的量化方法,因此本综述不包括此类研究。
在量化YOLOv5的应用研究方面,更多的是使用QAT进行研究,其精度范围从1位到8位不等。然而,在专注于加速训练时间和推理时间方面存在差距,特别是因为在新数据集上训练YOLOv5是计算和耗时的。作为一种解决方案,可以使用纯整数量化完成更多工作,因为当使用整数执行操作时,硬件吞吐量要高得多。例如,当数据类型为INT4而不是FP32时,TITAN RTX每秒可以执行大约23倍的操作[30]。此外,当研究/需要低于8位精度时,PTQ方法仍然会倒退,这为该领域的未来工作提供了机会。因此,我们推荐一些可以应用于YOLOv5的方法,以填补上述空白。在[104]中,提出了一种PTQ算法AdaRound,以更有效地将权重四舍五入进行量化。它实现了低至4位精度的SOTA性能,而精度没有明显下降(<1%)。Yao等人提出了HAWQV3[105],这是一种混合精度的纯整数量化方法,达到了INT4或INT4/INT8均匀映射量化。AdaQuant[106]提出了一种PTQ量化方案,通过基于校准集优化各层或块的参数,将各层或块的量化误差分别最小化。它可以实现精度为INT4的SOTA量化,精度下降可以忽略不计。[107]的作者提出了一种量化方法,该方法专门利用基于整数的操作,并在推理过程中消除冗余指令。[108]评估了量化对损失格局的影响,并引入了一种新的PTQ方法,该方法可以通过直接最小化损失函数来达到4位精度,从而获得几乎全精度的基线精度。
鸣谢
我们要感谢IT31385 MITACS Accelerate项目下信息技术与复杂系统(MITACS)的数学与数学的财政支持。
- 点赞
- 收藏
- 关注作者
评论(0)