北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案

作者 | 派派星  编辑 | CVHub

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入自动驾驶之心【目标检测】技术交流群

后台回复【2D检测综述】获取鱼眼检测、实时检测、通用2D检测等近5年内所有综述!

本文只做学术分享,如有侵权,联系删文

导读

TL;DR: 今天给大家带来一个针对单阶段目标检测器的低 bit 量化技术工作——Q-YOLO。Q-YOLO 的核心是引入一种完全端到端的 PTQ 流程,并采用基于单边直方图(UH)的激活量化方案,再通过最小化均方误差(MSE)量化误差来确定最大截断值。

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第1张图片

上图展示了 YOLOv5s 中 model.21.conv 层的激活值分布直方图(具有 2048 个 bin)。可以看出,大多数 value 是分布在 0 到 -0.2785 区间内,而高于零的值的频率显着下降【基操】。其中:

  • min 表示固定的最小截断值,max 表示遵循最小-最大原则的最大截断值。

  • Max Q-YOLO(8)是指在 8-bit 处使用 Q-YOLO 量化模型时的最大截断值。

  • Max Q-YOLO(4)表示在 4-bit 处应用 Q-YOLO 量化模型时的最大截断值。

通过对各种目标检测器进行大量实验证明,Q-YOLO 在性能上显著优于基准的后训练量化模型。将 8 位的 Q-YOLO 模型应用于 YOLOv7 可以实现 3 倍加速,同时在 COCO 数据集上保持与全精度模型可比较的性能,突出了它作为量化实时目标检测器的潜力解决方案。

动机

众所周知,在资源有限的边缘设备上进行实时目标检测仍然存在计算成本的挑战,限制了其实际应用。为了实现高效的在线推理,近几年也出现了大量的网络压缩工作,其中包括:

  1. 网络设计的改进;

  2. 神经网络搜索-NAS;

  3. 网络剪枝;

  4. 模型量化;

  5. ...

其中,量化是用的比较多且成熟的技术。而在量化方法中,有两种常见的方法,分别是量化感知训练QAT)和训练后量化PTQ)。虽然 QAT 通常比 PTQ 获得更好的结果,但在量化过程中需要对所有模型参数进行训练和优化,因此需要预训练数据和显著的 GPU 资源,使得 QAT 的执行变得具有挑战性【其实就是繁琐】。相反,PTQ 是一种更高效的实现实时目标检测器量化的方法。因此 Q-YOLO 便后量化操作的。

为了研究实时目标检测的低比特量化,本文首先使用 YOLOv5 作为基准模型进行了后训练量化的实验。通过对 COCO 2017 数据集的实证分析,可以观察到量化后的性能下降显著。作者发现,量化后的 YOLO 模型性能下降的原因是激活分布不平衡【找到病因了】。

为了解决这个问题,Q-YOLO 尝试对 YOLO 模型的骨干网络、neck 和 head 均进行量化,同时采用标准的最小最大值量化方法来处理权重。为了解决激活分布不平衡的问题,同时引入一种称为单边直方图(UH)的激活量化方法。UH 通过直方图分析迭代地确定最大截断值,以最小化量化误差。

这种技术显著减少了校准时间,并有效解决了量化引起的差异,优化了量化过程,保持了稳定的激活量化。通过减少激活量化中的信息损失,该方法确保了准确的目标检测结果,从而实现了精确可靠的低位实时目标检测性能。

方法

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第2张图片

PTQ

首先我们先回顾向下训练后量化(PTQ)过程的主要步骤和细节。

  1. 使用全精度和浮点算术对网络模型进行权重和激活的训练;

  2. 适当地对权重和激活的数值表示进行转换以进行量化;

  3. 完全量化的网络部署在整数算术硬件上或在GPU上进行模拟,以在减少内存存储和计算需求的同时保持合理的准确性水平进行高效的推理。

这里便涉及到一个均匀量化(Uniform Quantization)的概念。假设量化位宽为 b,量化器 Q(x|b) 的作用是将浮点数 x 映射到最近的量化区间。均匀量化顾名思义就是基于均匀分布的量化器,它在大多数硬件平台上得到了良好的支持。均匀量化的无符号量化器定义如下:

e286229de3dabf73aa1ca7e705fc6771.png

这上面涉及到一些量化参数我们就不展开了,有兴趣的可以自行查阅相关资料。既然有了量化,必然就有反量化操作:

a147ea620c41a474663cacb15055be73.png

具体实施

当进行模型量化时,主要的目标是将浮点数的权重和激活值转换为整数表示,以减少计算和存储的需求。由于量化更多属于工程方面的东西,我们也不过多介绍复杂的公式,大家可以亲自实战下,这里仅提一些要点帮助大家理解。

需要注意的是,量化范围设置是该方案中的关键步骤之一。它的目标是确定量化格点的上界和下界,即截断阈值,以平衡截断误差和舍入误差。截断误差发生在将数据截断以适应预定义的格点范围内时,会导致信息丢失和量化表示的精度降低。舍入误差是由舍入操作引入的不准确性造成的,这会累积并对量化表示的整体准确性产生影响。

这里介绍两种量化范围设置方法:

MinMax

这种方法针对权重量化。它将截断阈值设置为权重的最小值和最大值,以避免截断误差。然而,它对异常值非常敏感,因为波动大的异常值可能导致过多的舍入误差。

均方误差(MSE)

为了缓解异常值的影响,可以使用基于均方误差的方法进行范围设置。该方法通过寻找最小化原始张量和量化张量之间均方误差的截断阈值来确定范围。这个优化问题通常使用网格搜索、黄金分割法或解析逼近方法来解决。

此外,对于激活值量化,Q-YOLO 的核心就是提出一种称为单边直方图(UH)激活量化的方法。在该方法中,首先通过对校准数据集进行前向传播得到激活值的经验研究。根据观察到的激活值分布情况,使用UH方法来确定最大截断值,同时将最小截断值固定为一个经验值。这个方法通过迭代寻找最小化量化误差的最佳截断范围,从而减少了校准时间,并提高了激活量化的稳定性和准确性。

通过这些量化范围设置方法,Q-YOLO 能够有效地将模型的权重和激活值进行量化,从而在保持合理准确性的同时,显著减少计算和存储需求,实现在资源有限的边缘设备上进行实时目标检测的高效部署。

实验

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第3张图片

简单来说,在权重量化方面,本文使用了对称的通道量化方法。而在激活值量化方面,则使用了非对称的层量化方法。这样的选择是为了在权衡准确性和计算效率时达到最佳结果。此外,为了公平比较,权重量化方面始终采用了 MinMax 方法。这种策略的目的是保持模型整体性能的同时,尽可能减少对输入和输出层的准确性影响。

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第4张图片

上表对比了几种量化方法和检测方法在计算复杂度和存储成本方面的差异。Q-YOLO 极大地加速了计算过程,并降低了各种 YOLO 检测器的存储需求。在检测准确性方面,使用 Q-YOLO 将 YOLOv5 系列模型量化为 8 位时,与全精度模型相比,几乎没有平均精度(AP)值下降。随着模型参数数量的急剧增加,将 YOLOv7 系列模型量化为8位会导致准确性微弱下降。当将模型量化为4位时,由于4位整数表示的表达能力减少,准确性会显著降低。特别是在使用 MinMax 量化方法时,模型准确性完全丧失;而 Percentile 方法只截断了99.99%的极端值,并未带来显著改进。相反,Q-YOLO成功地确定了更适合量化的比例,相对于传统的后训练量化(PTQ)方法,取得了显著的改进。

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第5张图片

最后,让我们一起看看 GPU 和 CPU 平台推理速度的测试。在部署工具方面,这里选择了TensorRT和OpenVINO。整个过程涉及将权重从torch框架转换为带有QDQ节点的ONNX模型,然后将其部署到特定的推理框架上。推理模式设置为单图像串行推理,图像尺寸为640x640。由于当前大多数推理框架只支持对称量化和8位量化,作者不得不选择对称的8位量化方案,与非对称方案相比,准确性的下降非常小。

可以看出,加速效果非常显著,特别是对于较大的YOLOv7模型,在使用GPU时,速度提升比超过了3倍,与全精度模型相比。这表明在实时检测器中应用量化可以带来显著的加速效果。

总结

本文介绍了Q-YOLO,一种高效的一阶段目标检测器,采用低比特量化方法解决传统量化 YOLO 模型中激活分布不平衡引起的性能下降问题。Q-YOLO 采用全面的后训练量化(PTQ)流程,结合了经过精心设计的基于单边直方图(UH)的激活量化方案。在COCO数据集上进行的广泛实验证明了 Q-YOLO 的有效性。它在准确性和计算成本之间取得了更好的平衡,优于其他后训练量化方法。这项研究显著推进了在资源有限的边缘设备上高效部署目标检测模型,实现了减少计算和内存需求的实时检测。

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码免费学习)

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第6张图片 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第7张图片

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、Occupancy、多传感器融合、大模型、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

北航最新 | Q-YOLO:基于TensorRT和OpenVIVO的检测实战方案_第8张图片

你可能感兴趣的:(YOLO)