一种基于资源复用的卷积神经网络FPGA加速器实现方法
未命名
08-05
阅读:93
评论:0
一种基于资源复用的卷积神经网络fpga加速器实现方法
技术领域
1.本发明属于神经网络应用领域,具体涉及一种基于资源复用的卷积神经网络fpga加速器实现方法。
背景技术:
2.近几年人工智能迅猛发展,卷积神经网络作为人工智能中最有代表性的网络结构,被广泛关注。卷积神经网络中一般包括有依次连接的输入层、卷积层、池化层、全连接层以及输出层。输入层里面存储卷积神经网络的输入数据,输入数据首先进入卷积层,卷积层的特点是局部连接与权值共享,主要作用是对前一层输入进来的数据进行特征提取;经过卷积层之后会进入池化层,池化层一般分为最大池化和平均池化,主要用来减少数据量并对局部信息进行融合。卷积层与池化层中间一般还会加入激活函数。激活函数的主要作用是使数据整体表现出非线性。输入的数据经过以上所有层之后,会到达全连接层,全连接层会将数据进行分类,分类后的数据进入到输出层得到最终的输出结果。经过训练后的卷积神经网络对于各种维度的数据都有着很好的检测结果,因此被广泛的应用于机器视觉、语音识别、图像处理以及自然语言处理等领域。
3.目前fpga是卷积神经网络的主要设计平台。在fpga平台上,对卷积神经网络进行加速器设计的方法一般为高度并行计算,这种方法能够最大限度地利用fpga的并行特性,对卷积神经网络的输入数据进行最快的处理,但是高度并行计算会占用大量的计算资源。一般性能较好的卷积神经网络都是大规模神经网络,其网络层数较多,整体参数量较大,对于一些计算资源有限的fpga平台,这种高度并行计算难以满足,从而难以完成大规模神经网络的加速器设计。
技术实现要素:
4.为了解决背景技术中存在的问题,本发明提供一种基于资源复用的卷积神经网络fpga加速器实现方法,通过对多通道卷积层中参数进行组合型并行设计,对整体参数量较小的卷积层中参数全并行设计和对全连接层中参数进行复用设计,减少了大量资源的占用,同时完成了对激活函数、中间数据存储和池化层的设计,在兼顾了数据处理速度的同时,解决了在fpga计算资源有限的情况下,不能完成大规模神经网络的加速器设计问题,包括:
5.将原始输入数据按通道划分为多个二维数据,并将每个二维数据按行展开为一维数据存储在fpga片上存储器;
6.将输入通道大于x或参数量大于y的卷积层作为第一类卷积层,并采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积;完成卷积运算后通过m个寄存器移位操作完成所有通道的数据存储;
7.将输入通道小于x或总参数量小于y的卷积层作为第二类卷积层,并采取全并行的方式对输入数据进行卷积;
8.将全连接层每个输出神经元对应的权重参数存储在fpga片上存储器,全连接层的偏置参数以固定值的形式存储在fpga片上,通过资源复用方法对输入数据进行全连接操作;
9.将第一类卷积层每个通道的权重参数设计为相同的数据位宽,按通道依次将卷积核内的权重参数存储在fpga片上存储器,存储深度为m,m表示卷积层通道数;将第二类卷积层的权重参数和偏置参数以固定值的形式存储在fpga片上;
10.通过组合逻辑判断最高位的方式设计relu激活函数对输入数据进行逻辑判断,当输入数据的最高位为0时,则对应的输出数据不变;当输入数据的最高位为1时,则对应的输出数据清零;
11.通过直接比较的方式设计最大池化层,池化层将每个通道内的输入数据直接进行比较得到输出数据。
12.优选地,所述采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积包括:输入通道间并行表示为同一时刻提取同一位置b个通道的输入数据;卷积核内并行表示为在同一时刻提取单个卷积核的所有参数;通道内卷积核间并行表示为同一时刻提取单个通道内所有卷积核同一位置的参数;依次读取卷积层单个通道内所有卷积核的参数,将单个通道所有卷积核的参数与所有通道的输入数据进行对应的卷积运算,其中卷积运算为输入数据与权重参数相乘,再加上偏置参数,b表示输入数据的通道数。
13.优选地,所述通过存储器移位操作完成所有通道的数据存储包括:组合型并行卷积层每个时钟输出一个通道的结果,将每个时钟输出的结果通过m个寄存器进行移位操作,m个时钟之后m个寄存器包含所有通道的输出结果,将所有通道的输出结果并行输入进relu激活函数,同时清空m个寄存器,并重复执行移位操作。
14.优选地,所述采取全并行的方式对输入数据进行卷积包括:全并行表示为同一时刻提取b个通道的所有输入数据;将b个通道的所有输入数据与fpga片上存储的权重参数和偏置参数进行相应卷积运算,并将所有通道的输出结果并行输入进relu激活函数,b表示输入数据的通道数。
15.优选地,所述通过资源复用方法对输入数据进行全连接操作包括:依次取单个输出神经元对应的权重参数分别与全连接层输入神经元的输入数据相乘再与fpga片上存储的该输出神经元对应的偏置参数进行相加,重复b次之后完成全连接操作,b表示输出神经元的数量。
16.本发明至少具有以下有益效果
17.本发明通过对多通道卷积层中参数进行组合型并行设计,对整体参数量较小的卷积层中参数全并行设计和对全连接层中参数进行复用设计,减少了大量计算资源的占用,同时完成激活函数、中间数据存储和池化层的设计,在兼顾了数据处理速度的同时,解决了在fpga计算资源有限的情况下,不能完成大规模神经网络的加速器设计问题,与现有技术相比,本发明适用范围更广,计算资源有限的fpga上也可以完成大规模卷积神经网络进行加速器的设计。
附图说明
18.图1为本发明的方法流程框架示意图;
19.图2为本发明原始数据的存储示意图;
20.图3为采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积示意图;
21.图4为采取全并行的方式对输入数据进行卷积示意意图;
22.图5为全连接层示意图。
具体实施方式
23.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
24.其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
25.本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
26.请参阅图1,卷积神经网络包括:依次连接的输入层用于输入数据;全并行卷积层用于对输入的数据进行卷积操作;激活函数;池化层;组合型并行卷积层用于对输入的数据进行卷积操作;
……
全连接层用于对输入的数据进行全连接操作;输出层用于输出结果。
27.本发明提供的一种基于资源复用的卷积神经网络fpga加速器实现方法,包括:
28.将原始输入数据按通道划分为多个二维数据,并将每个二维数据按行展开为一维数据存储在fpga片上存储器;
29.请参阅图2,实施例,所述卷积神经网络输入数据为二维图像数据,其包含b个通道的图像数据;例如当输入图像为rgb格式的时候,b为3,下面以图1为例进行说明,图中8个数据为图像的一行,将每个通道的图像按行存储在fpga片上存储器;
30.请参阅图3,将输入通道大于x或参数量大于y的卷积层作为组合型并行卷积层,并采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积;完成卷积运算后通过m个寄存器移位操作完成所有通道的数据存储;x和y是本领域技术随机设置,具体的值可根据实现效果进行设置。
31.所述采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数
据进行卷积包括:输入通道间并行表示为同一时刻提取同一位置b个通道的输入数据;卷积核内并行表示为在同一时刻提取单个卷积核的所有参数;通道内卷积核间并行表示为同一时刻提取单个通道内所有卷积核同一位置的参数;依次读取卷积层单个通道内所有卷积核的参数,将单个通道所有卷积核的参数与所有通道的输入数据进行对应的卷积运算,其中卷积运算为输入数据与权重参数相乘,再加上偏置参数,b表示输入数据的通道数。
32.优选地,所述同一时刻提取同一位置b个通道的输入数据包括:
33.将单个通道图像的每一行数据输入第一个fifo中,当第一个fifo 1填满后,数据移位到第二个fifo中;当第二个fifo填满后,数据移位第三个fifo3中以此类推;当所有fifo都填满后,同时输所有fifo的数据,每个时钟并行输出所有fifo的数据,fifo的数据输出与数据移位同时进行,所有fifo的c个数据全部输出后,有a-1个时钟的数据是无效的,将通过逻辑判断将这些数据舍弃,重复操作多次之后即可读取图像单个通道的全部数据;a表示fifo的数量,b个通道的图像数据均采用上述操作即可得到b个通道的输入数据,c表示单个通道图像的每一行数据量;
34.实施例,对于卷积核大小为q的组合型并行卷积层,采取输入通道间并行、卷积核内并行和通道内卷积核间的方式对输入数据进行卷积;
35.请参阅图3,fifo同时获取三个通道的输入数据,将输入数据1、输入数据2、输入数3和第一个通道所有卷积核的参数进行卷积得到输出数据1,和第二个通道所有卷积核的参数进行卷积得到输出数据2,同理得到输出数据3,得到m=3个通道的输出数据,m表示卷积层的通道数。
36.在fpga上进行设计时,具体的执行方式如下:卷积层m
×
n个权重参数设计为相同位宽,并存储到fpga片上存储器中,每一位存储该卷积层一个通道的数据,存储深度为m,偏置参数以固定值的形式定义进卷积层之中,多通道输入数据并行输入进卷积层中,当每个通道的输入数据总数为q时,停下数据输入,并且同时通过这种组合型的并行方式从存储器中对该层参数进行读取,每个时钟读取一位数据,即一个通道的所有权重参数,将其按每个权重参数的位宽分为n个,并行输入进该多层卷积层之中,与并行输入进该层的q个输入数据进行对应卷积运算,这样重复读取m次,即可完成一个通道内所有卷积的运算,得到该层一个通道的第一个输出结果;其中,卷积运算公式如下:
37.h(x,y)=f(x,y)*g(m,n)=∑
m,n
f(x+m,y+n)
×
g(m,n)
38.其中,h(x,y)表示第x行y列卷积后的结果,f(x,y)表示输入图像的第x行y列,g表示卷积核大小,m和n为长宽维度下的索引值。
39.得到所有通道的第一个输出结果后,将输入数据第q个数据输入卷积层,并把第一个移出,保持卷积层内输入数据量为q,重复上述从存储器读取参数的操作,经过m个时钟之后,即可得到所有通道的第二个输出结果,以上操作每次读取的参数量和数据位宽都相同,因此可以重复使用同一块计算单元。如果进行全并行设计,该层卷积层需要m
×
n个乘法计算单元,相比之下,组合型并行只需要用到n个乘法计算单元,大大减少了计算单元的使用。
40.优选地,所述通过存储器移位操作完成所有通道的数据存储包括:组合型并行卷积层每个时钟输出一个通道的结果,将每个时钟输出的结果通过m个寄存器进行移位操作,m个时钟之后m个寄存器包含所有通道的输出结果,将所有通道的输出结果并行输入进relu激活函数,同时清空m个寄存器,并重复执行移位操作;
41.经过组合型并行卷积层输出的卷积数据每次只输出一个通道的结果,m个时钟之后输出所有通道结果,本发明设计了m个寄存器存储这些结果。m个寄存器之间进行移位操作,m个时钟之后所有寄存器包含所有通道第一个输出结果,然后并行输入进relu激活函数,同时清空m个寄存器,等待下一次结果的到来。重复上述操作,直到得到所有结果处理完成。
42.请参阅图4,将输入通道小于x或总参数量小于y的卷积层作为全并行卷积层,并采取全并行的方式对输入数据进行卷积;
43.优选地,所述采取全并行的方式对输入数据进行卷积包括:全并行表示为同一时刻提取b个通道的所有输入数据;将b个通道的所有输入数据与fpga片上存储的权重参数和偏置参数进行相应卷积运算,并将所有通道的输出结果并行输入进relu激活函数,b表示输入数据的通道数;这种并行方式最大化了卷积层的数据处理速度,输入数据并行输入进卷积层内,卷积层的多个通道的全部卷积核同时对输入数据进行卷积,直接得到该层全部输出结果。
44.在fpga上进行设计时,具体的执行方式如下:将所有通道m
×
n个权重参数和m个偏置参数以固定值的形式定义进卷积层之中即以固定值的形式存储在fpga片上,每个通道的输入数据同时输入进卷积层内,每个时钟输入一个数据,当输入进q个数据时,所有定义的参数与之对应相乘,同一时刻输出多个通道的第一个输出结果。输入数据不间断依次输入,最终可以得到所有通道全部结果。这种方法可以在短时间内完成一次该层的所有卷积操作,由于整体参数量较小,这种设计可以在兼顾数据处理速度的同时,尽量减少计算资源的占用。
45.将组合型并行卷积层每个通道的权重参数设计为相同的数据位宽,按通道依次将卷积核内的权重参数存储在fpga片上存储器,存储深度为m,m表示卷积层的通道数;将全并行卷积层的权重参数和偏置参数以固定值的形式存储在fpga片上;
46.实施例,例如,第一类卷积层含三个通道,每个通道包含3个卷积核,三个卷积核的权重参数总数为n个;依次将三个卷积层的权重参数按顺序进行存储再片上存储器,存储深度为3;卷积层的偏置参数以固定值的形式存储在fpga片上。
47.通过组合逻辑判断最高位的方式设计relu激活函数对输入的数据进行逻辑判断,当输入的数据最高位为0时,则对应的输出数据不变;当输入的数据最高位为1时,则对应的输出数据清零;
48.对relu激活函数进行设计。该函数特点是当输入值大于零,则输出值等于输入值;当输入值小于零,则输出值等于零。本发明的卷积神经网络为有符号数,在fpga中,有符号数是以补码的形式存储,最高位是符号位,最高位为1,则为负数,最高位为0,则为正数。因此,对relu激活函数进行设计为,通过组合逻辑判断最高位,当最高位为0时,则输出数据不变;当最高位为1时,则输出数据清零。这种处理方法在占用少量的资源的情况下,有效减少了额外的时钟产生,加速了网络的计算速度。
49.通过直接比较的方式设计最大池化层,池化层将每个通道内的输入数据直接进行比较得到输出数据;
50.对k
×
k最大池化层进行设计。对于组合型并行卷积层,池化层的输入数据经过4
×
m+1个时钟得到所有通道数据用来进行k
×
k最大池化,将每个通道内的k
×
k个数据直接进
行比较即可得到所有该层的输出数据。对于全并行卷积层,池化层的输入数据为经过k
×
k个时钟得到所有通道数据用来进行k
×
k最大池化,将每个通道内的k
×
k个数据直接进行比较即可得到所有该层的输出数据。这种情况使得数据能够得到最快速的处理。
51.将全连接层每个输出神经元对应的权重参数存储在fpga片上存储器,全连接层的偏置参数以固定值的形式存储在fpga片上,通过资源复用方法对输入数据进行全连接操作;
52.优选地,所述通过资源复用方法对输入数据进行全连接操作包括:依次取单个输出神经元对应的权重参数分别与全连接层输入神经元的输入数据相乘再与fpga片上存储的该输出神经元对应的偏置参数进行相加,重复b次之后完成全连接操作,b表示输出神经元的数量。
53.全连接层中的输出神经元与每个输入神经元都相连。这种连接结构能够使全连接层映射上层全部数据,将神经网络提取到的所有特征结合起来。但是这种连接结构有一个很大缺陷:全连接层的每个神经元都涉及大量网络参数,占用大量的计算单元,难以在资源较小的fpga的上进行设计。因此,本发明设计了一种计算资源复用方法:以图5的全连接层为例,图中有a个输出神经元,b个输入神经元,每个输出神经元对应b个权重参数和一个偏置参数,本设计每次取单个输出神经元对应的b个权重参数与全连接层所有输入数据相乘并相加,重复取a次之后,即可得到全连接层的输出结果。
54.在fpga上进行设计时,具体的执行方式如下:将全连接层全部a
×
b个权重参数设计为相同位宽,并存储到fpga片上存储器中,每一位存储一个输出神经元对应的b个权重参数,存储深度为a,偏置参数以固定值的形式存储在fpga片上。所有输入神经元对应的输入数据同一时钟下并行输入进全连接中,同时从存储器中提取单个输出神经元对应的b个权重参数,每个时钟读取一个输出神经元对应的b个权重参数与所有输入神经元对应的输入数据进行对应相乘,得到的结果再与fpga片上存储的偏置固定值相加,即可得到一个输出神经元对应的输出结果,这样重复读取b次,即可得到全连接层的输出,b表示输出神经元的数量,a表示输入神经元的数量。
55.以上操作每次读取的参数量和数据位宽都相同,因此可以重复使用同一块计算单元。如果使用传统方法设计全连接层,该层全连接层需要a
×
b个乘法计算单元,相比之下,本设计的全连接层只需要用到a个计算单元,大大减少了计算单元的使用。
56.将所有设计组合起来,输入数据首先经过第一个全并行卷积层,然后通过激活函数,激活函数出来的数据进入第一个组合型并行卷积层,组合型并行卷积层涉及权重存储器里权重参数的读取,组合型并行卷积层中输出数据再经过激活函数到达第二个池化层,池化层的数据再经过第二个组合型并行卷积层,第二个并行卷积层同第一个数据处理方式相同,不同的是参数量大小和通道数大小。数据从第二个组合型并行卷积层出来后,再经过激活函数到达若干个全并行卷积层和组合型并行卷积层,最后到达全连接层,经过本设计的全连接层之后,得到最终的输出数据。
57.本发明一种基于资源复用的卷积神经网络fpga加速器实现方法。该方法将数据从二维转成一维,再转回二维进行图像处理,针对其卷积层消耗大量计算资源,将其划分为通道数较多和通道数较少两类,分别进行设计,大量减少了计算资源消耗。并对relu激活函数、中间数据存储和相应的池化层进行了设计,加速了网络计算。最后对全连接层进行了复
用设计,并将所有设计进行了整合完成了fpga计算资源有限的情况下,兼顾数据处理速度的卷积神经网络加速器设计。
58.最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
技术特征:
1.一种基于资源复用的卷积神经网络fpga加速器实现方法,其特征在于,包括:将原始输入数据按通道划分为多个二维数据,并将每个二维数据按行展开为一维数据存储在fpga片上存储器;将输入通道大于x或参数量大于y的卷积层作为组合型并行卷积层,并采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积;完成卷积运算后通过m个寄存器移位操作完成所有通道的数据存储;将输入通道小于x或总参数量小于y的卷积层作为全并行卷积层,并采取全并行的方式对输入数据进行卷积;将全连接层每个输出神经元对应的权重参数存储在fpga片上存储器,全连接层的偏置参数以固定值的形式存储在fpga片上,通过资源复用方法对输入数据进行全连接操作;将组合型并行卷积层每个通道的权重参数设计为相同的数据位宽,按通道依次将卷积核内的权重参数存储在fpga片上存储器,存储深度为m,m表示卷积层的通道数;将全并行卷积层的权重参数和偏置参数以固定值的形式存储在fpga片上;通过组合逻辑判断最高位的方式设计relu激活函数对输入的数据进行逻辑判断,当输入的数据最高位为0时,则对应的输出数据不变;当输入的数据最高位为1时,则对应的输出数据清零;通过直接比较的方式设计最大池化层,池化层将每个通道内的输入数据直接进行比较得到输出数据。2.根据权利要求1所述的一种基于资源复用的卷积神经网络fpga加速器实现方法,其特征在于,所述采用输入通道间并行、卷积核内并行和通道内卷积核间并行的方式对输入数据进行卷积包括:输入通道间并行表示为同一时刻提取同一位置b个通道的输入数据;卷积核内并行表示为在同一时刻提取单个卷积核的所有参数;通道内卷积核间并行表示为同一时刻提取单个通道内所有卷积核同一位置的参数;依次读取卷积层单个通道内所有卷积核的参数,将单个通道所有卷积核的参数与所有通道的输入数据进行对应的卷积运算,其中卷积运算为输入数据与权重参数相乘,再加上偏置参数,b表示输入数据的通道数。3.根据权利要求2所述的一种基于资源复用的卷积神经网络fpga加速器实现方法,其特征在于,所述通过存储器移位操作完成所有通道的数据存储包括:组合型并行卷积层每个时钟输出一个通道的结果,将每个时钟输出的结果通过m个寄存器进行移位操作,m个时钟之后m个寄存器包含所有通道的输出结果,将所有通道的输出结果并行输入进relu激活函数,同时清空m个寄存器,并重复执行移位操作。4.根据权利要求1所述的一种基于资源复用的卷积神经网络fpga加速器实现方法,其特征在于,所述采取全并行的方式对输入数据进行卷积包括:全并行表示为同一时刻提取b个通道的所有输入数据;将b个通道的所有输入数据与fpga片上存储的权重参数和偏置参数进行相应卷积运算,并将所有通道的输出结果并行输入进relu激活函数,b表示输入数据的通道数。5.根据权利要求1所述的一种基于资源复用的卷积神经网络fpga加速器实现方法,其特征在于,所述通过资源复用方法对输入数据进行全连接操作包括:依次取单个输出神经元对应的权重参数分别与全连接层输入神经元的输入数据相乘再与fpga片上存储的该输出神经元对应的偏置参数进行相加,重复b次之后完成全连接操作,b表示输出神经元的数量。
技术总结
本发明涉及一种基于资源复用的卷积神经网络FPGA加速器实现方法,本发明用于解决在FPGA计算资源有限的情况下,不能完成大规模神经网络的加速器设计问题,在兼顾数据处理速度的同时,大量减少了计算资源的占用,首先对二维数据输入数据进行一维存储,并将其存放进FPGA片上存储器,其次,根据卷积层通道数和参数量将卷积层划分为两类,分别进行了组合型并行设计和全并行设计,在保证数据处理速度的同时,减少计算资源的占用;针对组合型并行设计的卷积层,设计了中间数据存储;对激活函数和池化层进行了设计,对全连接层进行了复用设计,减少了额外的时钟产生,在占用少量的资源的情况下,加速了网络的计算速度。加速了网络的计算速度。加速了网络的计算速度。
技术研发人员:彭析竹 王世界 陈磊
受保护的技术使用者:电子科技大学重庆微电子产业技术研究院
技术研发日:2023.04.18
技术公布日:2023/8/4
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
