论文地址:https://arxiv.org/abs/2307.11904
文章末尾有相关论文链接~
近年来,研究人员一直 致力于改进YOLO目标检测器。自其问世以来,已经推出了八个主要版本的YOLO,旨在提高其准确性和效率,尽管YOLO的明显优点使其在许多领域得到了广泛应用,但是资源有限的设备上部署他存在挑战。为了解决这个问题,开发了各种神经网络压缩方法,主要分为:网络剪枝、量化和知识蒸馏三大类
利用模型压缩方法的丰硕成果,如降低内存使用和推理时间等,使他们成为在硬件受限的边缘设备上部署大型神经网络时受到亲耐,甚至可以说是必要的方法。
通过这样做,我们识别出在适应YOLOv5的剪枝和量化压缩中存在的差距,并提供这一领域进一步探索的未来方向。在几个版本的YOLO中,我们特别选择了YOLOv5,因为他在文献中具有较新和较高的流行度的优秀权衡。
作为一个基本问题,目标检测多年来一直是一个活跃的研究领域。目标检测 的主要目标是在给定的图像中识别和定位不同类别的感兴趣对象。目标检测是许多其他高级计算机视觉任务的基础,从语义分割到目标跟踪到活动识别,近年来,基于深度学习的方法,如卷积神经网络,在目标检测任务中取得了最先进的性能。由于计算能力和尖端算法的进步,目标检测变得更加准确,能够应用于广泛的实际应用。
与传统目标检测方法相比,使用CNNs可以减轻目标检测中特征提取、分类和定位的问题。通常,目标检测可以通过两种方法进行,即单阶段和双阶段。在前者中,算法直接预测对象的边界框和类别概率,而在后者中,算法首先生成一组区域建议,然后将这些建议分类为对象或背景。不同于Faster R-CNN [6]和R-FCN [12]作为双阶段目标检测方法,如YOLO [5]、SSD [13]、 EfficientDet [14]和RetinaNet [15]等单阶段方法通常使用一个全卷积神经网络(FCN)来检测对象的类 别和空间位置,而不需要中间步骤。
在不同的单阶段目标检测方法中,自2016年发布以来,YOLO一直受到了广泛关注。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激活函 数,Weighted-Residual-Connections(WRC),Spatial Pyramid Pooling(SPP)和Path Aggregation Network
(PAN)提高了YOLO的性能[18]。
2020年,Ultralytics推出YOLOv5,提供了五种不同大小的版本,从nano到extra large [19]。YOLO经
历了从新的骨干结构到自动化超参数优化的重大改进。在骨干结构方面,YOLOv5采用了基于Darknet53的 全新CSPDarknet53结构 [20],并添加了交叉阶段部分(CSP)策略。
YOLOv5的Neck设计充分利用了CSP- PAN [21]和速度更快的SPP块(SPPF)。 YOLOv5l的结构如 图2所示,其中CSPDarknet53包含CSP融合模块的C3块。 CSP策略将基层特征图分为两部分,并通过交 叉阶层合并它们。因此,C3模块可以有效处理冗余梯度,同时提高残差和密集块内的信息传输效率。 C3是BottleNeckCSP的简化版本,目前用于最新的YOLOv5变体。 2022年,美团发布了YOLOv6, 采用了双向拼接(BiC)模块、锚点辅助训练(AAT)策略以及全新的骨干和Neck设计 [22]。在很 短的时间内,原作者提出了YOLOv7 [23],这是一项突破。
目前使用和扩展超参数化模型的趋势导致了更高的准确性;然而,所需的浮点运算(FLOPs)和 参数数量显著增加[27]。这个问题因内存、功耗和计算能力的限制阻碍了复杂模型在边缘设备上的部 署。为了解决这个问题,可以利用云计算(CC)。然而,在云服务上运行复杂模型可能不是可行的选 择,原因如下:1)网络成本:将图像数据传输到云端消耗相对较大的网络带宽;2)时间关键任务中 的延迟:访问云服务的延迟不能得到保证;3)可访问性:云服务依赖设备与无线通信的接入,而在许 多环境情况下通信可能会中断[28]。因此,在许多情况下,边缘计算成为一个更为有益的解决方案。因 此,已经提出了各种方法来压缩神经网络,以使大型模型可以在边缘设备上部署。
模型压缩方法可以 分为三类:修剪(pruning),量化(quantization)和知识蒸馏(knowledge distillation)。
在修剪中,**删除具有较低重要性的模型的冗余参数,以获得一种稀疏/紧凑的模型结构。**量化涉及使用较低精度的 数据类型表示模型的激活和权重。最后,知识蒸馏是指使用准确的大型模型作为教师,通过教师模型 提供的软标签来训练小型模型[29, 30]。
神经网络修剪最初在Optimal Brain Damage [31]和Optimal Brain Surgeon [32]中提出。它们都依赖 于二阶泰勒展开来估计修剪的参数重要性。
也就是说,在这些方法中Hessian矩阵应该被部分或完全计算。然而,也可以使用其他标准来识别参数的重要性,也被称为显著性。理论上,最佳标准是对每个参数对网络的影响进行精确评估,但是这种评估计算成本过高。因此,可以利用其他评估方法,包括ln -范数、特征图激活的均值或标准差、批量归一化缩放因子、一阶导数和互信息,来进行显著性分析。从超参数到学习速率计划到实现结构的各种因素都会影响结果。
显著性标准是根据神经网络的特定特征或性质,用于确定个体权重、神经元、滤波器或一组权重 的重要性或相关性的度量尺。
由于权重值通常符合零均值的正态分布,这是选择较不重要的权重个体或结构的直觉方法。使用这个准则的挑战是定义一个能够进行修剪的阈 值。这样的阈值可以静态地设置在整个网络或每一层上。此外,可以将其视为一种动态参数,并通过 定义阈值调度器来处理。[34]提出了一种方法,将阈值调度视为一个隐式优化问题,并在使用 迭代收缩阈值算法(ISTA)时提供了阈值调度器。
当在一个层的末端使用激活函数时,其输出可以被解释为参数对预测的重要性。例如,对于ReLU函 数,**接近零的输出可以被认为是较不重要的,并被选为修剪的候选参数。**此外,在更广泛的视角下, 激活张量的均值或标准差可以指示显著性。
尽管可以将其归类为l1 -范数和特征映射激活准则之间的融合,但BN缩放因子主要用于剪枝YOLOv5和 更一般的CNN。由[38]提出,该方法引入了每个通道的缩放因子γ,并在训练过程中对其进行惩罚,以 获得可以被剪枝的稀疏网络。作者将BN缩放因子提出作为网络压缩所需的γ值。在他们的方法中,他 们使用l1 -范数对通道的γ进行惩罚,然后剪去接近零缩放因子的通道。
与先前的准则不同,一阶导数测量指标利用通过梯度在反向传播期间提供的信息。这类准则可能 会将来自激活到梯度的信息结合起来,正如[33, 39]中所述。
**隐藏层参数与预测值或其他隐藏层参数之间的互信息(Mutual Information,MI)可以表示显著 性。**在[40]中,作者试图最小化两个隐藏层之间的互信息,同时最大化最后一个隐藏层与预测值之间 的互信息。
修剪的粒度决定了要修剪模型的哪些参数,广义上讲,修剪可以以结构化或非结构化的方式进行。
非结构化或细腻度剪枝是在考虑相关张量或层中的位置之前,将剪枝的目标参数设置为模型的权重。在权重剪枝中,通过显著性评估确定不必要的权重,并在之后进行掩盖或移除。由于消除权重可能会损害模型架构,因此他们在此过程中主要被掩盖而不是被移除,尽管在训练期间掩盖权重而不是一出他们会增加内存使用量,但是可以利用掩盖权重的信息来比较近过剪枝的模型和原始模型。细腻度剪枝并不总是有益的,因为需要特殊硬件来利用这种非规则稀疏操作,虽然可以使用非结构化剪枝实现更高的压缩比,但存储被剪枝权重的索引可能会导致更高的存储使用量。
与非结构剪枝不同,模型权重可以基于其结构化进行修剪。结构化剪枝通过在评估权重张量的重要性时观察他们的模式,以便可以用低索引开销进行描述,例如步长或块。在卷积层中,第j个通道是通过将第j个滤波器与输入特征图进行卷积而得到的,因此,可以选择对于结构化剪枝而言的一组参数。下图显示了这些结构化剪枝范式之间的差别。
其目的是删除每层输出特征图中导致第j个通道(或多个通道)的权重滤波器,通道修剪技术利用l2 -范数作为识别最不重要权重张量的标准。然而关于这一过程对整体模型结构的影响存在争议。在[44]中作者表示通道修剪过程对模型结构影响较小。相反,在[45]中观察到通道修剪导致网络结构发生了剧变,然而,通过对参数进行掩码而不是完全消除他们,可以减轻结构性损害,然而,由于整个模型需要在内存中存储,因此此方法可能不会在训练过程中产生任何存储开销。
基于滤波器的修剪消除了与输入特征图的第i个通道对应的权重。也就是说,在卷积层中修剪了所有滤波器的第i个核。**该修剪方法的结构损害很小,并且可以将模型视为原始模型。**值得一提的是1)第l层的基于通道的修剪等价于第(l + 1)层的基于滤波器的修剪,2)滤波器 修剪不等同于基于滤波器的修剪。在滤波器修剪中,对某一层的一个或多个滤波器进行修剪,这可以 从粒度的角度被归类为基于通道的修剪。
在这个类别中,连接输入特征图的第i个通道和输出特征图的第j个通道的第l层滤 波器的所有参数都会被剪枝[46]。这种剪枝粒度不会影响模型结构。
无论剪枝粒度核显著性标准如何,剪枝过程可以进行一次性剪枝或迭代剪枝。一次性剪枝是在训练之前或之后,移除/屏蔽掉不太显著的参数,后训练剪枝可能会导致网络性能永久下降,而迭代剪枝则考虑到性能下降并重新训练网络,与一次性剪枝相比,虽然迭代剪枝需要更多的计算时间,但是在某些情况下可以放置精度下降甚至提高精度。此外,一些方法会修改网络的代价函数,例如添加正则化,使模型更适合剪枝,因此,他们不能用于后训练剪枝。
表 1 展示了按修剪粒度分类的最近实验结果,这些结果是在 YOLOv5 上进行的。Frantar 等人[51] 关注的是实现所需的推断时间,而不是特定的压缩比。他们提出了一种修剪方法,即通过动态规划 搜索学习高效稀疏剖面(SPDY),可以在一次性和迭代方案中使用。Nan 等人[72]实现了一种基于 非支配排序遗传算法(NSGA-II)的算法,将修剪视为一个优化问题。也就是说,如何修剪通道以最小 化 GFLOPs 并最大化mAP的平方根。Shao 等人[50] 引入了一种自适应稀疏正则化(ASR),根据滤波 器权重提供了稀疏约束。也就是说,在正则化的损失函数中,对具有较弱通道输出的滤波器分配惩 罚,而不是直接用批归一化缩放因子的L1范数来调节损失。训练后,对于所有层中的全局阈值以下 的缩放因子较小的滤波器进行修剪,并进行微调以恢复准确性。Pan 等人[52]通过利用PReLU激活函 数和使用Ghost Bottleneck代替BottleNeckCSP修改了YOLOv5结构。然后,他们使用BNSF方法(参见 第2.1.3节)基于小批归一化缩放因子对除Ghost Bottleneck外的通道进行修剪。Li 等人[61]提出了一个 特征融合层和选择性核心网络来改进模型的通道和核心注意力。他们将transformer编码器模块附加到PAN neck的输出上,通过自注意过程探索模型预测的潜力,并在部署到NVIDIA Jetson Xavier NX之前使 用BNSF方法压缩模型。此外,Jeon等人[69]的目标是实现所需的参数数量和FLOPs,并使用计算正则 化的稀疏训练方法(CRLST)。在稀疏训练后,他们根据批归一化缩放因子迭代地对通道进行修剪。Jeon等 人[69]和Li等人[61]在NVIDIA Xavier NX上部署了压缩的YOLOv5模型。Wang等人[74] 将滤波器视为 空间中的点,并采用滤波器剪枝几何中位数(FPGM)方法来修剪卷积层的滤波器。与ln -norm准则不同, FPGM明显利用了滤波器之间的相互关系。它计算整个层权重的几何中位数,并修剪那些几何中位数 接近层几何中位数的多余滤波器。Zhang等人[63]丢弃了上采样、拼接和检测层,并使用了与BNSF方 法类似的滤波器修剪方法,但它嵌入了余弦衰减的稀疏系数(CDSC-BNFS)并使用了软掩模策略。 Liu等人[67, 68]通过BNSF基于通道的修剪使模型更加轻量化,并在neck网络中添加了另一个上采样级 别,使用BottleNeckCSP模块提取更多小对象的语义信息。后者还在将其输入头部之前的neck网络中的每 个BottleNeckCSP模块的输出上添加了卷积块注意力模块(CBAM)。Wang等人[76]在BottleNeckCSP中的 每个快捷方式之前考虑了每个Conv层的均值,并压缩了骨干网络。他们还使用了BNSF方法进行基于 通道的修剪。下面列出了几个关于YOLOv5修剪的最近实现的论文:
[71, 53] 运用 BNSF 方法对网络进行剪枝,同时将微调和知识蒸馏相结合,以节省训练时间并保 持准确性。
• 在[54]中,作者们将CSPDarknet骨干网络替换为MobileNetV3 [77],并在使用BNSF方法修剪滤波 器后使用TensorRT。
• [55, 56, 57, 60, 64] 的工作主要集中在使用BNSF策略和微调来修剪过滤器。
• 在[58]中,首先对主干网进行了剪枝,在对应物体大小相对一致的情况下,移除了PAN模块最大
的特征图。此外,在neck模块中,提出了混合注意力机制以从通道中提取最全面的特征。
• [59]使用了t-Distributed Stochastic Neighbour Embedding(t-SNE)算法来降低锚定帧预测的维度, 并将其与加权聚类相结合,以预测帧大小,以实现更准确的目标帧预测。随后,它通过BNSF方 法来修剪过滤器。
[62]在主干网络中利用多光谱通道注意力机制来生成更具信息量的特征,从而提高模型对小物体 的检测准确性。然后,通过BNSF过程对模型的滤波器进行剪枝。
• [65] 通过使用BNSF准则修剪过滤器,减轻了模型的负担,并引入了软非极大值抑制,使得模型 能够检测到重叠的葡萄簇,而不是将其丢弃。
• [66]使用空间金字塔级联膨胀卷积(SPDCs)将来自不同感受野的特征图组合起来,以融合多尺 度的缺陷信息。它在颈部嵌入了一个通道注意机制,以在每次连接操作后将更多的注意力集中在 有效的特征通道上。然后,通过基于通道的BNSF剪枝与微调对模型进行压缩。
• [70]对YOLOv5的结构进行了多项修改,例如在neck部分添加了一个注意力机制,以及在backbone部 分添加了一个上下文提取模型。至于修剪方面,它使用了BNSF准则来移除滤波器。
• [75]使用层和内核剪枝方法对YOLOv5的颈部和脊柱进行压缩。
• [73]将YOLOv5的主干网替换为MobileNetV3,并通过基于通道的剪枝对颈部网络进行剪枝。
大约85%的YOLOv5剪枝研究使用基于通道的剪枝方法,其余部分与其他结构化和非结构化粒度 相关。用于剪枝的主要显著性准则是BNSF稀疏训练方法,在我们的调查范围内约60%的论文中采用该 方法,而其余论文采用了l1 -范数、l2 -范数或提出了新的显著性准则。
神经网络量化旨在用较少的比特数来表示深度神经网络的权重和激活,通常情况下,原始精度是32位当精度浮点型,在这个过程中,需要尽可能减少对模型性能准确性的影响,通常利用更快的硬件整数指令,量化可以减少模型的大小并提高推断时间。在[30]中,Gholami等人对神经 网络量化的不同方面进行了调研,其中包括了该主题的理论细节。在这里,我们将简要介绍和讨论关 键要点。
为了简明起见,我们在一个可以表示神经网络中权重或激活的实有限变量上解释量化的概念。假设r ∈ R是一个有限变量,其取值范围限制在S上,我们希望将其值映射到一组离散数字q,这些数字位于D ⊂ R中。在进行映射之前,我们可能希望将输入r的范围剪裁为一个更小的集合C ⊆ S
均匀量化将r映射为一组均匀间隔的离散值,而非均匀量化的离散值之间的距离不一定相等。通过非均匀量化,可以更好的捕捉权重和激活分布中的重要信息,因为可以将密集的分布区域分配给间距较小的步骤。因此,尽管使用非均匀量化需要比均匀方法更多的设计工作,但可能会实现更低的准确性损失。此外由于权重和激活的分布通常呈钟形曲线并且尾部较长,非均匀量化可以带来更好的结果。
将训练好的模型量化可能会由于累积的数值误差而对模型的准确性产生负面影响。为了恢复性能下降,通常需要调整网络参数。因此,可以以两种方式进行量化:量化感知训练(QAT)和 训练后量化(PTQ)。在QAT中,量化模型的前向和后向传递是以浮点数进行,并且在每次梯度更新后对网络参数进行量化。另一方面,PTQ在不重新训练网络的情况下进行量化和参数调整。与QAT相比,这种方法通常会导致模型的准确性下降,但其计算开销较低,通常PTQ使用一小组校准数据来优化量化参数,然后对模型进行量化,由于PTQ以来于最小的信息量,往往无法在保持准确性的同时实现低于4位或8位的精度。
一旦模型进行量化,就可以使用伪量化(也称为模拟量化)或仅整数量化(也称为定点量化)进行部署。在前一种方法中,权重和激活值以低精度存储,但是从加法到矩阵乘法的所有操作都以浮点精度执行,尽管这种方法在浮点操作之前或之后需要不断地解量化和量化,当它有利于模型的准确性。然而,在后一种方法中,操作和权重/激活值存储都是用低精度整数算术执行,这样以来,模型可以利用大多数硬件支持的快速整数算术,下图显示了在单个卷积层中对PTQ和QAT部署之间的差异。
[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,该方法可以自动对 CNN 模型进行低于 4 位的量化,并提 出了 Deeplite Runtime 作为推断引擎,使得在 ARM CPU 上部署超低位量化模型成为可能。他们的 QAT 方法可以实现网络的权重和激活低于 4 位的精度,这是通过使用比特串行计算设计自定义卷积运算符 实现的。即,低位权重和激活值的点积计算是通过 popcount 和位操作完成的。他们通过在 Raspberry Pi 4B 上部署 YOLOv5 来评估他们的方法。
[91] 用 MobileNetV2 [92] 替换了骨干网络,并添加了一个坐标注意机制。作者在训练后使用 Py- Torch 通过静态方案进行了 8 位精度的模型量化,然后将模型部署在 NVIDIA Xavier NX 上。类似地, 在 [93] 中,Pytorch 被用于以伪量化的方式对修改后的 YOLOv5 进行 8 位精度的量化,并使用静态剪 辑范围。
[73] 使用了 Nihui Convolutional Neural Network (NCNN) 框架,通过训练后对压缩模型进行量化, 并将其部署在具有 MediaTek Dimensity 处理器的实际移动设备上。
[94] 提出了一种对激活进行对数尺度量化的方法,重新调整激活分布以适合对数尺度量化。这种 方法可以最小化因对数尺度量化而导致的 YOLOv5 精度下降。
总体而言,超过一半的研究论文使用了 QAT 方案,将量化精度降低到 3 位。然而,尚未出现低 于 8 位精度的 PTQ 方案。尽管存在更多使用量化进行的 YOLOv5 研究,但这次回顾的重点是主要包 含具有新的量化方法的论文。因此,我们排除了仅在实施中使用 TensorRT [95]、PyTorch 量化 [96] 和ONNX 量化 [97] 的结果。
在最近几年中,模型压缩方法引起了广泛关注,并且它们的应用变得更加具体。在本文中,我们 对应用于YOLOv5的常用剪枝和量化方法进行了综述,并从不同的角度对它们进行分类。通过我们的 分析,我们发现了适应于YOLOv5的剪枝和量化方法方面的差距。这一问题很重要,因为将这些压缩 方法应用于YOLOv5需要进一步的探索和优化,由于其许多结构相互连接。我们的综述为对模型压缩 方法,特别是剪枝和量化方法,以及其后续的新版本YOLOv5感兴趣的研究人员提供了一个资源。随 着YOLOv8的出现,YOLO在性能方面取得了新的突破,如图7所示,推动了目标检测的界限,建立了 新的SOTA性能。然而,尺寸和FLOPs方面的减少相对较小,这在硬件限制关键时需要对新的YOLO进 行剪枝和量化。因此,我们的综述可以延伸到后续版本的YOLO,并可作为对压缩任何版本的YOLO感 兴趣的研究人员的指南。
与普通的CNN不同,修剪YOLOv5由于其复杂且高度优化的深度神经网络架构而面临一些挑战。YOLOv5使用CSP-DarkNet53神经网络架构作为主干,使用PANet作为颈部,两者均由许多紧密连接的卷积层组成。此外,主干和颈部之间的相互连接增加了模型的复杂性,总体而言**,这些层的结构复杂性阻碍了删除不必要的过滤器的过程,而不会对网络的总体结构性能产生不利影响**。否则,与连接相关的特征图的空间分辨率将不匹配。因此,在修剪YOLOv5之前应进行一些补偿。例如:[63]不考虑修剪上采样层,连接层和YOLOv5头部。此外,它忽略了BottleNeck模块中的快捷连接,以允许输入具有不同数量的通道。在这方面,更多的研究应考虑基于滤波器和基于核的修剪,因为这种修剪策略不 会改变输出通道的数量,从而简化了修剪过程。
目前的研究方向是利用BNSF进行稀疏训练和基于通道修剪,并进行微调。然而,使用其他显著性标准进行一次修剪存在差距。EagleEye [100]将修剪过程视为一个优化问题,并指出使用评估准确性可能不是指导修剪候选选择的 一个有前景的标准。因此,它根据问题约束为每个层次提出了一个随机修剪比例,然后基于它们的l1 - 范数修剪过滤器。它通过使用训练数据的子样本来评估修剪候选的影响,并通过自适应的BN-based候 选评估模块进行评价。在[101]中,作者引入了HRank filter pruning,它迭代地修剪低秩激活图的过滤 器。[102]提出了一种mask diversity评估方法,用于结构化修剪和预期准确性之间的相关性。它还介绍 了一种名为AdaPrune的修剪算法,该算法将非结构化稀疏模型压缩到细粒度稀疏结构化模型,无需重 新训练。类似地,[103]提出了一种Variational Bayesian pruning算法,该算法考虑了通道的BN缩放因子 的分布。
尽管不特定于YOLO,将FP32量化为INT8并不是一个平滑的转换,如果梯度变化剧烈,可能会影响结果的最优性,此外,使用PTQ实现低位精度几乎是不可能的,因为他很可能破坏模型的性能。目前,有一种趋势是使用现成的量化模块,如TensorRT、PyTorch Quantization[96]和ONNX量 化[97],但它们只能实现8位精度以下的低精度量化。关于对YOLOv5进行量化的应用研究,更多的研究 使用了从1位到8位的各种精度的QAT。然而,在加快训练时间和推断时间方面,特别是在将YOLOv5训 练在新数据集上时,仍存在一定的研究空白,因为这需要大量的计算和时间。作为解决方案,可以进 行更多的工作来采用仅使用整数进行量化,因为当使用整数进行运算时,硬件吞吐量要高得多。例 如,相较于FP32,TITAN RTX在数据类型为INT4时每秒可以执行大约23倍的操作[30]。此外,当需要 研究/需要低于8位精度时,PTQ方法仍然存在局限性,这为今后的研究提供了机会。因此,我们推荐 一些可以应用于YOLOv5以填补上述空白的方法。在[104]中,提出了一种PTQ算法AdaRound,用于更 高效地量化权重。它以4位精度为低,达到了SOTA性能,并且准确度下降不明显(¡1%)。姚等人提 出了HAWQ-V3[105],一种混合精度仅整数量化方法,可以实现INT4或INT4/INT8的均匀映射量化。 AdaQuant[106]提出了一种PTQ量化方案,通过根据校准集优化其参数来最小化每个层或块的量化误 差。它可以达到具有INT4精度的SOTA量化,导致准确度下降可以忽略不计。在[107]中,作者提出了 一种仅使用基于整数的操作进行量化的方法,并在推断过程中消除了冗余指令。[108]评估了量化对损 失函数的影响,并引入了一种新颖的PTQ方法,通过直接最小化损失函数可以达到4位精度,几乎等同 于全精度的基准准确度。