一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的卷积神经网络图像处理方法及装置与流程

2022-03-09 05:58:53 来源:中国专利 TAG:

一种基于fpga的卷积神经网络图像处理方法及装置
技术领域
1.本发明涉及图像处理技术领域,尤其涉及一种基于fpga的卷积神经网络图像处理方法及装置。


背景技术:

2.cnn(convolutional neural networks,卷积神经网络)是一类包含卷积计算且具有深度结构的前馈神经网络(feedforward neural networks),是深度学习(deep learning)的代表算法之一。在硬件层面上,当前cnn的部署主要是基于cpu、gpu、asic和fpga实现,各类部署均具有各自的优缺点。相对于gpu,fpga虽然灵活性和可迁移性较差、开发难度高,但fpga具有功耗低、速度快的优点,同时还有一定的成本优势,适合在一定批量的前提下的嵌入式终端部署;而相对于asic,fpga与日增长的门资源和内存带宽使得它有更大的设计空间,同时fpga还省去了asic方案中所需要的流片过程,开发周期短,开发成本低。
3.使用fpga进行cnn部署时,需要将cnn网络分解为适合fpga实现的结构,fpga的计算单元分为dsp、乘加器、lut(逻辑查找表),需要将cnn的每个操作按fpga的计算单元1:1映射到对应的操作逻辑,在fpga端再使用片上资源,整合数据搬运操作、数据计算操作所需单元,形成硬件操作层。
4.fpga即为现场可编程门阵列,具有高并行度,低功耗的特点。在fpga上使用cnn实现图像处理时,目前通常是采用32位浮点数或者8位定点数进行卷积运算,且输入的特征图和输出的特征图都是存储在外部存储器(例如ddr),该类方案会存在以下问题:
5.1、在系统性能基本一致的情况下,浮点卷积或定点数卷积需要依赖大量的乘法和加法,因而要在fpga中实现cnn网络量化会存在大量的计算,不能充分利用fpga的强大逻辑运算能力,导致计算量大、cnn实现效率低的问题,因而实际处理效率并不高。
6.2、目前的卷积神经网络有很多层,例如经典的神经网络结构vgg16就有16个卷积层和全连接层,在fpga中将输入的特征图和输出的特征图都存储在外部存储器中时,对于vgg16,计算一帧图像需要从外部存储器读取16次特征图,使得每次读取输入的特征图需要花费大量的时间,同样会降低处理效率。


技术实现要素:

7.本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、处理以及精度效率高且能够实现高帧率与低延迟的基于fpga的卷积神经网络图像处理方法及装置。
8.为解决上述技术问题,本发明提出的技术方案为:
9.一种基于fpga的卷积神经网络图像处理方法,步骤包括:
10.s1.获取卷积层配置文件和权重参数,对卷积神经网络进行初始化;
11.s2.fpga获取待检测目标图像输入至初始化后的卷积神经网络,对输入特征图使
用预先构建的卷积逻辑核实现卷积运算,得到输出特征图,所述卷积逻辑核通过将cnn卷积层分解为多个逻辑运算以及加法运算所转换得到,卷积计算过程中将输入特征图、输出特征图分别存储在片内两组指定的存储空间中。
12.进一步的,所述步骤s2中,在卷积计算过程中,计算一层卷积时,从片内第一组存储空间中读取出输入特征图,卷积结果写入片内第二组存储空间中,计算下一层卷积时,从所述片内第二组存储空间中读取出数据以得到当前输入特征图,将卷积结果写入所述片内第一组存储空间中。
13.进一步的,所述步骤s2中,卷积计算时还包括根据片内所述存储空间的大小将输入特征图划分为多组的步骤。
14.进一步的,所述步骤s2中,将输入特征图输入至初始化后的卷积神经网络后,依次进行卷积计算、激活函数以及池化计算,得到预测结果;对所述预测结果进行后处理,得到目标识别结果,并将识别结果通过软核处理器进行传输,上述输入特征图的输入、卷积神经网络的计算以及后处理各步骤并行执行。
15.进一步的,所述步骤s2中,在fpga中使用多个lut分别实现所述逻辑运算以及加法运算,以实现所述n*n卷积逻辑核,所述n*n卷积逻辑核通过将所述cnn卷积层中量化激活值按照预设量化位数进行按位拆分,分解为多个同或运算与多个加法运算的组合得到。
16.进一步的,所述步骤s1中,使用训练服务器训练卷积神经网络中卷积层配置文件和权重参数,传输给软核处理器,并存储在所述ddr中,fpga从ddr中获取初始化所需的卷积层配置文件和权重参数,fpga输出的识别结果通过ddr传输给所述软核处理器。
17.一种基于fpga的卷积神经网络图像处理装置,包括fpga,所述fpga上配置有:
18.输入模块,用于获取卷积层配置文件和权重参数对卷积神经网络进行初始化,以及获取待检测目标图像;
19.cnn计算模块,用于将待检测目标图像输入至初始化后的卷积神经网络,对输入特征图使用预先构建的n*n卷积逻辑核实现n*n卷积运算,得到输出特征图,所述n*n卷积逻辑核通过将cnn卷积层分解为多个逻辑运算以及加法运算所转换得到;
20.两组片内存储空间,用于分别存储卷积计算过程中输入特征图、输出特征图。
21.进一步的,还包括依次连接的训练服务器、软核处理器以及ddr,所述ddr的另一端与所述fpga连接,所述训练服务器用于训练卷积神经网络中卷积层配置文件和权重参数,传输给所述软核处理器,并存储在所述ddr中,所述cnn计算模块的输出结果通过所述ddr传输给所述软核处理器。
22.进一步的,所述cnn计算模块包括用于实现所述n*n卷积逻辑核的量化卷积核单元,所述量化卷积核单元包括:
23.第一lut单元,包括多个lut,用于计算将ccn卷积层转换为n*n卷积逻辑核中的逻辑运算,所述n*n卷积逻辑核为通过将cnn卷积层分解为逻辑运算与加法运算的组合转换得到;
24.第二lut单元,包括多个lut,用于计算将cnn卷积层转换为n*n卷积逻辑核中的加法运算;
25.加法器单元,用于对所述第一lut单元、第二lut单元输出的数据进行求和,得到最终的结果。
26.进一步的,所述第一lut单元包括9个lut62,所述lut62由2个lut6构成,lut6为fpga最小可编程单元,所述第二lut单元包括1个lut64,所述lut64使用4个lut6构成,所述第一lut单元的输出端还设置有位拼接电路,所述第二lut单元的输出端还设置有末位补0电路,由所述位拼接电路将各所述lut62的各位数据结合在一起,通过末位补0电路将0数据拼接到数据末尾。
27.与现有技术相比,本发明的优点在于:
28.1、本发明通过将cnn卷积层分解为逻辑运算与加法运算,转换成仅包含逻辑运算与加法运算的卷积逻辑核,在fpga中对输入特征图使用该卷积逻辑核实现卷积运算,可以充分发挥fpga的强大逻辑运算能力,同时在卷积计算过程中输入特征图和输出特征图分别存储在片内的两组存储空间中,可以大大减少向外读取输入特征图的次数,有效提高处理效率,实现高帧率与低延迟的图像处理。
29.2、本发明进一步通过将输入特征图分区的方式,使得可以支持由片内存储空间存储输入特征图、输出特征图,且可以适用于各类尺寸、通道数的输入特征图处理,在确保深度学习神经网络识别准确率的前提下,可以便于实现复杂卷积神经网络在fpga上的部署。
30.3、本发明进一步通过输入、输出特征图的int3定点化,权重采用int1定点化,能有效降低fpga资源使用,在较少的资源中完成更多的卷积计算,使得能够在资源有限的情况下部署更多的卷积核,从而有效提高帧率,增强处理的流畅性和实时性。
附图说明
31.图1是本实施例基于fpga的卷积神经网络图像处理方法的实现流程示意图。
32.图2是本实施例基于fpga实现卷积神经网络图像处理的结构原理示意图。
33.图3是本实施例基于cnn实现目标检测的流程示意图。
34.图4是本发明具体应用实施例(3*3卷积)中fpga实现卷积计算的结构原理示意图。
具体实施方式
35.以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
36.cnn的网络模型量化主要包括两个部分,一是针对权重weight量化,一是针对激活值activation量化,将权重和激活值量化到8bit时可以等价32bit的性能。在神经网络中的基本操作就是权重和激活值的卷积、乘加操作,如果将其中一项量化到{-1,1},那么就能够将乘加操作简化为了加减操作,如果两项都量化到{-1,1},乘加操作就简化为了按位操作,通过上述将cnn的量化简化为加减、按位操作,可以使得量化过程便于硬件实现;同时在卷积过程中,输入特征图、输出特征图如果直接使用片内存储器存储,则可以在卷积过程中直接进行输入特征图的读取,而无需频繁的进行读取操作,可以减少大量的读取时间。
37.本发明基于上述考虑,通过将cnn卷积层分解为逻辑运算与加法运算,转换成仅包含逻辑运算与加法运算的卷积逻辑核,在fpga中对输入特征图使用该卷积逻辑核实现卷积运算,由于只需要进行逻辑运算与加法运算,可以充分发挥fpga的强大逻辑运算能力,同时在卷积计算过程中输入特征图和输出特征图分别存储在片内的两组存储空间中,可以大大减少向外读取输入特征图的次数,有效提高处理效率,实现高帧率与低延迟的图像处理。
38.如图1所示,本实施例基于fpga的卷积神经网络图像处理方法的步骤包括:
39.s1.fpga获取卷积层配置文件和权重参数,对卷积神经网络进行初始化;
40.s2.fpga获取待检测目标图像输入至初始化后的卷积神经网络,对输入特征图使用预先构建的卷积逻辑核实现卷积运算,得到输出特征图,卷积逻辑核通过将cnn卷积层分解为多个逻辑运算以及加法运算所转换得到,卷积计算过程中将输入特征图、输出特征图分别存储在片内两组指定的存储空间中。
41.如图2所示,本实施例步骤s1中,具体使用训练服务器训练卷积神经网络中卷积层配置文件和权重参数,传输给软核处理器,并存储在ddr中,fpga从ddr中获取初始化所需的卷积层配置文件和权重参数;由软核处理器对卷积层配置文件和权重参数进行在线更新,当训练得到新的卷积层配置文件和权重参数时,fpga从ddr中获取该新的卷积层配置文件和权重参数进行初始化,如果没有新的卷积层配置文件、权重参数,则使用ddr中存储的历史卷积层配置文件、权重参数。fpga输出的识别结果通过ddr传输给软核处理器,由软核处理器将识别结果发送给外围设备,以进行进一步的决策处理等。上述软核处理器具体可以采用cpu或者fpga软核等。cnn模型、训练参数通过软核处理器可支持远程更新。
42.本实施例步骤s2中,在卷积计算过程中,计算一层卷积时,从片内第一组存储空间中读取出输入特征图,卷积结果写入片内第二组存储空间中,计算下一层卷积时,从片内第二组存储空间中读取出数据以得到当前输入特征图,将卷积结果写入片内第一组存储空间中,则每次卷积计算时仅需要直接从fpga片内存储空间直接读取输入特征图,无需额外从外部存储器进行读取,可以大大减少读取输入特征图的次数,提高卷积计算的效率,在确保深度学习神经网络识别准确率的前提下,可以便于实现复杂卷积神经网络在fpga上的部署。
43.上述片内存储空间具体可采用uram或者block ram等,即预先在片内划分出两组uram/block ram,将输入特征图和输出特征图存储在该片内两组uram/block ram中,当计算第一层卷积时读取第一组uram/block ram得到输入特征图,将卷积结果写入第二组uram/block ram,计算第二层卷积时读取第二组uram/block ram得到输入的特征图,将卷积结果写入第一组uram/block ram中,依次轮询。可以理解的是,片内存储空间的划分以及类型除采用以上方式外,均可以根据实际需求选取。
44.fpga中的内部存储空间(如uram/block ram)资源是有限的,而输入特征图的尺寸可能较大或者通道数较多,难以直接将输入特征图存入fpga的内存空间(uram/block ram)中。本实施例步骤s2中,卷积计算时还包括根据片内存储空间的大小将输入特征图划分为多组的步骤,即采用将输入特征图分区的方式,例如当输入特征图大小为32*512*1024,可以根据uram/block ram的大小,将其分成32*(512/n)*1024的n等份,当n=4时,即为32*128*1024。通过将输入特征图分区的方式,使得可以支持由片内存储空间存储输入特征图、输出特征图,且可以适用于各类尺寸、通道数的输入特征图处理。
45.本实施例步骤s2中,将输入特征图输入至初始化后的卷积神经网络后,依次进行卷积计算、激活函数以及池化计算,得到预测结果;对预测结果进行后处理,得到目标识别结果,并将识别结果通过软核处理器进行传输。如图2、3所示,本实施例应用于进行图像目标识别时,获取待检测图像并进行图像缩放等预处理后,利用卷积神经网络完成特征提取、边界框回归与物体类别预测,由主干cnn网络抽取特征,从而获得边界框位置和类别预测数
据,卷积神经网络中依次进行卷积层、激活层以及池化层进行计算,由全连接层将各通道结果组合得到最终的特征提取结果,基于特征提取结果进行预测,上述计算过程中输入特征图、输出特征图分别存储在片内两组uram/block ram中;然后对卷积神经网络得到预测信息进行后处理,得到目标识别结果,目标识别结果通过ddr传输给cpu/fpga软核处理器,cpu/fpga软核处理器进一步发送给外围设备以进行进一步的决策,进一步还可配置在原图上显示检测结果。
46.卷积神经网络具有前馈型层次化结构,数据在网络层间由前至后地逐层传递,所以不同网络层间存在数据依赖,可开发的并行性很小,而同一卷积层内的标准卷积操作是一个多维运算,可概况为输入特征图间、输入特征图内、卷积窗口内三个层次。本实施例步骤s2中通过将输入特征图的输入、卷积神经网络的计算以及后处理各步骤并行执行,能够进一步提高计算速度,确保处理效率。
47.如图2、3所示,为实现上述方法,本发明具体应用实施例中通过训练服务器、cpu/fpga软核、ddr、fpga、摄像头以及外围设备构建形成一套装置,由训练服务器用来做深度学习训练的服务器,主要用来调参、剪枝、浮点转定点、识别准确率评估;cpu/fpga软核先加载卷积参数、卷积层配置文件,fpga接收来自摄像头的视频流并进行计算,并把最终cnn结果写入ddr,由cpu/fpga软核将最终的识别结果提供给外围设备使用。cpu/fpga软核可以是arm,microblaze等处理器,主要用来更新训练服务器训练完成的新的cnn卷积层配置文件和权重参数,以及将cnn的识别结果发送给外围设备。外围设备为决策设备等,例如在车牌门禁识别中,根据识别结果判断是否为该园区车辆,以决策门禁的动作。d用于实现cpu/fpga软核和fpga之间交互,用来存储卷积层配置文件、权重参数以及识别结果。fpga主要功能为接收摄像头视频流、视频流缩放、卷积计算、激活函数、池化以及后处理。摄像头用来实时采集图形,作为整个系统的输入。
48.在具体应用实施例中,利用上述装置采用本发明上述方法进行图像处理的详细步骤为:
49.步骤1:系统初始化
50.系统上电后,cpu/fpga软核与训练服务器通信,若训练服务器有新训练的权重参数或者卷积层配置文件,将新的权重和卷积层配置文件通过网口传输给cpu/fpga软核,并写入ddr中;若训练服务器没有新训练的权重参数或者卷积层配置文件,则将存储的历史权重参数和卷积层配置文件写入ddr中。
51.步骤2:cnn计算
52.fpga将卷积层配置文件写入bram/uram后,接收来自摄像头的视频流,采用流水的方式执行图形缩放后写入bram/uram;开始执行卷积计算、激活函数以及池化计算后写入bram/uram中;进行后处理计算,并将计算结果写入ddr中。上述步骤均是并行处理,以提高计算速度。
53.步骤3:结果发送
54.由cpu/fpga软核从ddr中读取后处理结果,并将最终的分类结果通过网线传输给外围设备。
55.本实施例步骤s2中,在fpga中使用多个lut分别实现逻辑运算以及加法运算,以实现n*n卷积逻辑核,n*n卷积逻辑核通过将cnn卷积层中量化激活值按照预设量化位数进行
按位拆分,分解为多个同或运算与多个加法运算的组合得到。
56.以n=3,量化位数为3为例,将量化卷积公式转换得到3
×
3卷积逻辑核的过程如下:
[0057][0058]
上式中,w为量化卷积参数,其值为[-1,1],c为输入通道数;w

为转换量化卷积参数,值为[0,1],与w的值互为映射;x为3位量化激活值,其值为[0,1,

,6,7],x2为量化激活值第2位,其值为[0,1];x1为量化激活值第1位,其值为[0,1];x0为量化激活值第0位,其值为[0,1]。
[0059]
上式中,首先将量化激活值x
ij
按位进行拆分表示,即由于w
i,j
的值为[-1,1],的值为[0,1],相乘后会出现3值情况,无法用1位表示,因此将变换为变换后相乘的结果为[-1,1]仍为2值;由于的值为[-1,1],1位无法表示,因此通过公式将进行同等替换,其中

为同或符号,则转换得到3
×
3卷积逻辑核为由于w
i,j
与c均为已知数,即βc为常数项。上述3
×
3卷积逻辑核基于3位量化位分解得到,各部分均只需要一位表示,在fpga中通过ltu(逻辑查找表)与加法器,即可实现上述1bw3ba的3*3卷积核逻辑。
[0060]
为实现上述3
×
3卷积逻辑核f3×3(w
′i,xi),具体可使用多个lut计算),具体可使用多个lut计算其中以及分别为量化激活值的第2、1、0位,w
′1、w
′2、w
′3分别为对应位的转换后量化卷积参数,使用一个ltu实现三个两位数的加法以及使用加法器实现各个分支输出的求和。
[0061]
lut6是fpga最小可编程单元,任意6输入布尔表达式,运算结果是一bit数据。具体应用实施例中,使用lut6实现3bit特征图1bit权重的3乘3卷积过程如图4所示,使用9个lut62(由2个lut6组成)、1个lut64(由4个lut6组成)、若干位操作电路和加法器实现上述3
×
3卷积逻辑核f3×3(w
′i,xi),由lut62实现计算),由lut62实现计算功能,即输入特征图各位与权重参数的逻辑运算,lut64实现三个两位数加法功能,图中a1到a9为9个3bit的输入特征图的最低位,b1到b9为9个3bit的输入特征图的中间位,c1到c9是9个3bit的输入特征图的最高位,w1到w9是输入的9个1bit的权重。lut62是2个lut6,该两个lut的输入完全一样,只是真值表不一样,lut64是4个lut6,位拼接电路设置在各lut62的输出端,用于将各bit数据结合在一起,并不占用lut资源;末位补0电路输出在lut64的输出端,用于将1bit0数据拼接到该数据末尾,也不占用fpga资源,最后将x1,x2,x3,x4四个数加起来得到3乘3卷积的结果。
[0062]
本实施例具体在主体网络采用int3进行卷积计算,首层卷积和分类回归卷积采用int16计算,int3表示的为0,1,2,3,4,5,6,7八个数值,没有小数部分,即对3bit特征图执行1bit权重的3乘3卷积,能够充分利用fpga的特性,仅需要使用37个lut,且不需要占用dsp资源,能够在保证精度的同时有效降低资源使用。若特征图为传统int8的a1到a9,权重为int8的w1到w9,则实现3*3卷积即为a1*w1 a2*w2 ...a9*w9,需要使用9个dsp和65个lut6。本实施例通过输入、输出特征图的int3定点化,权重采用int1定点化,能有效降低fpga资源使用,在较少的资源中完成更多的卷积计算,在资源有限的情况下,可以部署更多的卷积核,有效提高帧率,增强处理的流畅性和实时性。
[0063]
除上述量化为3位以外,当然还可以采用其他的量化位数(量化位数大于等于2),即将一个n位的激活值表示为:xi代表
×
的第i位;然后按照上述量化卷积公式进行同理推导,在不同的量化位数时,可以得出不同的fpga实现方式。如量化位数n=4时,可以得到3
×
3卷积逻辑核f3×3(w
′i,xi)为)为除构造如上述的3
×
3卷积逻辑核外,当然还可以构造其它n
×
n卷积,原理与上述相同。
[0064]
本实施例通过将cnn卷积层按照量化位n,分解为多个逻辑运算与多个加法运算,构造出n
×
n卷积逻辑核,卷积逻辑核中各运算部分均可以使用1位进行表示,使得通过fpga中ltu与加法器即可高效实现n
×
n卷积逻辑核。通过将cnn网络分解为适合fpga实现的结构,可以大幅降低cnn所需的计算量、内存容量和读写带宽。
[0065]
本实施例具体采用verilog语言实现,相比于传统的采用xilinx hls或者altrea的open cl实现,可以有效提高可控性,同时提高资源利用率。
[0066]
本实施例基于fpga的卷积神经网络图像处理装置,包括fpga,fpga上配置有:
[0067]
输入模块,用于获取卷积层配置文件和权重参数对卷积神经网络进行初始化,以及获取待检测目标图像;
[0068]
cnn计算模块,用于将待检测目标图像输入至初始化后的卷积神经网络,对输入特征图使用预先构建的卷积逻辑核实现卷积运算,得到输出特征图,卷积逻辑核通过将cnn卷积层分解为多个逻辑运算以及加法运算所转换得到;
[0069]
两组片内存储空间,用于分别存储卷积计算过程中输入特征图、输出特征图。
[0070]
在具体应用实施例中,上述基于fpga的卷积神经网络图像处理装置如图2所示,两组片内存储空间为fpga内两组bram/uram,输入模块包括图像缩放等预处理单元,cnn计算模块包括卷积、激活函数、池化以及全连接层计算单元,由两组bram/uram存储输入特征图、输出特征图。
[0071]
如图2所示,本实施例卷积神经网络图像处理装置还包括依次连接的训练服务器、软核处理器以及ddr,ddr的另一端与fpga连接,训练服务器用于训练卷积神经网络中卷积层配置文件和权重参数,传输给软核处理器,并存储在ddr中,cnn计算模块的输出结果通过ddr传输给软核处理器。
[0072]
本实施例中,cnn计算模块包括用于实现n*n卷积逻辑核的量化卷积核单元,量化卷积核单元包括:
[0073]
第一lut单元,包括多个lut,用于计算将ccn卷积层转换为n*n卷积逻辑核中的逻辑运算,n*n卷积逻辑核为通过将cnn卷积层分解为逻辑运算与加法运算的组合转换得到;
[0074]
第二lut单元,包括多个lut,用于计算将cnn卷积层转换为n*n卷积逻辑核中的加法运算;
[0075]
加法器单元,用于对各个分支进行求和,得到最终的结果。
[0076]
在具体应用实施例中,上述量化卷积核单元如图4所示,第一lut单元包括9个lut62,lut62由2个lut6构成,lut6为fpga最小可编程单元,第二lut单元包括1个lut64,lut64使用4个lut6构成,第一lut单元的输出端还设置有位拼接电路,第二lut单元的输出端还设置有末位补0电路,由位拼接电路将各所述lut62的各位数据结合在一起,通过末位补0电路将0数据拼接到数据末尾,即使用9个lut62、1个lut64、若干位操作电路和加法器实现上述3
×
3卷积逻辑核f3×3(w
′i,xi),各lut62计算输入特征图各位(a1到a9、b1到b9以及c1到c9)与权重参数(w1到w9)之间的逻辑运算,由位拼接电路将各bit数据结合在一起,末位补0将1bit0数据拼接到该数据末尾,最后将x1,x2,x3,x4四个数加起来得到3乘3卷积的结果。
[0077]
本实施例卷积神经网络图像处理装置与上述例卷积神经网络图像处理方法原理一致,在此不再一一赘述。
[0078]
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献