可重构DW卷积和普通卷积的FPGA实现方法及其加速器

未命名 09-22 阅读:58 评论:0

可重构dw卷积和普通卷积的fpga实现方法及其加速器
技术领域
1.本发明属于计算机领域,涉及一种可重构dw卷积和普通卷积的fpga实现方法及其加速器。


背景技术:

2.卷积神经网络(convolutionalneuralnetworks,cnn)是一类包含卷积计算且具有深度结构的前
3.馈神经网络,是深度学习的重要组成部分之一。由于卷积神经网络模型中普通卷积的权重数量通常较大,所以近几年为了方便在移动端上部署卷积神经网络模型,诞生了权重数更少的dw卷积(对于输入特征图与输出结果的尺寸以及层数都相同的情况下,dw卷积所需要的权重参数比普通卷积更少);所以很多模型中都会既有普通卷积又有dw卷积,从而在fpga加速器中要同时满足这两种卷积才能起到更好的加速效果。但如果在fpga中分别针对普通卷积以及dw卷积设计两个不同的模块的话,不仅会使整个加速器的运行效率不高(在一个计算某一个卷积层时,加速器中只有一半的电路在进行工作),还会占用fpga中更多的硬件资源;特别在针对一些中小型fpga部署卷积神经网络加速器时,上述分别针对普通卷积以及dw卷积设计两个不同模块的方式是不可接受的。


技术实现要素:

4.有鉴于此,本发明的目的在于提供一种既可实现dw卷积又满足普通卷积计算要求的基于fpga的卷积神经网络加速器及其方法,即一种适合于在资源受限的中小型fpga上部署的卷积神经网络加速器。随着卷积神经网络的发展,不仅卷积神经网络中的卷积层、池化层以及全连接层等计算层越来越多,其权重参数也越来越多;但这种层数以及权重越来越多的趋势,不利于卷积神经网络的部署,特别是对于移动端设备;所以近年来,出现了dw、pw卷积等能够减少权重参数数量的简化卷积层。伴随dw卷积的出现,越来越多的模型也将dw卷积纳入其模型中,所以在fpga上部署这些卷积神经网络模型时,通常需要使fpga上的加速器既能够处理普通卷积又能够处理dw卷积;当fpga上的硬件资源不受限的情况下,通常会在fpga上部署两个计算单元,从而分别满足普通卷积以及dw卷积。但在fpga上的硬件资源不是很充沛的情况下,往往不足以在fpga上部署两个独立的计算单元;所以本设计,在牺牲dw卷积的减少权重特性的基础上,提出了一种同时满足普通卷积以及dw卷积的卷积神经网络加速器系统。在该设计中,普通卷积和dw卷积使用的是完全相同的电路,其中的区别是:加速器系统中的arm部分在将dw卷积的权重存入ddr之前,将dw卷积的权重进行了扩展(扩展了输入通道倍);通过在arm中对权重排序程序的简单修改即完成了两种卷积操作的融合,避免了更多的fpga硬件资源消耗。
5.为达到上述目的,本发明提供如下技术方案:
6.一种可重构dw卷积和普通卷积的fpga实现方法,该方法包括以下步骤:
7.对fpga部署卷积神经网络模型时,进行输入特征图的数据重排和权重数据重排;
8.采用数据切片重排,一次将一个切片中的数据存储到fpga的片上存储中;
9.对于输入特征图数据的重排,将输入通道切成in_c/p个切片,in_c代表所有的输入通道数,p代表一个输入通道切片中的输入通道数量,同时p为高位宽传输模式下单个周期传输的数据个数;在传输一个切片时,首先按照输入通道为维度依次传输完所有通道相同位置的数据,之后再传输下一个位置所有通道中的数据;
10.对于权重数据重排,其以输入切片通道数*输出切片通道数个卷积核为单位,先以输入切片通道为维度,将与输出切片中第一个通道所对应各卷积核的第一个权重依次取出;再依次取出输出切片中的第二个通道所对应各卷积核的第一个权重,直至遍历完所有输出通道,最后再遍历kernel_size,将对应切片的所有权重输出。
11.可选的,所述进行输入特征图的数据重排和权重数据重排后,还包括dw卷积权值数据扩展;
12.其中dw卷积的一个输出通道是由一个输入通道和与该输入通道对应的一个卷积核进行多次遍历所得到的,在arm端将输入特征图数据以及权重数据存入ddr之前,对dw卷积的权重进行对应的扩展;最左侧为输入通道、最右侧为输出通道,中间为各输入输出通道对应的卷积核;在dw卷积中,卷积核部分只有带网格线的卷积核是有效的,一个输出通道只对应一个卷积核;将dw卷积中的第一个卷积核向其下方扩展两个卷积核,扩展的卷积核中所有权值都是0,第二个卷积核在其上方和下方各扩展一个卷积核,第三各卷积核在其上方扩展两个卷积核;使扩展后的卷积核部分,有效卷积核与输入通道的对应关系不变,以使dw卷积按照普通卷积的方式遍历并累加后所得的结果与dw卷积的原结果保持一致。
13.基于所述实现方法的卷积神经网络加速器,所述卷积神经网络加速器包括load、conv、store和process四个模块,分别用于输入权重和特征图数据、卷积运算、量化输出、配置算子以及协调各模块;
14.首先arm向cnn_ctl模块传输五个ddr中数据的地址:输入特征图地址、权重地址、输出数据地址、卷积层parameter地址和scale地址;
15.在传输完五个地址信息后,通过hps控制cnn_ctl模块中的加速器启动寄存器,启动fpga加速器;加速器启动之后,首先触发process模块根据cnn_ctl模块接收到的卷积层parameter地址,读取当前卷积层所对应的参数;
16.读取卷积层参数完毕之后,process模块触发load模块根据cnn_ctl模块接收到的输入特征图地址和权重地址读取输入特征图数据以及权重,读取过程采用ping_pang操作的形式,即第一次读取到的数据与权重首先写入input_ram0和weight_ram0,第二次读取到的数据与权重写入input_ram1和weight_ram1,第三次再对input_ram0和weight_ram0进行写入;
17.load模块完成第一次读取之后,process模块触发conv模块读取input_ram0和weight_ram0中相应地址的数据;同时process模块触发load进行第二次数据的读取从而使数据的读取和计算同时进行;conv模块将计算之后的数据存储到output_ram0或者output_ram1中,第一次计算结果存储到output_ram0中,采用与load模块类似的ping_pang操作;
18.之后process模块触发conv模块进行input_ram1和weight_ram2的读取以及计算,其计算结果存储到output_ram1中;且process模块触发store模块读取conv模块第一次计算的结果,output_ram0,且使store模块根据cnn_ctl模块读取到的量化参数scale地址读
取提前存储到ddr中的量化参数,并根据量化参数将conv模块的计算结果进行激活量化等操作之后,再输出到ddr中输出数据地址的对应位置;同时process模块触发load模块进行第三次输入数据以及权重的读取;
19.直到所有输入数据计算并输出完毕;再重新触发下一层卷积。
20.本发明的有益效果在于:
21.本发明的方法旨在通过arm上权重排序程序的简单修改即可完成dw卷积和普通卷积在fpga上的融合,且不需要再对fpga上部署的加速器做更多的修改。即在不额外增加任何fpga硬件资源的情况下,将dw卷积融合到针对普通卷积设计的加速器中。
22.本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
23.为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:
24.图1为输入特征图数据重排示意图;
25.图2为权值数据重排示意图;
26.图3为dw卷积中权值部分的扩展示意图;
27.图4为卷积神经网络加速器结构图;
28.图5为普通卷积输出结果对比图;
29.图6为dw卷积输出结果对比图;
30.图7为推理模型mobilenet v1所消耗总时间。
具体实施方式
31.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
32.其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
33.本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述
位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
34.图1和图2是本设计针对资源较少的fpga部署卷积神经网络模型时所进行的特征图数据重排以及权重数据重排,因为在通常情况下卷积神经网络模型中特征图数据和权重数据的数据量都非常大,一般无法将其所有数据都存储到中小型fpga的片上存储中,所以采用了这种数据切片重排的方法,也就是一次只将一个切片中的数据存储到fpga的片上存储中。
35.以输入特征图数据的重排为例,本设计没有像传统的传输顺序那样将一个输入通道的所有数据按照从左往右、从上往下的顺序传输完成之后,再传输下一个通道的数据。而是将输入通道切成了in_c/p个切片(in_c代表所有的输入通道数,p代表一个输入通道切片中的输入通道数量,同时p也为高位宽传输模式下单个周期传输的数据个数)(例如当使用128bit的传输端口时,数据的实际位宽是8bit,那么p=16,相当于每个周期传输p个输入通道的数据。注意当输入通道无法整除p时,需要向上取整并填充0值),并且完整传输完一个切片之后再传输下一个切片。在传输一个切片时,本设计首先按照输入通道为维度依次传输完所有通道相同位置的数据,之后再传输下一个位置所有通道中的数据,如附图1所示。
36.权值的重排方式与输入重排方式类似,其以输入切片通道数*输出切片通道数个卷积核为单位,先以输入切片通道为维度,将与输出切片中第一个通道所对应各卷积核的第一个权重依次取出;之后再依次取出输出切片中的第二个通道所对应各卷积核的第一个权重,直至遍历完所有输出通道,最后再遍历kernel_size,以此将对应切片的所有权重输出。
37.其中图3是针对dw卷积和普通卷积的加速器融合所进行的dw卷积权值数据扩展。其中dw卷积的一个输出通道是由一个输入通道和与该输入通道对应的一个卷积核进行多次遍历所得到的,而普通卷积的一个输出通道是由所有输入通道与相对应的输入通道数个卷积核进行遍历后并相加所得到的。所以为了使针对普通卷积的加速器也能够计算dw卷积,本设计在arm端将输入特征图数据以及权重数据存入ddr之前,对dw卷积的权重进行了对应的扩展;以图3为例,其中最左侧为输入通道、最右侧为输出通道,中间为各输入输出通道对应的卷积核。在dw卷积中,图中的卷积核部分只有带网格线的卷积核才是有效的,也就是说一个输出通道只对应一个卷积核;而为了适配普通卷积,本设计将dw卷积中的卷积核进行了扩展;具体来说,本设计将dw卷积中的第一个卷积核向其下方扩展了两个卷积核(扩展的卷积核中所有权值都是0),第二个卷积核在其上方和下方各扩展了一个卷积核,第三各卷积核在其上方扩展了两个卷积核;从而使扩展后的卷积核部分,有效卷积核与输入通道的对应关系不变,以使dw卷积按照普通卷积的方式遍历并累加后所得的结果与dw卷积的原结果保持一致。
38.图4卷积神经网络加速器中,主要由load、conv、store、process四个模块组成,分别起到输入权重和特征图数据、卷积运算、量化输出、配置算子以及协调各模块的功能。
39.以下为整个系统的工作流程:
40.首先hps(arm)向cnn_ctl模块传输五个ddr中数据的地址:
41.1.输入特征图地址
42.2.权重地址
43.3.输出数据地址
44.4.卷积层parameter地址
45.5.scale(量化参数)地址。
46.在传输完五个地址信息后,可通过hps控制cnn_ctl模块中的加速器启动寄存器,从而启动fpga加速器。加速器启动之后,首先触发process模块根据cnn_ctl模块接收到的卷积层parameter地址,读取当前卷积层所对应的参数;
47.读取卷积层参数完毕之后,process模块触发load模块根据cnn_ctl模块接收到的输入特征图地址和权重地址读取输入特征图数据以及权重(读取过程采用ping_pang操作的形式,即第一次读取到的数据与权重首先写入input_ram0和weight_ram0,第二次读取到的数据与权重写入input_ram1和weight_ram1,第三次再对input_ram0和weight_ram0进行写入);
48.load模块完成第一次读取之后,process模块触发conv模块读取input_ram0和weight_ram0中相应地址的数据;同时process模块触发load进行第二次数据的读取从而使数据的读取和计算同时进行,提高加速器效率;conv模块将计算之后的数据存储到output_ram0或者output_ram1中(第一次计算结果存储到output_ram0中,此处也采用了与load模块类似的ping_pang操作);
49.之后process模块触发conv模块进行input_ram1和weight_ram2的读取以及计算,其计算结果存储到output_ram1中。且process模块触发store模块读取conv模块第一次计算的结果(output_ram0),且使store模块根据cnn_ctl模块读取到的scale(量化参数)地址读取提前存储到ddr中的量化参数,并根据量化参数将conv模块的计算结果进行激活量化等操作之后,再输出到ddr中输出数据地址的对应位置。同时process模块触发load模块进行第三次输入数据以及权重的读取。
50.后续操作和上段操作类似,直到所有输入数据计算并输出完毕。再重新触发下一层卷积。
51.图5为使用本设计所介绍加速器对普通卷积层进行仿真时所输出结果与标准输出结果进行对比的部分截图;标准输出结果由hls代码打印输出(即用cpu进行卷积神经网络普通卷积计算所得到的结果)。由beyond compare的对比图可以看出,使用加速器对普通卷积层进行计算所得出的结果是正确的。
52.图6为使用本设计所介绍加速器对dw卷积层进行仿真时所输出结果与标准输出结果进行对比的部分截图;由beyond compare的对比图可以看出,使用加速器对dw卷积层进行计算所得出的结果是正确的。
53.通过图7可以看出该加速器实际推理mobilenet v1模型时,不管是普通卷积还是dw卷积,加速器都能正常运行且没有错误结果。
54.为了提供一种既可实现dw卷积又满足普通卷积计算要求的基于fpga的卷积神经网络加速器及其方法,即一种适合于在资源受限的中小型fpga上同时部署dw卷积和普通卷积的卷积神经网络加速器。本设计出于节省资源的考虑,没有在fpga中单独针对dw卷积和普通卷积部署算子,而是通过在arm端对dw卷积的权重进行扩展从而能够使用普通卷积算子对dw卷积进行计算并得到正确结果;其中dw卷积权重的具体扩展方式为:
55.关于dw卷积的一个输出通道是由一个输入通道和与该输入通道对应的一个卷积
核进行多次遍历所得到的,而普通卷积的一个输出通道是由所有输入通道与相对应的输入通道数个卷积核进行遍历后并相加所得到的。以图三为例,其中最左侧为输入通道、最右侧为输出通道,中间为各输入输出通道对应的卷积核。在dw卷积中,图中的卷积核部分只有带网格线的卷积核才是有效的,也就是说一个输出通道只对应一个卷积核;在卷积核扩展的过程中,本设计将dw卷积中的第一个卷积核向其下方扩展了两个卷积核,第二个卷积核在其上方和下方各扩展了一个卷积核,第三各卷积核在其上方扩展了两个卷积核(扩展的卷积核中所有权值都是0);从而使扩展后的卷积核部分,有效卷积核与输入通道的对应关系不变,以使dw卷积按照普通卷积的方式遍历并累加后所得的结果与dw卷积的原结果保持一致。
56.所以在本设计中,普通卷积和dw卷积使用的是完全相同的电路,其中的区别是:加速器系统中的arm部分在将dw卷积的权重存入ddr之前,将dw卷积的权重进行了扩展(扩展了输入通道倍);通过在arm中对权重排序程序的简单修改即完成了两种卷积操作的融合,避免了更多的fpga硬件资源消耗。
57.本发明通过在arm端对dw卷积的权重进行简单的扩展,从而使dw卷积也能够使用普通卷积算子进行计算并得到正确结果,即一种不需要对fpga上部署的加速器进行修改或者更多硬件资源的添加即可完成普通卷积和dw卷积的方法。
58.最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

技术特征:
1.一种可重构dw卷积和普通卷积的fpga实现方法,其特征在于:该方法包括以下步骤:对fpga部署卷积神经网络模型时,进行输入特征图的数据重排和权重数据重排;采用数据切片重排,一次将一个切片中的数据存储到fpga的片上存储中;对于输入特征图数据的重排,将输入通道切成in_c/p个切片,in_c代表所有的输入通道数,p代表一个输入通道切片中的输入通道数量,同时p为高位宽传输模式下单个周期传输的数据个数;在传输一个切片时,首先按照输入通道为维度依次传输完所有通道相同位置的数据,之后再传输下一个位置所有通道中的数据;对于权重数据重排,其以输入切片通道数*输出切片通道数个卷积核为单位,先以输入切片通道为维度,将与输出切片中第一个通道所对应各卷积核的第一个权重依次取出;再依次取出输出切片中的第二个通道所对应各卷积核的第一个权重,直至遍历完所有输出通道,最后再遍历kernel_size,将对应切片的所有权重输出。2.根据权利要求1所述的一种可重构dw卷积和普通卷积的fpga实现方法,其特征在于:所述进行输入特征图的数据重排和权重数据重排后,还包括dw卷积权值数据扩展;其中dw卷积的一个输出通道是由一个输入通道和与该输入通道对应的一个卷积核进行多次遍历所得到的,在arm端将输入特征图数据以及权重数据存入ddr之前,对dw卷积的权重进行对应的扩展;最左侧为输入通道、最右侧为输出通道,中间为各输入输出通道对应的卷积核;在dw卷积中,卷积核部分只有带网格线的卷积核是有效的,一个输出通道只对应一个卷积核;将dw卷积中的第一个卷积核向其下方扩展两个卷积核,扩展的卷积核中所有权值都是0,第二个卷积核在其上方和下方各扩展一个卷积核,第三各卷积核在其上方扩展两个卷积核;使扩展后的卷积核部分,有效卷积核与输入通道的对应关系不变,以使dw卷积按照普通卷积的方式遍历并累加后所得的结果与dw卷积的原结果保持一致。3.基于权利要求1或2所述实现方法的卷积神经网络加速器,其特征在于:所述卷积神经网络加速器包括load、conv、store和process四个模块,分别用于输入权重和特征图数据、卷积运算、量化输出、配置算子以及协调各模块;首先arm向cnn_ctl模块传输五个ddr中数据的地址:输入特征图地址、权重地址、输出数据地址、卷积层parameter地址和scale地址;在传输完五个地址信息后,通过hps控制cnn_ctl模块中的加速器启动寄存器,启动fpga加速器;加速器启动之后,首先触发process模块根据cnn_ctl模块接收到的卷积层parameter地址,读取当前卷积层所对应的参数;读取卷积层参数完毕之后,process模块触发load模块根据cnn_ctl模块接收到的输入特征图地址和权重地址读取输入特征图数据以及权重,读取过程采用ping_pang操作的形式,即第一次读取到的数据与权重首先写入input_ram0和weight_ram0,第二次读取到的数据与权重写入input_ram1和weight_ram1,第三次再对input_ram0和weight_ram0进行写入;load模块完成第一次读取之后,process模块触发conv模块读取input_ram0和weight_ram0中相应地址的数据;同时process模块触发load进行第二次数据的读取从而使数据的读取和计算同时进行;conv模块将计算之后的数据存储到output_ram0或者output_ram1中,第一次计算结果存储到output_ram0中,采用与load模块类似的ping_pang操作;之后process模块触发conv模块进行input_ram1和weight_ram2的读取以及计算,其计
算结果存储到output_ram1中;且process模块触发store模块读取conv模块第一次计算的结果,output_ram0,且使store模块根据cnn_ctl模块读取到的量化参数scale地址读取提前存储到ddr中的量化参数,并根据量化参数将conv模块的计算结果进行激活量化等操作之后,再输出到ddr中输出数据地址的对应位置;同时process模块触发load模块进行第三次输入数据以及权重的读取;直到所有输入数据计算并输出完毕;再重新触发下一层卷积。

技术总结
本发明涉及一种可重构DW卷积和普通卷积的FPGA实现方法及其加速器,属于计算机领域。该方法包括以下步骤:对FPGA部署卷积神经网络模型时,进行输入特征图的数据重排和权重数据重排;采用数据切片重排,一次将一个切片中的数据存储到FPGA的片上存储中。本发明的方法旨在通过ARM上权重排序程序的简单修改即可完成DW卷积和普通卷积在FPGA上的融合,且不需要再对FPGA上部署的加速器做更多的修改。即在不额外增加任何FPGA硬件资源的情况下,将DW卷积融合到针对普通卷积设计的加速器中。合到针对普通卷积设计的加速器中。合到针对普通卷积设计的加速器中。


技术研发人员:张红升 黄奎 刘挺 印鑫 张宇轩 杨虹 陈伟中
受保护的技术使用者:重庆邮电大学
技术研发日:2023.08.02
技术公布日:2023/9/20
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐