一种基于FPGA的卷积神经网络前向预测的硬件加速实现架构的制作方法

文档序号:18743090发布日期:2019-09-21 02:01阅读:293来源:国知局
一种基于FPGA的卷积神经网络前向预测的硬件加速实现架构的制作方法

本发明涉及人工智能中重要发展方向之一——深度学习领域,具体涉及一种基于FPGA的卷积神经网络前向预测的硬件加速实现架构。



背景技术:

最近几年来,人工智能领域,尤其是机器学习在理论和应用方面均获得了突破性的成就。深度学习是机器学习最重要发展方向之一,深度学习能够学习到具有多层次抽象的特征,因此深度学习在解决复杂抽象的学习问题上有着卓越的表现。但是,随着问题不断复杂化、抽象化,深度学习网络的模型变得更加复杂,模型的学习时间也在增加。例如谷歌的“AlphaGo”使用了包含几千个神经元的多层神经网络结构,即使该结构使用了包含接近20000个处理器的计算机集群进行计算,识别复杂图像的学习过程也要消耗七八天的时间。因此深度学习在复杂抽象的学习问题上的卓越成就是建立在复杂的计算和巨大的训练数据之上的。高速度低功耗的深度学习加速算法的研究,逐渐成为了大势所趋。

相比与CPU、GPU和ASIC,FPGA在深度学习算法加速上具有高速度、低功耗、稳定而又延迟极低、适用于流式的计算密集型任务和通信密集型任务、灵活而开发周期短、成本低、便于携带等优势。因此FPGA是深度学习加速非常不错的选择,但目前对深度学习算法的FPGA实现的具体架构的研究并不多,存在存储带宽不足等问题,加速效果也还有很大的提升空间。

卷积神经网络算法是最常见最重要的深度学习算法之一,它在语音和图像识别等常见应用中取得了突破性成就。而前向预测过程是卷积神经网络算法的重要组成部分。



技术实现要素:

本发明所要解决的技术问题是,克服现有卷积神经网络前向预测所存在的不足,本发明提出了一个精简优化的适合于在小型FPGA上实现的前向预测卷积神经网络Hcnn结构。

本发明为解决上述技术问题所采用的技术方案是,一种基于FPGA的卷积神经网络前向预测的硬件加速实现架构,由2个卷积层结构、2个池化层结构和2个全连接层结构组成,卷积层1、池化层1、卷积层2、池化层2、全连接层1、全连接层2顺次连接,原始输入特征数据以并行的流水线方式依次经过卷积层1、池化层1、卷积层2、池化层2、全连接层1和全连接层2;

卷积层结构包含若干个并行的基于优化的脉动阵列的卷积处理单元CONV_PE和激活函数Relu单元,原始输入特征数据通过卷积处理单元CONV_PE与卷积核作卷积操作后,再通过Relu单元输出特征数据;卷积层包括M个并行的卷积处理单元CONV_PE和N个激活函数Relu单元,M为该卷积层中卷积核的总个数,N为卷积层输出特征图的个数,M=N*卷积深度;卷积深度与输入特征图的个数相等。

池化层结构包含若干个并行的基于变形的脉动阵列的池化处理单元Maxpooling_PE,特征数据通过池化处理单元Maxpooling_PE完成池化操作;

全连接层1与全连接层2包含若干个并行的全连接处理单元FC_PE,输入特征数据通过全连接处理单元FC_PE完成全连接操作;

卷积层1与卷积层1均包含若干个并行的卷积处理单元CONV_PE和激活函数Relu单元,原始输入特征数据通过卷积处理单元CONV_PE与卷积核作卷积操作后,再通过激活函数Relu单元输出特征数据;

池化层1与池化层2均包含若干个并行的池化处理单元Maxpooling_PE,特征数据通过池化处理单元Maxpooling_PE完成池化操作;

全连接层1与全连接层2包含若干个并行的全连接处理单元FC_PE,输入特征数据通过全连接处理单元FC_PE完成全连接操作;

卷积处理单元CONV_PE用于完成一个输入特征图与一个卷积核的卷积操作,通过基于移位寄存器的串矩转换结构实现,包括L1×L1个处理单元PECONV组成的脉动阵列、L1-1个移位寄存器、1个加法器、1个有效控制单元;L1×L1个处理单元PE以L1行L1列的形式排列,L1-1个移位寄存器首尾相连;前一个移位寄存器的输出端与后一个移位寄存器的第二输入端相连;脉动阵列中,每一行的处理单元PECONV依次串联,每一个行中一个处理单元PECONV的第一输出端、第二输出端分别与下一个处理单元PE的第一输入端、第二输出端对应相连;输入卷积处理单元CONV_PE的特征数据的矩阵大小matrix_len分别输入至L1-1个移位寄存器的控制端;输入卷积处理单元CONV_PE的特征数据din_x分别输入至脉动阵列中第一行第一列的处理单元PECONV的第二输入端以及第1个移位寄存器的输入端;输入卷积处理单元CONV_PE的特征数据和四个移位寄存器的输出数据分别为矩阵的一列,这样就实现了串矩转换;脉动阵列中每一个行第一列处理单元PECONV的第一输入端的输入为0;第l个移位寄存器的输出端还与脉动阵列中第l+1行的第一列处理单元PECONV的第二输入端相连,l=1,…,L1;脉动阵列中每一行最后一列的处理单元PECONV的第一输出端与加法器输入端相连,固定在PECONV中的权值数据W从寄存权值数据的寄存器CONV_W_RAM中提前取出,加法器对L1个输入求和后输出至有效控制单元;有效控制单元用于剔除无效的操作矩阵,L1为卷积处理单元CONV_PE的卷积核大小;

卷积处理单元CONV_PE中每一个处理单元PECONV包括1个加法器、1个乘法器,2个寄存器,处理单元PECONV的第一输入端分别与第一寄存器的输入端以及乘法器的一个输入端相连,乘法器的另一个输入端接收输入的权值;加法器的一个输入端与乘法器的输出端相连,另一个输入端与处理单元PECONV的第二输入端相连,加法器的输出端与第二寄存器的输入端相连;第一寄存器的输出端与处理单元PECONV的第一输出端相连,第二寄存器的输出端与处理单元PECONV的第二输出端相连。处理单元PECONV中,根据接收到的权值W,令输入样本特征行数据Xrow和部分和sum在处理单元中传递。

池化处理单元Maxpooling_PE用于对一路输入特征数据进行池化操作,通过基于移位寄存器的串矩转换结构实现,包括L2×L2个处理单元PEMaxpooling组成的脉动阵列、L2-1个移位寄存器、1个最大值比较器、1个有效控制单元;

L2×L2个处理单元PEMaxpooling以L2行L2列的形式排列,L2-1个移位寄存器首尾相连;前一个移位寄存器的输出端与后一个移位寄存器的第二输入端相连;脉动阵列中,每一行的处理单元PEMaxpooling依次串联,每一个行中一个处理单元PEMaxpooling的第一输出端、第二输出端分别与下一个处理单元PE的第一输入端、第二输出端对应相连;输入池化处理单元Maxpooling_PE的特征数据的矩阵大小matrix_len分别输入至L2-1个移位寄存器的控制端;输入池化处理单元Maxpooling_PE的特征数据din_x分别输入至脉动阵列中第一行第一列的处理单元PEMaxpooling的2个输入端以及第1个移位寄存器的输入端;第l个移位寄存器的输出端还与脉动阵列中第l+1行的第一列处理单元PEMaxpooling的2个输入端相连,l=1,…,L2;脉动阵列中每一行最后一列的处理单元PEMaxpooling的第一输出端与最大值比较器的输入端相连,最大值比较器对L2个输入进行最大值比较后输出至有效控制单元;有效控制单元用于剔除无效的操作矩阵,L2为池化处理单元Maxpooling_PE池化大小。

卷积层硬件实现架构的优势在于实现简单,资源消耗少,并行度高,处理速度快;采用了模块化和流水线的设计,使其结构更加整齐,布线更加一致,从而极大的提高了频率;平衡了I/O带宽和处理速度的不匹配。

池化处理单元Maxpooling_PE中每一个处理单元PEMaxpooling包括1个比较器,2个寄存器,处理单元PEMaxpooling的第一输入端分别与第一寄存器的输入端以及比较器的一个输入端相连,比较器的另一个输入端与处理单元PEMaxpooling的第二输入端相连,比较器的输出端与第二寄存器的输入端相连;第一寄存器的输出端与处理单元PECONV的第一输出端相连,第二寄存器的输出端与处理单元PECONV的第二输出端相连。处理单元PEMaxpooling与处理单元PEMaxpooling有所不同,用比较器替换了乘法器和加法器。池化层硬件实现架构的优势与卷积层类似。

全连接层结构包含K×I个并行的全连接处理单元FC_PE,用于实现输入神经元的值与对应权值的乘累加,从而得到输出神经元的值;I为输出神经元个数,K为综合考虑处理时间和资源消耗后采取分片思想将J个输入神经元分成的片数;

全连接层1包括K1组并行的全连接处理单元组、I1个加法器、I1个激活函数Relu单元;一个全连接处理单元组中包括I1个并行的全连接处理单元FC_PE,每个全连接处理单元组中第i1个全连接处理单元FC_PE输出至对应的第i1个加法器,第i1个加法器的输出端与第i1个激活函数Relu单元的输入端相连,所有Relu单元中的偏置项b均由寄存有偏置项b的寄存器B_RAM输出;激活函数Relu单元输出至全连接层2,i=1,…,I1;

全连接层2包括2个并串转化单元、1×I2个并行的全连接处理单元FC_PE、1个SOFTMAX单元,第一并串转化单元接收来自全连接层1的特征数据后转换成一路的串行数据,将输入神经元分成的1片,I2个并行的全连接处理单元FC_PE同时进行全连接操作得到I2路1×1的输出至第二并串转化模块转换成并行数据输入至SOFTMAX单元。

基于本发明提出的优化的脉动阵列实现卷积神经网络的主要运算单元,综合考虑运算处理时间和资源消耗,利用并串转化,数据分片和流水线设计等方法,以做到尽可能大的并行度和尽可能少的资源消耗为原则,以并行的流水线形式实现了Hcnn卷积神经网络的前向预测过程。

本发明的有益效果是,充分利用了FPGA的数据并行和流水线并行的特点,实现简单,结构更加规则,布线更加一致,频率也得到了大大提高,加速效果显著。使用优化的或变形的脉动阵列结构平衡了IO读写与计算,在消耗较少的存储带宽下提高了吞吐率,有效地解决了数据访存速度远大于数据处理速度的卷积神经网络FPGA实现的问题。

附图说明

图1为卷积神经网络Hcnn结构图;

图2为Hcnn前向预测过程硬件架构总体框图;

图3为L=5的CONV_PE硬件架构图;

图4为CONV_PE中PE内部结构图;

图5为L=2的Maxpooling_PE硬件架构图;

图6为Maxpooling_PE中PE内部结构图;

图7为实例一中Modelsim仿真结果图;

图8为实例一中资源消耗图;

图9为FPGA和CPU、GPU的速度和功耗性能分析对比图。

具体实施方式

下面结合具体实现架构对本发明作进一步的详细描述。但不应将此理解为本发明上述主题的范围仅限于以下的实施例,凡基于本发明内容所实现的技术均属于本发明的范围。

本发明基于卷积神经网络各层基本处理模块,以并行的流水线的形式来实现卷积神经网络前向预测的硬件加速实现架构,提出了一个精简优化的适合于在小型FPGA上研究的卷积神经网络Hcnn。

卷积神经网络Hcnn的具体结构如图1所示。Hcnn的原始输入特征包含60000个训练样本和10000个测试样本。

卷积层1的卷积核(过滤器)大小为4×1×5×5,激活函数为Relu函数,即y=relu(x)=max(0,x,)采用非全零填充方式且步长为1。然后经过池化层1,其采用Max Pooling方式且池化大小为2×2,采用非全零填充且步长为2。卷积层2的卷积核大小为4×4×5×5,激活函数为Relu函数,采用非全零填充方式且步长为1。然后进入池化层2,采用Max Pooling且池化大小为2×2,采用非全零填充且步长为2。最后经过2层全连接层,全连接层1包含12个神经元,激活函数为Relu函数,全连接层2包含10个神经元,激活函数为Softmax函数,即

其中,Vi表示输出神经元的输入。i表示类别索引,总的类别个数为C。Si是输出神经元的输出。

其他模型参数设置如下:该模型采用λ=0.1的L2正则化和弃权技术增加模型泛化能力,损失函数为交叉熵函数,权值初始化采用0均值0.1标准差初始化方法,学习率设置为0.001,小批量数据的大小minibatch=50,迭代次数为12000。Hcnn卷积神经网络模型的准确率可达96.64%,在小规模的简单模型的前提下,该准确率是可以接受的,因此Hcnn模型是进行FPGA硬件架构研究与实现的不错选择。

卷积神经网络Hcnn前向预测的硬件加速实现架构由2个卷积层结构、2个池化层结构和2个全连接层结构组成,其总体框架如图2所示。输入原始特征数据din_images以并行的流水线方式依次经过卷积层1、池化层1、卷积层2、池化层2、全连接层1和全连接层2。

卷积层的输出过程:

其中D表示深度,d为深度的层数变量,F表示过滤器的大小,ωd,m,n是过滤器的第d层m行n列权重,ad,i,j是图像的第d层i行j列像素,f为激活函数,ωb为偏置项,xd,i+m,j+n,i与m均为行变量,j与n均为列变量。

从而得到卷积层结构:

卷积层结构包含M个并行的卷积处理单元CONV_PE和N个激活函数Relu单元,M为该卷积层卷积核的总个数,N为输出特征图的个数,其中M=N*卷积深度,卷积深度等于输入特征图的个数,同一输出特征图的为一组。

例如卷积层1中,输入的特征图为1,卷积深度为1,则M=4,N=4;卷积层2中M=16,N=4。这样,就能实现在一个卷积操作处理周期下,完成所有卷积操作,即以最大并行度完成所有卷积操作。原始输入特征数据通过卷积处理单元CONV_PE与卷积核作卷积操作,N组共M个并行的卷积处理单元CONV_PE同时完成卷积操作,同一个卷积核组的结果相加后,通过Relu单元得到最终输出。例如图2的卷积层2中,卷积深度为4,则一个卷积核组中包括4个卷积核,如CONV_PE1_1、CONV_PE2_1、CONV_PE3_1、CONV_PE4_1为一组卷积核,每组对应深度卷积完成后将它们的结果相加后再通过Relu单元得到最终结果。

CONV_PE为卷积处理单元,它实现的功能是完成一个输入特征图与一个卷积核的卷积操作,利用CONV_PE可搭建任意规模和并行度的卷积层硬件架构。实现L×L(L=5)的卷积处理单元CONV_PE的硬件架构如图3所示。首先经过一个本发明提出的基于移位寄存器的串矩转换结构,将串行的输入数据转换为矩阵数据。该串矩转换结构使用L-1=4个移位寄存器,其深度为输入数据原始矩阵大小matrix_len,4个移位寄存器首尾相连,原始数据和四个移位寄存器的输出数据分别为矩阵的一列,这样就实现了串矩转换。但需要注意的是,需要使用Valid_control模块剔除一些无效的操作矩阵。二维脉动阵列实现X与W的互相关操作。脉动阵列由L×L个处理单元PE构成,在处理单元PE中,固定权值W,令输入样本特征行数据Xrow和部分和sum在处理单元中传递,其具体的硬件结构如图4所示,由加法器、乘法器和寄存器组成。每个PE的权值不同,卷积层的权值矩阵也是5×5的,一共25个权值。按对应的行列位置分别固定在25个PE中。

最大值池化的输出过程:在输入特征矩阵中取2×2的元素中的最大值作输出,完成下采样过程。从而得到池化层结构:

池化层结构包含L个并行的池化处理单元Maxpooling_PE,L为输入特征数据的个数。L路输入特征数据通过并行的L个池化处理单元Maxpooling_PE同时完成池化操作。

Maxpooling_PE为池化处理单元,它实现的功能是完成一路输入特征数据的池化操作,利用Maxpooling_PE可搭建任意规模和并行度的池化层硬件架构。实现L×L(L=2)的池化处理单元Maxpooling_PE的硬件架构如图5所示。首先经过串矩转换结构,将串行的输入数据转换为矩阵数据。然后经过一个变形的二维脉动阵列实现下采样操作。脉动阵列由L×L个处理单元PE构成,在处理单元PE中,令矩阵数据Din_x和比较的最大值max在脉动阵列中进行传递。其具体的硬件结构如图6所示,和传统的脉动阵列PE有所不同,本结构用比较器替换了乘法器和加法器。

全连接层的输出过程为:

其中i为输出神经元编号,j为输入神经元编号,ai表示第i个输出神经元的输出,xj表示第j个输入神经元的值,ωji表示第i个输出神经元和第j个输入神经元间的权值,J为输入神经元总数。

从而得到全连接层结构:

全连接层结构包含K×I个并行的全连接处理单元FC_PE,它的功能是实现输入神经元的值与对应权值的乘累加,从而得到输出神经元的值。I为输出神经元个数,K为综合考虑处理时间和资源消耗后采取分片思想将J个输入神经元分成的片数。例如,全连接层1直接利用池化层2输出的4路4×4的数据进入全连接层,即将J=64个输入神经元分成K=4片,全连接层1的输出神经元个数为12,因此48个FC_PE分为4组同时进行全连接操作,即乘累加操作,然后再将同一组的4个FC_PE的结果相加,例如将FC_PE1_1、FC_PE1_2、FC_PE1_3、FC_PE1_4的结果相加,最后通过Relu单元即可。全连接层1的输出为12路1×1的数据,为了避免资源的过度浪费,令其通过并串转化模块转换成一路的串行数据,即将12个输入神经元分成1片,10个FC_PE同时进行全连接操作得到12路1×1的输出。同理为了节约资源,将其通过并串转化模块后进入SOFTMAX单元即可。

下面结合具体实例对本发明作更进一步的说明。

1.实例一:卷积神经网络Hcnn前向预测过程FPGA仿真与实现

实例一所使用仿真平台为Pycharm、ISE 14.7和Modelsim 10.1a,所实现的架构如图2所示。首先在Pycharm中对图2的Hcnn卷积神经网络建模并训练,得到该模型准确率可达96.64%。保存训练好的Hcnn卷积神经网络模型的各个参数,即各层的权值和偏置项,用于FPGA仿真与实现。需要注意的是,在FPGA实现中大部分参数以及中间寄存器变量均采用的定点方式为fi(1,18,12),即1位符号位,5位整数,12位小数。但在softmax单元的实现中,拟合函数系数值在不同区间浮动范围过大,因此需要分段定点,即不同区间,有不同的定点方式。

实例一中Hcnn卷积神经网络前向预测过程的Modelsim仿真结果图如图7所示。从图中可以看出,数据处理时间为233个clk(除去读取输入数据时间),得到最终输出结果。该结果与Maltab定点仿真结果一致,证明该模型设计功能正确。

实例一中Hcnn卷积神经网络前向预测过程在型号为XC7K325T-2FFG900的FPGA上综合后可得到系统最大时钟频率为212.15MHz,其资源消耗图如图8所示。由图8可以看出,该模块资源消耗均较少,主要消耗了574个DSP48E1s,因为调用了574个DSP做乘法器。

2.实例二:实例一中实现模型的速度和功耗性能分析

实例二所使用仿真平台为ISE 14.7和PyCharm。该模型数据处理时间为233个clk(除去读取输入数据时间)。经分析统计,前向预测过程的总定点数操作次数为170510次。因此在200M的时钟频率下,每秒浮点运算次数FLOPS为170510×200×106/233=146.36G。

然后,在仿真平台在PyCharm上,分别利用型号为Intel E3-1230V2@3.30GHz的CPU和型号为TitanX的GPU完成实例一中架构的计算,得到CPU和GPU处理一个样本的运算时间分别为3620ns和105ns,因此CPU的每秒浮点运算次数为47.10GFLOPs,GPU每秒浮点运算次数为1623.90GFLOPs。

在FPGA和CPU、GPU中实现实例一的架构的速度和功耗性能分析对比图如图9所示。从图中可以看出,在速度方面,本发明的卷积神经网络FPGA实现架构比CPU有了三倍左右的提升;而较之GPU还有一定差距,这是受限于FPGA芯片的资源,并行度仅为16。在功耗方面,FPGA远低于CPU和GPU。

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