深度学习模型的定点量化方法及装置
技术领域
本发明涉及深度学习的
技术领域
,特别涉及一种深度学习模型的定点量化方法及装置。背景技术
常见的深度学习模型为了提高网络精度通常带有大量的参数和层数,导致模型存储大小急剧增加,推理速度缓慢。推理缓慢使得很多精度高的深度学习网络一直只能运行在计算能力较高的GPU系统上,实现落地应用困难。
随着深度学习在近年来的逐步升温,其部署需求日益提高,端侧为了权衡成本和速度往往使用低精度的计算单元。与全精度或者包含半精度的混合精度模型相比,尽管低精度但可以更快推理和占用更少的内存,因此,如何在全精度和低精度之间转换成为了广泛研究的课题。传统深度学习全精度的模型通常需要量化到精度较低的数据类型才可以达到落地的指标要求,例如检测速度。
由于落地的迫切需求,因此,如何快速地对深度学习模型进行定点量化成为一个难题。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种深度学习模型的定点量化方法,能够提高深度学习模型的定点量化速度及精度。
本发明还提出一种用于执行上述深度学习模型的定点量化方法的装置。
本发明还提出一种具有上述深度学习模型的定点量化方法的计算机可读存储介质。
根据本发明的第一方面实施例的深度学习模型的定点量化方法,输入校准数据至目标模型,按顺序将目标模型的模型参数和激活值作为量化对象,执行以下步骤:输入校准集数据,按层提取所述目标模型的所述量化对象,获取所述量化对象的分布直方图,通过自适应KL散度方程对所述量化对象的分布直方图进行缩放,并基于预设量化位数获取不同的小数点位置对应的KL散度值,比较得出所述量化对象的第一量化结果。
根据本发明实施例的深度学习模型的定点量化方法,至少具有如下有益效果:通过自适应KL散度方程,弥补了量化过程中KL散度算法仅关注概率的缺陷,在保证量化后的模型一定的精度的情况下,能大幅度提升量化的速度,提高了量化的效率,节省了时间。
根据本发明的一些实施例,还包括以下步骤:根据所述目标模型的任务类型确定度量函数,通过所述度量函数得出所述目标模型的度量损失程度;根据所述度量损失程度,选定所述模型参数或所述激活值的其中至少一项作为优化对象,基于所述度量函数对所述优化对象的所述第一量化结果进行优化。
根据本发明的一些实施例,基于所述度量函数对所述优化对象的所述第一量化结果进行优化的方法包括:分别按正负两个方向调整所述优化对象的所述第一量化结果所对应的小数点位置,通过所述校准集数据进行预测,获取度量浮动值,基于度量浮动阈值确定调整方向,以及,根据所述调整方向及所述量化位数,获取所述度量函数的最优解,得到所述优化对象的第二量化结果。
根据本发明的一些实施例,基于所述度量浮动阈值确定调整方向包括:若正负调整方向对应的所述度量浮动值均大于所述度量浮动阈值,则所述调整方向被配置为:较大的所述度量浮动值所对应的方向;否则,所述调整方向被配置为:大于所述度量浮动阈值的所述度量浮动值所对应的方向。
根据本发明的一些实施例,根据所述调整方向及所述量化位数,获取所述度量函数的最优解的方法包括:若所述调整方向为正方向,则从所述优化对象的所述第一量化结果所对应的小数点位置至所述量化位数对应的最大的小数点位置依次进行搜索,通过所述校准数据集分别得出所述度量函数的值,比较得出所述度量函数的最优解;若所述调整方向为负方向,则从所述优化对象的所述第一量化结果所对应的小数点位置至所述量化位数对应的最小的小数点位置依次进行搜索,通过所述校准数据集分别得出所述度量函数的值,比较得出所述度量函数的最优解。
根据本发明的一些实施例,根据所述目标模型的任务类型确定度量函数包括:若所述目标模型的任务类型为分类任务,则所述度量函数被配置为:首次结果为正确结果的概率及前多个结果中存在正确结果的概率的加权和;若所述目标模型的任务类型为分割任务,则所述度量函数被配置为MIoU;若所述目标模型的任务类型为检测任务,则所述度量函数被配置为mAP;若所述目标模型的任务类型为识别任务,则所述度量函数被配置为识别精度与编辑距离的加权和。
根据本发明的一些实施例,所述自适应KL散度方程具体为:
其中,y表示自适应KL散度的分布缩放方程,exp()表示自然常数e为底的指数函数,α及β为所述自适应KL散度方程的参数,数学意义为自适应KL散度方程的参数,x表示输入参数,即模型参数分布直方图或激活参数分布直方图中的值。
根据本发明的第二方面实施例的深度学习模型的定点量化装置,该装置包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现本发明第一方向实施例的方法步骤。
根据本发明实施例的深度学习模型的定点量化装置,至少具有如下有益效果:通过自适应KL散度方程,弥补了量化过程中KL散度算法仅关注概率的缺陷,在保证量化后的模型一定的精度的情况下,能大幅度提升量化的速度,提高了量化的效率,节省了时间。
根据本发明的第三方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面实施例的方法。
根据本发明实施例的计算机可读存储介质,至少具有与本发明的第一方面实施例的方法同样的有益效果。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的方法的流程示意图;
图2为本发明实施例的自适应KL散度函数曲线的示意图之一;
图3为本发明实施例的自适应KL散度函数曲线的示意图之一;
图4为本发明实施例中统计得到的模型参数分布示意图;
图5为采用不同方法对同一车牌识别模型进行定点量化的量化结果;
图6为本发明实施例的装置的示意框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。在本发明的描述中,步骤标号仅是为了描述的方便或者引述的方便所作出的标识,各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
名词解释:
编辑距离,也叫莱文斯坦距离(Levenshtein),是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。
参照图1,本发明的实施例的方法,包括:输入校准数据至目标模型,依次对目标模型(即待量化的深度学习模型)的模型参数及激活值进行量化。对于模型参数,输入校准集数据,按层提取目标模型的模型参数,获取模型参数分布直方图,通过自适应KL散度方程对模型参数分布直方图进行缩放,并基于预设量化位数获取不同的小数点位置对应的KL散度值,比较得出模型参数的第一量化结果。对于激活值,输入校准集数据,按层提取目标模型的激活值,获取激活值分布直方图,通过自适应KL散度方程对激活值的分布直方图进行缩放,并基于预设量化位数获取不同的小数点位置对应的KL散度值,比较得出激活值的第一量化结果。
下面将以一个基于深度学习的车牌识别模型为对象,详细描述本发明的实施例的定点量化方法。在本实施例中,使用PyTorch作为车牌识别的预训练模型的训练框架,Python作为实现语言。在该车牌识别的预训练模型中,包括20个卷积模块以及两个全连接层分支,以便得到车牌识别文本。获取第一数量的车牌数据集,车牌数据集中包括各种类型的车牌,例如:不同地区的、军用的、民用的等车牌。
具体的定点量化步骤包括:
(1)首先获取待量化的车牌识别模型,以及,第一数量(如1000条)的具有代表特征的车牌数据集作为较准集。
(2)预设量化位数为8,即将原有数据压缩到8位二进制数,其中首位为符号位。量化结果为0至7范围内的一个整数,表征该二进制数字的小数点位置;量化过程也可以被视为找到最优小数点位置的过程。度量浮动阈值,被设置为0.001用于决定是否进行搜索,并将待量化的模型进行算子整合配置的预处理,即折叠所有BatchNorm层操作到卷积层。量化步骤分为模型参数量化和模型激活值量化,它们分别对应两组不同的最优量化结果。
(3)根据量化对象(即目标模型)的任务来确定度量函数。本实施例中,量化对象为车牌识别模型,在传统的量化中常使用识别精度作为量化的目标,但在实际应用中还可以使用编辑距离作为更小粒度的指标,来衡量模型准确性,提升识别精度。本实施例中采取以下公式作为优化目标,即度量函数:
其中Ed表示编辑距离,Acc表示精度。
并通过公式z=Acc作为仅以精度作为量化指标来作为对比。其中Ed代表编辑距离,Acc代表精度。
(4)对于车牌识别模型,按层提取各层的模型参数,通过自适应KL散度方程对各层模型参数分布进行缩放;
然后基于预设量化位数,通过自适应KL散度方程,分别对各层的模型参数分布图进行缩放处理,即合并直方图bins;本实施例中,预设量化位数为8,对应的量化结果为0-7,即对应8个小数点位置,即使用0-7的8个小数点位置,分别对各层的模型参数分布直方图进行处理;
最后,分别计算这8种情况下的KL散度,并进行比较,最小的KL散度所对应的小数点位置即为当前层的模型参数的第一量化结果。
本实施例中,自适应KL散度的方程为:
其中,y表示自适应KL散度的分布缩放方程,exp()表示自然常数e为底的指数函数,α及β为超参数,数学意义为自适应KL散度方程的参数,x表示原分布图中的值。在本实施例中,x对应模型参数分布直方图中的值,或者,激活参数分布直方图中的值。
参照图2和图3,可知,α代表该自适应KL散度方程的曲线有多尖,β代表缩放函数处理范围有多大,参数α具体确定公式为:
其中,bit_width为量化位数;为分布中分布数量占总分布的比例,用于衡量分布的尖度。β则设置为当Sum(P(x))≥0.5,-β<x<β,即此区间分布数量超过了总数一半,由此自适应KL散度缩放函数确定。
本实施例中,将y与原分布直方图中的对应bin值相乘可得到新的分布,根据新的分布得到KL散度值。一般情况下统计到的模型参数分布直方图往往呈现类正态分布的形状,参照图4。参照图2和3,可以看出,自适应KL散度方程图恰好与分布直方图相反,因此,通过这种方式可以提高原分布中大值的权重,抑制0附近的值在KL散度计算中占的权重,以达到改善KL散度计算仅关注概率的缺陷的目的。
由于此车牌识别模型仅使用自适应KL散度进行量化后,即可得到识别精度良好的模型,结果参照图3,所以本实施例中,对模型参数不再进行局部搜索优化,但若精度掉落很多,则也可以采用与激活值搜索相同的方案(即与下述步骤(6)中相同的过程)进行局部搜索。
步骤(5)为本实施例中,对激活值进行第一量化的过程;步骤(6)为本实施例中,在步骤(5)的基础上,对激活值进行第二量化的过程,也即局部搜索优化的过程。显然,若步骤(5)量化后,根据度量函数计算出的度量损失程度满足要求,也可以不再执行步骤(6),即此时,第一量化结果为激活值最终的量化结果。
(5)使用校准集数据对目标模型进行前向传播,即使用目标模型对校准集数据进行预测,按层收集各层激活值,获取激活值分布直方图,对激活值,执行步骤(4)中的自适应KL散度缩放函数的方法,得到激活值的第一量化结果。
即:输入校准集数据,按层提取目标模型的激活值,获取激活值分布直方图,通过自适应KL散度方程对激活值的分布直方图进行缩放,并基于预设量化位数获取不同的小数点位置对应的KL散度值,并进行比较,最小的KL散度所对应的小数点位置即为当前层激活值的第一量化结果。
(6)由步骤(5)得到各层激活值的第一量化结果,即为各层激活值的相应小数点位置。根据激活值的第一量化结果所对应的小数点位置,逐层对激活值的第一量化结果按正负两个方向(加或减两个方向)调整。即若第一层的激活值的第一量化结果为4,则以4为基础,分别向2个方向调整,即调整为3和5。
并在调整后重新使用校准集数据对模型进行前向传播,比较调整前后度量函数值的差异,若度量浮动值大于预设的度量浮动阈值,则在相应的调整方向(即加或减的其中一个方向)进行搜索,尝试对应方向的所有可能的小数位置,获取度量函数的最优解,并确定每一层激活值最优的量化结果。例如,第一层的激活值的第一量化结果为4,若分别调整为3、5后,计算出在5调整的方向上度量浮动大于预设的度量浮动阈值,则继续调整小数位置6、7。最后从所有遍历过的小数点位置所对应的KL散度值中,取出KL散度最小值,该KL散度最小值所对应的小数点位置即为相应层的激活值的第二量化结果(即最终的量化结果)。
详细地,在分类任务中,度量函数被设置为:0.7*Top1+0.3*Top5,权重可以根据具体数据集改变,可依靠经验进行确定,其中,TopK是一种指标即在前k个分类结果中出现了正确结果的概率,Top1则仅看前1个正确结果,Top5则表示前5个分类结果中出现了正确结果。在分割任务中,度量函数被设置为MIoU(Mean Intersection over Union,均交并比),在检测任务中被设置为mAP(Mean Average Precision,平均AP值)。
7)量化结束得到量化结果,包含各层模型参数的量化结果以及各层激活值的量化结果。
本发明的实施例中,通过自适应KL散度通过对KL散度方程进行加权,弥补了KL散度算法仅关注概率的缺陷,改进后的自适应KL散度算法通过提高原分布中大值的权重,抑制0附近的值在KL散度计算中占的权重,以达到改善KL散度计算仅关注概率的缺陷的目的,进而提供更优的第一量化结果;且基于任务的度量函数,可以对不同的任务设定不同的度量函数,有助于针对在不同的任务,不同程度地关注量化参数的准确性,并基于此确定是否要在局部进行搜索操作,以确定第二量化结果。本发实施例使得定点量化速度得到提升,同时在精度上与传统的全局搜索的定点量化方法基本上操持一致。
图5中展示了采用不同方法对同一车牌识别模型进行定点量化的量化结果。其中,第一行为采用传统的全局搜索且优化精度,最终,在量化精度达到95.88%的情况下,量化时间高达7天。第二行为采用本发明实施例中的通过自适应KL散度得到最优定点量化结果,并优化了精度,即以z=Acc公式作为优化目标(度量函数),耗费4小时,即可达到量化精度为95.34%。第三行为为采用本发明实施例中的通过自适应KL散度得到最优定点量化结果,并优化了编辑距离,即以公式作为优化目标(度量函数),耗费4小时,即可达到量化精度为95.88%。显然,本发实施例使得定点量化速度得到大幅度提升,同时在精度上与传统的全局搜索的定点量化方法基本上操持一致。
本发明的实施例中还提出一种深度学习模型的装置,参照图6,该装置包括存储器100、处理器200以及存储在存储器中并可在处理器上运行的计算机程序,处理器200执行计算机程序时实现上述方法步骤,即:输入校准数据至目标模型,按顺序将目标模型的模型参数和激活值作为量化对象,执行以下步骤:输入校准集数据,按层提取目标模型的量化对象,获取量化对象的分布直方图,通过自适应KL散度方程对量化对象的分布直方图进行缩放,并基于预设量化位数获取不同的小数点位置对应的KL散度值,比较得出量化对象的第一量化结果。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。