掌桥专利:专业的专利平台
掌桥专利
首页

一种基于现场可编程阵列的量化神经网络加速方法

文献发布时间:2023-06-19 10:32:14


一种基于现场可编程阵列的量化神经网络加速方法

技术领域

本发明属于图像处理领域,特别涉及一种基于神经网络的图像处理技术。

背景技术

神经网络(NN)在目标检测、语义分割等许多领域已经取得了不错的效果,但是如何在自动驾驶、自主机器人等实际应用中部署神经网络的人工智能(AI)应用程序是具有挑战性的。这是由于实际应用中的设备一般是资源受限的嵌入式系统,这类系统内存较少且计算能力不足,但是神经网络通常拥有庞大的参数量和计算量,这就要求大量的存储资源和计算资源,资源受限的嵌入式系统是不能够满足的。将神经网络模型低精度量化,可以有效减少存储需求,使用现场可编程门阵列作为协处理器并设计与量化神经网络相匹配的运算电路来加速神经网络的计算,可以减少资源受限的嵌入式系统的计算压力,这样就能够在资源受限的嵌入式系统中部署人工智能应用。

近年来,神经网络在各种领域相比于传统算法有了极大的进步。在图像、视频、语音处理领域,各种各样的网络模型被提出,例如卷积神经网络、循环神经网络。训练较好的CNN模型把ImageNet数据集上5类顶尖图像的分类准确率从73.8%提升到了84.7%,也靠其卓越的特征提取能力进一步提高了目标检测准确率。RNN在语音识别领域取得了最新的词错率记录。总而言之,由于高度适应大量模式识别问题,神经网络已经成为许多人工智能应用的有力备选项。

然而,神经网络模型仍旧存在计算量大、存储复杂问题。同时,神经网络的研究目前还主要聚焦在网络模型规模的提升上。例如,做224x224图像分类的最新CNN模型需要390亿浮点运算(FLOP)以及超过500MB的模型参数。由于计算复杂度直接与输入图像的大小成正比,处理高分辨率图像所需的计算量可能超过1000亿。此外,神经网络应用在部署阶段,一般的部署环境都是资源受限的嵌入式环境,在这样的系统中,其存储资源和计算资源都将会受到严重的约束。例如自动驾驶汽车系统中,其需要进行复杂的视觉图像处理和雷达图像处理,来进行行人、车辆和道路的识别,但由于系统的能耗和算力受到约束,往往对于远景的识别能力较差。

因此,为神经网络应用选择适度的计算平台特别重要。一般来说,CPU每秒能够完成10-100的GFLOP运算,但能效通常低于1GOP/J,因此难以满足神经网络的高性能需求以及移动端的低能耗需求。相比之下,GPU提供的巅峰性能可达到10TOP/S,因此它是高性能神经网络应用的绝佳选择,但是也不能够满足移动端的低能耗需求。除了CPU和GPU,FPGA逐渐成为高能效神经网络处理的备选平台。根据神经网络的计算过程,结合为具体模型设计的硬件,FPGA可以实现高度并行并简化逻辑。一些研究显示,神经网络模型能以硬件友好的方式进行简化,不影响模型的准确率。因此,FPGA能够取得比CPU和GPU更高的能效。

发明内容

为解决上述技术问题,本发明提出一种基于现场可编程阵列的量化神经网络加速方法。

本发明采用的技术方案为:一种基于现场可编程阵列的量化神经网络加速方法,包括:

S1、图像处理的神经网络的每一层表示为计算图,输入和权重经过卷积或者全连接计算之后,加上偏置值,再通过激活函数,得到最后的输出;将权重空间向稀疏的离散空间进行逼近;

S2、对经步骤S1处理后的权重进行数值量化,得到量化后的图像处理的神经网络;

S3、设计与量化后的图像处理的神经网络相匹配的加速器;

S4、量化后的图像处理的神经网络各层根据对应的加速器进行计算,得到图像处理结果。

本发明的有益效果:本发明的方法,首先在图像处理领域对神经网络模型进行数值量化,然后基于现场可编程门阵列构建与量化数据类型匹配的神经网络加速器,从而实现能够在资源受限的嵌入式系统中,对图像处理应用进行部署,具有快速推理和低功耗的特点;本发明具备以下优点:

1、模型参数占用内存少,对应神经网络实际应用中的设备一般是资源受限的嵌入式系统,这类系统内存较少且计算能力不足,但是神经网络通常拥有庞大的参数量和计算量,这就要求大量的存储资源,资源受限的嵌入式系统是不能够满足的,将神经网络模型低精度量化,可以有效减少存储需求;

2、模型计算速度快;使用现场可编程门阵列(FPGA)作为协处理器并设计与量化神经网络相匹配的运算电路(图6)来加速神经网络的计算,可以减少资源受限的嵌入式系统的计算压力,这样就能够在资源受限的嵌入式系统中部署人工智能应用。

附图说明

图1是本发明的量化神经网络加速系统总体设计图。

图2是本发明的权重空间逼近流程图。

图3为本发明的神经网络结构图。

图4是本发明的数值量化流程图。

图5是本发明的FPGA加速器架构图。

图6是本发明的量化神经网络相匹配的运算电路原理图。

具体实施方式

为便于本领域技术人员理解本发明的技术内容,下面结合附图对本发明内容进一步阐释。

如图1所示,本发明的方法包括:

第一步:神经网络权重空间逼近。对于权重空间逼近,给定一个图像处理的神经网络,权重对最后的结果起到了重要作用。神经网络的每一层表示为计算图,输入和权重经过卷积(CONV)或者全连接(FC)计算之后,加上偏置值,再通过激活函数,得到最后的输出。原始的权重空间是连续复杂的实数空间,期望量化后的权重空间仅包含1,-1和0这三个数,因此需要将权重空间向稀疏的离散空间进行逼近,使用如下逼近函数:

逼近函数有一个控制参数λ,通过改变控制参数的值,能够调整输入量x的逼近层度,控制参数越大,x越能够接近逼近函数的极限1或者-1,这样就与逼近的目标达成了一致,从而实现了权重空间的逼近。

第二步:数值量化。对于权重量化,通过获取权重空间逼近之后的神经网络模型参数,并设置量化函数来进行前向推理,根据神经网络的输入和对应的标签,可以计算损失函数来比较前向传播的预测结果与真实结果的差距,利用损失值更新模型的量化参数,从而得到高准确率的神经网络模型。权重已经被量化了,为了进一步压缩模型和降低神经网络的运算复杂度,需要将激活和偏置也进行量化,这样就可以把复杂的浮点数乘法转换为定点数乘法。由于激活函数不量化数据,因此激活和偏差具有相同的数据宽度。因此,它们应该使用相同的量化函数来保持相同的数据宽度,以避免过度的精度损失。

第三步:加速器存储与比特乘法。设计与量化神经网络相匹配的加速器,将会加快推理速度。用AND/XOR运算实现的乘法器,使运算速度更快,功耗更低。数据表示是加速器的重要组成部分。激活被量化为8位,权重量化为2位,其最高位表示为符号位,符号位0表示正数,符号位1表示相反,数据由原码表示。神经网络的运算主要包括乘法运算和加法运算,其中乘法运算需要大量的硬件资源,并且耗费大量的时间。由于量化神经网络的权值只有0、1和-1,所有的乘法运算都可以用位和/异或运算来代替,从而提高了计算性能。

第四步:层级运算加速。根据全连接层的计算,设计了计算单元和数据流,合理安排了流水线。为池化操作设计高效的计算单元,并在池层安排数据流。设计卷积层的计算单元和数据流。在层级加速器部署神经网络,实现快速推理。

主要分为训练和量化阶段及部署加速阶段,训练和量化部分主要负责对图像处理神经网络模型进行训练,并针对权重空间进行数值精度量化压缩。部署加速阶段为神经网络的前向计算过程提供计算支持,达到高效推理的效果。

1、训练和量化阶段主要包括权重空间逼近、权重量化、激活和偏置量化、微调。

11、权重空间逼近。

如图2所示,权重空间逼近的详细流程包括:

111:根据训练集(如通用图像训练集ImageNet)中的训练数据,按照神经网络的层级结构,如图3所示,权重和输入数据通过运算函数进行计算,再将计算结果和偏置相加,最后利用激活函数得到层级输出。

原始的权重空间是连续复杂的实数空间,我们期望量化后的权重空间仅包含1,-1和0这三个数,因此需要将权重空间向稀疏的离散空间进行逼近,定义如下逼近函数

逼近函数有一个控制参数λ,通过改变控制参数的值,能够调整图像训练集中的训练数据x的逼近程度,控制参数越大,x越能够接近逼近函数的极限1或者-1;

112:统计神经网络输出向量中每个类别的置信度并计算损失。神经网络会计算出每个图像类的识别概率,概率最高的类就是神经网络认为这个输入图片所在的分类,依据图片的分类标签,计算输出和标签之间的二范数,也就是损失函数。

C=||Target-Prediction||

其中,Target是分类标签,Prediction是神经网络的输出向量

113:根据损失计算每一层权重和偏置的偏导数,将这个偏导数乘上更新系数得到需要更新的数值量,在原始权重和偏置的值上面进行更新。

其中,W是神经网络的权重,η是学习率,C是112中损失函数的计算结果,θ是偏导运算符。

114:重复步骤111至113,直至达到预期的训练轮次。

12、神经网络权重量化。

如图4所示,权重量化的详细步骤包括:

121:获取权重空间逼近后的神经网络模型,得到近似逼近{-1,0,+1}的连续空间。

122:设置量化函数

其中Δ是一个趋近于0的数,这样的量化函数不依赖神经网络的先验知识,只用选择一个较小的值,例如Δ=0.05。

123:在图像处理神经网络中,利用量化函数和前向传播过程,根据层计算公式依次计算每一层的数值结果

其中,o是神经网络层级输出、

可以按照上述公式依次计算每一层的数值结果,这个数值结果也就是输入图像数据的特征图,最后依据神经网络的输出和分类标签计算推理结果和真实结果的差距

loss=|y-target|

其中,y是神经网络的输出,target是分类标签,矩阵2范数能够评估矩阵直接的空间距离,得到损失函数的值。

124:量化函数的导数在每个地方几乎都为0,因为量化函数是分段函数,在狭义的导数概念里是不可导函数,而在根据广义导数计算处处为0,这会使反向传播过程无法正常工作,因此使用直通梯度估计来评估量化函数的导数

125:根据损失计算每一层权重和偏置的偏导数,将这个偏导数乘上更新系数得到需要更新的数值量,在原始权重和偏置的值上面进行更新。

126:重复步骤123至125,直至达到预期的训练轮次,本实施例中设定训练轮次为200次。

13、激活和偏置量化与微调

131:由于激活函数不量化数据,因此激活和偏差具有相同的数据宽度。因此,它们应该使用相同的量化函数来保持相同的数据宽度,以避免过度的精度损失。激活和偏置使用量化函数:

其中,round是最近取整函数,将小数舍入到数值距离最近的整数。

132:加载输入图片数据和标签,根据计算图前向推理,计算图像神经网络的预测结果,并更新图像处理神经网络的模型参数。

133:微调图像处理神经网络。权重、激活和偏置被量化之后,图像处理神经网络的运算已经从浮点数变成了定点数乘法,模型参数也被压缩到了一个可以接受的参数量,但是图像处理神经网络的预测精度有了不小的损失,这在某些时候是不可以接受的,因此需要对神经网络模型进行一个微调,从而提高量化神经网络模型的预测精度。

2、如图5所示,FPGA加速器包括如下步骤:

21、存储系统控制。

存储系统控制的详细步骤包括:

211:将片上的块随机存取存储器(BRAM)按照等比例划分成两个部分,其中一个部分作为输入空间,另外一部分作为输出空间。输入空间用来存储计算所需的输入数据,输出空间用来存储临时数据和最后的计算结果。

212:从输入空间读取部分输入数据进行运算,运算结果存储在输出空间。

213:在当前层计算完成之后,交换两个分区,以前的输出空间,将作为下一层的输入空间,而输入空间中的数据已经失效,因此变成了输出空间。

22、比特乘法器。

比特乘法器的详细步骤包括:

221:数据表示,数据表示是加速器的重要组成部分。激活被量化为8位,权重量化为2位,其最高位表示为符号位,符号位0表示正数,符号位1表示相反,数据由原码表示。

222:神经网络的运算主要包括乘法运算和加法运算,其中乘法运算需要大量的硬件资源,并且耗费大量的时间。由于量化神经网络的权值只有0、1和-1,所有的乘法运算都可以用与非/异或运算来代替。

223:将输入按照顺序依次排列,总共24bit,再将对应的权重按照顺序输入乘法器,将会得到三个乘法输出。

23、层级加速器。

层级加速器的详细步骤包括:

231:根据全连接层的计算,设计计算单元和数据流,合理安排流水线。全连接层进行的乘加运算,取出输入数据和权重进行相乘,然后从缓冲区读取中间结果进行累加。如果是最后一次累积,则会增加偏差,并通过激活函数获得最终结果。不同输出节点的输入相同,唯一的区别是权重,因此,首先读取存储在BRAM中的输入,再从动态随机存取存储器(DRAM)连续读取与这些输入相对应的不同权重,这样的数据流可以保证相同的输入不会多次读取,从而优化数据传输。

232:为池化操作设计高效的计算单元,并在池化层安排数据流。池化层的数据处理主要是滑动窗口,依次从输入空间取出输入数据,并在滑动窗口中找到最大的数,进行最大池化操作,结果存入输出空间。

233:使用卷积单元计算卷积操作和安排卷积层数据流。卷积层的计算是分通道进行的,依次计算不同的通道。在一个通道内,从依次计算每一个卷积,结果进行缓存,不同的通道间,相同位置的数据缓存进行累加,得到最后的结果。

234:根据神经网络的结构,按照对应的操作从231到233中选择对应的计算单元,完成该层的计算,并依次按层执行。

如图6所示,使用现场可编程门阵列作为协处理器并设计与量化神经网络相匹配的运算电路来加速神经网络的计算。图6中三个输入数据同时进行计算,以无符号数输入计算单元,和权重进行乘法操作,最后符号位通过与门进行快速计算,得到输出数据。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。

相关技术
  • 一种基于现场可编程阵列的量化神经网络加速方法
  • 一种基于脉动阵列的神经网络加速器特征图分割方法
技术分类

06120112586043