一种模型量化处理系统及一种模型量化处理方法与流程

文档序号:29562524发布日期:2022-04-09 01:24阅读:437来源:国知局
一种模型量化处理系统及一种模型量化处理方法与流程

1.本技术涉及机器学习技术领域,特别涉及一种模型量化处理系统及一种模型量化处理方法。


背景技术:

2.随着人工智能和机器学习领域的蓬勃发展,关于神经网络的研究已经成为最大的热点。cnn(卷积神经网络)是机器学习中最重要的算法之一,目前已经广泛应用于图像分类、目标检测、人脸识别、自动驾驶等众多领域,并取得了很好的实际效果。
3.目前网络推理过程大多会采用模型量化来加速神经网络计算。通过量化可以减少激活和权重存储的空间需求,还能降低计算复杂度、加快计算速度,进一步降低功耗,进而使得神经网络在硬件上的部署更加容易。现有技术中,需要为不同的量化方法订制对应的模型量化方案,流程较为复杂。
4.因此,如何适应不同种类量化方法对应的量化参数的存储与更新,提高模型量化操作的效率是本领域技术人员目前需要解决的技术问题。


技术实现要素:

5.本技术的目的是提供一种模型量化处理系统及一种模型量化处理方法,能够适应不同种类量化方法对应的量化参数的存储与更新,提高模型量化操作的效率。
6.为解决上述技术问题,本技术提供一种模型量化处理系统,包括:
7.bias参数存储器,用于存储神经网络模型的bias参数,并利用bias参数fifo存储器将所述bias参数传输至卷积计算模块;其中,所述bias参数存储器为bram类型的存储器;
8.移位参数存储器,用于存储所述神经网络模型的移位参数,并利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块;其中,所述移位参数存储器为bram类型的存储器;
9.零点参数存储器,用于存储所述神经网络模型的零点参数,并利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块;其中,所述零点参数存储器为bram类型的存储器;
10.所述卷积计算模块,用于对所述bias参数、所述移位参数和所述零点参数进行量化计算并根据计算结果对所述神经网络模型进行模型量化处理。
11.进一步的,还包括:
12.第一读bram控制模块,用于根据所述卷积计算模块的反馈生成第一读使能信号和第一读地址,并将所述第一读使能信号和所述第一读地址输出至所述bias参数存储器,以便所述bias参数存储器根据所述第一读使能信号和所述第一读地址读取对应的bias参数。
13.进一步的,还包括:
14.第一读fifo控制模块,用于根据所述卷积计算模块的反馈生成第一读使能信号,并将所述第一读使能信号输出至所述bias参数fifo存储器,以使所述bias参数fifo存储器
根据所述第一读使能信号读取对应的bias参数。
15.进一步的,还包括:
16.第二读bram控制模块,用于根据所述卷积计算模块的反馈生成第二读使能信号和第二读地址,并将所述第二读使能信号和所述第二读地址输出至所述移位参数存储器,以便所述移位参数存储器根据所述第二读使能信号和所述第二读地址读取对应的移位参数。
17.进一步的,还包括:
18.第二读fifo控制模块,用于根据所述卷积计算模块的反馈生成第二读使能信号,并将所述第二读使能信号输出至所述移位参数fifo存储器,以使所述移位参数fifo存储器根据所述第二读使能信号读取对应的移位参数。
19.进一步的,还包括:
20.第三读bram控制模块,用于根据所述卷积计算模块的反馈生成第三读使能信号和第三读地址,并将所述第三读使能信号和所述第三读地址输出至所述零点参数存储器,以便所述零点参数存储器根据所述第三读使能信号和所述第三读地址读取对应的零点参数。
21.进一步的,还包括:
22.第三读fifo控制模块,用于根据所述卷积计算模块的反馈生成第三读使能信号,并将所述第三读使能信号输出至所述零点参数fifo存储器,以使所述零点参数fifo存储器根据所述第三读使能信号读取对应的零点参数。
23.进一步的,所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算的过程包括:对所述bias参数、所述移位参数和所述零点参数进行基于定点加法运算和定点乘法运算的量化计算;其中,所述量化计算的激活函数为线性整流函数relu。
24.进一步的,所述卷积计算模块为fpga上的模块,所述fpga内部设置有bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程;
25.相应的,所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算的过程包括:通过流水线处理的方式调度所述bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程,以便对所述bias参数、所述移位参数和所述零点参数进行量化计算。
26.本技术还提供了一种模型量化处理方法,该方法包括:
27.将神经网络模型的bias参数存储至bram类型的bias参数存储器,并利用bias参数fifo存储器将所述bias参数传输至卷积计算模块;
28.将所述神经网络模型的移位参数存储至bram类型的移位参数存储器,并利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块;
29.将所述神经网络模型的零点参数存储至bram类型的零点参数存储器,并利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块;
30.利用所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算并根据计算结果对所述神经网络模型进行模型量化处理。
31.本技术提供了一种模型量化处理系统,包括:bias参数存储器,用于存储神经网络模型的bias参数,并利用bias参数fifo存储器将所述bias参数传输至卷积计算模块;其中,所述bias参数存储器为bram类型的存储器;移位参数存储器,用于存储所述神经网络模型的移位参数,并利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块;其中,
所述移位参数存储器为bram类型的存储器;零点参数存储器,用于存储所述神经网络模型的零点参数,并利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块;其中,所述零点参数存储器为bram类型的存储器;所述卷积计算模块,用于对所述bias参数、所述移位参数和所述零点参数进行量化计算并根据计算结果对所述神经网络模型进行模型量化处理。
32.本技术提供了一种能够实现模型量化处理的系统,包括bias参数存储器、移位参数存储器、零点参数存储器和卷积计算模块。bias参数存储器利用bias参数fifo存储器将所述bias参数传输至卷积计算模块,移位参数存储器利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块,零点参数存储器利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块。由于bias参数存储器、移位参数存储器和零点参数存储器均为bram类型的存储器,利用bram缓存量化参数具有较强的灵活性,适用于无需更新量化参数的网络模型,也适用于量化参数需要更新的场景。因此,本技术能够适应不同种类量化方法对应的量化参数的存储与更新,提高模型量化操作的效率。本技术同时还提供了一种模型量化处理方法,具有上述有益效果,在此不再赘述。
附图说明
33.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1为本技术实施例所提供的一种模型量化处理系统的结构示意图;
35.图2为本技术实施例所提供的一种移位参数读取及更新模型示意图;
36.图3为本技术实施例所提供的一种bias参数读取及更新模型示意图;
37.图4为本技术实施例所提供的一种零点参数读取及更新模型示意图;
38.图5为本技术实施例所提供的一种融入relu操作的量化计算流程图;
39.图6为本技术实施例所提供的一种fpga实现量化计算的流水线处理示意图。
具体实施方式
40.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
41.下面请参见图1,图1为本技术实施例所提供的一种模型量化处理系统的结构示意图,本系统可以基于fpga(field-programmable gate array,现场可编程门阵列)、asic(application specific integrated circuit,特殊应用集成电路)等硬件平台实现,如图1所示本系统包括:bias参数存储器111、bias(偏置)参数fifo存储器112、移位参数存储器121、移位参数fifo(first input first output)存储器122、零点参数存储器131、零点参数fifo存储器132、卷积计算模块141。cpu通过pcie总线分别与bias参数存储器111、移位参数存储器121和零点参数存储器131连接。fpga的片上初始化文件输入bias参数存储器111、移位参数存储器121和零点参数存储器131。卷积计算模块141能够实现多通道并行量化计
算。
42.bias参数存储器,用于存储神经网络模型的bias参数,并利用bias参数fifo存储器将所述bias参数传输至卷积计算模块;其中,所述bias参数存储器为bram(block random access memory,块随机存取存储器)类型的存储器;
43.移位参数存储器,用于存储所述神经网络模型的移位参数,并利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块;其中,所述移位参数存储器为bram类型的存储器;
44.零点参数存储器,用于存储所述神经网络模型的零点参数,并利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块;其中,所述零点参数存储器为bram类型的存储器;
45.所述卷积计算模块,用于对所述bias参数、所述移位参数和所述零点参数进行量化计算并根据计算结果对所述神经网络模型进行模型量化处理。
46.进一步的,所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算的过程包括:对所述bias参数、所述移位参数和所述零点参数进行基于定点加法运算和定点乘法运算的量化计算;其中,所述量化计算的激活函数为线性整流函数relu(rectified linear unit,修正线性单元)。
47.本实施例提供了一种能够实现模型量化处理的系统,包括bias参数存储器、移位参数存储器、零点参数存储器和卷积计算模块。bias参数存储器利用bias参数fifo存储器将所述bias参数传输至卷积计算模块,移位参数存储器利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块,零点参数存储器利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块。由于bias参数存储器、移位参数存储器和零点参数存储器均为bram类型的存储器,利用bram缓存量化参数具有较强的灵活性,适用于无需更新量化参数的网络模型,也适用于量化参数需要更新的场景。因此,本实施例能够适应不同种类量化方法对应的量化参数的存储与更新,提高模型量化操作的效率。
48.进一步的,上述系统还可以包括第一读bram控制模块和第一读fifo控制模块。第一读bram控制模块,用于根据所述卷积计算模块的反馈生成第一读使能信号和第一读地址,并将所述第一读使能信号和所述第一读地址输出至所述bias参数存储器,以便所述bias参数存储器根据所述第一读使能信号和所述第一读地址读取对应的bias参数。第一读fifo控制模块,用于根据所述卷积计算模块的反馈生成第一读使能信号,并将所述第一读使能信号输出至所述bias参数fifo存储器,以使所述bias参数fifo存储器根据所述第一读使能信号读取对应的bias参数。
49.进一步的,上述系统还可以包括第二读bram控制模块和第二读fifo控制模块。第二读bram控制模块,用于根据所述卷积计算模块的反馈生成第二读使能信号和第二读地址,并将所述第二读使能信号和所述第二读地址输出至所述移位参数存储器,以便所述移位参数存储器根据所述第二读使能信号和所述第二读地址读取对应的移位参数。第二读fifo控制模块,用于根据所述卷积计算模块的反馈生成第二读使能信号,并将所述第二读使能信号输出至所述移位参数fifo存储器,以使所述移位参数fifo存储器根据所述第二读使能信号读取对应的移位参数。
50.进一步的,上述系统还可以包括第三读bram控制模块和第三读fifo控制模块。第
三读bram控制模块,用于根据所述卷积计算模块的反馈生成第三读使能信号和第三读地址,并将所述第三读使能信号和所述第三读地址输出至所述零点参数存储器,以便所述零点参数存储器根据所述第三读使能信号和所述第三读地址读取对应的零点参数。第三读fifo控制模块,用于根据所述卷积计算模块的反馈生成第三读使能信号,并将所述第三读使能信号输出至所述零点参数fifo存储器,以使所述零点参数fifo存储器根据所述第三读使能信号读取对应的零点参数。
51.进一步的,上述卷积计算模块为fpga上的模块,所述fpga内部设置有bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程;
52.相应的,所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算的过程包括:通过流水线处理的方式调度所述bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程,以便对所述bias参数、所述移位参数和所述零点参数进行量化计算。
53.下面通过在实际应用中的实施例说明上述实施例描述的流程。
54.cnn(convolutional neural networks,卷积神经网络)的一般组成有输入层、卷积层、激活层、池化层和全连接层。其中计算量最大的部分是卷积层,其主要的功能就是完成图像(feature)与神经元(filter)之间的卷积运算。神经网络中一般有多个卷积层,每层卷积层的参数主要有以下几种:
55.输入与输出通道(channels):构建卷积层时需定义输入通道i,并由此确定输出通道o。这样,可算出每个网络层的参数量为i
×o×
k,其中k为卷积核的参数个数。如,某个网络层有64个大小为3
×
3的卷积核,则对应k值为3
×
3=9。
56.卷积核尺寸(kernel size):定义了卷积操作的感受野。在二维卷积中,通常设置为3,即卷积核大小为3
×
3。
57.步幅(stride):定义了卷积核遍历图像时的步幅大小。其默认值通常设置为1,也可将步幅设置为2后对图像进行下采样,这种方式与最大池化类似。
58.边界扩充(padding):定义了网络层处理样本边界的方式。当卷积核大于1且不进行边界扩充,输出尺寸将相应缩小;当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等。
59.cnn算法分为训练和推理两个过程,训练主要包括前向计算(卷积、激活、池化等)和后向更新(主要是梯度运算),推理则主要是前向计算。训练需要大数据支撑并保持较高灵活性,一般在云端(服务器端)进行,为了得到更好的神经网络模块,训练时一般需要采用高精度数据类型(如单精度浮点,fp32)。推理可在云端进行,也可以在终端进行,但是为了满足自动驾驶、工业互联网等领域对实时性要求,越来越多地cnn推理需要在边缘侧完成。
60.cnn应用越发广泛,人们对精度的要求也越来越高,这使得cnn算法模型变得越来越大,计算复杂度越来越高,因此cnn网络计算量不可避免地大幅增加。这样会导致推理速度变慢,硬件功耗上升,这使得边缘端(终端)实现cnn的部署变得更困难。因此,要想将cnn在终端广泛地部署,需要对神经网络进行加速,使其计算复杂度降低、实现更容易。当前网络压缩技巧越来越多地用于神经网络加速中,这些技巧一般包含模型量化、剪枝等,其中模型量化应用尤为广泛。模型量化是指将需要计算的feature及filter数据,由高精度的浮点数据类型量化为低比特整型数据进行网络计算,这样能够显著加快网络计算速度并降低硬
件实现难度。
61.当前模型量化技术方向主要包括两种:训练后量化(post-training quantization)和训练时量化(training-aware quantization)。训练时量化方法一般是指在浮点型网络模型的参数上进行低位宽定点参数的重训,它通常需要专业人员操作训练;而训练后量化相对于训练时量化则较简单,它不需要重训,操作简单易行,因此训练后量化方法越来越多地应用于工业领域。量化过程可以分为两部分:将模型从高精度的浮点类型(fp32)转换为uint8、int8、uint4、int4等低精度数据类型,以及使用上述低比特数据进行神经网络计算实现推理。
62.根据量化间隔是否一致,可以将量化分为线性量化和非线性量化,线性量化在整个量化过程中采用相同的量化间隔,反之则为非线性量化。由于卷积、全连接等神经网络计算都是线性计算,在线性量化中可以直接用量化后的数据进行计算,采用线性量化不仅能够有效压缩模型大小,在硬件实现上也更加容易,因此在神经网络模型量化中使用线性量化较为广泛。
63.常见的线性量化及反量化可以用以下数学表达式来表示:
64.r=s(q-z);
[0065][0066]
以上公式中r为fp32类型的原始数值;z是fp32类型的偏移量,一般可以量化为int32或者int16等较高比特数据类型。s是fp32类型的缩放因子,round是四舍五入的数学函数,可以选择向上、向下取整方式;q为量化后的整型数值,可以根据需求选择为int8、int4等。因此,量化过程就是确定合适的s和z,round为取整函数。
[0067]
线性量化可分为对称线性量化和非对称线性量化,在对称线性量化中,z即为量化后的0值,因此z=0,将z=0带入以上公式可以发现,对称量化相对于非对称量化,实现更加简单,计算复杂度更低。但对称量化对正负数分布不均匀的情况不是很友好,这时需要非对称量化处理,因此对称量化和非对称量化的使用可根据模型数据分布特点进行选择。按照共享参数的范围,可以将量化分为逐层量化和逐通道量化,逐层量化是以一个层(卷积、池化等)为单位,整个层的权重共用一组缩放因子s和偏移量z;逐通道量化则是以通道为单位,每个通道单独使用一组s和z。
[0068]
在卷积层的计算中,假设卷积的权重weight为w,bias为b,输入为x,输出的激活值为a,因此卷积计算可以表示成:
[0069]
从上述公式可以看出,卷积本质上也是矩阵计算,上式中bias一般量化为int32、int16等数据类型;权重和激活值则都按照前面所提到的量化公式进行量化。从量化和公式看,还存在着浮点除法的计算,为了使得硬件实现更加简单,一般还会将浮点除法转化为定点计算。本过程可以将量化过程最终转换为定点加法和移位,这样极大地减少硬件实现的难度,能够加快卷积计算。因此,最终形成的参数为偏置参数b、量化移位参数s和零点z,且均为整数类型,i=1、2、3
……

[0070]
神经网络的量化方法很多,大部分使用线性量化方法,从上文中可以得出,线性量
化又可分为对称量化、非对称量化;按照计算粒度分,还可以分为逐通道量化和逐层量化。不同的量化类型,所生成的参数种类和数量也不相同,在硬件中实现的过程也不一样;此外,不同网络模型的结构也不相同。因此,用同一种硬件去实现这些量化过程是一种不小的挑战。本实施例提出了一种实现神经量化过程的方案,可以适应不同类型量化方法的具体实施,能够用于多种神经网络模型的推理计算。本实施例可以将量化过程中的浮点操作转化为定点加法和定点乘法,因此量化过程所需要的参数均可以设置为整数类型。在进行推理之前,这些参数已经预先确定了。
[0071]
量化过程需要的量化参数包括bias参数、移位参数和零点参数。bias参数卷积计算中的偏置值,由于量化过程中对bias也作了处理,因此bias参数的值一般量化为高比特整型数据。量化过程中会将浮点除法转化定点计算,最简单的定点计算,定点计算包含移位操作和整数乘法操作,本实施例中的移位参数既可以表示移位操作中的移位操作数,也可以用来表示整数乘法的乘法参数。零点参数存在与非对称量化算法中,一般为整型数据,在对称量化算法中,零点参数为0,可以忽略。
[0072]
由于对神经网络的量化大多数是逐通道和逐层量化,每一通道或每一层共享相同的量化参数,因此量化参数所占存储空间不大,因此可以选择将参数全部存储在fpga片上。本实施例设计了3个bram类型的参数存储器(以下通称为参数存储器),分别存储以上三种量化参数。本实施例以fpga为例,实现了神经网络量化计算过程,其中利用了bram、fifo等硬件资源,利用了流水线处理的特点。bram和fifo等在asic、嵌入式芯片等也能实现,流水线处理也不是问题。因此本实施例还可以拓展到asic、嵌入式芯片等硬件平台。
[0073]
在重复执行网络计算时,量化参数需要经常更新和重用,因此需要重复读取数据,不适合选用fifo来存储参数,因此本技术选择bram作为存储量化参数的存储器。本实施例可以选择利用片上初始化文件来进行各种参数的初始化,也可以由cpu通过pcie总线将参数下发到各bram上存储。
[0074]
在本实施例中,三种量化参数的数据类型可以不相同。bias参数一般为int32、int16等高比特数据类型;移位参数可能是uint8的移位操作数,也可能是int16的乘法参数;零点参数可能是int8、int4等。此外,用fpga对神经网络进行计算时,一般都会多通道并行处理,量化参数需要同时更新。因此在参数存储器后接有fifo,是为了调整输出数据位宽,适配不同的参数类型和并行输出。本实施例利用bram缓存量化参数,灵活性强。可使用初始化文件存放量化参数,适用于无需更新量化参数的网络模型;也可通过cpu通过pcie总线下发量化参数,可随时更新,适用于量化参数需要更新的场景。本实施例选取了int和uint类型的数据进行阐述,对应的量化计算过程也都针对整型数据计算。针对于硬件资源充足的硬件平台,量化参数类型可以扩展到fp16、fp32等类型,量化参数存储和更新的结构无需大的变化,可以继续适用。
[0075]
请参见图2,图2为本技术实施例所提供的一种移位参数读取及更新模型示意图,图2所示该模型采用逐通道量化,且按32输出通道并行进行卷积计算。bram数据端口宽度为512bit(输入输出均为512bit位宽),移位参数为int8类型,则在bram后设有fifo。读bram控制模块根据卷积计算模块的反馈产生读使能信号和读地址,输出给bram,读出需要使用的移位参数。读fifo控制模块根据卷积计算模块的反馈产生读使能信号,给到fifo读出需使用的参数,fifo输入端口位宽为512bit、输出端口位宽为256bit,可以同时输出32通道的移
位参数,供卷积计算模块进行量化计算。以上是以8bit的移位参数读取及更新结构,该结构及方法通用性强,对于其他类型的量化参数,只需要修改fifo结构即可。图2中ch1~32表示通道。
[0076]
请参见图3,图3为本技术实施例所提供的一种bias参数读取及更新模型示意图,图3是量化过程中读取并更新bias参数的结果,该模型采用逐层量化,bias参数类型为32bit。与图2结构不同的是,该fifo的输入端口位宽为512bit、输出端口位宽为32bit,每计算完一层卷积从fifo中读取一次数据进行下一层计算。
[0077]
请参见图4,图4为本技术实施例所提供的一种零点参数读取及更新模型示意图,该读取及更新结构和流程与bias参数和移位参数类似,在此不再赘述。本实施例在barm设计fifo,针对不同的量化方法所产生的不同量化参数种类和数据类型,只需要改变fifo的输出端口位宽,便可以满足逐层量化、逐通道量化、不同数据类型和多通道并行量化计算等多种要求;量化计算的状态反馈给控制模块,可以很简单地从bram重复读取参数,很快地从fifo读出参数并更新。
[0078]
神经网络计算中,在卷积层后往往跟随着激活操作,最常用的激活函数是relu函数,relu函数的定义如下:f(x)=max(0,x)。
[0079]
本实施例可以对输入做判断,输入小于0则输出结果为0,输入大于等于0,输出结果等于输入。在对称量化方法中,一般会将激活量化为int8、int4等有符号整型数,经过乘累加计算后,需要将结果调整到量化数据类型(int8等)所能包含的范围内,如激活量化数据类型为int8,则经过乘累加计算后,要将结果调整为-128~+127的范围内,否则会出现错误。本实施例将relu操作融合到量化过程,该过程能够简化量化计算中的数值调整步骤,从而加快量化计算过程,减少硬件资源开销。
[0080]
请参见图5,图5为本技术实施例所提供的一种融入relu操作的量化计算流程图。如图5所示,可以进行卷积乘累加计算,得到乘累加结果int32。将乘累加结果int32和bias参数int32进行异或运算得到加法结果int32。移位参数uint8和加法结果int32进行移位,得到移位结果int32。对移位结果int32进行基于relu函数的激活操作得到激活结果unt8。对数值范围进行调整,判断激活结果是否大于或等于+127,若是则判定结果为127,若否则保持原值不变,得到最终结果unit8。图5是fpga实现量化计算过程的流程,假设该网络模型中将激活量化为int8类型,移位参数为uint8类型,bias参数为int32类型,零点参数为0。乘累加结果为int32类型,与同为int32类型的bias参数相加后,得到int32类型的加法结果。该加法结果根据移位参数进行移位操作,得到的移位结果仍为int32类型,得到移位结果后,一般来说,接下来需要判断该数据是否在-128~+127的范围内,如果小于-128,则将该数值调整为-128,如果大于+127,则将该数值调整为+127,这样便得到最终结果。
[0081]
本实施例将relu操作融合到量化过程中,在得到移位结果后,先进行relu激活,得到的激活结果数据类型为uint8,后续只需要判断激活结果是否大于+127即可,这样可以简化数值范围调整操作,加快处理速度。加入relu操作后,得到的最终量化结果为uint8,不会影响后续卷积层的计算。请参见图6,图6为本技术实施例所提供的一种fpga实现量化计算的流水线处理示意图。由图6可知,fpga实现量化计算时将其分成了bias加法、移位、激活操作和数值调整4个步骤。这4个步骤严格按顺序执行,能够用流水线进行处理,图5是fpga实现量化计算过程的示意图。fpga内部分别对应设置bias加法、移位、激活操作和数值调整4
个处理流程,从t0+3开始,4个计算步骤都能同时工作。利用流水线处理,能够加速量化计算过程,从而加快神经网络计算。
[0082]
本实施例提出了一种实现神经网络量化过程的方案,提供了一种存储及更新量化参数的硬件结构,通过改变fifo的结构使其能够适应不同种类量化方法对应的量化参数的存储与更新。除此之外,本实施例还将relu操作融合到量化计算过程中,简化了量化计算过程;利用流水线处理量化计算过程,能够加速神经网络计算。
[0083]
为本技术实施例还提供一种模型量化处理方法,该方法可以包括:将神经网络模型的bias参数存储至bram类型的bias参数存储器,并利用bias参数fifo存储器将所述bias参数传输至卷积计算模块;将所述神经网络模型的移位参数存储至bram类型的移位参数存储器,并利用移位参数fifo存储器将所述移位参数传输至所述卷积计算模块;将所述神经网络模型的零点参数存储至bram类型的零点参数存储器,并利用零点参数fifo存储器将所述零点参数传输至所述卷积计算模块;利用所述卷积计算模块对所述bias参数、所述移位参数和所述零点参数进行量化计算并根据计算结果对所述神经网络模型进行模型量化处理。
[0084]
本实施例提供了一种能够实现模型量化处理的方法,bias参数存储器、移位参数存储器和零点参数存储器均为bram类型的存储器,利用bram缓存量化参数具有较强的灵活性,适用于无需更新量化参数的网络模型,也适用于量化参数需要更新的场景。因此,本实施例能够适应不同种类量化方法对应的量化参数的存储与更新,提高模型量化操作的效率。
[0085]
进一步的,上述方法还包括:
[0086]
根据所述卷积计算模块的反馈生成第一读使能信号和第一读地址,并将所述第一读使能信号和所述第一读地址输出至所述bias参数存储器,以便所述bias参数存储器根据所述第一读使能信号和所述第一读地址读取对应的bias参数。
[0087]
进一步的,上述方法还包括:
[0088]
根据所述卷积计算模块的反馈生成第一读使能信号,并将所述第一读使能信号输出至所述bias参数fifo存储器,以使所述bias参数fifo存储器根据所述第一读使能信号读取对应的bias参数。
[0089]
进一步的,所述方法还包括:
[0090]
根据所述卷积计算模块的反馈生成第二读使能信号和第二读地址,并将所述第二读使能信号和所述第二读地址输出至所述移位参数存储器,以便所述移位参数存储器根据所述第二读使能信号和所述第二读地址读取对应的移位参数。
[0091]
进一步的,所述方法还包括:
[0092]
第二读fifo控制模块,用于根据所述卷积计算模块的反馈生成第二读使能信号,并将所述第二读使能信号输出至所述移位参数fifo存储器,以使所述移位参数fifo存储器根据所述第二读使能信号读取对应的移位参数。
[0093]
进一步的,所述方法还包括:
[0094]
根据所述卷积计算模块的反馈生成第三读使能信号和第三读地址,并将所述第三读使能信号和所述第三读地址输出至所述零点参数存储器,以便所述零点参数存储器根据所述第三读使能信号和所述第三读地址读取对应的零点参数。
[0095]
进一步的,所述方法还包括:
[0096]
根据所述卷积计算模块的反馈生成第三读使能信号,并将所述第三读使能信号输出至所述零点参数fifo存储器,以使所述零点参数fifo存储器根据所述第三读使能信号读取对应的零点参数。
[0097]
进一步的,上述卷积计算模块为fpga上的模块,所述fpga内部设置有bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程;
[0098]
相应的,对所述bias参数、所述移位参数和所述零点参数进行量化计算的过程包括:
[0099]
通过流水线处理的方式调度所述bias加法处理流程、移位处理流程、激活操作处理流程和数值调整处理流程,以便对所述bias参数、所述移位参数和所述零点参数进行量化计算。
[0100]
由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
[0101]
本技术还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0102]
本技术还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。
[0103]
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
[0104]
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1