基于FPGA的CNN硬件加速系统设计方法

文档序号:26644937发布日期:2021-09-15 02:06阅读:201来源:国知局
基于fpga的cnn硬件加速系统设计方法
技术领域
:1.本发明涉及一种基于fpga的cnn硬件加速系统设计方法,属于人工智能
技术领域
:。
背景技术
::2.卷积神经网络(convolutionalneuralnetworks,cnn)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的重要部分之一。卷积神经网络具有一定的表征学习能力,能够通过增加模型的深度来提高其提取图像特征的能力。近年来,卷积神经网络在图像分析、自动驾驶、自然语言处理和语音识别等领域取得了较大的成果,已成为各界研究的热点。最初,卷积神经网络的推理阶段在软件上实现,随着网络的深度增加,推理所需要的时间成倍增加,因为传统的冯诺依曼结构并不能充分的发挥神经网络并行处理的优势,这样也导致深度学习算法无法在一些便携式硬件平台上应用。3.随着现有计算平台架构的更新迭代,其多样性飞速发展,特别是分布式异构平台的种类越来越多,为卷积神经网络的并行化打下了良好的基础,除此之外,日趋丰富的编程框架也为cnn的并行化提供了桥梁,最典型的几种架构平台是gpu、fpga和asic,由于卷积神经网络的结构比较特殊,包含了大量的乘加法运算,也涉及了大量的内存数据访问,传统的通用处理器在cnn推理阶段的运算速度不太理想,作为现在主流的运算平台——gpu也具有功耗过大等缺点,这两者不能在计算性能和功耗方面取得很好的平衡。4.cnn网络的移植对硬件平台的资源有一定的要求。在现有的通用计算平台中,fpga是比较理想的硬件平台,它含有丰富的寄存器资源,方便流水线结构的设计;也有大量的运算资源,如dsp48,方便卷积运算单元的设计;还有大量的片上存储资源,方便cnn网络中间数据的缓存;丰富的io资源和高速接口,方便了和片外存储的交互,一定程度上提高了整体架构的性能;有许多研究表明,在运算速度方面,cpu不及fpga;在功耗方面,gpu高于fpga;在开发速度和成本上,asic也高于fpga,本文采用的硬件平台是xilinx公司的kintex‑7系列架构平台,设计了一种高流水线的软硬件加速系统,能够实时的处理较大尺寸的图像,具有良好的计算性能,也不乏泛用性。技术实现要素:5.本发明的主要目的是提供一种基于fpga的cnn硬件加速系统设计方法。6.随着高性能计算平台的发展,目前很多研究人员都提出了一些基于硬件加速方案。传统的加速方案中有针对卷积算法的设计,但是通用性不是很好;也有基于嵌套循环的设计来增加数据复用性,但是计算性能的提升并不大;还有用大量硬件资源换取计算速度的方法,但是对硬件平台的资源要求太过局限。本发明在调研完近些年相关领域的论文,并在总结了其计算结构方面的问题后,提出了一种高流水线的软硬件加速系统方法,首先,通过在卷积运算过程加入流水线,以提高其通用性,此外,这种流水线设计也减少了卷积运算中数据缓冲区的大小,从而提高了整体计算速度;其次,还设计了一种流水线存储结构,图像和权值数据可以从片外存储输入,这样设计可以一定程度上减少cnn加速ip和片外存储的交互时间,最大程度上提升性能;最后,采用了浮点数量化为定点数的设计方法,将图像和权值数据量化为16bit定点数,大大减少了计算的复杂性,也能最大程度上的利用dsp资源。7.本发明的技术方案具体来说,主要包括如下技术内容:8.1、在卷积层的硬件设计上,为了减少中间数据缓冲区对整个系统计算性能的影响,采用移位缓存的方法大大的减少了流水线结构下的延迟;设计了通用的卷积计算结构,将图像控制和卷积运算结构分块设计,使之能够根据实际网络模型对卷积模块的运算资源进行修改,提高了泛用性。9.2、池化层的输入数据是连续变化的,为了对尺寸大小为2的窗口进行下采样,需要先缓存两行的图像数据,在一定周期的比较后得到结果,为了提高系统的计算性能,将池化操作也设计成了流水线结构。10.3、设计了一种流水线存储结构,图像和权值数据可以从片外存储以dma的方式输入,而中间数据的存储分为两部分,一部分直接存储在片内存储,另一部分直接以总线的方式与片外存储交互,将其中的加法步骤和读写片外存储设计成流水线的结构,可以一定程度上减少cnn加速ip和片外存储的交互时间,最大程度上提升性能。11.4、采用多rom的方式来设计softmax函数,将输入的特征图数据进行定位拆分,然后在rom中查表得到各部分的指数值,经过流水线乘除法后输出结果,这样设计可以大大减少rom资源的使用。12.5、采用了浮点数量化为定点数的设计方法,将图像和权值数据量化为16bit定点数,减少了dsp资源的消耗,也提高了计算速度,这样设计能够大大减少计算的复杂性,也能最大程度上的利用dsp资源。13.fpga内部结构以lut(lookuptable)为基础,具有丰富的可编程逻辑资源,能够反复进行程序烧写。并且fpga能够真正的实现控制流的并行和数据流的并行,这一点对卷积神经网络非常友好。在保持较高可重构性的同时,fpga相比其它结构的硬件加速平台还具有很低的能效比。14.设计的硬件加速系统包括如下内容,15.基于fpga的cnn硬件加速系统设计方法,该方法的实施流程如下:16.步骤1、卷积运算结构的设计17.cnn的卷积层主要用于提取图像的特征信息,主体是滑动窗口内的参数矩阵,即卷积核,通常一个卷积层会包含多个相同尺寸的卷积核,同时对图像矩阵进行特征提取,最后实现特征从点和直线到面和形状的提取。18.卷积运算是滑动窗口与输入图像数据的乘累加运算,运算的结果再加上偏置的值,输出的结果即是卷积层的计算结果,其计算公式如下:[0019][0020][0021]式子中,表示输入的特征图,而输出特征图用表示,不同的卷积核用表示,为第n层的第j个输出特征图对应的偏置值,f(·)为卷积层的激活函数,一般取relu函数。[0022]目前cnn网络中卷积层使用的大多是尺寸大小为3×3的卷积核,这样可以显著的减小计算的复杂性,能够更好的被移植到硬件平台上,本文设计的cnn加速器是基于3×3大小的卷积核。[0023]卷积运算结构包括图像控制模块和卷积计算模块组成,如图1所示,左边是图像控制模块,主要为了获得三行图像数据,能匹配输入到卷积模块里,其主体由三个fifo组成,经过一定时钟周期后可输出特征图的三行图像数据;右边是卷积计算模块,包含9个乘法器和8个加法器,这些均由内部的dsp实现。[0024]常见的卷积计算结构采用加法树的结构,图像数据和权值数据同时输入,经过一系列的乘加计算得到最终结果。而整个数据的缓冲区由图像缓冲区、权值缓冲区和卷积结果缓冲区组成,这些缓冲区在数据传输的时序问题上起至关重要的作用,为了减少数据缓冲的时间,将图像数据输入和权值数据输入分开,优先配置权值,然后输入图像;由于图像数据是连续输入的,为了在每个周期都能输出一个正确的卷积结果,在三行乘累加结果后加入三个移位存储器,由于图像是按列输入的,移位存储器存储两行的卷积结果,为下个周期的累加提供数据,这样的卷积流水线结构可以在每个周期都输出一个正确结果,大大减少了卷积结果缓冲区的大小,加快运算速度。[0025]步骤2、池化层结构的设计[0026]池化层的作用是剔除冗余的特征信息,防止网络的过拟合化,使cnn模型具有更高的容错能力。最大池化的操作是通过将特征图分解成多个2×2的像素矩阵,每个像素矩阵取最大值,然后将这些最大值按照特征图的原顺序排列,得到池化的结果,其计算公式如下:[0027][0028]式中,表示池化函数,池化窗口一般取(2,2);池化偏置项一般取0矩阵;g(·)取函数g(x)=x。[0029]池化层的输入数据是连续变化的,为了对尺寸大小为2的窗口进行下采样,需要先缓存两行的图像数据,在一定周期的比较后得到结果,为了提高系统的计算性能,将池化操作也设计成流水的结构。[0030]池化模块的结构如图2所示,包含了一个数据选择器、两个计数器、两个fifo模块和两个比较器。其中计数器负责分别计数输入奇数行和偶数行fifo的数据数量,方便切换fifo存储,比较器负责数据的比较,主要的设计思路是:通过分别比较特征图数据的奇数行和偶数行,得到两行中的较大值,然后比较这两个较大值得到最终结果。[0031]按照先奇后偶的顺序来缓存奇偶行的数据,当偶数行的fifo非空时,两个fifo同时输出数据到比较器。在第i个时钟周期先比较奇偶行数据的xi和yi,取其中的较大值赋给zi;在第i+1个时钟周期再比较xi+1和yi+1,取其中的较大值赋给zi+1,之后再通过比较器比较zi和zi+1的值,取其中较大值赋给最后的结果,这样就完成了下采样的过程。[0032]步骤3、存储结构的流水线设计[0033]cnn加速器的存储由片上存储和片外存储构成,fpga中的片上存储主要由fifo和blockram组成,片外存储则主要是ddr,前者的容量小但速度快,后者容量大,但是传输速度慢,一般数据量很小的情况下不使用片外存储。[0034]卷积计算的结果和中间结果的数据量都很大,只能依靠片外存储ddr来缓存数据,除了权值buffer、偏置buffer和图像控制模块的fifo,也有部分中间数据可以缓存在片上fifo和blockram中。[0035]本文设计了一种基于流水线的存储结构,如图3所示,主要是对卷积计算过程的不同通道的特征图进行累加,其中除了第一层卷积层的图像数据来自ps端的ddr,后面的图像数据均来自于pl端的ddr,即不经过dma的搬运过程。[0036]存储结构的流水线过程如下:[0037](1)从片外存储输出通道一的图像输入到图像控制器模块,这一部分是readddr的过程,同时在卷积运算和激活函数处理后的计算结果直接写入片外存储,即writeddr过程。[0038](2)从片外存储输出通道二的数据到图像控制器模块,这是第一次readddr的过程,在图像控制器模块停止工作后,开始第二个readddr的过程,同时启动卷积运算,由于时序对齐的问题,会将小部分卷积结果写入片上fifo里面,然后进行通道一和通道二的结果累加,将累加结果写入片外ddr存储。[0039](3)重复步骤(2),累加完所有通道的结果后,进入池化模块进行处理,将最终结果写入片外ddr。[0040]本文设计的卷积核并用度是16,为了匹配片外ddr的数据带宽,也方便读写ddr。在结束与片外ddr的交互后,最后结果写入片上blockram,以便于全连接层的读写调用。[0041]步骤4、softmax层的设计[0042]softmax函数实现的传统方法是使用查找表,即根据输入计算的得到的结果提前存入rom中,然后将输入作为rom的地址进行寻址,然后输出分类结果的概率值,但是有两个缺点:一是将特征值映射会采用四舍五入的操作,这样会降低分类精度;二是输入值位宽是16bit,这样存入rom的数据值太多,一定程度的扩大了存储量,本文采取了如图4所示的设计结构。[0043]softmax函数结构由五个rom、四个乘法器、一个累加器、一个多路复用器和一个除法器组成。其中五个rom分别存储4bit数据映射的概率值,乘法器和累加器用来计算全连接层输出的映射值的总和,再依次经过除法器的计算得到最后的结果,整个结构采取六级流水线的设计方法,具体计算过程如下:[0044](1)从全连接层输出的特征值经过基地拆分和补零后分别输入到五个rom中,这是第一级流水。[0045](2)经过查表得到映射值,输入到乘法器进行运算,这是第二级流水。[0046](3)经过三次乘法运算得到最后结果,这是第三级流水。[0047](4)乘法器输出的值进入到累加器来求和,得到总特征和,这是第四级流水。[0048](5)累加器输出的值和寄存器存储的每一类特征值输入到除法器进行计算,然后输出结果,这是第五级流水。[0049](6)对结果进行截断位处理,通过axi总线回传到ps端ddr,这是第六级流水。[0050]从softmax层输出的结果是最后归一化的分类结果,通过总线结构传输到arm,最后的结果可以在pc端的可视化界面上输出,这样设计的软硬件系统能够实时的处理图像然后输出可视化的结果,具有良好的交互性。[0051]此层的六级流水线如图5所示。[0052]步骤5、卷积神经网络各参数的定点化处理[0053]通常在训练阶段cnn网络采用的是32位浮点精度的参数,一定程度上可以保证网络的收敛和准确度。但是在fpga上浮点运算消耗的dsp资源远比定点运算的多,加速器的实现也会更加的复杂。卷积神经网络中含有大量冗余的数据,如果采用浮点数处理的方法,会占用大量的硬件存储资源,同时也会增加功耗,因此本文采用定点化计算,以一定准确度下降为代价,不仅减少了数据存储量,也降低了功耗。[0054]经过研究发现16bit定点数既能维持一定的分类精度,也能有效的降低能耗。定点数可以由以下公式来表示:[0055][0056]其中bw表示xfixed的位宽,exp表示定点数的阶码,bi∈{0,1}。定点数xfixed采用补码表示,最高位为符号位。[0057]浮点数xfloat与定点数xfixed的相互转化如下:[0058]xfixed=(int)(xfloat*2bw)ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(6)[0059]xfloat=(float)xfixed*2‑bwꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(7)[0060]由于定点数位宽有限,所以将xfloat转换为xfixed,再转换为新浮点数yfloat后,会有精度损失。附图说明[0061]图1为卷积运算结构示意图。[0062]图2为池化模块结构示意图。[0063]图3为流水线存储结构示意图。[0064]图4为softmax函数结构图。[0065]图5为softmax函数的六级流水线示意图。[0066]图6为cnn硬件加速系统整体结构示意图。具体实施方式[0067]本发明的基于fpga的cnn硬件加速系统设计的基本结构如图6所示,具体包括以下部分:[0068]卷积模块:卷积运算是一系列的乘加运算,在硬件设计上需要考虑中间数据缓冲区的大小对整个系统计算性能的影响,采用移位缓存的方法可以大大的减少流水线结构下的延迟;为了适应不同尺寸的卷积核,需要设计通用的计算结构,能够根据实际网络模型对卷积模块的运算资源进行修改,将图像控制和卷积运算结构进行分块设计,提高泛用性。[0069]最大最小池化模块:池化层的输入数据是连续变化的,需要对尺寸大小为2的窗口进行下采样,先缓存两行的图像数据,在一定周期的比较后得到结果,为了提高系统的计算性能,将池化操作也设计成流水的结构。[0070]relu激活函数模块:激活层的主要作用是完成数据的非线性变换,以此来解决线性模型的表达和分类能力不足的问题。[0071]本文使用的激活函数是relu函数,其计算公式如下:[0072][0073]其意义在于当特征采样点的特征强度不足时,即认为没有达到采样阈值,输出则为0;当特征图的强度达到标准时,则正常输出。[0074]全连接层模块:在整个cnn网络中起到分类器的作用,将卷积层、池化层和激活层等操作处理得到的分布式特征表示映射到样本标记空间,实际应用中,全连接层的设计通过乘加运算来实现。[0075]图像控制、权值和偏置缓存模块:[0076]1)图像控制模块。[0077]为了产生卷积层的输入数据,需要提前对输入的图像进行处理,生成三行需要的特征图数据。[0078]2)权值和偏置缓存模块。[0079]这些数据通过axi总线从片外缓存输入到cnn加速ip内部进行处理时,需要先用ram存储起来,方便之后的调用。[0080]softmax函数模块:softmax函数结构由五个rom、四个乘法器、一个累加器、一个多路复用器和一个除法器组成。其中五个rom分别存储4bit数据映射的概率值,乘法器和累加器用来计算全连接层输出的映射值的总和,再依次经过除法器的计算得到最后的结果,整个结构采取六级流水线的设计方法[0081]流水线存储结构:在流水线存储结构中,图像和权值数据从片外存储以dma的方式输入,而中间数据的存储分为两部分,一部分直接存储在片内存储,另一部分直接以总线的方式与片外存储交互,其中的加法步骤和读写片外存储步骤设计成流水线的结构,可以一定程度上减少cnn加速ip和片外存储的交互时间,最大程度上提升性能。[0082]整个cnn加速器计算架构的实施流程如下:[0083]1)初始化dma中断系统,这个步骤包含五个不同的部分,主要由arm端按顺序执行完成。第一步对dma硬件进行初始化;第二步对整个中断系统进行初始化;第三步对硬件中断系统进行使能;第四步注册dma的接收和发送中断;第五步使能整个系统的中断,至此完成了dma数据通道的初始化。[0084]2)将定点化后的图像数据、权值数据和偏置数据存入到外部ps端ddr3中,这一步骤主要在arm端完成,直接以总线的形式搬运到ps端的ddr上。[0085]3)在arm端启动cnn加速器,同时dma启动开始搬运数据到片上存储,这时arm端起到控制的作用,启动信号通过axigp总线写到fpga端的控制寄存器中,图像和权值数据则是通过axihp总线写入fpga端的片上存储里。[0086]4)通过axi4总线,偏置数据被搬运到偏置buffer中,权值数据被搬运到权值buffer中,单通道的图像数据被搬运到片上存储中。[0087]5)卷积模块从权值buffer中读取权值数据,权值数据配置好后,图像控制模块从片上存储中读取图像数据,转换好的图像数据输入到卷积模块中进行卷积运算,运算结果输入到relu模块中进行处理,结果存入到片外存储pl端的ddr3。[0088]6)下一个通道图像数据被搬运到片上存储中,再经过(4)和(5)步骤得到处理完,在计算过程中先缓存部分结果在片上存储,同时从pl端ddr3读取上一个通道的结果到片上存储,然后这两部分结果执行加法过程,所得结果回传给外部pl端ddr3,计算完所有通道后,再执行池化步骤和偏置累加步骤,这一整个过程在存储结构模块中完成。[0089]7)从第二层卷积层开始的图像数据都从pl端ddr3搬运到片上存储,而权值数据和偏置数据仍来自于ps端的ddr3,经重复(4)、(5)和(6)三个过程得到的最后结果输入全连接层和softmax层进行处理,得到的最后结果回传到ps端ddr3,这样就完成了整个cnn加速过程。[0090]将输出的结果和真实值作对比,统计准确率,并在pc端显示。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1