一种卷积神经网络全INT8定点量化的方法与流程

专利2022-06-29  99


本申请属于卷积神经网络的量化压缩技术领域,具体涉及一种卷积神经网络全int8定点量化的方法。



背景技术:

卷积神经网络在训练时,通常采用32位单精度浮点精度(fullprecise,简称fp32)的数据精度来表示网络权值、偏置、激活值等信息。因此将一个训练好的深层网络模型部署在计算能力和存储空间都相对有限的嵌入式平台时,需要进行低精度量化操作,即通过减少数据精度,比如用8位、6位甚至更极端的用2位或3位来代替float数据,在保证网络精度的前提下,减少模型对存储和计算资源的需求,降低网络推理延时。

模型量化主要包含两部分,分别为网络权值参数的量化以及网络激活值的量化。为了方便将网络部署在fpga和asic芯片上,衍生出了很多低比特网络,比如二值化网络(binarizedneuralnetworks,bnn)、三值化网络(ternaryweightnetworks,twn)、xnor-net、dorefanet等,将权值、激活值用1bit或2bit来表示,继而将浮点乘除运算转换为位运算,但模型前向推理的精度跟浮点运算仍有一定差距,因此还处于研究阶段。

目前应用比较多的量化为int8量化,利用8bit整数来表征权值和激活值,模型前向推理的精度几乎影响不大。对权值的量化很简单,由于预先知道每层网络层的权值数值范围,通过统计每层网络层权值最大值和最小值,将最小值~最大值的范围线性映射到0~256的范围。对激活值的量化,nvidia提出了利用kl散度来衡量fp32数据编码和int8编码之间的差异,寻找使差异最小的阈值。目前开源框架tensorflow以及用于移动端部署的ncnn框架均支持int8定点化卷积运算,在每个网络层引入quantize/dequantize操作,完成fp32数据和int8数据的相互转换。

以ncnn框架为例,在每层网络计算时,需要先对输入特征图进行quantize操作,将预先通过校准数据集计算kl散度得到的scale乘以输入特征图的浮点像素值,然后将输入特征图压缩到int8的数据范围;卷积计算完成后,需要对计算结果进行dequantize操作,将卷积结果放大回fp32,再加上偏置输出。如果网络结构为连续的卷积层,则执行requantize操作,合并了当前层的dequantize以及下一层的quantize操作,将当前卷积层输出重新量化为int8。但是由于引入的quantize/dequantize/requantize操作中均涉及到浮点运算,因此无法将量化后的网络直接部署在仅支持定点运算的设备,如fpga端。



技术实现要素:

本申请的目的在于提供一种卷积神经网络全int8定点量化的方法,该方法得到的卷积神经网络模型中的所有运算均为定点运算,且量化后的模型精度损失小。

为实现上述目的,本申请所采取的技术方案为:

一种卷积神经网络全int8定点量化的方法,用于将卷积神经网络中的所有操作涉及的参数进行int8定点量化,所述卷积神经网络全int8定点量化的方法,包括:

选取卷积神经网络模型,去除卷积神经网络模型中的上采样操作,保留多尺度特征输出,并训练得到浮点型网络模型;

利用kl散度为所述浮点型网络模型中的每一个卷积层生成对应的权值量化阈值和激活值量化阈值;

调整各卷积层对应的权值量化阈值,直至各卷积层的requantize阈值scale_req均为2的幂次方,确定调整后的权值量化阈值;

根据量化公式8-bittensor(t)=scale_factor(sf)*fp32tensor(t),其中tensor(t)为权值,scale_factor(sf)为调整后的权值量化阈值,逐一量化各卷积层的权值,得到量化后的权值文件;

基于权值文件,对所述浮点型网络模型中的residual结构增加阈值补偿操作,进行全int8前向计算,获取较低精度损失的计算结果。

作为优选,所述卷积神经网络模型为基于darknet-53网络结构的yolov3改进网络模型。

作为优选,所述浮点型网络模型中若卷积层与batchnorm层以及scale层相连,则通过以下公式将batchnorm层以及scale层的权值合并至该卷积层的权值中:

其中,γ为bm层的缩放因子,β为bm层的偏移,x为卷积层输入,ε为预设的数,var为方差计算,mean为均值计算,w′为融合后的权重,b′为融合后的偏执,w为融合前卷积层的权重,b为融合前卷积层的偏执。

作为优选,所述各卷积层的requantize阈值scale_req采用如下公式计算:

scale_reqi=blob_scalei 1*scale_deqi

scale_deqi=1./(blob_scalei*param_scalei)

其中,scale_reqi表示第i卷积层的requantize阈值,blob_scalei表示第i卷积层的激活值量化阈值,scale_deqi表示第i卷积层的反量化操作dequantize阈值,param_scalei表示第i卷积层的权值量化阈值。

作为优选,所述对所述浮点型网络模型中的residual结构增加阈值补偿操作,包括:

所述residual结构包括第一卷积层、第一分支组件、第二分支组件和第六卷积层,所述第一分支组件包括第一左分支和第一右分支,所述第一左分支中包含第二卷积层和第三卷积层,所述第二分支组件包括第二左分支和第二右分支,所述第二左分支包含第四卷积层和第五卷积层;

所述第一右分支利用第四卷积层的激活值量化阈值对接收的参数进行量化,所述第二右分支利用第六卷积层的激活值量化阈值对接收的参数进行量化,完成阈值补充操作。

本申请提供的卷积神经网络全int8定点量化的方法,与现有技术相比具有以下有益效果:

1)本申请量化后的网络模型支持网络部署过程中的所有运算都为定点运算,每层网络层的输入特征图、权值、输出特征图均为int8,有效地降低了存储和算力需求,同时支持部署在fpga等定点化计算平台。

2)本申请通过动态调整、阈值补偿等操作,使量化后的模型精度损失控制在3%以内。

3)本申请有效地支持residual结构的网络。

附图说明

图1是现有技术ncnn框架中卷积层操作流程图;

图2是本申请所训练的网络中部分residual结构图;

图3是本申请中卷积层操作流程图;

图4是本申请量化前浮点网络的检测效果图;

图5是本申请量化后浮点网络的检测效果图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明的是,当组件被称为与另一个组件“连接”时,它可以直接与另一个组件连接或者也可以存在居中的组件;当组件被称为与另一个组件“固定”时,它可以直接与另一个组件固定或者也可以存在居中的组件。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本申请。

其中一个实施例中,提供了一种卷积神经网络全int8定点量化的方法,用于将卷积神经网络中的所有操作涉及的参数进行int8定点量化。

具体地,卷积神经网络全int8定点量化的方法,包括:

步骤s1、选取卷积神经网络模型,去除卷积神经网络模型中的上采样操作,保留多尺度特征输出,并训练得到浮点型网络模型。

本实施例基于小目标检测需求,以yolov3改进版小目标检测识别网络模型为原型,选用darknet-53网络结构作为基础特征提取网络。在其他实施例中,根据使用场景的不同,可以选用其他的特征提取网络或原型网络。

改进版网络为了增加本实施例中网络对于小目标的检测能力,去除了网络模型中的上采样操作,保留三尺度特征输出后采用预先标注的测试集训练直至收敛,得到浮点型网络模型。

由于在后续网络模型的量化中,针对网络模型的卷积层进行量化操作,因此浮点型网络模型中若卷积层与batchnorm层以及scale层相连,则需要利用层融合的方法将卷积层、batchnorm层以及scale层融合为一个卷积层,即通过以下公式将batchnorm层以及scale层的权值合并至该卷积层的权值中:

其中γ为bm层的缩放因子,β为bm层的偏移,x为卷积层输入,ε为预设的数,通常预设为一个较小的数,var为方差计算,mean为均值计算,w′为融合后的权重,b′为融合后的偏执,w为融合前卷积层的权重,b为融合前卷积层的偏执。

步骤s2、利用kl散度为所述浮点型网络模型中的每一个卷积层生成对应的权值量化阈值和激活值量化阈值。

在使用kl散度时,选用基于tensorrtint8原理开发的开源量化工具caffe-int8-convert-tools进行。为每个卷积层的权值和激活值寻找合适的阈值t,每个卷积层生成对应的权值量化阈值param_scale以及激活值量化阈值blob_scale。

步骤s3、调整各卷积层对应的权值量化阈值,直至各卷积层的requantize阈值scale_req均为2的幂次方,确定调整后的权值量化阈值。

调整各卷积层的requantize阈值scale_req均为2的幂次方后,层间运算就可以采用位移运算实现,因此即可避免引入quantize/dequantize/requantize操作又涉及到浮点运算的情况。

其中各卷积层的requantize阈值scale_req采用如下公式计算:

scale_reqi=blob_scalei 1*scale_deqi

scale_deqi=1./(blob_scalei*param_scalei)

其中,scale_reqi表示第i卷积层的requantize阈值,blob_scalei表示第i卷积层的激活值量化阈值,scale_deqi表示第i卷积层的反量化操作dequantize阈值,param_scalei表示第i卷积层的权值量化阈值。

为了更清楚的介绍requantize的阈值scale_req与权值量化阈值param_scale的关系,以第0层卷积层为例,图1中显示了第0层输入特征图的量化阈值(即激活值量化阈值)为blob_scale0,第0层的权值量化阈值为param_scale0,反量化操作dequantize阈值scale_deq0按如下公式计算:scale_deq0=1./(blob_scale0*param_scale0)。而requantize操作则是合并了当前层的dequantize以及下一层卷积的quantize操作,将当前卷积计算结果重新量化为int8,第0层的requantize的阈值scale_req0=blob_scale1*scale_deq0。保证输入特征图的量化阈值blob_scale0和blob_scale1不变,将requantize的阈值scale_req0逼近为2的幂次方,然后动态调整param_scale0,调整param_scale0时以将scale_req0向与初始的scale_req0最接近的2的幂次方的值逼近为准。

步骤s4、根据量化公式8-bittensor(t)=scale_factor(sf)*fp32tensor(t),其中tensor(t)为权值,scale_factor(sf)为动态调整后的权值量化阈值,逐一量化各卷积层的权值,得到量化后的权值文件。

权值文件包括精度均为int8的量化后的权值、激活值等。

步骤s5、基于权值文件,对所述浮点型网络模型中的residual结构增加阈值补偿操作,进行全int8前向计算,获取较低精度损失的计算结果。

如图2所示,原residual结构包括第一卷积层、第一分支组件、第二分支组件和第六卷积层,所述第一分支组件包括第一左分支和第一右分支,所述第一左分支中包含第二卷积层和第三卷积层,所述第二分支组件包括第二左分支和第二右分支,所述第二左分支包含第四卷积层和第五卷积层。

本实施例对浮点型网络模型中的residual结构增加阈值补偿操作,主要包括:第一右分支利用第四卷积层的激活值量化阈值对接收的参数进行量化,所述第二右分支利用第六卷积层的激活值量化阈值对接收的参数进行量化,完成阈值补充操作。

在增加阈值补偿操作之前,convolution1的计算结果在输出之前需要做requantize处理,选用convolution2的blob_scale2,使卷积输出int32重新量化到int8后传入下一层。但分支a意外接收到了用conv2的blob_scale2量化后的输出。在进行改进操作之前,该分支经eltwise后,进行convolution4操作前,会利用convolution4的blob_scale4进行量化为int8,因此requantize后的阈值补偿操作是指在eltwise层,进行计算之前,先将分支a调整为采用convolution4的blob_scale4进行量化,除去convolution2的blob_scale2的影响。同理,分支b利用convolution6的blob_scale6完成阈值补偿操作。

针对本申请改进后的卷积神经网络模型,采用对应的ncnn框架运行,输入量化后的权值文件,执行前向推理。除第一层卷积层执行quantize外,剩余卷积层输入特征图均为int8,无需执行quantize操作,具体如图3所示。所有卷积层中的requantize操作根据scale_req阈值大小利用移位实现,将卷积计算结果由32位整型表达重新量化为int8。浮点类型的偏置bias_fp利用公式bias_int32=round(bias_fp/scale_deq),最终将偏置bias数据类型转换为整型参与运算。

为验证本实施例量化后的模型精度损失下,以下通过实验例进行说明:

实验例

每类选用100张图片作为测试集(图片共四类:飞机airplane、船ship、车vehicle、桥bridge),分别在原始ncnn框架下运行float模型(第一对象)、层间需转换fp32的int8量化后的模型(第二对象),以及改进后的全int8量化框架下运行本发明的全int8量化模型(第三对象),三个对象的统计指标如下表所示。

表格1本发明与原版ncnn框架运行网络的检测指标对比

根据表1所示数据,同时结合量化前后的检测效果如图4、图5所示,可以看出,本发明得到的量化模型的精度并无明显损失。因此本发明较其他现有int8量化部署技术通用性更强,支持定点化设备以全int8的数据类型部署卷积神经网络。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。


技术特征:

1.一种卷积神经网络全int8定点量化的方法,用于将卷积神经网络中的所有操作涉及的参数进行int8定点量化,其特征在于,所述卷积神经网络全int8定点量化的方法,包括:

选取卷积神经网络模型,去除卷积神经网络模型中的上采样操作,保留多尺度特征输出,并训练得到浮点型网络模型;

利用kl散度为所述浮点型网络模型中的每一个卷积层生成对应的权值量化阈值和激活值量化阈值;

调整各卷积层对应的权值量化阈值,直至各卷积层的requantize阈值scale_req均为2的幂次方,确定调整后的权值量化阈值;

根据量化公式8-bittensor(t)=scale_factor(sf)*fp32tensor(t),其中tensor(t)为权值,scale_factor(sf)为调整后的权值量化阈值,逐一量化各卷积层的权值,得到量化后的权值文件;

基于权值文件,对所述浮点型网络模型中的residual结构增加阈值补偿操作,进行全int8前向计算,获取较低精度损失的计算结果。

2.如权利要求1所述的卷积神经网络全int8定点量化的方法,其特征在于,所述卷积神经网络模型为基于darknet-53网络结构的yolov3改进网络模型。

3.如权利要求1所述的卷积神经网络全int8定点量化的方法,其特征在于,所述浮点型网络模型中若卷积层与batchnorm层以及scale层相连,则通过以下公式将batchnorm层以及scale层的权值合并至该卷积层的权值中:

其中,γ为bm层的缩放因子,β为bm层的偏移,x为卷积层输入,ε为预设的数,var为方差计算,mean为均值计算,w′为融合后的权重,b′为融合后的偏执,w为融合前卷积层的权重,b为融合前卷积层的偏执。

4.如权利要求1所述的卷积神经网络全int8定点量化的方法,其特征在于,所述各卷积层的requantize阈值scale_req采用如下公式计算:

scale_reqi=blob_scalei 1*scale_deqi

scale_deqi=1./(blob_scalei*param_scalei)

其中,scale_reqi表示第i卷积层的requantize阈值,blob_scalei表示第i卷积层的激活值量化阈值,scale_deqi表示第i卷积层的反量化操作dequantize阈值,param_scalei表示第i卷积层的权值量化阈值。

5.如权利要求1所述的卷积神经网络全int8定点量化的方法,其特征在于,所述对所述浮点型网络模型中的residual结构增加阈值补偿操作,包括:

所述residual结构包括第一卷积层、第一分支组件、第二分支组件和第六卷积层,所述第一分支组件包括第一左分支和第一右分支,所述第一左分支中包含第二卷积层和第三卷积层,所述第二分支组件包括第二左分支和第二右分支,所述第二左分支包含第四卷积层和第五卷积层;

所述第一右分支利用第四卷积层的激活值量化阈值对接收的参数进行量化,所述第二右分支利用第六卷积层的激活值量化阈值对接收的参数进行量化,完成阈值补充操作。

技术总结
本发明公开了一种卷积神经网络全INT8定点量化的方法,包括:选取卷积神经网络模型,去除卷积神经网络模型中的上采样操作,保留多尺度特征输出,并训练得到浮点型网络模型;利用KL散度为所述浮点型网络模型中的每一个卷积层生成对应的权值量化阈值和激活值量化阈值;调整各卷积层对应的权值量化阈值,确定调整后的权值量化阈值;根据量化公式逐一量化各卷积层的权值,得到量化后的权值文件;基于权值文件,对所述浮点型网络模型中的residual结构增加阈值补偿操作,进行全INT8前向计算,获取较低精度损失的计算结果。本发明的方法得到的卷积神经网络模型中的所有运算均为定点运算,且量化后的模型精度损失小。

技术研发人员:郭晓伟;杜鑫;丁永林;毛泉涌;张永晋;李炜;周明政;怀宇;王铜铜
受保护的技术使用者:中国电子科技集团公司第五十二研究所
技术研发日:2019.11.22
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-16059.html

最新回复(0)