一种卷积神经网络的FPGA并行加速方法与流程

文档序号:13165446阅读:3345来源:国知局
一种卷积神经网络的FPGA并行加速方法与流程

本发明计算机计算领域,特别涉及一种卷积神经网络的fpga并行加速方法。



背景技术:

卷积神经网络(convolutionalneutralnetwork)是人工神经网络的一种。cnn是第一个真正成功训练多层网络结构的学习算法。它利用空间关系,采用权值共享网络结构,使之更类似于生物神经网络,降低了网络模型的复杂度并减少了权值的数量,以提高一般前向bp算法的训练性能。该优点在网络的输入是多维图像时表现得更明显。另一方面,在cnn中,图像可以直接作为网络的底层输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征,避免了传统识别算法中复杂的特征提取和数据重建。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。cnn的这些优点使得它如今已成为当前语音分析和图像识别领域的研究热点。at&t的支票读取系统、微软的ocr和手写识别系统、google街景中的人脸识别和车牌识别以及法国电信视频会议系统中的人脸识别都用到了cnn。现有的大部分cnn实现主要是基于通用处理器cpu实现的。在cnn网络结构中,层内计算是独立不相关的,而层间结构可以理解为是一个流水结构。cpu由于其自身特点无法充分地挖掘cnn内部的并行性。fpga(field-programmablegatearray),即现场可编程门阵列,作为一种计算密集型加速部件,通过将算法映射到fpga上的并行硬件进行加速。fpga上所设计的各个硬件模块可以并行执行。各个硬件模块输入输出的相互连接以及fpga所提供的流水结构可以很好地和cnn算法相匹配,充分利用算法网络结构内部的并行性,在提高运算速度的同时缩小了能耗。之前已经有学者在fpga上实现了不同结构的cnn来做简单的实时图像识别或分类,但并没有完全发挥出fpga的计算潜能,并具有较差的扩展性。



技术实现要素:

本发明的目的就是克服现有技术的不足,而提出的一种卷积神经网络的fpga并行加速方法。

本发明的技术方案是,一种卷积神经网络的fpga并行加速方法,包括如下步骤:

(1)建立cnn模型,该模型包括一个输入层input、一个输出层output、两个卷积层、两个池化和一个全连接网络softmax,其中,输入层输入的图像集为手写数字图像集mnist,每幅图像的大小为28×28像素点;

(2)配置硬件架构,采用fpga电路板通过带宽为8gb/s的pciexpress2.0x8与cpu进行连接;cnn在fpga上的实现采用流水结构,图像数据的输入是以数据流的方式进行流入,在每个时钟周期内传入一个图像的像素点,网络中的每一层需要每时钟输入一个值并且输出一个值;

(3)配置卷积运算单元,在网络的各层中,对卷积层做以下配置:(a)将单个卷积运算继续拆分实现并行化,使得单个卷积运算能够在每个时钟周期输出一个点;(b)将同一层内的多个卷积运算进行并行化,使得在给定的时钟周期内能够同时流出完该层的多个特征图;其中,(a)中根据硬件电路的数据流的特点设置卷积运算单元(ccu),使得在单个fpga周期就可以完成整个5×5大小卷积运算。

本发明的有益效果在于:本方法使用fpga来实现cnn,通过设计了优化硬件加速方案,使得相对于手写图像数据集mnist的卷积神经网络计算,相较于gpu实现近5倍的加速,相较于12核的cpu实现10倍的加速,而功耗只有gpu的1/3。

附图说明

图1为本发明cnn模型结构。

图2为本发明cnn-fpga硬件架构设计。

图3为本发明3×3卷积运算单元(ccu)电路简图。

具体实施方式

下面,结合附图对于本发明进行如下详细说明:

本发明的一卷积神经网络的fpga并行加速方法包括如下几点:

一是cnn模型结构。本发明所采用的cnn模型结构是由1个输入层input,1个输出层output,2个卷积层,2个池化和一个全连接网络softmax组成,如图1所示。在本文实验中,输入的图像集为手写数字图像集mnist。每幅图像的大小为28×28像素点。具体的网络结构如下:

inputlayer:28×28;

c1convlayer:3kernels,eachwithsize5×5,stride=1;

s1max-poolinglayer:eachwithsize2×2,stride=2,β=1.0b=0.0;

c2convlayer:6kernels,eachwithsize5×5,stride=1;

s2max-poolinglayer:eachwithsize2×2,stride=2,β=1.0b=0.0;

softmax:output:10vector(classificationresult).

其中kernel是卷积核,都采用大小为5×5的卷积核对特征图像进行卷积操作;kernel的stride表示卷积核在特征图像上做卷积的平移步数。在上述模型中涉及的权重系数以及偏置系数个数如下:

w参数个数计算公式:w参数个数=卷积核个数×单个卷积核的w参数个数

b参数个数计算公式:b参数个数=卷积核个数

(1)第一层:w参数个数为3×25=75个,b参数个数为3个。

(2)第二层:w参数个数为(3×6)×25=450个,b参数个数为18个。

(3)softmax层:w参数个数为6×4×4×10=960个,b参数个数为1个。

三层所有参数个数的总数为1507个,如果采用float来存储参数的话,每个参数占32位,则总共消耗的存储约为6kb,非常得小,pcie的带宽为8gb/s,因此参数的传输时间占得比重很低。而且这些权重以及偏执参数在较长的时间内是不会发生改变,需要多次的前向操作后才会更新。考虑到程序的扩展性,这些参数通过dram传入。

二是硬件架构设计。本发明使用的fpga电路板通过带宽为8gb/s的pciexpress2.0x8与cpu进行连接,在fpga板上有最大带宽为38gb/s的24gb的的ddr3dram。cnn算法中每一层算完之后需要把该层所有的输出信息作为下一层的输入,此时该层将会停止运作,直至当前的图片被完全地处理完。fpga不同于cpu,单核cpu每一时刻只能执行一条指令,而fpga上的硬件模块可以同时进行运算。因此如果cnn在fpga上的实现采用流水结构可以大大提高资源的使用效率。图像数据的输入是以数据流的方式进行流入,在每个时钟周期内传入一个图像的像素点。因此在最理想的情况下,每28×28个时钟周期便可以完成对一幅图像的运算。为了达到这种效果,网络中的每一层需要每时钟输入一个值并且输出一个值。如图2所示,在cpu端,读取了输入的训练数据图像集,对输入图像做归一化预处理之后,通过pcie总线传输给dataflowengine;cnn中用到的参数w和参数b是在cpu中初始化的,也通过pcie传输到dataflowengine的fastmemory当中,这样将加快卷积运算取参数的过程;dataflowengine中实现了2个卷积层和1个softmax全连接层的硬件电路,数据流过dataflowengine之后将会产生图像的分类结果并将结果传回cpu。

三是卷积运算单元设计。在网络的各层中,卷积层需要的乘加操作最多,也是最耗时的操作。为了保证卷积层能够在每个时钟周期内输出特征图的一个点,需要对卷积层做以下几点:(1)将单个卷积运算继续拆分实现并行化,使得单个卷积运算能够在每个时钟周期输出一个点。(2)将同一层内的多个卷积运算进行并行化,使得在给定的28×28个时钟周期内能够同时流出完该层的多个特征图。针对第一点,首先根据硬件电路的数据流的特点设计了卷积运算单元(ccu),使得在单个fpga周期就可以完成整个5×5大小卷积运算,一个5×5大小的卷积运算相当于25个乘法和24个加法,而fpga在一个周期就可以完成cpu49个周期才能完成的任务,在相当于单个卷积运算的基础上就实现了49倍的加速。fpga其实是使用资源(resource)或者空间(space)换取时间的一种实现方式。在单个周期(cycle)下,由于数据是流过电路的,因此电路中的每一个计算单元都进行了一次运算,当流水线越深,计算单元的数量越多的时候,相当于单个周期内的运算量越大,加速效果越好。实现单个卷积运算的加速其实就是采用了5×5个乘法器和加法器设计而成的卷积运算单元。为了方便显示,3×3大小的卷积电路设计如图3所示。

所述仅是本发明的具体实例,任何基于本发明方法基础的等效变换,均属于本发明保护范围之内。

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