一种基于FPGA的卷积神经网络实现方法及装置与流程

文档序号:15183117发布日期:2018-08-17 07:07阅读:190来源:国知局

本发明涉及fpga(field-programmablegatearray,现场可编程门阵列)领域,尤其涉及一种基于fpga的卷积神经网络实现方法及装置。



背景技术:

随着人工智能的爆发式增长,深度学习已经成为当前从大量数据分析提取有价值信息的有效手段,而卷积神经网络由于其权值的可重用性而受到关注。目前卷积神经网络大部分通过软件实现,数据量大,对硬件的计算能力要求高,依赖于云端的高计算能力,功耗大。



技术实现要素:

本发明提供一种基于fpga的卷积神经网络实现方法及装置,以解决现有卷积神经网络技术依赖软件实现的问题。

为解决上述技术问题,本发明采用以下技术方案:

一种基于fpga的卷积神经网络实现方法,其包括:

初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块;

加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次;

将待处理数据通过fpga的内存控制器存储至内存存储器;

运行控制模块读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果。

进一步地,在待运行处理层次为卷积计算层次时,运行控制模块控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的卷积计算层次对应的权值数据和输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的权值数据和输入数据,输入神经网络处理单元;

控制神经网络处理单元使用权值数据对输入数据进行计算,并输出计算结果;

控制输出控制模块将计算结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的计算结果,并将计算结果存入内存存储器。

进一步地,在待运行处理层次为池化操作层次时,运行控制模块控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的池化操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据划分为多个池化窗口,从池化窗口中按顺序输入神经网络处理单元;

控制神经网络处理单元对输入数据进行最大池化比较,并输出比较结果;

控制输出控制模块将比较结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的比较结果,并将比较结果存入内存存储器。

进一步地,在待运行处理层次为连线操作层次时,运行控制模块控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理包括:

确定当前处理层次的输入数据对应的其他处理层次的输出数据;

将其他前处理层次的输出数据在内存存储器中的存储地址,配置为当前处理层次的输入数据的输入地址;

控制数据读取模块通过内存控制器读取内存存储器中存储的输入地址对应的输入数据,并存入输入缓存模块。

进一步地,在待运行处理层次为重组操作层次时,运行控制模块控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的重组操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据,输入神经网络处理单元;

控制神经网络处理单元对输入数据进行重组操作,并输出重组结果;

控制输出控制模块将重组结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的重组结果,并将重组结果存入内存存储器;

建立输入数据在内存存储器中的存储地址、与重组结果在内存存储器中的存储地址之间的映射。

进一步地,在待运行处理层次为分类操作层次时,运行控制模块控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的分类操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据,作为输入特征向量输入神经网络处理单元;

控制神经网络处理单元对输入数据进行分类计算,并输出检测结果;

控制输出控制模块将检测结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的检测结果,并将检测结果输出。

进一步地,在将待处理数据通过fpga的内存控制器存储至内存存储器之前,还包括:

判断待处理数据是否满足待实现卷积神经网络模型的计算要求;

在不满足时,对待处理数据进行归一化处理和/或双线性插值处理,直至满足计算要求;

将处理之后的待处理数据,存储至内存存储器。

一种基于fpga的卷积神经网络实现装置,其包括:

初始化模块,用于初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块;运行控制模块用于读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果;

加载模块,用于加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次,将待处理数据通过fpga的内存控制器存储至内存存储器。

进一步地,神经网络处理单元包括多个处理单元,多个处理单元用于并行处理数据。

进一步地,输入缓存模块包括两个输入存储单元,两个输入存储单元用于采用乒乓双缓存的方式缓存神经网络处理单元的输入数据和/或权值数据;和/或,输出缓存模块包括两个输出存储单元,两个输出存储单元用于采用乒乓双缓存的方式缓存神经网络处理单元的输出数据。

有益效果

本发明提供了一种基于fpga的卷积神经网络实现方法及装置,该方法首先初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块,然后加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次,并将待处理数据通过fpga的内存控制器存储至内存存储器,最后运行控制模块读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果;在整个过程中,卷积神经网络是实现都是通过fpga的硬件来实现的,而不再依赖于软件,解决了现有卷积神经网络技术依赖软件实现的问题。

附图说明

图1为本发明实施例一提供的卷积神经网络实现方法的流程图;

图2为本发明实施例二提供的卷积神经网络实现装置的结构示意图;

图3为本发明实施例三提供的卷积神经网络实现装置的结构示意图;

图4为本发明实施例三提供的卷积神经网络实现方法的示意图;

图5为本发明实施例提供的乒乓双缓存的示意图;

图6为本发明实施例提供的神经网络处理单元的结构示意图;

图7为本发明实施例提供的最大池化操作示意图;

图8为本发明实施例提供的逻辑控制示意图;

图9为本发明实施例提供的数据重组示意图。

具体实施方式

本发明适用于所有设置有fpga芯片的终端设备,包括pc、手机、pad、存款机等。下面通过具体实施方式结合附图对本发明作进一步详细说明。

实施例一:

图1为本发明实施例一提供的基于fpga的卷积神经网络实现方法的流程图,请参考图1,本实施例提供的基于fpga的卷积神经网络实现方法包括以下步骤:

s101:初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块。

fpga的可编辑资源可以根据需要构建为任意的功能模式,本发明在设备初始化时,将这些fpga的可编辑资源构建为实现卷积神经网络模型所必须的功能模式,然后在这个基础上实现卷积神经网络功能,以对数据进行处理。

在本发明中,输入缓存模块和输出缓存模块都采用乒乓双缓存机制缓存数据,神经网络处理单元包括多个pe(processingelement,处理单元),这些pe并行处理数据;这些都将在实施例三中进行说明。

在本发明中,神经网络处理单元是分时复用的,即其在不同的处理层次具备不同的作用。

s102:加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次。

卷积神经网络模型一般包括多个处理层次,如本发明实施例三涉及的卷积神经网络模型有二十二层卷积层、五层最大池化层、两层连线层、一层重组层、一层分类层、一层预处理层,一共三十二个处理层次,实现对输入图片数据的实时运算处理并输出检测结果。

为了对处理层次进行标识,本发明将状态寄存器与处理层次进行关联标识,关联方式可以是设置多个状态寄存器,每个状态寄存器对应一个处理层次,还可以是仅设置一个状态寄存器,根据运行过程实时更新。

s103:将待处理数据通过fpga的内存控制器存储至内存存储器。

待处理数据是指外部需要进行卷积神经网络处理的数据,例如图像数据等。

因为不同的卷积神经网络模型能够处理的数据存在限制,那么在将待处理数据通过fpga的内存控制器存储至内存存储器之前,就需要判断待处理数据是否满足待实现卷积神经网络模型的计算要求,在不满足时,对待处理数据进行归一化处理和/或双线性插值处理,直至满足计算要求,将处理之后的待处理数据,器存储至内存存储器。

s104:运行控制模块读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果。

本步骤主要是运行控制模块根据状态寄存器的参数,控制各功能模块对输入数据进行处理,完成卷积神经网络处理,针对不同种类的处理层次其具体实现也不同。

在待运行处理层次为卷积计算层次时,步骤s104包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的卷积计算层次对应的权值数据和输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的权值数据和输入数据,输入神经网络处理单元;

控制神经网络处理单元使用权值数据对输入数据进行计算,并输出计算结果;

控制输出控制模块将计算结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的计算结果,并将计算结果存入内存存储器。

在待运行处理层次为池化操作层次时,步骤s104包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的池化操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据划分为多个池化窗口,从池化窗口中按顺序输入神经网络处理单元;

控制神经网络处理单元对输入数据进行最大池化比较,并输出比较结果;

控制输出控制模块将比较结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的比较结果,并将比较结果存入内存存储器。

在待运行处理层次为连线操作层次时,步骤s104包括:

确定当前处理层次的输入数据对应的其他处理层次的输出数据;

将其他前处理层次的输出数据在内存存储器中的存储地址,配置为当前处理层次的输入数据的输入地址;

控制数据读取模块通过内存控制器读取内存存储器中存储的输入地址对应的输入数据,并存入输入缓存模块。

在待运行处理层次为重组操作层次时,步骤s104包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的重组操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据,输入神经网络处理单元;

控制神经网络处理单元对输入数据进行重组操作,并输出重组结果;

控制输出控制模块将重组结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的重组结果,并将重组结果存入内存存储器;

建立输入数据在内存存储器中的存储地址、与重组结果在内存存储器中的存储地址之间的映射。

在待运行处理层次为分类操作层次时,步骤s104包括:

控制数据读取模块通过内存控制器读取内存存储器中存储的分类操作层次对应的输入数据,并存入输入缓存模块;

控制输入控制模块将输入缓存模块存储的输入数据,作为输入特征向量输入神经网络处理单元;

控制神经网络处理单元对输入数据进行分类计算,并输出检测结果;

控制输出控制模块将检测结果存入输出缓存模块;

控制内存控制器读取输出缓存模块内的检测结果,并将检测结果输出。

本实施例提供了一种基于fpga的卷积神经网络实现方法,该方法首先初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块,然后加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次,并将待处理数据通过fpga的内存控制器存储至内存存储器,最后运行控制模块读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果;在整个过程中,卷积神经网络是实现都是通过fpga的硬件来实现的,而不再依赖于软件,解决了现有卷积神经网络技术依赖软件实现的问题。

实施例二:

图2为本发明实施例二提供的卷积神经网络实现装置的结构示意图,请参考图2,本实施例提供的卷积神经网络实现装置2,包括:

初始化模块21,用于初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块;运行控制模块用于读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果;

加载模块22,用于加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次,将待处理数据通过fpga的内存控制器存储至内存存储器。

实施例三:

本实施例以输入数据为图片为例为例进行说明。

本实施例将深度学习卷积神经网络模型用硬件实现,实现的平台是snopsys(美国新思科技公司)的haps-dx7(snopsys一种产品的型号)fpga开发板;具体的,首先将训练好的卷积神经网络模型权值参数加载到fpga开发板的ddr(doubledatarate,双倍速率同步动态随机存储器,即上文中的内存存储器)中,然后在预处理模块对输入数据进行预处理,将预处理后的数据传输到fpga开发板的ddr中,然后通过dma(directmemoryaccess,直接内存存取)单元不断提取ddr中当前层网络的权值参数和输入数据,传送给npu(networkprocessunits,神经网络处理单元)进行并行运算,运算完毕的输出数据为下一层的输入,通过输出缓存模块存回ddr中。最后完成所有卷积运算的数据特征向量会传送到分类模块完成特征分类计算。

具体的,如图3所示,本实施例提供的装置包括输入端a、输入端b、预处理单元301、ddr控制器302(即上文中的内存控制器)、ddr存储器303(即上文中的内存存储器)、用于读写权值数据的dma单元304、用于缓存权值数据的缓存单元305、用于缓存输入数据的缓存单元306、用于读写输入数据的dma单元307、用于输入控制的输入控制模块308、npu单元309、用于输出控制的输出控制模块310、用于缓存输出数据的输出缓存模块311、运行控制模块312以及分类计算单元313;其中,缓存单元305和缓存单元306组成上文中的输入缓存模块,运行控制模块312包括指令单元3121、译码器3122以及控制逻辑单元3123,指令单元3121用于接收指令数据,译码器3122用于对指令数据进行译码,控制逻辑单元3123用于根据译码结果,输出对应的控制指令。

ddr控制器302为控制ddr存储器与外部其他模块的连接与数据传输功能,包括输入数据的存储控制,dma读取ddr数据的读取控制,硬件运算完毕的输出数据的存储控制,以及最终输出的特征向量数据的读取控制。

输入缓存模块与输出缓存模块这些缓存模块都采用乒乓双缓存方式。如图5所示,缓存模块包括第一缓存单元51、第二缓存单元52及选择控制单元53,选择控制单元53用于选择将待缓存inputs(进入数据)缓存到哪一个缓存单元,并控制哪个缓存单元输出缓存outputs(输入数据),并输出标识flag(旗)信号,flag为当前输入输出缓存的状态,表示当前两个缓存区的数据状态。具体的,输入缓存包括权值数据缓存和输入数据缓存,其中权值数据缓存采用乒乓双缓存的方式缓存当前层的权值数据、偏差值以及规则化参数,当其一个缓存区的权值数据参与运算时,dma单元304向其另一个缓存区加载数据,这样可降低加载数据的等待时间;对应的,输入数据缓存同样采用乒乓双缓存的方式缓存当前层的输入数据,当其一个缓存区参与运算时,dma单元307向其另一个缓存区加载数据;输出数据缓存采用乒乓双缓存的方式,把npu计算完毕的featuremap数据缓存在其一个缓存区的时候,其另一个已经缓存好数据的缓存区向ddr存储器写入数据。

如图6所示,npu单元309包括p*p个并行的处理单元pe(pe0至pen),用于并行计算卷积过程的乘/加/减操作。一个通道与卷积核计算的中间结果会存在暂存寄存器上,下一个通道与卷积核计算后的结果与中间结果相加后再次存在暂存寄存器中,如此反复计算,直到所有通道与卷积核的计算完毕,再对得到的数据进行bn(batchnormalization,批规则化)操作。

批规则化bn操作涉及的表达式为:

其中,γ为权值,β为修正值,ε是一个为了保证数值稳定性的常量,γ和β及ε这三个参数由云端训练得到。

在进行批规则化bn操作之后,对数据进行激活,leaky(激活函数)表达式为:y=(x>0)?x:0.1*x;即当x大于0时,y=x,当x小于0时,y=0.1x,x为npu单元的输入,y为npu单元的输出。

最后计算结果再通过输出缓存模块把得到的新的featuremap(特征映射)数据存入ddr存储器中。

输入控制模块308和输出控制模块310用于连接两个模块之间数据的传输走向;具体的,输入控制模块308用于把数据缓存区的数据按照npu单元输入数据的接口重新排列数据,正确将数据传送到相应的输入接口,输出控制模块310则是用于将npu的输出数据按照输出缓存区的输入接口重新排列数据,正确将数据传送到相应的输入接口。

运行控制模块312控制整个系统的逻辑状态,通过读取当前状态寄存器,判断当前状态处于计算深度卷积神经网络的哪个层次,从而执行相应的状态下的逻辑控制指令,控制数据的运算。

如图4所示,本实施例提供的方法包括以下步骤:

s401:获取模型的权值数据,并加载到ddr存储器中。

从云端获取练好的深度卷积神经网络的权值数据,将权值数据通过usb加载到fpga开发板ddr存储器中。

具体的,在云端利用gpu(graphicsprocessingunit,图形处理器)加速训练yolo(一种深度学习算法)卷积神经网络,得到训练好的人脸检测模型权值数据,把权值数据通过usb(universalserialbus,通用串行总线)加载到fpga开发板ddr存储器中。

s402:对输入数据进行预处理,并存到ddr存储器中。

本步骤包括:对输入数据进行归一化处理,使其满足计算要求;对输入数据进行双线性插值处理,使其图片尺寸满足计算要求;预处理完毕的输入数据存到ddr存储器中。

具体的,对输入的图片数据进行归一化预处理,将灰度值除以255归一化到0-1之间,采用双线性插值方法将输入图片数据尺寸重排为416*416,满足yolo卷积神经网络的输入图片尺寸要求,然后将输入图片数据存进ddr存储器中。

s403:读取当前状态寄存器,并确定对应的处理层次。

读取当前状态寄存器,判断当前状态处于计算深度卷积神经网络的哪个层次,从而执行相应的状态下的逻辑控制指令,控制数据的运算。定义n个状态寄存器r0,r1,…,r(n-1),rn,每个寄存器存放相应指代当前层的状态数据,表示整个深度卷积神经网络需要运算r0到rn共n层网络,控制逻辑按照顺序读取寄存器,执行相应的层次的逻辑控制功能,控制整个硬件数据的流向,完成深度卷积神经网络的计算。

s404:调用对应的处理层次处理数据。

在当前状态寄存器对应卷积计算时,执行卷积计算操作,此时本步骤包括:加载卷积层权值参数和输入数据进并行卷积处理单元pe,设权值参数为k*k的浮点数(32bit)/定点数(16bit)矩阵,输入数据为a*a的浮点数(32bit)/定点数(16bit)矩阵,滑动步长为1,并行卷积处理单元pe个数为p*p,那么能同时计算p*p个输入数据与权值的卷积和;卷积层计算包括权值与输入数据的乘累加操作、批规则化bn计算操作、加偏置、激活函数leaky激活,计算完一个卷积核与多个输入通道的输入数据之后得到一个featuremap,存入内存再进行下一个卷积核与输入数据的计算,直至完成深度卷积神经网络一层的计算。

在当前状态寄存器为池化操作时,执行最大池化操作,此时本步骤包括:设输入数据为a*a的浮点数/定点数矩阵,滑动步长为s,并行卷积处理单元个数为p*p,则采用最大池化操作,将输入数据划分为(a/s)*(a/s)个池化窗口,每次从(a/s)*(a/s)个池化窗口中按顺序加载对应位置的p*p个输入数据,经过s*s个周期能输出p*p个最大池化后的结果。

在当前状态寄存器为连线操作时,执行连线层操作,连线层操作为将前面计算完毕的某一层或某两层的输出数据作为当前层的输入数据,因此,需要重新加载之前某层的输出数据在ddr存储器中的地址作为当前层输入数据的输入地址,则可完成连线层操作。

在当前状态寄存器为重组层操作时,执行重组层操作,重组层操作为将当前层进行拆分重组,设原来输入数据为2h*2w*2c的数据,步长为2,经过重组层的操作,输出数据为h*w*8c的featuremap,需要增加地址映射单元把原来的地址经过地址映射成为新的地址存储数据,作为下一层的输入数据。

s405:判断网络层计算是否结束,若结束则执行步骤s406,否则返回步骤s403。

在当前状态寄存器为分类层计算时,判定网络层计算结束,执行步骤s406;在当前状态寄存器不为分类层计算时,判定网络层计算没有结束,执行步骤s403。

s406:执行分类层计算操作,并输出结果。

分类层计算为把前面经过各个卷积层、池化层、连线层、重组层等操作之后的计算结果作为本层的输入特征向量,通过分类计算获得检测结果并输出。

本实施例利用硬件fpga实现复杂的深度卷积神经网络,从而把高度依赖云端强大计算能力的深度卷积神经网络模型放到本地终端进行运行,不需要依赖网络进行数据的实时处理,解决大型的复杂的深度卷积神经网络无法在硬件终端进行运行的问题。同时,本发明能够处理结构更复杂、网络层数更多的深度卷积神经网络,而且能够适应当前深度学习算法,能够处理卷积层、池化层、连线层、重组层。相比于以往的方法,本发明的卷积层能够处理批规则化bn操作和激活函数leaky函数,而且增加了连线层、重组层的实现,具有前沿性。

进一步的,本实施例适用于处理浮点数(32bit)或者定点数(16bit)的输入图形数据和权值数据,通过把内部的乘法、加法、减法单元换为浮点数或者定点数运算单元,则能处理不同的数据类型的深度学习算法模型,具有很高的灵活性,而且通过把浮点数数据类型的深度学习算法换为硬件定点数数据类型实现,权值和中间结果数据量减少,而计算精度变化不大。

进一步的,本实施例通过对输入的图片数据或者视频帧数据用预处理模块进行直接处理,然后把处理好的数据输入卷积神经网络进行各层的运算,各个网络层运算完毕后的数据作为分类层的特征向量输入,进行最后的分类检测计算,最后把数据输出,完成对于图片或视频帧中人脸的实时检测,整个过程均在本地fpga硬件实现,无需联网,而且相比于传统的cpu、gpu方案大大降低了功耗,而且能够更灵活地配置以适应当前的深度学习算法。

例如,某yolo卷积神经网络模型有二十二层卷积层,五层最大池化层,两层连线层,一层重组层,一层分类层,加上一层预处理模块,实现输入图片数据的实时运算处理并输出检测结果。输入图片大小经过预处理后变为416*416,卷积核大小有3*3和1*1,池化层步长大小为2*2。使用yolo卷积神经网络在云端利用gpu加速训练人脸检测模型,输入图片数据。

针对最大池化操作,如图7所示,设输入数据为a*a的浮点数/定点数矩阵,滑动步长为s,并行卷积处理单元pe个数为p*p,则采用最大池化操作,将输入数据划分为(a/s)*(a/s)个池化窗口,每次从(a/s)*(a/s)个池化窗口中按顺序加载对应位置的p*p个输入数据,经过s*s个周期能输出p*p个最大池化后的结果,为最大池化操作过程。

如图8所示,运行控制模块的逻辑控制状态包括:

(1)read_reg,状态寄存器逻辑;整个深度卷积神经网络需要运算r0,r1,…,r(n-1),rn共n层网络,所有网络层的状态数据都存在r0到rn的状态寄存器中,通过顺序读取当前状态寄存器的值能够运行整个深度卷积神经网络。

(2)conv,卷积运算控制逻辑;经过数据的准备-idel、数据初始化-init、数据运算-datamode、批规则化bn操作-bn、激活函数-active、数据输出-output的逻辑控制状态,完成卷积运算操作。

(3)pool,最大池化控制逻辑;经过数据准备-idel、数据初始化-init、最大值比较-max、写暂存值-write、数据输出-output的逻辑控制状态,完成最大池化运算操作。

(4)route,连线层控制逻辑;经过地址数据的准备-idel和加载-loadaddr之前某层的输出数据在ddr存储器中的地址作为当前层输入数据的输入地址,完成连线层操作。

(5)reorg,重组层控制逻辑;经过地址数据的准备-idel、地址数据的计算-countaddr、映射-reorganize后将数据重新排列,如图9所示,将2h*2w*2c的输入数据映射为h*w*8c的新数据作为下一层的输入数据。

本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有一个或者多个程序,一个或者多个程序被执行,以实现本发明所有实施例所提供的方法的步骤。

通过以上实施例的实施可知,本发明具备以下有益效果:

本发明提供了一种基于fpga的卷积神经网络实现方法及装置,该方法首先初始化fpga的可编辑资源,生成输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块以及运行控制模块,然后加载待实现卷积神经网络模型中各处理层次的权值数据至fpga的内存存储器,关联fpga的状态寄存器与处理层次,并将待处理数据通过fpga的内存控制器存储至内存存储器,最后运行控制模块读取状态寄存器的参数,确定待运行处理层次,并控制输入缓存模块、输出缓存模块、输入控制模块、输出控制模块、神经网络处理单元、数据读取模块完成待运行处理层次对数据的处理,直至待实现卷积神经网络模型的所有处理层次顺序运行结束,输出待处理数据对应的处理结果;在整个过程中,卷积神经网络是实现都是通过fpga的硬件来实现的,而不再依赖于软件,解决了现有卷积神经网络技术依赖软件实现的问题。

以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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