一种多种类型卷积的FPGA实现方法转让专利

申请号 : CN202110081004.7

文献号 : CN112905526B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈禾张宁魏鑫刘文超龙腾

申请人 : 北京理工大学

摘要 :

本发明提供了一种多种类型卷积的FPGA实现方法,能够利用统一的硬件架构将多种类型的卷积部署在FPGA上进行实现,不需要针对不同的卷积类型分别设计硬件实现架构,节省了大量的硬件资源。通过分析多种类型卷积的特点将它们转换为同一种基准卷积类型使用统一的处理引擎进行实现。相比于分别在FPGA上实现这些卷积,节省了大量的硬件资源。通过优化基准卷积的运算流程,并根据其余卷积的特征分别将其转换为基准卷积进行运算。从而利用统一的硬件架构在FPGA上进行实现。提高了实现的灵活性,降低了硬件资源的开销,有效避免了传统FPGA实现方法中需要为各类型卷积分别设计实现架构所造成的资源消耗大,结构不灵活的问题。

权利要求 :

1.一种多种类型卷积的FPGA实现方法,其特征在于,包括如下步骤:

步骤一、根据所要实现的多种类型卷积的深度卷积神经网络,选取其中一种出现频率最高的卷积类型作为基准类型,并采用原始循环计算过程对基准类型卷积进行硬件部署,使其能够在FPGA上运行;所述原始循环计算过程中,先进行行处理再进行通道处理;

步骤二、面向所述基准类型卷积设计处理引擎的结构,得到的处理引擎能够部署在FPGA上用于实现基准卷积;

步骤三、设计输入数据控制模块,用于为步骤二得到的处理引擎提供正确的输入数据;

输入数据控制模块搭配处理引擎,将基准类型卷积成功部署在FPGA中;

其中,所述输入数据控制模块包括N个BRAM,设计为乒乓缓冲区,N为基准类型卷积尺寸行数加1;

Ping缓冲区和Pang缓冲区的Bram是有序的,不能颠倒;

当需要对输入特征图进行零填充时,不需要进行额外的存储,选择0作为输出来实现填充操作;

步骤四、针对所要实现的多种类型卷积的深度卷积神经网络中,所包含的除基准类型卷积之外的其余类型卷积,制定转换方法,将其余类型卷积转换为基准类型卷积,然后应用统一的处理引擎在FPGA上进行实现,完成多种类型卷积的FPGA实现。

2.如权利要求1所述的多种类型卷积的FPGA实现方法,其特征在于,所要实现的多种类型卷积的深度卷积神经网络包含的卷积类型有:3×3普通卷积,1×1普通卷积,步长为1、膨胀率为2的3×3空洞卷积以及步长为2、膨胀率为2的3×3空洞卷积。

3.如权利要求2所述的多种类型卷积的FPGA实现方法,其特征在于,对于1×1卷积,通过零填充将卷积核的大小从1×1转换为基准类型卷积尺寸,与之对应的是需要将附加的零填充添加到输入要素图以获得正确的输出要素图;

在FPGA上实现时,在为处理引擎提供输入图像数据和权重参数时,通过添加0的操作,在读出输入图像数据和权重时在需要读出0的位置将读出使能信号置为无效,并把此时的数据设为0。

4.如权利要求2所述的多种类型卷积的FPGA实现方法,其特征在于,对于步长为1膨胀率为2的3×3空洞卷积,在存储输入特征图时,将相邻的两行存储在同一块Bram中,在取数据时,按照同样的地址,分别在Bram中取出输入特征图的奇数行特征值;同理分别取出偶数行特征值;其中,通过设置锯齿形读取使能信号,将奇数列和偶数列的输入数据分别读出;

在读取输入要素地图时,将输入特征图根据奇数行、偶数行、奇数列和偶数列进行分组。

5.如权利要求2所述的多种类型卷积的FPGA实现方法,其特征在于,对于步长为2膨胀率为2的3×3空洞卷积,在往输入数据控制模块中存储输入特征图时,仅存储奇数行的特征图;在读取时通过设置锯齿形读取使能信号,仅将奇数列的输入数据读出提供给处理引擎用于参与卷积运算。

6.如权利要求1所述的多种类型卷积的FPGA实现方法,其特征在于,所述步骤二中,利用乘法运算单元和加法运算单元搭建卷积处理引擎,用于在FPGA上完成卷积运算。

说明书 :

一种多种类型卷积的FPGA实现方法

技术领域

[0001] 本发明属于图像检测识别技术领域,尤其涉及一种多种类型卷积的FPGA实现方法。

背景技术

[0002] 近五年来,深度神经网络在智能图像处理领域取得了突破性进展,具有广泛的应用场景。深度卷积神经网络中存在大量的网络权重参数与计算,因此目前多数深度神经网络算法部署在CPU或GPU等高性能设备上。但是CPU、GPU的高性能需要大量的功耗支持,因此在一些功耗严格受限的应用场景中难以应用。高性能、低功耗嵌入式硬件设备为解决这一问题提供了全新的解决思路,因此基于嵌入式设备构建深度神经网络实现平台日益成为工程应用中的研究热点,基于FPGA设计深度神经网络硬件加速器是其中最为广泛的解决方案。但是在一些应用场景中,对于图像特征提取、检测识别的性能要求不断提升,所用到的深度神经网络结构越来越复杂,网络中所涉及到的卷积类型也由起初的单一类型变得更加丰富,需要为各类型卷积分别设计实现架构,但是FPGA片内逻辑与存储资源有限,难以满足为各类型卷积单独设计实现结构,使得在FPGA上实现该类包含多类型卷积的深度神经网络存在一定的技术难点。

发明内容

[0003] 有鉴于此,本发明提供了一种多种类型卷积的FPGA实现方法,能够利用统一的硬件架构将多种类型的卷积部署在FPGA上进行实现,不需要针对不同的卷积类型分别设计硬件实现架构,节省了大量的硬件资源。
[0004] 为实现上述目的,本发明的技术方案如下:
[0005] 本发明提供了一种多种类型卷积的FPGA实现方法,包括如下步骤:
[0006] 步骤一、根据所要实现的多种类型卷积的深度卷积神经网络,选取其中一种常见且具有代表性的卷积作为基准类型卷积,并采用原始循环计算过程对其进行硬件部署,使其能够在FPGA上运行;所述原始循环计算过程中,先进行行处理再进行通道处理;
[0007] 步骤二、面向所述基准类型卷积设计处理引擎的结构,得到的处理引擎能够部署在FPGA上用于实现基准卷积;
[0008] 步骤三、设计输入数据控制模块,用于为步骤二得到的处理引擎提供正确的输入数据;
[0009] 输入数据控制模块搭配处理引擎,将基准类型卷积成功部署在FPGA中;
[0010] 其中,所述输入数据控制模块包括N个BRAM,设计为乒乓缓冲区,N为基准类型卷积尺寸行数加1;
[0011] Ping缓冲区和Pang缓冲区的Bram是有序的,不能颠倒;
[0012] 当需要对输入特征图进行零填充时,不需要进行额外的存储,选择零作为输出来实现填充操作;
[0013] 步骤四、针对所要实现的多种类型卷积的深度卷积神经网络中,所包含的除基准类型卷积之外的其余类型卷积,制定转换方法,将其余类型卷积转换为基准类型卷积,然后应用统一的处理引擎在FPGA上进行实现,完成多种类型卷积的FPGA实现。
[0014] 其中,所要实现的多种类型卷积的深度卷积神经网络包含的卷积类型有:3×3普通卷积,1×1普通卷积,步长为1、膨胀率为2的3×3空洞卷积以及步长为2、膨胀率为2的3×3空洞卷积。
[0015] 其中,对于1×1卷积,通过零填充将卷积核的大小从1×1转换为基准类型卷积尺寸,与之对应的是需要将附加的零填充添加到输入要素图以获得正确的输出要素图;
[0016] 在FPGA上实现时,在为处理引擎提供输入图像数据和权重参数时,通过添加0的操作,在读出输入图像数据和权重时在需要读出0的位置将读出使能信号置为无效,并把此时的数据设为0。
[0017] 其中,对于步长为1膨胀率为2的3×3空洞卷积,在存储输入特征图时,将相邻的两行存储在同一块Bram中,在取数据时,按照同样的地址,分别在Bram中取出输入特征图的奇数行特征值;同理分别取出偶数行特征值;其中,通过设置锯齿形读取使能信号,将奇数列和偶数列的输入数据分别读出;在读取输入要素地图时,将输入特征图根据奇数行、偶数行、奇数列和偶数列进行分组。
[0018] 其中,对于步长为2膨胀率为2的3×3空洞卷积,在往输入数据控制模块中存储输入特征图时,仅存储奇数行的特征图;在读取时通过设置锯齿形读取使能信号,仅将奇数列的输入数据读出提供给处理引擎用于参与卷积运算。
[0019] 其中,所述步骤二中,利用乘法运算单元和加法运算单元搭建卷积处理引擎,用于在FPGA上完成卷积运算。
[0020] 有益效果:
[0021] 本发明提供一种多种类型卷积的FPGA实现方法,不需要针对不同的卷积类型分别设计硬件实现架构,而是通过分析多种类型卷积的特点将它们转换为同一种基准卷积类型使用统一的处理引擎进行实现。相比于分别在FPGA上实现这些卷积,节省了大量的硬件资源。通过优化基准卷积的运算流程,并根据其余卷积的特征分别将其转换为基准卷积进行运算。从而利用统一的硬件架构在FPGA上进行实现。提高了实现的灵活性,降低了硬件资源的开销,有效避免了传统FPGA实现方法中需要为各类型卷积分别设计实现架构所造成的资源消耗大,结构不灵活的问题。
[0022] 利用本发明中提出的多种类型卷积的FPGA实现方法构建嵌入式图像处理系统可应用于多个智能化图像处理领域,如自动驾驶、手机图像处理和遥感图像处理等,能够大幅提升计算效率,降低功耗开销与设计成本。

附图说明

[0023] 图1为本发明实施例的多种类型卷积的FPGA实现方法的流程图;
[0024] 图2为本发明实施例中对基准卷积的计算过程进行优化后的运算流程示意图;
[0025] 图3为本发明实施例中提供的卷积处理引擎的结构示意图;
[0026] 图4为本发明实施例中提供的输入数据控制模块结构示意图与存储方式示意图;
[0027] 图5为本发明实施例中提供的1×1卷积转换为基准卷积的转化策略的示意图;
[0028] 图6为本发明实施例中提供的步长为1、膨胀率为2的3×3空洞卷积的输入数据存储方式和读取策略示意图;
[0029] 图7为本发明实施例中提供的步长为1、膨胀率为2的3×3空洞卷积转换为基准卷积的转化策略的示意图;
[0030] 图8为本发明实施例中提供的步长为2、膨胀率为2的3×3空洞卷积转换为基准卷积的转化策略的示意图。

具体实施方式

[0031] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
[0032] 本发明提供了一种多种类型卷积的FPGA实现方法,应用于深度卷积神经网络,其中,深度卷积神经网络包括多个卷积层,且各卷积层的卷积类型有所不同。本发明所述的多种类型卷积的深度卷积神经网络在YOLOv2网络的基础上,去掉了Passthrough操作,引入了步长为1、膨胀率为2的3×3空洞卷积以及步长为2、膨胀率为2的3×3空洞卷积,从而提升网络对于多尺寸目标的检测性能。改进后的网络中所包含的卷积类型有:3×3普通卷积,1×1普通卷积,步长为1、膨胀率为2的3×3空洞卷积以及步长为2、膨胀率为2的3×3空洞卷积。
[0033] 本实施例以步长为1的1×1卷积、步长为1膨胀率为2的3×3空洞卷积、步长为2膨胀率为2的3×3空洞卷积这三种卷积类型对一种多种类型卷积的FPGA实现方法进行详细说明。本实施例提供的多种类型卷积的FPGA实现方法的流程图如图1所示,包括以下步骤:
[0034] 步骤一、根据所要实现的多种类型卷积的深度卷积神经网络,选取其中一种常见且具有代表性的卷积作为基准类型卷积,并采用原始循环计算过程对其进行硬件部署,使其能够在FPGA上高效运行;所述原始循环计算过程中,先进行行处理再进行通道处理;
[0035] 具体地,根据所要实现的深度卷积神经网络中所包含的卷积类型,选取一种出现频率最高的常见卷积类型作为基准卷积类型。对于绝大多数的网络来说,可以选取3×3的普通卷积作为基准卷积类型。为了在FPGA上高效地完成基础卷积的运算,需要对卷积的原始循环计算进行优化。需要说明的是,在深度卷积神经网络中如果包含尺寸大于3×3的卷积类型,需要选择尺寸更大的卷积类型作为基准卷积类型。
[0036] 本发明实施例中对基准卷积的计算过程进行优化后的运算流程示意图如图2所示,卷积的执行表现出许多并行性,由于FPGA硬件的限制,不可能完全利用所有并行模式。标准卷积层包含N个卷积滤波器,每个卷积滤波器由M个通道K×K内核组成。对于3×3的普通卷积来说K=3。计算时,K×K矩形窗口沿输入要素图的宽度滑动,这称为行处理。提取的像素需要使用N个相应内核进行计算。同时计算n个内核的运算,直到获得N个中间结果。通过计算生成的N个中间结果存储在累积缓冲区中。这些内核将重新用于后续的行处理,直到矩形窗口移至通道的末尾。在行处理中,获得N×Hout中间结果。然后,矩形窗口移向后续通道,并重复上述行处理。对于每一行处理,将过滤器中的相应内核取出以进行卷积。遍历所有通道需要M行处理,这称为通道处理。之后,矩形窗口向下移动一行,并重复上述通道处理。重复次数为Hin+2×pad–K+1,其中pad是输入图像两侧的零填充量。因此,要处理整个输入特征图,应将滤波器的权重读取为Hin+2×pad‑K+1倍。为了避免性能下降,通过权重预取来隐藏行处理中的等待时间,行处理产生的中间结果将在下一个行处理中累积。
[0037] 步骤二、面向所述基准类型卷积设计处理引擎的结构,得到的处理引擎能够部署在FPGA上用于高效地实现基准卷积;
[0038] 具体地,本发明实施例中提供的卷积处理引擎的结构示意图如图3所示,利用乘法运算单元和加法运算单元搭建卷积处理引擎,用于在FPGA上完成卷积运算。当基准卷积类型为3×3卷积,选取9个乘法器和9个加法器进行搭建,其中9个加法器逐级构成一个4级的加法树,加法树的最后一级输出会根据是否得到卷积运算的最终结果进行输出或叠加的路径选择。
[0039] 步骤三、设计输入数据控制模块,用于为步骤二得到的处理引擎提供正确的输入数据;
[0040] 输入数据控制模块搭配处理引擎,将基准类型卷积成功部署在FPGA中。
[0041] 本发明实施例中提供的输入数据控制模块结构示意图与存储方式示意图如图4所示,具体地,设计输入数据控制模块,为处理引擎提供正确的输入数据进行运算,从而将卷积成功部署在FPGA上。该模块主要由四个BRAM组成。四个BRAM分别存储所有通道的四行。此模块设计为乒乓缓冲区。例如,在计算开始时,输入要素地图的前三行存储在Bram_1,Bram_2和Bram_3中以进行计算。同时,输入要素图的第四行被写入Bram_4。此时,Bram_1,Bram_2和Bram_3为Ping缓冲区;Bram_2,Bram_3和Bram_4是Pong缓冲区。当前三行的计算完成后,要素图的第五行被写入Bram_1。此时,Bram_2,Bram_3和Bram_4为Ping缓冲区;Bram_3,Bram_4和Bram_1是Pong缓冲区。
[0042] 值得注意的是,Ping缓冲区和Pang缓冲区的Bram是有序的,不能颠倒。此外,当需要对输入特征图进行零填充时,不需要进行额外的存储,在适当位置选择零作为输出来实现填充操作。
[0043] 步骤四、针对所要实现的多种类型卷积的深度卷积神经网络中,所包含的除基准类型卷积之外的其余类型卷积,制定转换方法,将其余类型卷积转换为基准类型卷积,然后应用统一的处理引擎在FPGA上进行实现,完成多种类型卷积的FPGA实现。
[0044] 具体地,对于1×1卷积,其参与单次卷积运算的仅有一个权重值和一个特征值。本发明实施例中提供的1×1卷积转换为基准卷积的转化策略的示意图如图5所示,可以通过零填充将卷积核的大小从1×1转换为3×3,与之对应的是需要将附加的零填充添加到输入要素图以获得正确的输出要素图,从而可以将1×1卷积转换为3×3卷积进行实现。在FPGA上实现时,只需要在为处理引擎提供输入图像数据和权重参数时在适当的位置添加0,而添加0的操作不需要对硬件架构进行修改,只需要在读出输入图像数据和权重时在需要读出0的位置将读出使能信号置为无效,并把此时的数据设为0即可。1×1卷积就被转换为与3×3完全一致的运算,可以步骤二和步骤三所构建的处理引擎以及输入数据控制模块进行实现。
[0045] 对于步长为1膨胀率为2的3×3空洞卷积,其运算本质上与3×3基准卷积是一致的。其每次运算也都是9个权重与9个特征值的运算。值得注意的是,由于内核的扩展,特征值是从特征图中不相邻的行和列中提取的。此外,在两个连续操作中使用的特征值完全不同。如果卷积核按照像3×3基准卷积那样的原始顺序滑动,则每次参与运算的特征值都和上次参与运算的特征值完全不同,受限于FPGA的数据传输带宽限制,频繁的内存访问将导致较长的延迟。因此,可以将步长为1膨胀率为2的空洞卷积转换为3×3基准卷积进行实现。本发明实施例中提供的步长为1、膨胀率为2的3×3空洞卷积的输入数据存储方式和读取策略示意图如图6所示,在存储输入特征图时,将相邻的两行存储在同一块Bram中,例如Bram_
1中存储的是输入特征图的第一行和第二行,Bram_2中存储的是输入特征图的第三行和第四行,Bram_3中存储的是输入特征图的第五行和第六行。这样在取数据时,就可以按照同样的地址,分别在3块Bram中取出输入特征图的第一行、第三行、第五行特征值。同理也可以分别取出第二行、第四行、第六行特征值。同时可以通过设置锯齿形读取使能信号,将奇数列和偶数列的输入数据分别读出。这样在读取输入要素地图时,可以将输入特征图根据奇数行,偶数行,奇数列和偶数列进行分组。本发明实施例中提供的步长为1、膨胀率为2的3×3空洞卷积转换为基准卷积的转化策略的示意图如图7所示,输入的特征值根据组进行重新排序后,不需要再将卷积核进行空洞处理,直接将其作为3×3内核进行卷积即可。通过根据组对获得的计算结果进行重新排序,可以获得输出特征图。步长为1膨胀率为2的3×3空洞卷积就被转换为与3×3完全一致的运算,可以步骤二和步骤三所构建的处理引擎以及输入数据控制模块进行实现。
[0046] 本发明实施例中提供的步长为2、膨胀率为2的3×3空洞卷积转换为基准卷积的转化策略的示意图如图8所示,步长为2膨胀率为2的3×3空洞卷积的原理类似于具步长为1膨胀率为2的3×3空洞卷积。不同之处在于,只有输入特征图的奇数行和奇数列才会参与卷积运算。因此,在往输入数据控制模块中存储输入特征图时,仅需要存储奇数行的特征图即可。例如Bram_1中存储的是输入特征图的第一行,Bram_2中存储的是输入特征图的第三行,Bram_3中存储的是输入特征图的第五行。同样在读取时可以通过设置锯齿形读取使能信号,仅将奇数列的输入数据读出提供给处理引擎用于参与卷积运算。通过这些转换,步长为2膨胀率为2的3×3空洞卷积就被转换为与3×3完全一致的运算,可以步骤二和步骤三所构建的处理引擎以及输入数据控制模块进行实现。
[0047] 当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当然可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。