一种高精度动态比特位卷积乘法快速实现方法与流程

文档序号:15636653发布日期:2018-10-12 21:33阅读:418来源:国知局

本发明属于人工神经网络技术领域,具体涉及一种高精度动态比特位卷积乘法快速实现方法。



背景技术:

基于人工神经网络,尤其是卷积神经网络的方法在很多应用中取得了极大成功,尤其在计算机视觉领域一直得到广泛使用。卷积神经网络作为一种经典有监督学习算法,卷积神经网络使用前馈处理用于识别,反馈用于训练。在工业实践中,很多应用设计者离线训练卷积神经网络,然后用训练好的卷积神经网络实现实时任务,因此前馈计算速度是比较重要的。

随着集成电路设计和制造工艺的进步,具有高速、高密度可编程逻辑资源的fpga得到了快速发展,单芯片的集成度越来越高。当前主流的fpga芯片中包含了大量的可编程逻辑资源、可编程互联资源、存储资源,并通过集成dsp硬核支持高性能乘法部件的实现,这些特点使得fpga成为实现计算密集型应用加速的一种非常重要的选择。目前基于fgpa的卷积神经网络方案一般采用图像重用,输出优先,单层输入,多层输出,滑动窗口水平滑动,就是同一层图像用不同的卷积核进行卷积。

目前基于fpga卷积神经网络技术方案存在以下问题:目前基于fpga技术方案的计算吞吐并未很好匹配内存带宽,导致ddr内存带宽压力大;未充分利用硬件资源,乘法器阵列结构复杂,不易于流水线设计;目前fpga技术方案还存在成本高、功耗大问题。



技术实现要素:

针对现有技术的不足,本发明提供一种高精度动态比特位卷积乘法快速实现方法,本发明通过软件模拟方式去统计卷积神经网络卷积层的权值以及卷积层的输入输出数据的动态范围,利用统计得到的动态范围我们可以得到卷积神经网络卷积层的权值以及卷积层的输入输出的数据动态比特位的定点数,即卷积层的权值以及输入输出的数据根据实际需求描述成动态比特位的定点化数值。动态比特位的范围根据实际场景需求可以从4bit-12bit之间动态变化。本发明以动态比特位为8bit为例,乘法器从16bit降低到8bit,可以很大程度上缓解ddrram带宽压力,降低功耗,节约成本;同时动态比特位的设计可以确保结果的正确性,提升卷积神经网络卷积的计算速度。

为了解决现有技术存在不足,本发明提供一种高精度动态比特位卷积乘法快速实现方法,包括以下步骤:

s1:通过软件模拟方式在卷积神经网络训练的深度学习框架平台上,依照场景需求训练出来一个分类器;

s2:以一批图像数据和s1步骤得到的分类器为输入,以深度学习框架平台进行前馈测试,通过统计每一层卷积层的权值范围,确定该卷积层权值对应的动态比特位精度值q,将浮点数表示的每一层卷积层的权值转化成动态比特位表示;

s3:根据s2步骤得到的动态比特位设计固定比特位的乘法器,利用设计好的乘法器、加法器以及移位器实现高精度动态比特位卷积乘法。

作为一种优选方法,s1步骤分类器包含以浮点的形式表示的卷积层以及全连接层的权值信息。

作为一种优选方法,s2步骤一批图像数据为10~100张。

作为一种优选方法,s2步骤提到的动态比特位精度值q包含固定比特值和动态比特值,其中,固定比特值通过当前层数据分布以及根据实际场景需求给定,动态比特值通过当前层的当前某个数值以及实际场景需求给定。

作为一种优选方法,动态比特位精度值q为8bit,包含固定的8bit精度值q和动态4bit精度值q,其中,固定的8bit精度值q是通过每个卷积层的权值或者输入输出数据的统计信息获取;动态4bit精度值q是与每个卷积层的每个权值或者每个输入输出数据本身的值或该卷积层获取的固定8bit精度值q相关。

作为一种优选方法,所述动态比特位精度值q具体计算步骤包括:

1)求当前层权值或者输入输出数据的统计值,求统计值的最大值,记为val_max;记动态比特位为q,其中1bit为符号位,计算公式如下:

q-log2vaimax-1=qmax(1)

qmin=q-1(2)

qfix=(qmin+qmax)/2(3)

公式(1)log的值是向上取整,公式(3)的取值是向下取整。

2)动态比特位值,其中qdynamic的1bit为符号位:记当前层权值或者输入输出数据的某个数据值为val,计算公式如下:

公式(4)log的值是向上取整。

3)记当前层权值或者输入输出数据的某个数据值为val,val是浮点数,记定点化的对应数值为data,计算公式如下:

4)以动态8bit精度值为例,表示固定的8比特位值定点化后的定点数,卷积的乘法过程就是两个数据相乘,计算公式如下:

data1*data2=datafix1*datafix2(7)

本发明与现有技术相比有益效果:本发明通过采用高精度的动态比特位表示能够减少对硬件资源的消耗,节约成本,提高计算效率。同时本发明的乘法器阵列结构的设计易于流水线设计。

附图说明

图1是本发明方法流程图。

图2是本发明fpga中卷积层多输入到多输出并行运算结构图。

图3是本发明图像分块的卷积运算示意图。

图4是本发明硬件加速器每次并行运算的卷积示意图。

图5是本发明卷积计算完的96块图像存入ddr内存示意图。

图6是本发明并行卷积矩阵运算结构示意图。

具体实施方式

下面对本发明的实施例作进一步的说明。以下实施例仅对本申请进行进一步说明,不应理解为对本申请的限制。

如图1所示,本发明提供一种高精度动态比特位卷积乘法快速实现方法实施例,包括以下步骤:

s1:通过软件模拟的方式,在卷积神经网络训练的深度学习框架平台上,依照场景需求,训练出来一个分类器;

s2:以一批图像数据和s1步骤得到的分类器为输入,以深度学习框架平台进行前馈测试,通过统计每一层卷积层的权值范围,确定该卷积层权值对应的动态比特位精度值q,将浮点数表示的每一层卷积层的权值转化成动态比特位表示;

s3:根据s2步骤得到的动态比特位设计固定比特位的乘法器,利用设计好的乘法器、加法器以及移位器实现高精度动态比特位卷积乘法。

本发明例举一个基于fpga高精度动态比特位卷积乘法快速实现方法实施例,具体实施过程如下:

1、通过软件模拟的方式,在卷积神经网络训练的深度学习框架平台上,依照场景需求,训练出来一个分类器模型,该分类模型中包含了卷积层、全连接层等权值信息,权值信息以浮点的形式表示。采用浮点数实现的卷积神经网络算法具有高精度、高动态范围的优点,为了使得训练计算过程更加精确,采用浮点数实现离线训练,然后用训练好的卷积神经网络实现实时任务。但是训练好的卷积神经网络采用浮点数实现卷积神经网络,浮点数实现卷积神经网络在fpga实现是不可能的。因此我们需要将训练好的浮点数模型定点化,若采用较低的数值精度来表示可以简化设计,减少对硬件资源的消耗,同时能够达到较快的速度,并减少功耗,但是同时还会带来一定精度损失。因此需要寻找一个合适的数值最小精度来解决此问题。

2、将离线训练的卷积神经网络模型导入到深度学习框架平台上进行前馈测试,通过统计每一层卷积层的权值范围,一般通过统计最大值和最小值,我们就可以确定该卷积层权值对应的动态比特位精度值q,这样我们就可以将浮点数表示的离线训练好的卷积神经网络模型每层的权值转化成定点数,用动态比特位形式表示。需要特别指出是,这里以卷积层为例,如无特殊说明,就以卷积层为例,本发明技术方案可以推广到各个带有权值的层,例如lstm层,全连接层等。

3、将离线训练的卷积神经网络模型导入到深度学习框架平台上进行前馈测试时,输入一批10-100张测试样本图片,将输入的图片和离线训练的卷积神经网络模型输入到深度学习框架平台的前馈过程中,就可以统计出每个卷积层的输入输出的数据的动态范围,一般通过统计最大值和最小值,就可以确定该卷积层输入输出数据对应的动态比特位精度值q。

4、动态比特位精度值包含两个部分:固定的比特值、动态比特值,其中,通过当前层数据分布以及根据实际场景需求给定的固定比特位部分,通过当前层的当前某个数值以及实际场景需求给定的动态比特位部分。动态比特位的动态值以8bit为例:动态8比特位包含固定的8bitq值和动态4bitq值,需要进一步指出,动态8比特位是指8bit乘法,一共有12bit数据;其中,固定的8bitq值是通过每个卷积层的权值或者输入输出数据的统计信息获取的;动态4bitq值是与每个卷积层的每个权值或者每个输入输出数据本身的值以及该卷积层获取的固定的8bitq值相关。

动态比特位精度值具体的计算过程如下:固定的比特位值,qfix其中1bit为符号位:求当前层权值或者输入输出数据的统计值,求统计值的最大值,记为val_max;记动态比特位为q,其中1bit为符号位;

q-log2vaimax-1=qmax(1)

qmin=q-1(2)

qfix=(qmin+qmax)/2(3)

公式(1)log的值是向上取整,公式(3)的取值是向下取整。

动态比特位值,其中qdynamic的1bit为符号位:记当前层权值或者输入输出数据的某个数据值为val;

公式(4)log的值是向上取整。

记当前层权值或者输入输出数据的某个数据值为val,val是浮点数,记定点化的对应数值为data;

以动态8bit精度值为例,表示固定的8比特位值定点化后的定点数,卷积的乘法过程就是两个数据相乘。

data1*data2=datafix1*datafix2(7)

从公式7,可以看出来16比特相乘的时候,需要一个dsp16*16,转为动态比特位,这里以动态8比特为例实现,只需要一个dsp8*8,外加一个加法器以及一个移位器。在fpga中加法器以及移位器占用资源很少,因此整体方案不仅减少ddr带宽,降低功耗,节约成本,提升计算效率,而且动态比特位设计还可以保证结果的正确性。

5、卷积神经网络卷积层的乘法是指卷积层权值以及输入层数据逐点相乘再累加的过程。通过步骤2、步骤3可以得到定点化的卷积层权值和定点化好的输入层数据。通过这两个定点化好的数据以及卷积神经网络的拓扑结构,就可以设计基于fpga的乘法器阵列。虽然软件计算动态比特精度值比较繁杂,但是通过该方式定点化好的乘法实现方式,不仅可以降低功耗,节约成本,提升卷积神经网络的计算速度,还可以保证结果的正确性,而且也易于流水线设计。如图2所示,本发明在fpga中卷积层多输入到多输出并行运算结构,其中,x表示输入特征图数据,k表示卷积层的权值,y表示输出层数据。

本发明实现基于充分利用总线带宽的吞吐率,采用多并行运算结构来降低对外ddr内存不能读取图像数据的次数,通过图像的分块来计算输出,有效降低了内部存储器的容量,通过动态比特位卷积乘法快速实现卷积层的乘法。因此,本发明给出一个基于fpga卷积实现数据流实施例,为了降低fpga内部存储器容量,从而减少面积消耗,大分辨率图像使得内部输出的图像中间值容量大,因此可采用分块计算图像的输出,如图3所示,将n个输入的图像分成若干个24*24的块图像,并分别计算这些块的卷积操作,每一块与整幅图像计算的方式一样,只是块与块之间存在边界效应,输入图像中的3个图像块交叠部分,每取下一个24*24的块时都需要重复取前一次的k个列或行。

由于硬件的资源有限,不可能一次性把图3的所有卷积运算都实现,因此还需要分步进行。如图4所示,每次从外部ddr内存读入一幅输入图像的24*24大小的块,利用该图像块并行运算96个卷积单元,产生96幅中间图像值并缓存,与下次另外一幅图像的24*24大小块并行卷积得到的另外96幅中间值分别累加并缓存,直到n个96幅中间值累加完毕后再经一选择器实现relu操作,最后得到完整的输出图像块,如图5所示,ym~ym+95中的3个图像块并依次写入外部ddr内存。遍历n幅输入图像的其他块,同样的计算方式就可得到完整的输出图像ym~ym+95并写入外部ddr内存。如果输出图像个数m大于96时,更换k的值并循环以上操作可得最终的y1~ym。

本发明还给出在fpga实现并行卷积矩阵运算实施例,如图6所示,为基于fpga硬件加速器具体的卷积矩阵运算结构图,24*24的图像块读入内部缓存器后就以k*k的矩阵方式运算卷积,96组卷积并行单元,每组分配3个乘法器,每时钟周期计算k*k矩阵窗口中的3个像素点,依次计算k*k/3或者k*k/3+1个时钟周期后完成一个输出像素点的卷积运算,96组并行输出ym~ym+95;若k=1时,每时钟周期就计算1个像素点的卷积,只需用到每组3个乘法器中的1个,而其他两个乘法器输入值赋为零。

以上仅是本发明的优选实施方式,本发明的保护范围并不限于上述实施例,凡属于本发明思路下的技术方案均属于本发明保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1