YOLO落地部署 | 一文全览YOLOv5最新的剪枝、量化的进展【必读】

共 22460字,需浏览 45分钟

 ·

2023-08-04 16:45

点击下方卡片,关注「集智书童」公众号

点击加入👉「集智书童」交流群

本文首发于 【集智书童】,白名单账号转载请自觉植入本公众号名片并注明来源,非白名单账号请先申请权限,违者必究。

在过去的几年中,大量的研究致力于改进YOLO目标检测器。自其推出以来,已经引入了8个主要版本的YOLO,旨在提高其准确性和效率。虽然YOLO的明显优点使其在许多领域得到广泛应用,但在资源受限的设备上部署它仍然存在挑战。

为了解决这个问题,已经开发了各种神经网络压缩方法,它们分为3大类:

  1. 网络剪枝
  2. 量化
  3. 知识蒸馏

利用模型压缩方法带来的丰硕成果,如降低内存使用和推理时间,使它们在将大型神经网络部署到硬件受限的边缘设备上成为受欢迎的选择,甚至是必要的选择。

在这篇综述中专注于剪枝和量化方法,因为它们相对独立。作者对它们进行分类,并分析将这些方法应用于YOLOv5的实际结果。通过这样做,作者确定了在适应剪枝和量化方法来压缩YOLOv5时的差距,并提供了在这一领域进一步探索的未来方向。

在众多版本的YOLO中,作者特别选择了YOLOv5,因为它在最新性和文献中的流行性之间取得了出色的平衡。这是第一篇专门从实现角度审视在YOLOv5上进行剪枝和量化方法的综述论文。作者的研究也适用于更新版本的YOLO,因为将它们部署到资源受限的设备上仍然存在同样的挑战。

本文面向那些对在YOLOv5上实际部署模型压缩方法以及探索可用于后续版本的YOLO的不同压缩技术感兴趣的人。

1、简介

作为一个基本问题,目标检测已经是多年来的一个活跃研究领域。目标检测的主要目标是从给定图像中识别和定位不同类别的目标。目标检测是许多其他先进计算机视觉任务的基础,包括语义分割、目标跟踪、活动识别等。

近年来,基于深度学习的方法,如卷积神经网络(CNNs),在目标检测任务中取得了最先进的性能。由于计算能力和先进算法的进步,目标检测变得更加准确,为各种现实世界的应用提供了可能。与传统的目标检测方法相比,使用CNNs可以缓解目标检测中特征提取、分类和定位的问题。

通常,目标检测可以通过两种方法进行,即单阶段和两阶段检测。在前者中,算法直接预测目标的边界框和类别概率,而在后者中,算法首先生成一组区域建议,然后对这些建议进行目标或背景的分类。不同于两阶段目标检测方法,如Faster R-CNN和R-FCN,单阶段方法如YOLO、SSD、EfficientDet和RetinaNet通常使用一个完全卷积神经网络(FCN)来检测目标的类别和空间位置,而不需要中间步骤。

在不同的单阶段目标检测方法中,YOLO自2016年发布以来一直受到关注。YOLO的主要思想是将输入图像分成一个单元格网格,并为每个单元格预测边界框和类别概率。YOLO将目标检测视为回归问题。由于它使用单个神经网络进行目标检测和分类,它可以同时为这两个任务进行优化,从而提高整体的检测性能。

YOLOv1采用了一个简单的结构,包含24个卷积层和两个全连接层,用于输出概率和坐标。自推出以来,YOLO经历了几次改进和变种。

2017年,YOLOv2(也称为YOLO9000)发布,通过使用多尺度训练、Anchor-Box、批量归一化、Darknet-19架构和修改的损失函数等改进了性能。

随后,Redmon和Farhadi推出了YOLOv3,采用特征金字塔网络、带有Anchor-Box的卷积层、空间金字塔池化(SPP)块、Darknet-53架构和改进的损失函数。

与之前的版本不同,YOLOv4是由不同的作者引入的。A. Bochkovskiy等人通过使用CSPDarknet53架构、Bag-of-Freebies、Bag-of-Specials、mish激活函数、加权残差连接(WRC)、空间金字塔池化(SPP)和路径聚合网络(PAN)等方法来增强YOLO的性能。

2020年,Ultralytics推出了五种不同尺寸的YOLOv5,从nano到extra large不等。YOLO经历了从新的Backbone架构到自动化超参数优化的重大改进。在Backbone部分,YOLOv5采用了新的CSPDarknet53结构,它基于Darknet53构建,添加了Cross-Stage Partial(CSP)策略。YOLOv5的Neck设计采用了CSP-PAN和较快的SPP块(SPPF)。输出是通过使用YOLOv3的Head结构生成的。

YOLOv5l的结构如图2所示,其中CSPDarknet53包含C3块,这是CSP融合模块。CSP策略将基础层的特征图分成两部分,然后通过Cross-Stage层次结构合并它们。因此,C3模块可以有效地处理冗余的梯度,同时提高残差和稠密块之间信息传递的效率。C3是BottleNeckCSP的简化版本,目前用于最新的YOLOv5变体。

为了比较,图3中展示了C3和BottleNeckCSP块的设计。总的来说,这些修改使得YOLOv5在包括COCO数据集在内的几个目标检测基准上取得了最先进的性能。此外,不同的模型尺寸为用户提供了根据需要进行选择的机会。

在2022年,美团推出了YOLOv6,其特点是增强了双向连接(BiC)模块、Anchor-Box辅助训练(AAT)策略和新的Backbone和Neck设计。

很快由原作者推出了YOLOv7,它是一项重大突破。Wang等人提出了“Bag-of-Freebies”、复合模型缩放方法和扩展ELAN架构,以扩展、Shuffle和合并基数。"Bag-of-Freebies"包括计划的重参化卷积(受到ResConv的启发)、网络中间层的额外辅助Head(用于深度监督)以及软标签分配器,通过主Head预测来引导辅助Head和主Head。

最后,Ultralytics在2023年推出了YOLOv8,对Backbone、Neck和Head进行了几处改动;使用C2f模块代替C3;提供了一个解耦的Head作为输出;模型直接预测目标的中心而不是Anchor-Box。虽然YOLOv6/7/8是更具特色的模型,但作者的工作重点是YOLOv5,因为对其进行了更多的研究。然而,这项研究可以扩展到更新的YOLO版本,特别是YOLOv8。

当前的趋势是使用和扩展过参数化模型以获得更高的准确性;然而,所需的浮点运算(FLOPs)和参数数量正在急剧增加。这个问题阻碍了将复杂模型部署在边缘设备上,因为受到内存、功率和计算能力的限制。为了解决这个问题,可以采用云计算(CC)。然而,在云服务上运行复杂模型可能不是可行的选择,因为:

  1. 网络的成本:将图像数据传输到云端消耗了相对较大的网络带宽;
  2. 对时间关键任务的延迟:访问云服务的延迟没有保证;
  3. 可访问性:云服务依赖设备对无线通信的访问,在许多环境情况下可能会受到干扰。

因此,在许多情况下,边缘计算成为更有成果的解决方案。因此,引入了各种方法来压缩神经网络,以使大型模型可以在边缘设备上部署。模型压缩方法可以分为3类:剪枝、量化和知识蒸馏。在剪枝中,移除模型中不重要的冗余参数,以获得稀疏/紧凑的模型结构。量化涉及使用低精度数据类型表示模型的激活和权重。最后,知识蒸馏是指利用大型准确模型作为教师来训练一个小型模型,使用教师模型提供的软标签来进行训练。

在这篇综述论文中,作者的重点是剪枝和量化方法,因为它们广泛用作模块化压缩技术,而使用知识蒸馏需要有两个模型或修改目标网络的结构。作者回顾了近年来在YOLOv5上应用剪枝和量化的方法,并比较了压缩术语方面的结果。作者选择聚焦于YOLOv5,因为它是最近的YOLO版本,有足够的关于它与剪枝和量化相关的研究。

尽管更新版本的YOLO在许多领域已经超越了YOLOv5,但它们应用的压缩方法仍然不足以进行审查。已经对神经网络压缩方法进行了许多综述,但在这里,作者对这些方法在YOLOv5上的实际实现进行了综述。作者展示了所有与YOLOv5的剪枝和量化相关的工作,以及它们在不同方面的结果。通常,压缩结果可以通过内存占用、功耗、FLOPs、推理时间、帧率、准确性和训练时间的变化来表达。

2、剪枝

神经网络剪枝最初是在Optimal Brain Damage和Optimal Brain Surgeon中提出的。它们都依赖于二阶泰勒展开来估计剪枝的参数重要性。也就是说,在这些方法中,Hessian矩阵应该部分或完全地被计算。然而,其他标准可以用于识别参数的重要性,也称为显著性。

理论上,最佳标准将对网络中每个参数的影响进行精确评估,但这样的评估计算成本过高。因此,其他评估方法包括 范数、特征图激活的均值或标准差、批归一化缩放因子、一阶导数和互信息,可以用于显著性分析。在下面的部分中,作者将讨论这些显著性评估方法。作者不会在这里量化每种方案的有效性,因为不同的工作很难进行比较,并且各种因素,从超参数到学习率计划到实现架构,都会影响结果。相反,作者将介绍每个标准背后的思想,并表达将它们应用于压缩YOLOv5的结果。

2.1. 剪枝的显著性标准

显著性标准是指根据网络的某些特性或属性来确定神经网络中个别权重、神经元、滤波器或一组权重的重要性或相关性的度量或指标。

2.1.1. 范数

基于 范数对模型进行剪枝是本综述论文范围内使用最广泛的方法。由于权重值通常形成具有零均值的正态分布,这是一种直观的方法,用于选择较不重要的单个权重或权重结构。使用这种标准的挑战在于定义一个用于进行剪枝的阈值。这样的阈值可以静态地为整个网络或每一层设置。此外,可以将其视为动态参数,并为该阈值定义调度器。例如,[A unified framework for soft threshold pruning]提出了一种将阈值调度视为隐式优化问题,并使用迭代收缩阈值算法(ISTA)提供阈值调度器的方法。

范数通常与网络的稀疏训练结合使用,以推动具有相同效果的参数具有相似的值(参见第2.1.3节)。为此,通常在代价函数中添加 正则化,并在(每个步骤的)训练之后剪枝具有较低 范数的参数。

2.1.2. 特征图激活

当在层的末端使用激活函数时,其输出可以被解释为对预测的参数的重要性。例如,在ReLU函数的情况下,接近零的输出可以被认为是不太显著的,并被选择为剪枝的候选项。此外,从更广泛的视角来看,激活张量的均值或标准差可以指示显著性。

2.1.3. 批归一化缩放因子(BNSF)

虽然可以将其归类为 范数和特征图激活标准的融合,但BN缩放因子主要用于剪枝YOLOv5,更普遍地说,用于CNN。[, Learning efficient convolutional networks through network slimming]提出的这种方法引入了每个通道的缩放因子

,并在训练过程中对其进行惩罚,以获得可以剪枝的稀疏网络。作者将BN缩放因子提出为网络压缩所需的 。在他们的方法中,他们使用 范数对通道的 进行惩罚,然后剪枝具有接近零缩放因子的通道。


2.1.4. 一阶导数

与前面的标准不同,一阶导数度量使用通过梯度在反向传播期间提供的信息。这类标准可以将激活到梯度的信息进行结合。

2.1.5. 互信息

两个层参数之间或层参数与预测之间的互信息(MI)可以表示显著性。在[ Compressing neural networks using the variational information bottleneck]中,作者试图最小化两个隐藏层之间的MI,同时最大化最后一个隐藏层和预测之间的MI。

2.2. 剪枝的粒度

剪枝的粒度定义了对模型的哪种参数进行剪枝。广义上,剪枝可以以结构化或非结构化的方式进行。

2.2.1. 非结构化剪枝

非结构化或细粒度剪枝是指剪枝的目标参数是模型的权重,而不考虑它们在相关张量或层中的位置。在权重剪枝中,通过显著性评估来确定不必要的权重,并在之后屏蔽或删除它们。由于删除权重可能损害模型的结构,因此通常在此过程中屏蔽权重而不是删除它们。

虽然在训练过程中屏蔽权重而不是删除它们会增加内存使用量,但屏蔽的权重信息可以在每个步骤中用来将剪枝后的模型与原始模型进行比较。细粒度剪枝并不总是有益的,因为需要特殊的硬件来利用这种不规则的稀疏操作。虽然可以通过非结构化剪枝实现更高的压缩比,但存储剪枝权重的索引可能导致更高的存储使用率。

2.2.2. 结构化剪枝

与前一类别不同,结构化剪枝可以根据权重张量中的结构进行剪枝。结构化剪枝在评估权重的重要性时观察权重张量中的模式,以便可以用低索引开销描述它们,例如跨步或块。在卷积层中,第 个通道是通过将第 个滤波器与输入特征图进行卷积得到的。因此,可以选择用于结构化剪枝的参数组,例如滤波器、通道或核。图4描述了这些结构化剪枝范例之间的差异。

基于通道的剪枝

它旨在删除导致每个层中输出特征图的第 个通道的权重滤波器。许多现有的通道剪枝技术使用 范数作为确定最不重要权重张量的标准。然而,关于该过程对整体模型结构的影响存在争议。在[Channel pruning for accelerating very deep neural networks]中,作者指出通道剪枝的过程对模型结构的损害较小。

相反,在[, Channel pruning via automatic structure search]中观察到通道剪枝导致了网络结构的剧烈变化。然而,通过屏蔽参数而不是完全删除它们可能可以缓解结构性损害。然而,这种方法在训练期间可能不会带来任何节省,因为整个模型需要存储在内存中。

基于滤波器的剪枝

基于滤波器的剪枝消除了对应于输入特征图的第 个通道的权重。也就是说,在卷积层中剪枝特定的滤波器,即第i个滤波器。这种剪枝方法对模型的结构损害较小,且可以类似于原始模型进行处理,因为输出通道的数量保持不变。

值得一提的是:

1)在 层进行基于通道的剪枝等同于在 层进行基于滤波器的剪枝;

2)滤波器剪枝与基于滤波器的剪枝并不相同。在滤波器剪枝中,会剪枝掉一个或多个层的滤波器,可以从粒度的角度来看,将其归类为基于通道的剪枝。

基于核的剪枝

在此类别中,剪枝掉第l层中连接输入特征图的第i个通道和输出特征图的第j个通道之间的一个滤波器的所有参数。这种剪枝粒度不会损害模型的结构。

无论剪枝粒度和显著性标准如何,剪枝过程可以在一次性方式或迭代方式下进行。在一次性剪枝中,不重要的参数在训练之前或之后被删除/屏蔽。

在后训练剪枝中,网络性能可能会永久下降,而迭代剪枝会考虑性能下降并重新训练网络。与一次性剪枝相比,虽然迭代剪枝需要更多的计算和时间,但在某些情况下,它可以防止准确性下降甚至提高准确性。

此外,一些方法会修改网络成本函数,例如添加正则化项,以使模型更适合剪枝。因此,它们不能用作后训练剪枝。

2.3. 最近在剪枝的YOLOv5上的应用研究

表1表示了最近在YOLOv5上实验剪枝的结果,按照剪枝粒度进行分类。

[Spdy: Accurate pruning with speedup guarantees] 的重点是实现期望的推理时间,而不是特定的压缩比。它提出了一种剪枝方法,通过动态规划搜索学习高效稀疏配置文件(SPDY),可以在一次性和迭代方案中使用。

[Faster and accurate green pepper detection using nsga-ii-based pruned yolov5l in the field environment] 中的研究人员实现了一种基于非支配排序遗传算法(NSGA-II)的算法,该算法将剪枝视为一个优化问题。也就是说,如何剪枝通道以最小化GFLOPs并最大化mAP0.5。

[Structured pruning for deep convolutional neural networks via adaptive sparsity regularization] 提出了一种自适应稀疏正则化(ASR),它根据滤波器权重来产生稀疏约束。也就是说,在正则化的损失函数中为具有较弱通道输出的滤波器分配惩罚,而不是直接使用批归一化缩放因子的L1范数来规范化损失。训练后,对于所有层,剪枝掉批归一化缩放因子小于全局阈值的滤波器,并进行微调以恢复准确性。

[ A lightweight algorithm based on yolov5 for relative position detection of hydraulic support at coal mining faces] 的工作通过使用PReLU激活函数和使用Ghost Bottleneck而不是BottleNeckCSP来修改YOLOv5结构。然后,根据BNSF方法(见第2.1.3节),它剪枝除Ghost Bottleneck以外的通道。

[Improved lightweight yolov5 using attention mechanism for satellite components recognition] 提出了一个特征融合层和选择性内核网络来改进模型的通道和内核注意力。它将Transformer编码器模块附加到PAN neck的输出上,通过自注意过程来探索模型预测的潜力,并在部署到NVIDIA Jetson Xavier NX之前使用BNSF方法压缩模型。

此外,[Target capacity filter pruning method for optimized inference time based on yolov5 in embedded systems] 的目标是获得期望的参数数目和FLOPs,并利用计算正则化稀疏训练(CRLST)。在稀疏训练后,根据批归一化缩放因子迭代地剪枝通道。

[Improved lightweight yolov5 using attention mechanism for satellite components recognition] 中的压缩的YOLOv5模型都部署在NVIDIA Xavier NX上。

[ Defect detection of track fasteners based on pruned yolo v5 model] 将滤波器视为空间中的点,并采用滤波器剪枝几何中值(FPGM)方法来剪枝卷积层的滤波器,该方法与 -norm标准不同,它明确利用滤波器之间的相互关系。它计算整个层权重的几何中值,并剪枝视为冗余的滤波器,如果它们的几何中值接近该层的几何中值。

[Pruned-yolo: Learning efficient object detector using model pruning] 放弃了上采样、连接和检测层,并根据BNSF方法剪枝滤波器,然后采用软掩码策略嵌入了余弦衰减的稀疏系数(CDSC-BNFS)。

[Research on pedestrian detection model and compression technology for uav images和Sod-yolo: A small target defect detection algorithm for wind turbine blades based on improved yolov5, Advanced Theory and Simulations ] 通过BNSF基于通道的剪枝使模型更加轻量化,并在neck网络中添加了另一个上采样级别的BottleNeckCSP模块,以从小物体中提取更多的语义信息。后者还在将其馈送到head之前在neck网络的每个BottleNeckCSP模块的输出上添加了一个卷积块注意模块(CBAM)。

[Apple stem/calyx real-time recognition using yolo-v5 algorithm for fruit automatic loading system] 在BottleNeckCSP中的每个快捷连接前考虑了每个Conv层的平均值,并压缩了Backbone网络。它还通过BNSF方法执行基于通道的剪枝。以下是对YOLOv5最近剪枝的几个实现的列表:

  • [ Compressed yolov5 for oriented object detection with integrated network slimming and knowledge distillation] 通过BNSF方法剪枝网络,但将微调与知识蒸馏相结合以节省训练时间,同时保持

准确性。

  • [An improved yolov5 real-time detection method for aircraft target detection] 中的作者用MobileNetV3替换了CSPDarknet Backbone网络,并在剪枝滤波器后使用TensorRT。

  • [Channel pruned yolo v5s-based deep learning approach for rapid and accurate apple fruitlet detection before fruit thinning] 的工作着重于使用BNSF策略剪枝滤波器,并进行微调。

  • [ Fast and accurate wheat grain quality detection based on improved yolov5] 中对Backbone网络进行剪枝,并且由于期望的物体大小相对相同,移除了PAN模块的最大特征图。此外,在neck中,提出了混合注意模块来提取最全面的通道特征。

  • [Fast ship detection based on lightweight yolov5 network] 采用t分布随机邻域嵌入算法来降低锚点帧预测的维数,并将其与加权聚类融合,以预测帧大小,以实现更准确的预测目标帧。随后,通过BNSF方法剪枝滤波器。

  • [Mca-yolov5-light: A faster, stronger and lighter algorithm for helmet-wearing detection] 在Backbone网络中使用了多光谱通道注意机制来生成更多的信息特征,并提高了对小物体的检测准确性。然后,使用BNSF过程剪枝模型的滤波器。

  • [ Real-time tracking and counting of grape clusters in the field based on channel pruning with yolov5s] 通过BNSF标准剪枝滤波器,并引入软非最大抑制,使模型能够检测重叠的葡萄簇而不是将它们丢弃。

  • [Research on defect detection in automated fiber placement processes based on a multi-scale detector] 使用空间金字塔扩张卷积(SPDCs)将不同感受野的特征图组合在一起,以在多个尺度上集成缺陷信息。它在neck中嵌入通道注意机制,在每个连接操作后将更多的注意力集中在有效的特征通道上。随后,通过BNSF基于通道的剪枝与微调来压缩模型。

  • [ Yolov5-ac: Attention mechanism-based lightweight yolov5 for track pedestrian detection] 对YOLOv5的结构进行了许多修改,例如在neck中添加了注意机制,并在Backbone网络中添加了上下文提取模型。至于剪枝,它使用BNSF标准删除滤波器。

  • [ Object detection method for grasping robot based on improved yolov5] 通过层和核剪枝来压缩YOLOv5的neck和Backbone网络。

  • [ Lightweight tomato real-time detection method based on improved yolo and mobile deployment] 用MobileNetV3替换YOLOv5的Backbone网络,并通过基于通道的剪枝来剪枝neck网络。

在对YOLOv5进行剪枝的研究中,将近85%采用基于通道的剪枝方法,其余与其他结构化和非结构化粒度有关。主要用于剪枝的显著性准则是BNSF稀疏训练方法,约有60%的调查论文在作者的范围内采用了这种方法,而其余的采用了 范数、 范数或提出了新的显著性准则。

3、量化

神经网络量化旨在用比其原始精度(通常为32位单精度浮点数FP32)更少的位数表示深度神经网络的权重和激活。这一过程在尽量保持模型性能/准确性的同时完成。通过利用更快的硬件整数指令,量化可以减小模型的大小并提高推理时间。

在[A survey of quantization methods for efficient neural network inference]中,Gholami等人对神经网络量化的不同方面进行了调查,其中包括这一主题的理论细节。在这里,作者将简要介绍和讨论关键要点。不失一般性,作者解释量化概念时使用一个实际的有限变量,它可以表示神经网络中的权重或激活。

假设 是一个有限的变量,限制在S的范围内,作者希望将其值映射到q,这是一组包含在 中的离散数。在映射之前,作者可能希望将输入r的范围裁剪到一个较小的集合

3.1. 量化间隔:均匀和非均匀

均匀量化将r映射为一组间隔均匀的离散值,而在非均匀量化中,离散值之间的距离不一定相等。通过非均匀量化,可以更好地捕获权重和激活分布中的重要信息,因为可以将更密集的区域分配给更接近的步骤。因此,尽管使用非均匀量化需要比均匀方法更多的设计,但它可能实现更低的准确性下降。

此外,由于权重和激活的分布通常趋向于呈钟形分布且具有长尾,非均匀量化可以获得更好的结果。图5展示了上述量化方案之间的差异。

3.2. 静态量化和动态量化

对于一组输入,裁剪范围 ,其中 ,可以动态或静态确定。动态量化为每个输入动态计算裁剪范围,而静态量化则使用预先计算的范围来裁剪所有输入。动态量化可以实现比静态量化更高的准确性,但计算开销显著。

3.3. 量化方案:QAT和PTQ

对训练好的模型进行量化可能会对模型的准确性产生负面影响,因为会累积数值误差。因此,量化可以以两种方式进行:量化感知训练(QAT),即重新训练网络,或者后训练量化(PTQ),不包括重新训练网络。在QAT中,量化模型的前向和后向传播使用浮点数进行,网络参数在每次梯度更新后进行量化。

另一方面,PTQ在不重新训练网络的情况下执行量化和参数调整。与QAT相比,此方法通常会导致模型的准确性下降,但其计算开销较低。通常,PTQ使用少量的校准数据来优化量化参数,然后对模型进行量化。由于PTQ依赖于最少的信息,通常无法在保持准确性的情况下实现低于4或8位精度。

3.4. 量化部署方案

一旦模型被量化,它可以使用虚伪量化(也称为模拟量化)或仅整数量化(也称为定点量化)进行部署。在前者中,权重和激活以低精度存储,但从加法到矩阵乘法的所有操作都在浮点精度下执行。虽然这种方法在浮点运算之前和之后需要不断的解量化和量化,但它有利于模型的准确性。

然而,在后者中,操作以及权重/激活存储都使用低精度的整数算术进行。通过这种方式,模型可以利用大多数硬件提供的快速整数算术。图6说明了PTQ和QAT部署在单个卷积层上的差异。

3.5、量化YOLOv5的应用研究

表2列出了最近在YOLOv5上实现的量化研究结果,按量化方案进行分类。在[Drgs: Low-precision full quantization of deep neural network with dynamic rounding and gradient scaling for object detection]中,作者提出了一种QAT方法,该方法根据训练过程中权重更新的方向动态选择权重的舍入模式,并相应调整梯度。他们逐层量化模型,同时对网络的权重和激活采用对称/非对称裁剪范围。

Noise Injection Pseudo Quantization(NIPQ)作为QAT方法,首先使用伪量化噪声对网络进行预训练,然后在后训练中对模型进行量化。这种方法可以自动调整位宽和量化间隔,同时对神经网络的Hessian矩阵的迹求和进行正则化。作者在YOLOv5上评估了他们的方法,并实现了3位以下的精度,而准确性几乎没有明显下降。

此外,[An ultra-low-power embedded ai fire detection and crowd counting system for indoor areas]使用ShuffleNetV2 修改了backbone,并减少了PAN和head网络中的层数,以使模型更适用于移动设备。他们利用TensorFlow Lite Micro 对权重和激活进行8位精度量化,并最终在STM32系列的超低功耗微控制器上部署了该模型。

[ Accelerating deep learning model inference on arm cpus with ultra-low bit quantization and runtime]引入了Deeplite Neutrino,它可以自动对CNN模型进行低于4位的量化,并提供了推理引擎Deeplite Runtime,使得在ARM CPU上部署超低位量化模型成为可能。他们的QAT方法可以实现网络的权重和激活低于4位的精度,这得益于使用比特级计算设计了自定义卷积运算符。也就是说,低位权重和激活值的点积计算通过popcount和位操作完成。他们通过在Raspberry Pi 4B上部署YOLOv5来评估他们的方法。

[Infrared image object detection of vehicle and person based on improved yolov5]将backbone网络替换为MobileNetV2,并添加了一个坐标注意机制。在使用静态方案和8位精度的伪量化方式通过PyTorch对模型进行量化后,在NVIDIA Xavier NX上部署了该模型。

同样,在[Performance evaluation and model quantization of object detection algorithm for infrared image]中,使用PyTorch对修改后的YOLOv5进行伪量化,并使用8位精度和静态裁剪范围。

[ Lightweight tomato real-time detection method based on improved yolo and mobile deployment]在训练后使用Nihui Convolutional Neural Network(NCNN)框架对压缩模型进行量化,并在搭载MediaTek Dimensity处理器的实际移动设备上部署。[94]提出了一种对数尺度量化方法,将激活的分布重新缩放,使其适用于对数尺度量化。这种方法可以最小化因对数尺度量化而导致的YOLOv5的准确性下降。

总体而言,超过一半的研究论文使用了QAT方案,其结果可以达到3位以下的低精度量化。然而,尚未有PTQ方案达到8位以下的精度。虽然对于YOLOv5存在更多的量化研究,但本次回顾的重点主要是包括那些采用了新的量化方法的论文。因此,作者排除了那些在实现中仅使用TensorRT,PyTorch Quantization和ONNX量化的结果。

4、总结

4.1. 剪枝挑战和未来方向

与常规CNN不同,对YOLOv5进行剪枝面临一些挑战,因为其复杂且高度优化的深度神经网络架构。YOLOv5使用CSP-Darknet53神经网络架构作为Backbone网络,使用PANet作为neck,两者都由许多卷积层紧密连接和连接组成。此外,Backbone网络和neck之间的互连增加了模型的复杂性。总体而言,这些层的结构复杂性妨碍了在不对网络整体性能产生不利影响的情况下移除不必要的滤波器。否则,与连接相关的特征图的空间分辨率将不匹配。因此,在剪枝YOLOv5之前需要进行一些补偿。例如,[Pruned-yolo: Learning efficient object detector using model pruning]不考虑剪枝上采样层、连接层和YOLOv5的head。

此外,它忽略了BottleNeck模块中的shortcut连接,以允许输入具有不同数量的通道。在这方面,更多的研究应该考虑基于滤波器和基于卷积核的剪枝,因为这种剪枝策略不会改变输出通道的数量,从而简化了剪枝过程。如表1所示,目前的研究方向是利用BNSF进行稀疏性训练和基于通道的剪枝与微调。然而,使用其他显著性准则的一次性剪枝存在空白。这里作者介绍一些未应用于YOLOv5的新方法。

EagleEye将剪枝过程视为一个优化问题,并指出使用评估准确性可能不是指导剪枝候选项选择的有前途的准则。因此,它为每个层提出了一个随机剪枝比例,然后根据它们的 范数对滤波器进行剪枝。它通过使用训练数据子样本的自适应BN-based候选评估模块来评估剪枝候选项的影响。

在[Hrank: Filter pruning using high-rank feature map]中,作者提出了HRank滤波器剪枝,它迭代地剪枝具有低秩激活图的滤波器。[Accelerated sparse neural training: A provable and efficient method to find n: m transposable masks]提出了一种掩膜多样性评估方法,将结构化剪枝与预期准确性相关联。它还介绍了一种名为AdaPrune的剪枝算法,该算法将未结构化稀疏模型压缩为细粒度稀疏结构模型,无需重新训练。

类似地,[ Variational convolutional neural network pruning]提出了一种变分贝叶斯剪枝算法,该算法考虑了通道的BN缩放因子的分布,而不是像第2.1节中那样确定地使用它们。

4.2. 量化挑战和未来方向

尽管与YOLO无关,从FP32到INT8的量化不是一种平滑的转换,如果梯度景观比较恶劣,可能会阻碍结果的最优性。此外,使用PTQ实现低位(<4位)精度几乎是不可能的,因为它很可能会破坏模型的性能。

目前,使用TensorRT,PyTorch Quantization和ONNX量化等现成的量化模块是一种趋势,但它们无法实现很低的精度,因为它们受限于8位精度。然而,这样的研究在本次回顾中未被包括,因为作者的重点是找到在YOLOv5上使用的新的量化方法。

关于在量化YOLOv5上进行的应用研究,更多的研究使用QAT进行量化,精度范围从1位到8位不等。然而,在关注加速训练时间和推理时间方面存在空白,尤其是因为在新数据集上训练YOLOv5需要大量的计算和时间。作为解决方案,可以更多地使用整数量化,因为当使用整数进行运算时,硬件吞吐量要高得多。例如,当数据类型为INT4而不是FP32时,TITAN RTX的每秒运算次数可以增加约23倍。

此外,PTQ方法在进行低于8位的精度研究/需求时仍然存在问题,这为未来的研究提供了机会。因此,作者建议一些可以应用于YOLOv5的方法来填补上述空白。

在[ Up or down? adaptive rounding for post-training quantization]中,提出了一种名为AdaRound的PTQ算法,用于更有效地对权重进行量化舍入。它可以在低至4位精度下获得SOTA性能,而准确性几乎没有下降(<1%)。

Yao等人提出了HAWQV3,这是一种混合精度整数量化方法,可以实现统一映射的INT4或INT4/INT8量化。AdaQuant提出了一种PTQ量化方案,通过根据校准集来优化每个层或块的参数,以最小化每个层或块的量化误差。它可以获得INT4精度下的SOTA量化,导致几乎可以忽略的准确性下降。

[ Fully integer-based quantization for mobile convolutional neural network inference]的作者提出了一种量化方法,它专门利用基于整数的操作,在推理过程中消除冗余指令。

[Loss aware post-training quantization]评估了量化对损失面貌的影响,并引入了一种新颖的PTQ方法,可以通过直接最小化损失函数来达到4位精度,从而实现几乎与全精度基线准确性相当的结果。

5、参考

[1].Model Compression Methods for YOLOv5: A Review.

6、推荐阅读

全新ViT Backbone | 混合卷积与Attention设计的SMT更快、更小也更强


远超YOLOP | 超轻超快的TwinLiteNet实现多任务自动驾驶感知


ICCV2023|目标检测新突破!AlignDet:支持各类检测器完全自监督预训练的框架



扫码加入👉「集智书童」交流群

(备注:方向+学校/公司+昵称

想要了解更多:

前沿AI视觉感知全栈知识👉「分类、检测、分割、关键点、车道线检测、3D视觉(分割、检测)、多模态、目标跟踪、NerF

行业技术方案👉AI安防、AI医疗、AI自动驾驶
AI模型部署落地实战👉CUDA、TensorRT、NCNN、OpenVINO、MNN、ONNXRuntime以及地平线框架」

欢迎扫描上方二维码,加入集智书童-知识星球,日常分享论文、学习笔记、问题解决方案、部署方案以及全栈式答疑,期待交流!

免责声明
凡本公众号注明“来源:XXX(非集智书童)”的作品,均转载自其它媒体,版权归原作者所有,如有侵权请联系我们删除,谢谢。

点击下方“阅读原文”,
了解更多AI学习路上的「武功秘籍」

浏览 830
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报