量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!

作者 | xxx  编辑 | 汽车人

原文链接:xxxxx

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

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【模型部署】技术交流群

后台回复【模型部署工程】获取基于TensorRT的分类、检测任务的部署源码!

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第1张图片

最近,Transformer在各种计算机视觉应用上取得了显著的性能。与主流卷积神经网络相比,视觉Transformer通常采用复杂的架构来提取强大的特征表示,这在移动设备上更难开发。在本文中提出了一种有效的训练后量化(PTQ)算法,以减少视觉Transformer的存储和计算成本。量化任务可以被视为分别为权重和输入找到最佳低比特位量化间隔。

为了保持注意力机制的功能,作者在传统量化目标中引入了Ranking Loss,该损失旨在保持量化后自注意力结果的相对顺序。此外,作者还深入分析了不同层的量化损失与特征多样性之间的关系,并通过利用每个注意力图和输出特征的kernel范数来探索混合精度量化方案。

在多个基准模型和数据集上验证了所提出方法的有效性,其性能优于最先进的训练后量化算法。例如,可以在ImageNet数据集上使用DeiT-B模型,以大约8-bits量化获得81.29%的Top-1精度。

1、简介

随着在自然语言处理(NLP)任务中的应用,基于Transformer的模型在各种计算机视觉任务中显示出强大的能力,如图像分类、目标检测和图像超分辨率。经过大规模数据的预训练,这些模型通常具有数亿个参数。例如,在ViT-L模型中有307M参数和64GFLOP,这在推理过程中内存和计算都很昂贵。这给这些模型在诸如手机和智能汽车等资源受限的设备上运行带来了巨大挑战。此外,集成基于Transformer的模型的实时计算机视觉应用程序必须满足低延迟要求,以实现高质量的客户体验。因此,迫切需要基于Transformer的模型压缩技术,以便在工业环境中部署。

在诸如剪枝和权重分解的各种压缩方法中,量化方法通过使用较低的权重值比特宽度来压缩神经网络,而不改变模型架构,这对于精心设计的网络架构(如Transformer)特别有用。量化权重和输入可以通过将浮点运算调整为整数或位运算来加快推理速度。在NLP(例如BERT)中,已经有一些基于Transformer的模型的训练感知量化方法。然而,这些方法不是为计算机视觉任务设计的,通常需要额外的训练或微调。此外,在一些场景中,整个训练数据不可用于优化量化模型,边缘设备的训练成本是不可容忍的。

PTQ量化是一种有效的模型压缩技术,它可以直接量化神经网络模型,而无需进行微调。大多数现有的PTQ量化方法是为卷积神经网络或递归神经网络设计的。这些方法没有考虑视觉Transformer的特性,这不完全适合于量化视觉Transformer。然而,视觉Transformer在各种计算机视觉任务中表现出更强的性能。因此,我们有动机探索它们的PTQ量化,以降低存储和计算成本。

在本文中研究了具有较高压缩比和加速比的混合精度的视觉Transformer模型的训PTQ量化方法。Transformer中的量化过程被公式化为用于找到最佳量化间隔的优化问题。特别是,本文的目标是最大化视觉Transformer中全精度输出和量化输出之间的相似性。为了更好地保持注意力机制的功能,作者彻底分析了注意力层和传统层(如MLP)之间的差异。然后,引入Ranking Loss来保持注意力值的相对顺序。

此外,作者建议根据特征多样性(即,由注意力图和输出特征计算的kernel范数)来确定每个层的比特宽度。作者交替地搜索所有层中的权重和输入的量化间隔,以获得最佳量化结果。此外,引入了偏置校正以减小累积量化误差。在几个基准测试上的实验结果证明了本文的算法在实现比现有技术的PTQ量化方法更好的性能方面的有效性。

2、本文方法

在本节中,详细阐述了提出的混合精度PTQ量化方案。给出了线性层的相似度感知量化和自注意力层的Ranking感知量化。此外,还介绍了基于注意力图和输出特征的kernel范数的优化偏置校正方法和混合精度量化方法。

2.1、准备工作

一个标准Transformer将一个一维Token嵌入序列作为输入,因此视觉Transformer通常将图像重塑为一个平的2Dpatch序列序列。这里,和是原始图像的高度和宽度,是每个图像patch的分辨率,是Transformer的有效序列长度。通常,视觉Transformer在其所有层中使用恒定的宽度,因此可训练的线性投影将每个向量化的patch映射到模型维度。因此,对第一个Transformer层的输入为:

f3c51b7255287df26882f3ed5084243b.png

标准Transformer层包括2个主要模块:多头自注意力(MSA)和多层感知器(MLP)模块。对于第个Transformer层,假设它的输入是,通过query和key的点积计算出的注意力分数可以表述为:

aa8bbf9601bc9eee13faae17d748843f.png

然后对归一化分数应用softmax函数,得到多头自注意力模块的输出结果为:

bebc718aadbf6e7f02dc1c16a1ed5085.png

MLP模块包含2个线性层,分别由、和、组成,其中为MLP中间层的神经元数量。将MLP的输入表示为,然后输出计算为:

fe82c20d8d8c8783b2a8fa4992dd8682.png

结合等式,第层Transformer层的正向传播可以表示为:

5f5803053bf8876be99d1c37e189707e.png

其中,LN表示图层的归一化。

视觉Transformer的最大计算成本是在MSA和MLP模块中的大矩阵乘法上。根据主流的CNNs量化方法,对矩阵乘法中涉及的所有权值和输入进行了量化。对于权重量化,量化等式中量化权重、、、、、、对于所有的Transformer层,以及在等式中的线性嵌入。

除了这些权重之外,作者还量化了所有线性层和矩阵乘法运算的输入。按照之前的工作中的方法不量化softmax操作和层的归一化,因为这些操作中包含的参数可以忽略不计,并且量化它们可能会带来显著的精度下降。

2.2、PTQ的优化

对于PTQ量化,需要将浮数限制为一个有限的Value集。量化间隔的选择对于量化是至关重要的,一个流行的选择是使用一个统一的量化函数,其中数据范围是等分的:

aeb4d664baf33e33aaf7e4f5fb8c71f0.png

其中∆是量化区间,b是量化比特位宽,Y是表示权值或输入的张量。Clip表示张量中超过量化域范围的元素被裁剪。

1、线性操作的相似性感知量化

对于第层Transformer层的MSA模块和MLP模块中的线性操作,原始输出可以计算为。权重和输入的均匀量化以及相应的适当操作可以描述为:

cc3a465fbdc8432ce4c8d2dd5f0a9d9a.png

其中,表示量化层的输出。从上等式可以看出,量化区间在量化过程中实际上控制了剪切阈值,这在很大程度上影响了原始输出特征映射与量化特征映射之间的相似性。因此,作者专注于优化权值和输入的量化区间,以提高和之间的相似性,其中输入是由给定的校准数据集D生成的。具体来说,校准数据集比常用的训练数据集更少。在于第层Transformer层中,相似度感知的量化可以表述为:

afe39802d0d5def8877339005b51d2f6.png

其中,是原始输出特征图和量化输出特征图之间的相似性。在本文中采用皮尔逊相关系数作为相似度的度量:

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第2张图片

2、对Self-Attention的Ranking感知量化

自注意力层是Transformer的关键组成部分,因为它可以计算出特征的全局相关性,这使得Transformer唯一地来自于卷积神经网络。用于自注意力的计算,作者通过发现,量化后的注意力图的相对顺序发生了变化,如图1所示,这可能会导致显著的性能下降。因此,在量化过程中引入了一个Ranking Loss来解决这个问题:

c2476c8f449cd2504b3095d145d21555.png

其中,表示基于成对Ranking的损失函数,为权衡超参数。Ranking Loss可表述为:

a4e451129bcdbcadd7a7462fdc29df3a.png

其中θ是参数θ的hinge函数,是矩阵A的大小。给定一对例子,只有当例子在正确的顺序上且相差一定程度时,损失才为0。

为了解决上述优化问题,作者提出了一种简单而有效的求解Transformer层均匀量化的替代搜索方法。首先,输入值的量化区间被固定,并对权值的量化区间进行优化以进行调整。其次,是固定的,是优化的,以微调输入的量化区间。和交替优化,直到目标函数收敛或超过最大迭代。此外,为了快速收敛,和分别根据最大权值或输入值进行初始化。对于和的搜索空间,将αβ的区间线性划分为C候选选项,并对它们进行简单的搜索策略。

3、偏置修正值

为了进一步减少量化引起的输出的偏置误差,在每次搜索迭代后都引入了偏置校正方法。假设权值和输入的量化误差定义为:

8f49815925b6e7bfc8922cde68219d26.png

如果对输出的误差的期望不是零,那么输出的平均值将会改变。这种分布的变化可能会导致以下几个层的有害行为。可以通过看到以下情况来纠正这个变化:

6d5af014763d295955cf6fc08f044a68.png

因此,从偏置输出中减去输出的期望误差可以确保每个输出单元的平均值保持不变。为了实现,期望的误差可以使用校准数据来计算,并从层的偏置参数中减去,因为期望的误差向量与层的输出具有相同的形状。

2.3、ViT的混合精度量化

不同的Transformer层关注不同的结构,预计它们表现出不同的灵敏度。因此,为所有层分配相同数量的位宽度是次优的。因此,作者探索了混合精度量化,其中更多的位被分配给更敏感的层,以保持性能。考虑到Transformer层的独特结构,将MSA或MLP模块中的所有位宽分配给相同的操作。这对硬件实现也很友好,因为权重和输入被分配了相同的位宽。

奇异值分解(SVD)是线性代数中一种重要的矩阵分解方法。它取一个基因表达数据的矩形矩阵,其公式可写为:

94be782597d91a97e9f448c21dd9abcf.png

其中,的对角线项为m的奇异值,核范数为奇异值的和,表示矩阵的数据相关性。

在本文中提出用MSA模块的注意力图的核范数和MLP模块的输出特征来估计Transformer层的灵敏度。核范数可以用来减少混合精度设置的搜索空间,而对更敏感的层使用更高的位宽,反之亦然。受Hawq-v2方法的启发,使用帕累托边界方法来确定位宽。其主要思想是根据每个候选位宽配置引起的总二阶扰动,根据以下度量进行分类:

e9287cf11ec0fd9c622316b7113fe675.png

给定一个目标模型的大小,根据它们的值对候选的位宽配置进行排序,并选择具有最小的位宽配置。各Transformer层的注意图的核规范和输出特征如图1所示。

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第3张图片

正如所看到的,它们是针对不同的Transformer层而有所不同的。

3、实验

3.1、消融实验

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第4张图片

在本节中评估了所提出的相似度感知量化模块、排序感知量化模块、偏差校正方法和混合精度方法的效果。实验结果如表3所示,实验是在采用ViT-B模型的ImageNet数据集上进行。可以看到,仅使用相似度感知量化的Top-1精度为75.42%,低于全精度模型,使用排序感知量化损失和偏差校正方法可以提高性能0.52%和0.39%。值得注意的是,基于核范数的混合精度可以进一步提高量化模型的性能,因为它考虑了不同层的变化灵敏度。

结果还表明,采用相似度感知混合精度量化的Top-1精度为76.26%。在这种情况下,排名感知量化和偏差校正仍然可以提高性能。此外,采用所有所提方法建立的8比特位量化模型的性能均为76.98%,与全精度模型相当。

3.2、图像分类

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第5张图片

3.3、目标检测

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第6张图片

4、参考

[1].Post-Training Quantization for Vision Transformer.

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第7张图片

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第8张图片

添加汽车人助理微信邀请入群

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

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知、定位建图(SLAM、高精地图)、规划控制、领域技术方案、AI模型部署落地实战等,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),这里汇集了领域最优秀的算法专家和海内外高校博士,日常为大家分享领域最新论文+代码、解答学术工程问题、交流求职经验,星球为大家汇总了近20+方向的完整学习路线,无论你是转行、小白入门、抑或算法工程进阶,都能从中受益!我们坚信AI彻底改变人类出行,并为此不断努力着,欢迎加入星球,前沿技术方向尽在掌握中,期待交流!

量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!_第9张图片

你可能感兴趣的:(量化部署 | ViT应该如何进行PTQ量化?这个方法可以参考!)