基于FPGA实现的卷积神经网络以及基于FPGA实现卷积神经网络的实现方法与流程

文档序号:18032911发布日期:2019-06-28 22:53阅读:370来源:国知局
本申请涉及图像处理领域,尤其涉及基于fpga实现的卷积神经网络以及基于fpga实现卷积神经网络的实现方法。
背景技术
::卷积神经网络(convolutionalneuralnetwork,cnn)是一种前馈神经网络,它的人工神经元能够响应覆盖范围内的周围单元,对于大尺寸图像处理有出色表现。它包括卷积层(convolutionallayer)和池化层(poolinglayer)两部分。cnn主要用来识别位移、缩放、倾斜及其他形式扭曲不变的二维图形,具有高度的适应性。近年来,cnn网络向多个方向扩展,在面部识别、语音识别、运动分析等方面均有所突破,尤其在机器视觉、视频监控、人脸面部识别等领域得到越来越广泛的应用。目前,cnn网络的实现方式大致分为五种,基于通用处理器(cpu)、通用计算图形处理器(gpgpu)、asic和现场可编程逻辑器件(fpga)。cnn算法对运算能力的需求很大,cpu执行卷积神经网络的效率并不高,因此,通用计算图形处理器(gpgpu)进入了人们的视野[3]。gpgpu提供了大量的并行运算单元用于图像渲染,常适合用于cnn算法加速。但过大的功耗以及对于pc平台的依赖限制了gpgpu用于cnn加速的场景。随着深度学习应用的井喷,目前已经有一些用于加速神经网络的定制芯片开始商用。tpu(tensorprocessingunit,张量处理器),是谷歌打造的专为机器学习量身定做的处理器,执行每个操作及计算所需的晶体管数相比于gpgpu及fpga更少,同时tpu上集成大量的mac单元和极大的片上存储,因而效率更高,功耗更低,且芯片相对面积更小。但由于tpu是专门用在tensorflow中执行特性功能的asic,因此它只能在tensorflow中执行推理,灵活性差。此外,苹果、海思、寒武纪等公司推出了npu(neural-networkprocessingunit)协处理器,由于npu解决了冯·诺依曼结构中存储和分离式结构的制约,因此大大提高了网络前向传播的效率,同时降低功耗。但npu作为商业协处理器,相对比较封闭,难以被一些嵌入式平台所采用。技术实现要素:本申请提供一种基于fpga实现的卷积神经网络以及基于fpga实现卷积神经网络的实现方法,能够在解决现在实现cnn网络的几种芯片存在效率不高、功耗过大、灵活性查或者无法适用于一些特定的嵌入式平台的问题。根据本申请的第一方面,本申请提供一种基于fpga实现的卷积神经网络,所述卷积神经网络包括:主处理器,其用于配置卷积神经网络、划分任务以及任务调度;axi4互联总线,其包括控制总线和数据总线,控制总线和数据总线均连接主处理器,控制总线使用axi4-lite协议,数据总线使用axi-master协议;片外存储单元,其用于存储输入图像以及输出图像,其与主处理器通过数据总线进行互联;以及cnn运算单元,其受控于主处理器,其与主处理器通过控制总线进行互联,其包括:卷积模块,其用于将接收到的输入图像进行卷积运算,其与主处理器通过控制总线以及数据总线进行互联;池化模块,其用于将卷积模块运算得到的值进行池化运算,其连接卷积模块;激活函数模块,其用于在判断当前的池化单元的运算结果满足预设条件时将池化单元的运算结果按照预设方式进行运算,并将其运算得到的结果输出至片外存储单元中进行存储,其连接池化模块以及片外存储单元;其中,主处理器根据配置信息配置cnn运算单元,主处理器配置卷积模块中卷积核的数量使得其与卷积神经网络的不同层的输入图像和输出图像的数量能够匹配,主处理器控制cnn运算单元读取片外存储单元中的输入图像,cnn运算单元的卷积模块对输入图像依次进行卷积运算,池化模块对卷积模块输出的值进行池化运算,激活函数模块将池化模块输出的值按照预设方式进行运算并将运算得到的图像数据输出到片外存储单元中作为输出图像进行保存。优选地,主控制器配置卷积神经网络可接收的输入图像的数量为n,可形成的输出图像的数量为m,则输入图像依次标记为x1、x2...xn,输出图像依次标记为y1、y2...ym;主控制器配置卷积模块,卷积模块包括:m组卷积子模块,其中,第m组卷积子模块包括:n个第一选择器,其用于根据片选信号输出输入图像的像素值,第一选择器依次标记为a1m、a2m、a3m...anm,其中第一选择器a1m、a2m、a3m...anm分别接收输入图像x1、x2...xn,其中,当片选信号被配置为1时,输出输入图像的像素值,当片选信号被配置为0时,输出的值为0;n个卷积核,其用于对第一选择器输出的像素值进行卷积运算,卷积核依次标记为k1m、k2m、k3m...knm,卷积核k1m连接第一选择器a1m,卷积核k2m连接第一选择器a2m,依此类推,卷积核knm连接第一选择器anm;n个第二选择器,其用于根据片选信号输出卷积核的运算结果,第二选择器依次标记为b1m、b2m、b3m...bnm,第二选择器b1m连接卷积核k1m,第二选择器b2m连接卷积核k2m,依此类推,第二选择器bnm连接卷积核knm,其中,当片选信号被配置为1时,输出卷积核的运算结果,当片选信号被配置为0时,输出的值为0;累加器,其用于将卷积子模块的第二选择器的输出值进行累加运算并输出累加值作为卷积子模块的输出值,其连接第二选择器;其中,每组卷积子模块均连接池化模块,池化模块连接激活函数模块,卷积子模块的输出值经过池化模块的池化运算以及经过激活函数模块按照预设方式运算后输出的数据作为输出图像y1、y2...ym的像素值。优选地,cnn运算单元还包括:第一fifo存储器,其用于在卷积模块从片外存储单元读取输入图像的数据时用于缓存输入图像,其通过数据总线与片外存储单元实现连接;第二fifo存储器,其用于在池化模块以及激活函数模块进行运算时缓存池化模块以及激活函数模块的运算数据,其连接卷积模块、池化模块以及激活函数模块。优选地,卷积子模块基于vivadohls高级综合工具进行设计。优选地,激活函数模块采用函数lrelu,则设定条件为接收到数值小于0,预设方式运算为将小于0的数值与设置值进行乘法运算以及将大于0的数值保持不变的数值进行输出。优选地,输入图像的数量n和输出图像的数量m受fpga资源的约束,则输入图像的数量的最大值nmax和输出图像mmax的数量的最大值根据公式:和即可获得,卷积核的数量的最大值kmax根据公式:kmax=nmax×mmax获得,其中,pw为片外存储单元的带宽,rw为输入图像的像素位宽,sw为输出图像的像素位宽。根据本申请的第二方面,本申请提供一种基于fpga实现的卷积神经网络的实现方法,所述方法包括:设置主处理器,其用于配置卷积神经网络、划分任务以及任务调度;设置axi4互联总线,其包括控制总线和数据总线,控制总线和数据总线均连接主处理器,控制总线使用axi4-lite协议,数据总线使用axi-master协议;设置片外存储单元,其用于存储输入图像以及输出图像,其与主处理器通过数据总线进行互联;以及设置cnn运算单元,其受控于主处理器,其与主处理器通过控制总线进行互联,其包括:设置卷积模块,其用于将接收到的输入图像进行卷积运算,其与主处理器通过控制总线以及数据总线进行互联;设置池化模块,其用于将卷积模块运算得到的值进行池化运算,其连接卷积模块;设置激活函数模块,其用于在判断当前的池化单元的运算结果满足预设条件时将池化单元的运算结果按照预设方式进行运算,并将其运算得到的结果输出至片外存储单元中进行存储,其连接池化模块以及片外存储单元;其中,主处理器根据配置信息配置cnn运算单元,主处理器配置卷积模块中卷积核的数量使得其与卷积神经网络的不同层的输入图像和输出图像的数量能够匹配,主处理器控制cnn运算单元读取片外存储单元中的输入图像,cnn运算单元的卷积模块对输入图像依次进行卷积运算,池化模块对卷积模块输出的值进行池化运算,激活函数模块将池化模块输出的值按照预设方式进行运算并将运算得到的图像数据输出到片外存储单元中作为输出图像进行保存。优选地,在设置cnn运算单元的步骤中,包括:主控制器配置卷积神经网络可接收的输入图像的数量为n,可形成的输出图像的数量为m,则输入图像依次标记为x1、x2...xn,输出图像依次标记为y1、y2...ym;主控制器配置卷积模块,卷积模块包括:m组卷积子模块,其中,第m组卷积子模块包括:n个第一选择器,其用于根据片选信号输出输入图像的像素值,第一选择器依次标记为a1m、a2m、a3m...anm,其中第一选择器a1m、a2m、a3m...anm分别接收输入图像x1、x2...xn,其中,当片选信号被配置为1时,输出输入图像的像素值,当片选信号被配置为0时,输出的值为0;n个卷积核,其用于对第一选择器输出的像素值进行卷积运算,卷积核依次标记为k1m、k2m、k3m...knm,卷积核k1m连接第一选择器a1m,卷积核k2m连接第一选择器a2m,依此类推,卷积核knm连接第一选择器anm;n个第二选择器,其用于根据片选信号输出卷积核的运算结果,第二选择器依次标记为b1m、b2m、b3m...bnm,第二选择器b1m连接卷积核k1m,第二选择器b2m连接卷积核k2m,依此类推,第二选择器bnm连接卷积核knm,其中,当片选信号被配置为1时,输出卷积核的运算结果,当片选信号被配置为0时,输出的值为0;累加器,其用于将卷积子模块的第二选择器的输出值进行累加运算并输出累加值作为卷积子模块的输出值,其连接第二选择器;其中,每组卷积子模块均连接池化模块,池化模块连接激活函数模块,卷积子模块的输出值经过池化模块的池化运算以及经过激活函数模块按照预设方式运算后输出的数据作为输出图像y1、y2...ym的像素值。优选地,在设置cnn运算单元的步骤中,还包括:设置cnn运算单元包括:第一fifo存储器,其用于在卷积模块从片外存储单元读取输入图像的数据时用于缓存输入图像,其通过数据总线与片外存储单元实现连接;第二fifo存储器,其用于在池化模块以及激活函数模块进行运算时缓存池化模块以及激活函数模块的运算数据,其连接卷积模块、池化模块以及激活函数模块。优选地,卷积子模块基于vivadohls高级综合工具进行设计。优选地,在设置激活函数模块的步骤中,包括:设置激活函数模块采用函数lrelu,则设定条件为接收到数值小于0,预设方式运算为将小于0的数值与设置值进行乘法运算以及将大于0的数值保持不变的数值进行输出。优选地,输入图像的数量n和输出图像的数量m受fpga资源的约束,则输入图像的数量的最大值nmax和输出图像mmax的数量的最大值根据公式:和即可获得,卷积核的数量的最大值kmax根据公式:kmax=nmax×mmax获得,其中,pw为片外存储单元的带宽,rw为输入图像的像素位宽,sw为输出图像的像素位宽。本申请的有益效果在于:本申请通过配置cnn运算单元中卷积模块的模板,该卷积模块的模板的卷积核的数量能够与卷积神经网络不同层的输入图像和输出图像的数量能够匹配,使用这个模板可以实现现有常见的神经网络卷积运算,不同的网络即使有不同的网络层数只要复用该模板即可,这样就能够使设计卷积神经网络更为简单方便,并且提升了系统cnn网络运算的运算效率,减少了系统的功耗,也能够适用于不同的嵌入式平台,使得产品适用范围更为广泛。附图说明图1是本申请基于fpga实现的卷积神经网络的原理图;图2是本申请的cnn运算单元的原理图;图3是本申请的卷积子模块采用hls设计后进行性能评估和资源占用评估的示意图;图4是本申请的基于fpga实现的卷积神经网络的工作流程图;图5是本申请的采用不同数量输入图像时cnn运算单元资源利用率的示意图;以及图6是本申请基于fpga实现的卷积神经网络的实现方法的示意图。附图标记说明:主处理器1片外存储单元2cnn运算单元3卷积模块31池化模块32激活函数模块33第一fifo存储器34第二fifo存储器35。具体实施方式下面通过具体实施方式结合附图对本申请作进一步详细说明。本申请的构思是:通过配置cnn运算单元中卷积模块的模板,能够使得设计卷积神经网络更为简单方便,并且提升了系统cnn网络运算的运算效率,也能够适用于不同的嵌入式平台。请参阅图1至图6,本申请提出一种基于fpga实现的卷积神经网络,其包括:主处理器1、axi4互联总线、片外存储单元2以及cnn运算单元3。请继续参阅图1,主处理器1,其用于配置卷积神经网络、划分任务以及任务调度;axi4互联总线,其包括控制总线和数据总线,控制总线和数据总线均连接主处理器1,控制总线使用axi4-lite协议,数据总线使用axi-master协议;片外存储单元2,其用于存储输入图像以及输出图像,其与主处理器1通过数据总线进行互联;以及cnn运算单元3,其受控于主处理器1,其与主处理器1通过控制总线进行互联,其包括:卷积模块31,其用于将接收到的输入图像进行卷积运算,其与主处理器1通过控制总线以及数据总线进行互联;池化模块32,其用于将卷积模块31运算得到的值进行池化运算,其连接卷积模块31;激活函数模块33,其用于在判断当前的池化单元的运算结果满足预设条件时将池化单元的运算结果按照预设方式进行运算,并将其运算得到的结果输出至片外存储单元2中进行存储,其连接池化模块32以及片外存储单元2;其中,主处理器1根据配置信息配置cnn运算单元3,主处理器1配置卷积模块31中卷积核的数量使得其与卷积神经网络的不同层的输入图像和输出图像的数量能够匹配,主处理器1控制cnn运算单元3读取片外存储单元2中的输入图像,cnn运算单元3的卷积模块31对输入图像依次进行卷积运算,池化模块32对卷积模块31输出的值进行池化运算,激活函数模块33将池化模块32输出的值按照预设方式进行运算并将运算得到的图像数据输出到片外存储单元2中作为输出图像进行保存。本实施例中,主处理器1负责划分任务、任务调度与性能评估等工作。主处理器1采用已经开源的xilinx公司提供的microblaze处理器作为系统的主处理器1。本实施例中,主处理器1根据配置信息配置cnn运算单元3,配置信息包括:卷积子模块中卷积核参与卷积运算的数量、第一选择器和第二选择器的数量、卷积核的权重、工作模式、使用激活函数模块33的预设条件以及激活函数模块33运算时使用的函数。请参阅图2,主控制器配置卷积模块31,卷积模块31包括:m组卷积子模块,其中,第m组卷积子模块包括:n个第一选择器,其用于根据片选信号输出输入图像的像素值,第一选择器依次标记为a1m、a2m、a3m...anm,其中第一选择器a1m、a2m、a3m...anm分别接收输入图像x1、x2...xn,其中,当片选信号被配置为1时,输出输入图像的像素值,当片选信号被配置为0时,输出的值为0;n个卷积核,其用于对第一选择器输出的像素值进行卷积运算,卷积核依次标记为k1m、k2m、k3m...knm,卷积核k1m连接第一选择器a1m,卷积核k2m连接第一选择器a2m,依此类推,卷积核knm连接第一选择器anm;n个第二选择器,其用于根据片选信号输出卷积核的运算结果,第二选择器依次标记为b1m、b2m、b3m...bnm,第二选择器b1m连接卷积核k1m,第二选择器b2m连接卷积核k2m,依此类推,第二选择器bnm连接卷积核knm,其中,当片选信号被配置为1时,输出卷积核的运算结果,当片选信号被配置为0时,输出的值为0;累加器,其用于将卷积子模块的第二选择器的输出值进行累加运算并输出累加值作为卷积子模块的输出值,其连接第二选择器;其中,每组卷积子模块均连接池化模块32,池化模块32连接激活函数模块33,卷积子模块的输出值经过池化模块32的池化运算以及经过激活函数模块33按照预设方式运算后输出的数据作为输出图像y1、y2...ym的像素值。本实施例中,第一选择器和第二选择器均为三输入选择器,其中,第一选择器包括接收输入图像的像素值的第一输入端口、接收片选信号“0”值的第二输入端口、接收片选信号“1”值时的第三输入端口和输出端口,当第二输入端口接收到片选信号“1”值时,第一选择器的输出端口输出输入图像的像素值,当第二输入端口接收到片选信号“0”值时,第一选择器的输出端口输出的值为0;第二选择器包括接收卷积核的运算结果的第一输入端口、接收片选信号“0”值的第二输入端口、接收片选信号“1”值时的第三输入端口和输出端口,当第二输入端口接收到片选信号“1”值时,第一选择器的输出端口输出卷积核的运算结果,当第二输入端口接收到片选信号“0”值时,第一选择器的输出端口输出的值为0。举例如下:请参阅图2,假设输入图片的数量有三张x1、x2、x3,输出图片的数量有一张y1,则需要选通x1、x2、x3及y1,此时第一选择器a11、a21、a31和第二选择器b11、b21、b31需要将片选信号配置为1,亦既是第一选择器a11、a21、a31和第二选择器b11、b21、b31的第三输入端口均接收片选信号“1”值,其它选择器的片选信号配置为0。这样置为1的选择器输出输入图像像素通过,片选信号置为0的选择器输出一个0值,亦既是,第一选择器a11和第二选择器b11输出输入图像x1的像素值,第一选择器a21和第二选择器b21输出输入图像x2的像素值,第一选择器a31和第二选择器b31输出输入图像x3的像素值。假设输入图像的数量有三张x1、x2、x3,输出图像的数量有两张y1、y2时,则需要选通x1、x2、x3、y1、y2,此时,第一选择器a11、a21、a31、a12、a22、a32、a13、a23、a33需要将片选信号配置为1,第二选择器b11、b21、b31、b12,b22、b32需要将片选信号配置为1,亦既是第一选择器a11、a21、a31、a12、a22、a32、a13、a23、a33和第二选择器b11、b21、b31、b12,b22、b32的第三输入端口均接收到片选信号“1”值。假设输入图像的数量有五张x1、x2、x3、x4、x5,输出图像的数量有两张y1、y2时,第一选择器a11、a21、a31、a41、a51、a12、a22、a32、a42、a52需要将片选信号配置为1,第二选择器b11、b21、b31、b41、b51、b12、b22、b32、b42、b52需要将片选信号配置为1,亦既是第一选择器a11、a21、a31、a12、a22、a32、a13、a23、a33和第二选择器b11、b21、b31、b12,b22、b32的第三输入端口均接收到片选信号“1”值。可以看到,本申请的卷积模块31采用的并行的卷积神经网络模板,输入图像表示为x1...xn,输出图像表示y1...ym,卷积核基本计算单元表示为k11,k21...kn1,k1m,k2m...knm。本实施例中,为充分开发卷积神经网络的并行性及充分利用fpga的可配置性与逻辑资源,输入图像的数量n和输出图像的数量m受fpga资源的约束,则输入图像的数量的最大值nmax和输出图像的数量的最大值mmax,根据公式:和即可获得,其中,pw为片外存储单元2的带宽,rw为输入图像的像素位宽,sw为输出图像的像素位宽。而卷积核的数量的最大值kmax根据公式:kmax=nmax×mmax获得。比如,如果片外存储单元2的带宽pw=256bit,输入图像的像素位宽rw=32bit,输出图像的像素位宽sw=32bit时,则输入图像的数量的最大值nmax和输出图像mmax的数量:nmax=mmax=8。可接收的输入图像的数量为n≤输入图像的数量的最大值nmax,可接收的输入图像的数量为m≤输出图像的数量的最大值mmax。为保证计算效率,取n=m=6,则此时卷积核的数量为36。亦既是说,当片外存储单元2的带宽pw=256bit,输入图像的像素位宽rw=32bit,输出图像的像素位宽sw=32bit时,为了保证计算的效率,可以控制输入图像和输出图像的数量均为6,配置卷积核的数量为36。因此,本实施例中,当片外存储单元2的带宽pw=256bit,输入图像的像素位宽rw=32bit,输出图像的像素位宽sw=32bit时,输入图像可标记为x1、x2、x3、x4、x5、x6,输出图像可标记为y1、y2、y3、y4、y5、y6,卷积核可标记为k11、k21、k31...k61,k12、k22、k32...k62,...k16、k26、k36...k66。第一选择器标记为a11、a21...a61,a12、a22、a32...a62,...a16、a26、a36...a66,第二选择器标记为b11、b21...b61,b12、b22、b32...b62,...b16、b26、b36...b66。通过配置卷积核的数量能够与卷积神经网络不同层的输入图像和输出图像的数量能够匹配。使用这个模板可以实现现有常见的神经网络卷积运算,不同的网络有不同的网络层数,每层有不同的卷积核数量,只要复用该模板即可。本实施例中,卷积子模块基于vivadohls高级综合工具进行设计。使用hls工具可以从粗优化、精优化、总线化3个方面对设计进行优化,实现算法从串行运算到并行运算的转换,从而提高对数据的处理速度,优化完成后,对卷积算法再进行综合。请参阅图3,图3为卷积子模块采用hls设计后进行性能评估和资源占用评估的示意图,可以看到s_default为未优化时的延迟时间,s_axi为优化后的延迟时间,优化后的延迟时间(latency)是远小于未优化的延迟时间的。因此,使用vivadohls高级综合工具来实现卷积ip核优势在于便于优化,同时大大减少工作量,缩短fpga开发周期。进一步地,请继续参阅图1,cnn运算单元3还包括:第一fifo存储器34,其用于在卷积模块31从片外存储单元2读取输入图像的数据时用于缓存输入图像,其通过数据总线与片外存储单元2实现连接;第二fifo存储器35,其用于在池化模块32以及激活函数模块33进行运算时缓存池化模块32以及激活函数模块33的运算数据,其连接卷积模块31、池化模块32以及激活函数模块33。本实施例中,池化模块32的池化运算是计算输入图像中的一个区域某个特定特征的最大值,这样就能够降低图像分辨率。本实施例中,激活函数模块33采用函数lrelu,则设定条件为接收到数值小于0,预设方式运算为将小于0的数值与设置值进行乘法运算以及将大于0的数值保持不变的数值进行输出。亦既是说,当激活函数模块33的函数检测到输入图像的像素值大于0时,输出保持不变,否则输出为到输入图像的像素值与设定值进行相乘的积作为所述激活函数模块33的输出,其中,设定值=0.2。进一步地,根据工作模式的不同,主处理器1配置是否激活函数模块33进行运算。本实施例中,片外存储单元2为ddr存储器。该ddr存储器通过ddrinterfacecontroller与axi连接。下面结合图1至图5来对本申请的基于fpga实现的卷积神经网络的工作原理进行说明。首先,主处理器1读入配置信息,该配置信息包括卷积子模块中卷积核参与卷积运算的数量、第一选择器和第二选择器的数量、卷积核的权重、工作模式、使用激活函数模块33的预设条件以及激活函数模块33运算时使用的函数。主处理器1根据配置信息配置卷积子模块中卷积核的数量、第一选择器和第二选择器的数量以形成用于进行卷积运算的cnn运算单元3。其中,当输入图像的数量为n,输出图像的数量为m时,卷积核的数量为n*m,主处理器1根据输入图像和输出图像的数量配置第一选择器和第二选择器的片选信号。接着,主处理器1从ddr存储器中读取输入图像的像素值,将读取到的像素值存入至第一fifo存储器34中进行缓存。主处理器1控制卷cnn运算单元3读取第一fifo存储器34中的输入图像的像素值和存放在bram中的卷积核的权值,cnn运算单元3进行卷积运算。累加器将不同卷积子模块的运算结果进行乘累加,并判断累加是否结束,若累加结束,则池化模块32将累加的值输出值进行池化运算。接着主处理器1根据当前的工作模式的配置判断是否需要使用激活函数模块33,如果当前的工作模式workmode为1时,则使用激活函数模块33,激活函数模块33采用函数lrelu,则设定条件为接收到数值小于0,预设方式运算为将小于0的数值与设置值进行乘法运算以及将大于0的数值保持不变的数值进行输出,最后将激活函数模块33运算得到的数据写第二fifo存储器35中,第二fifo存储器35再输出至片外存储器ddr中,如果当前的工作模式workmode为0时,直接将池化模块32运算得到的数据写回到ddr中。下面对本申请的卷积神经网络性配置实验环境来进行仿真验证。实验环境是:使用xilinx公司的vivado与hls工具进行硬件开发,fpga使用xc7z010系列,摄像头采用cmos镜头。采用数字识别库采用mnist数据集进行测试,测试集仅采用50幅图像,每幅图像的像素大小为28×28的灰度图像,灰度值由0~255表示。用cpu平台与fpga平台做对比,cnn模型与在fpga平台下完全一致。cpu采用intelcorei7-5500,基准主频为2.4ghz。首先,对cnn基本运算单元仿真,其中,输入图像的大小为40×40时,vivado完成布局布线后,cnn网络基本单元的资源利用情况如表1所示。通过表1可以看到dsp(digitalsignalprocessing,数字信号处理)、ff(flipflop,触发器)、lut(look-up-table,查找表)的使用情况。资源dspfflut使用资源3639794093表1cnn单元资源利用表2展示了本申请的基本运算单元与其他文献设计的基本运算单元在fpga中的资源利用情况对比。文献[1]和文献[2]均采用手写数字字符识别网络,该网络包括两个卷积层,与本申请相同,采用平均池化进行子抽样,输入图像的大小均为28×28。其中,文献1是“acnnacceleratorwithflexiblebufferingtominimizeoff-chiptransfer”,文献2是“方睿,刘加贺,薛志辉,&杨广文.(2015).卷积神经网络的fpga并行加速方案设计”,等效的一个基本运算单元为含有一个卷积核的卷积单元。表2基本运算单元在fpga中资源使用情况从表2中可以看出,cnn网络每个基本运算单元,本申请的设计资源占用的更少,即能支持更多的卷积核统时计算。这是因为本申请的卷积模块31使用hls中设计,能够更好的进行资源优化,因此本申请设计的运算单元资源占用更少。请参阅图5,图5是不同数量输入图像的资源利用率,图5表示随输入图像数量增加,fpga资源利用情况。横轴表示输入图像数量,纵轴表示资源利用率。可以看到随着输入图像数量的增多,dsp、ff、lut的资源利用率是越来越高的。然后,对cnn网络进行测试。200mhz工作频率下fpga前向传播的计算速度如表3所示。对单幅输入图像识别速率,忽略图像的传输时间,仅统计原生的计算速度。在fpga中仅需0.177ms,而在通用处理器中单次运算的耗时为1.13ms,fpga加速了6倍以上。使用mnist测试集进行批量测量,将输入图像大小修改为28×28,每个像素的取值在0~255的整数范围内,对该数据进行了初始化,使得输入网络的数值范围变为[-1,1],网络结构如表4所示。fpga处理50幅图像的总时间为7.396ms,平均时间为0.148ms;而在cpu中耗时45.81ms,平均时间为0.916ms,加速比为6.2。数量fpgacpu加速比平均时间10.148ms0.916ms6.18总时间507.396ms45.81ms6.2表3计算速度对比表4网络结构通过xilinx的xpower工具,得到fpga的运行功耗大致为1.258w;通用cpu功耗为48w,相比之下,fpga功耗为通用cpu的2.62%。可以得出结论:本申请提出可配置的cnn网络加速器,设计了一个可以被soc集成的轻量级cnn加速单元以降低系统的功耗,具有通用性。通过流水线结构和对卷积子模块的基本优化,提升了卷积运算的并行度及运算效率,在单个时钟周期内可以完成25次乘累加运算。实验结果表明,本申请的设计有效的提高了运算速度,并减少功耗。请参阅图6,本申请还提供一种基于fpga实现的卷积神经网络的实现方法,该方法包括:步骤s601:设置主处理器,其用于配置卷积神经网络、划分任务以及任务调度;步骤s602:设置axi4互联总线,其包括控制总线和数据总线,控制总线和数据总线均连接主处理器,控制总线使用axi4-lite协议,数据总线使用axi-master协议;设置片外存储单元,其用于存储输入图像以及输出图像,其与主处理器通过数据总线进行互联;步骤s603:设置cnn运算单元,其受控于主处理器,其与主处理器通过控制总线进行互联,其包括:设置卷积模块,其用于将接收到的输入图像进行卷积运算,其与主处理器通过控制总线以及数据总线进行互联;设置池化模块,其用于将卷积模块运算得到的值进行池化运算,其连接卷积模块;设置激活函数模块,其用于在判断当前的池化单元的运算结果满足预设条件时将池化单元的运算结果按照预设方式进行运算,并将其运算得到的结果输出至片外存储单元中进行存储,其连接池化模块以及片外存储单元;其中,主处理器根据配置信息配置cnn运算单元,主处理器控制cnn运算单元读取片外存储单元中的输入图像,cnn运算单元的卷积模块对输入图像依次进行卷积运算,池化模块对卷积模块输出的值进行池化运算,激活函数模块将池化模块输出的值按照预设方式进行运算并将运算得到的图像数据输出到片外存储单元中作为输出图像进行保存。在步骤s603中,包括:主控制器配置卷积神经网络可接收的输入图像的数量为n,可形成的输出图像的数量为m,则输入图像依次标记为x1、x2...xn,输出图像依次标记为y1、y2...ym;主控制器配置卷积模块,卷积模块包括:m组卷积子模块,其中,第m组卷积子模块包括:n个第一选择器,其用于根据片选信号输出输入图像的像素值,第一选择器依次标记为a1m、a2m、a3m...anm,其中第一选择器a1m、a2m、a3m...anm分别接收输入图像x1、x2...xn,其中,当片选信号被配置为1时,输出输入图像的像素值,当片选信号被配置为0时,输出的值为0;n个卷积核,其用于对第一选择器输出的像素值进行卷积运算,卷积核依次标记为k1m、k2m、k3m...knm,卷积核k1m连接第一选择器a1m,卷积核k2m连接第一选择器a2m,依此类推,卷积核knm连接第一选择器anm;n个第二选择器,其用于根据片选信号输出卷积核的运算结果,第二选择器依次标记为b1m、b2m、b3m...bnm,第二选择器b1m连接卷积核k1m,第二选择器b2m连接卷积核k2m,依此类推,第二选择器bnm连接卷积核knm,其中,当片选信号被配置为1时,输出卷积核的运算结果,当片选信号被配置为0时,输出的值为0;累加器,其用于将卷积子模块的第二选择器的输出值进行累加运算并输出累加值作为卷积子模块的输出值,其连接第二选择器;其中,每组卷积子模块均连接池化模块,池化模块连接激活函数模块,卷积子模块的输出值经过池化模块的池化运算以及经过激活函数模块按照预设方式运算后输出的数据作为输出图像y1、y2...ym的像素值。在步骤s603中,还包括:设置cnn运算单元包括:第一fifo存储器,其用于在卷积模块从片外存储单元读取输入图像的数据时用于缓存输入图像,其通过数据总线与片外存储单元实现连接;第二fifo存储器,其用于在池化模块以及激活函数模块进行运算时缓存池化模块以及激活函数模块的运算数据,其连接卷积模块、池化模块以及激活函数模块。本实施例中,卷积子模块基于vivadohls高级综合工具进行设计。在设置激活函数模块的步骤中,包括:设置激活函数模块采用函数lrelu,则设定条件为接收到数值小于0,预设方式运算为将小于0的数值与设置值进行乘法运算以及将大于0的数值保持不变的数值进行输出。输入图像的数量n和输出图像的数量m受fpga资源的约束,则输入图像的数量的最大值nmax和输出图像mmax的数量的最大值根据公式:和即可获得,卷积核的数量的最大值kmax根据公式:kmax=nmax×mmax获得,其中,pw为片外存储单元的带宽,rw为输入图像的像素位宽,sw为输出图像的像素位宽。本申请的有益效果在于:本申请通过配置cnn运算单元中卷积模块的模板,该卷积模块的模板的卷积核的数量能够与卷积神经网络不同层的输入图像和输出图像的数量能够匹配,使用这个模板可以实现现有常见的神经网络卷积运算,不同的网络即使有不同的网络层数只要复用该模板即可,这样就能够使设计卷积神经网络更为简单方便,并且提升了系统cnn网络运算的运算效率,并且减少了系统的功耗,也能够适用于不同的嵌入式平台,使得产品适用范围更为广泛。本领域技术人员可以理解,上述实施方式中各种方法的全部或部分步骤可以通过程序来指令相关硬件完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存取存储器、磁盘或光盘等。以上内容是结合具体的实施方式对本申请所作的进一步详细说明,不能认定本申请的具体实施只局限于这些说明。对于本申请所属
技术领域
:的普通技术人员来说,在不脱离本申请发明构思的前提下,还可以做出若干简单推演或替换。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1