基于CTPN网络的异构加速系统及方法转让专利

申请号 : CN202110090277.8

文献号 : CN112732638B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒋剑飞蔡亮郭怡良董峰虞科华陈可

申请人 : 上海交通大学北京爱奇艺科技有限公司

摘要 :

本发明提供了一种基于CTPN网络的异构加速系统及方法,包括CPU端和FPGA端;所述FPGA端包括第一子图和第二子图,所述CPU端包括第三子图;所述第一子图包括CTPN网络CNN部分,第二子图包括RNN部分,所述第三子图包括CTPN网络剩余部分;所述第一子图和第二子图在FPGA端执行,所述第三子图在CPU端执行;所述FPGA端的输出作为第三子图的输入;所述CPU端最终实现网络推断,并得到最终结果。本发明可以在精度下降很小的情况下,大幅度提高CTPN网络的推断速度,让加速器更好地实现实时场景文字识别的功能。

权利要求 :

1.一种基于CTPN网络的异构加速系统,其特征在于,包括CPU端和FPGA端;

所述FPGA端包括第一子图和第二子图,所述CPU端包括第三子图;

所述第一子图包括CTPN网络的CNN部分,第二子图包括CTPN网络的RNN部分,所述第三子图包括CTPN网络的剩余部分;

所述第一子图的CNN部分与第二子图的RNN部分的分隔为CNN网络的CONV/Relu节点,第二子图的RNN部分与第三子图的分隔节点为RNN网络的Reshape_1节点;

所述第一子图和第二子图在FPGA端执行,所述第三子图在CPU端执行;

所述FPGA端的输出作为第三子图的输入;

所述CPU端最终实现网络推断,并得到最终结果。

2.根据权利要求1所述的基于CTPN网络的异构加速系统,其特征在于,所述CNN部分包括数据读取模块、卷积和激活函数计算模块、数据写回模块和池化计算模块,各模块之间通过FIFO连接并完成数据传输。

3.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述数据读取模块包括:采用多重循环展开和乒乓缓冲的方式搬运数据,利用内外部带宽减少外部存储器的访问。

4.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述卷积和激活函数计算模块包括:分别实现卷积和激活函数功能,采用多计算单元并行方式,通过缓冲器累加中间结果的方法提高计算速度,并且核心乘累加部分采用定制算子替换,进一步提高卷积计算的性能。

5.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述数据写回模块包括:采用多任务核心,提高数据写回外部存储器的并行度。

6.根据权利要求2所述的基于CTPN网络的异构加速系统,其特征在于,所述池化计算模块包括:采用多计算单元并行方式,采用分级大小比较的策略,同一行的数值位于第一级比较,每一行的最大值位于第二级比较,实现每次计算获取九个数最大值的功能,通过配置参数改变池化核大小。

7.根据权利要求1所述的基于CTPN网络的异构加速系统,其特征在于,所述RNN部分包括:LSTM权重读取模块、LSTM计算模块和中间数据调度模块,各模块之间通过FIFO连接,实现流水线执行。

8.根据权利要求7所述的基于CTPN网络的异构加速系统,其特征在于,所述LSTM权重读取模块包括:通过正向反向LSTM的共用减少对外部存储器的重复访问,提高数据提取的效率。

9.根据权利要求8所述的基于CTPN网络的异构加速系统,其特征在于,所述LSTM计算模块包括:接收LSTM权重读取模块通过channel发来的权重,特征图以及bias数据,将计算得到的新的记忆数据和输出数据发送给中间数据调度模块形成闭环,对分块的矩阵乘法在计算过程中实现分块不同精度量化;

所述中间数据调度模块包括:接收LSTM计算模块发送过来的新的记忆数据和输出数据并更新缓存。

10.一种基于CTPN网络的异构加速方法,其特征在于,采用权利要求1‑9中任一种所述的基于CTPN网络的异构加速系统,包括:步骤1:将RPN网络以子图的形式切割出来;

步骤2:调用软件接口对子图形式的RPN网络进行网络推断,得到最终结果,从而在CPU端实现RPN网络。

说明书 :

基于CTPN网络的异构加速系统及方法

技术领域

[0001] 本发明涉及神经网络加速器领域,具体地,涉及一种基于CTPN网络的异构加速系统及方法。

背景技术

[0002] 连接文本提议网络CTPN网络(Connectionist Text Proposal Network),是2016年提出的一种用于场景文字识别的神经网络,实际上是一种基于CNN+RNN结构的神经网络。
其中CNN用于提取深度特征,RNN用于字符序列特征识别。此网络发挥了CNN与RNN各自的优
点,其中RNN还使用了双向LSTM(BiLSTM)从图片的不同方向来进行文字的识别和推测,使得
文字检测精度大大提高。因为场景文字识别的各种应用场合都要求网络识别推断尽可能快
速,所以对CTPN网络实施硬件加速就显得尤为重要。但是其复杂的网络结构使得硬件加速
由于资源限制而变得不易实现,所以对该网络实现异构加速是一个有效的解决方案。
[0003] 专利文献CN110992241A(申请号:CN201911150838.8)公开了一种异构嵌入式系统及其加速神经网络目标检测的方法。所述异构嵌入式系统包括CPU和GPU,所述方法包括:从
数据源获取图像数据;使用所述GPU对所述图像数据进行第一处理;所述CPU对经过所述第
一处理的数据进行第二处理,输出目标检测结果;其中,所述第二处理包括非极大值抑制
和/或后处理,所述第一处理为所述神经网络目标检测的计算过程中除所述第二处理之外
的其他处理。

发明内容

[0004] 针对现有技术中的缺陷,本发明的目的是提供一种基于CTPN网络的异构加速系统及方法。
[0005] 根据本发明提供的基于CTPN网络的异构加速系统,包括CPU端和FPGA端;
[0006] 所述FPGA端包括第一子图和第二子图,所述CPU端包括第三子图;
[0007] 所述第一子图包括CTPN网络的CNN部分,第二子图包括CTPN网络的RNN部分,所述第三子图包括CTPN网络的剩余部分;
[0008] 所述第一子图的CNN部分与第二子图的RNN部分的分隔为CNN网络的CONV/Relu节点,第二子图的RNN部分与第三子图的分隔节点为RNN网络的Reshape_1节点;
[0009] 所述第一子图和第二子图在FPGA端执行,所述第三子图在CPU端执行;
[0010] 所述FPGA端加速部分的输出作为第三子图的输入;
[0011] 所述CPU端最终实现网络推断,并得到最终结果。
[0012] 优选的,所述CNN部分包括数据读取模块、卷积和激活函数计算模块、数据写回模块和池化计算模块,各模块之间通过FIFO连接并完成数据传输。
[0013] 优选的,所述数据读取模块包括:采用多重循环展开和乒乓缓冲的方式搬运数据,利用内外部带宽减少外部存储器的访问。
[0014] 优选的,所述卷积和激活函数计算模块包括:分别实现卷积和激活函数功能,采用多计算单元并行方式,通过缓冲器累加中间结果的方法提高计算速度,并且核心乘累加部
分采用定制算子替换,进一步提高卷积计算的性能。
[0015] 优选的,所述数据写回模块包括:采用多任务核心,提高数据写回外部存储器的并行度。
[0016] 优选的,所述池化计算模块包括:采用多计算单元并行方式,采用分级大小比较的策略,同一行的数值位于第一级比较,每一行的最大值位于第二级比较,实现每次计算获取
九个数最大值的功能,通过配置参数改变池化核大小。
[0017] 优选的,所述RNN部分包括:LSTM权重读取模块、LSTM计算模块和中间数据调度模块,各模块之间通过FIFO连接,实现流水线执行。
[0018] 优选的,所述LSTM权重读取模块包括:通过正向反向LSTM的共用减少对外部存储器的重复访问,提高数据提取的效率。
[0019] 优选的,所述LSTM计算模块包括:接收LSTM权重读取模块通过channel发来的权重,特征图以及bias数据,将计算得到的新的记忆数据和输出数据发送给中间数据调度模
块形成闭环,对分块的矩阵乘法在计算过程中实现分块不同精度量化;
[0020] 所述中间数据调度模块包括:接收LSTM计算模块发送过来的新的记忆数据和输出数据并更新缓存。
[0021] 根据本发明提供的基于CTPN网络的异构加速方法,包括:
[0022] 步骤1:将RPN网络以子图的形式切割出来;
[0023] 步骤2:调用软件接口对子图形式的RPN网络进行网络推断,得到最终结果,从而在CPU端实现RPN网络。
[0024] 与现有技术相比,本发明具有如下的有益效果:
[0025] (1)本发明将网络图分割成多个子图,并在异构系统实现文字识别推断,减少FPGA加速器的设计复杂度的同时提高了加速器的并行度,大幅缩短了推断时间,提高了加速器
的性能,本发明具有加速性能好,通用性强和部署方便的优点;
[0026] (2)本发明中,对于BiLSTM权重的八个矩阵(Wxi/c/f/o与Whi/c/f/o)在水平方向上按照BiLSTM对应门的位置拼接,竖直方向上Wxi/c/f/o和Whi/c/f/o分别按照i/c/f/o,每个矩阵一行
的方式循环交错排列。而输入矩阵xt和ht‑1则在竖直方向拼接,这样可以使得按照正常顺序
计算矩阵乘法时可以尽量少存储中间结果,每算得一组四个中间结果之后直接算得当前次
计算的h结果并写回存储h的buffer,可以实现数据无相关性的完全流水线执行,并且可以
在不影响矩阵乘法并行计算性能情况下大幅度节省FPGA的资源;
[0027] (3)本发明提供一种FPGA端RNN数据的INT8量化方法,量化采用最大值映射的方式,RNN的BiLSTM部分由于在实现阶段采用了矩阵拼接的数据排布方式进行优化加速,而且
矩阵拼接的不同分块数据并不在同一个量级。为了在计算矩阵量化时需要采用分块矩阵分
精度量化,在乘累加的时候不同的矩阵分块采用不同的精度进行累加,可使得在额外开销
很小的情况下大幅减小量化带来的精度下降。

附图说明

[0028] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0029] 图1为CTPN网络FPGA、CPU异构加速器模块框图;
[0030] 图2为CTPN网络的子图分割方法;
[0031] 图3为CTPN网络CNN部分结构图;
[0032] 图4为OpenCL加速器卷积VGG部分硬件架构图;
[0033] 图5为ping‑pong buffer搬运数据示意图;
[0034] 图6为卷积激活函数运算模块结构图;
[0035] 图7为池化模块运算示意图;
[0036] 图8为每个并行组中的乘积累加运算示意图;
[0037] 图9为将RTL语言作为OpenCL library的整体编译流程图;
[0038] 图10为RTL代码中用到的Altera_mult_add IP示意图;
[0039] 图11为LSTM cell单次循环算法实现方式示意图;
[0040] 图12为优化后矩阵合并重排方式示意图;
[0041] 图13为BiLSTM OpenCL加速kernel的设计模块框图。

具体实施方式

[0042] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术
人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明
的保护范围。
[0043] 实施例:
[0044] 本发明包括一种针对于CTPN以及类似结构网络的CPU‑FPGA异构执行最优化子图分割方法。本发明的异构执行最优化子图分割方法平衡了硬件资源消耗和硬件之间的传输
代价,对于网络层的功能在执行设备上做了调整,使得FPGA和CPU都更好的加速效果。
[0045] 所述异构执行最优化子图分割方法将CTPN网络主要分为三个主要子图:子图1、子图2和子图3。子图在不同的处理设备上运行并交互数据,所述优化的子图分割和异构执行
能够减少CTPN网络的总体执行时间,取得加速性能的提升。
[0046] 本发明的异构执行,指加速器实现在CPU和FPGA中联合执行,由于CPU和FPGA属于两种不同的芯片,称为异构。由于一个加速器程序需要在FPGA和CPU中执行,因此其加速过
程可以分为几个不同的部分(在本发明中称为子图)分别在CPU和FPGA中执行。不同的分割
方法对于性能的影响很大,本发明的子图分割和执行方法,有利于提高加速器的性能。
[0047] 所述子图1和子图2在FPGA上执行,子图1包括CTPN网络CNN部分的多层卷积,子图2包括RNN部分的BiLSTM模块。子图3包括包括CTPN网络剩余部分如RPN网络、非极大值抑制操
作等。
[0048] 所述子图1的CNN部分与子图2的BiLSTM部分的分隔为CNN网络的CONV/Relu节点,子图2的BiLSTM与子图3后的分隔节点为BiLSTM的Reshape_1节点,子图1和子图2在FPGA上
执行。
[0049] 所述子图3在CPU上执行,该子图包括CTPN网络剩余部分如RPN网络、非极大值抑制操作等。
[0050] 所述分割中,FPGA加速部分的输出作为子图3中RPN网络的输入。
[0051] 所述分割中,CPU端最终实现网络推断,并得到最终结果。
[0052] 本发明提供一种CTPN网络FPGA端执行的CNN加速器设计方法。CNN加速器是CTPN网络加速器的一部分,本发明提供的CNN加速器设计方法,有利于在异构环境中减少CTPN网络
中,CNN部分的计算时间。
[0053] CTPN加速器包括CNN部分(CNN加速器),RNN部分和其他部分,其中本发明中CNN部分在FPGA上实现,称为CNN加速器。CNN加速部分(CNN加速器)是整个CTPN加速器的重要组成
部分,对其性能影响较大。
[0054] 所述CNN加速器主要由以下几个模块构成:数据读取模块,卷积和激活函数计算模块,池化模块,以及数据写回模块。各个模块之间使用FIFO来连接并完成数据传输,可以实
现完全流水线执行。
[0055] 所述数据读取模块采用多重循环展开和乒乓缓冲的方式搬运数据,高效利用外部内存带宽和减少外部存储器的访问。
[0056] 所述卷积和激活函数计算模块,分别实现卷积和激活函数功能,优化了卷积数据的调度方式,采用多计算单元并行方式,缓冲器累加中间结果的方法提高了计算速度,并且
核心乘累加部分可采用定制算子替换,进一步提高卷积计算的性能。上述各模块中,其中写
回模块的逻辑简单重复度高,采用多任务核心,以提高数据写回外部存储器的并行度,其他
模块都为流水线执行的单任务核心。
[0057] 乘累加部分指卷积操作中的乘累加操作,核心乘累加是指调用最频繁的乘累加操作。
[0058] 所述池化计算模块,同样采用多计算单元并行方式,采用分级大小比较的策略,同一行的数值位于第一级比较,每一行的最大值位于第二级比较,实现了每次计算获取九个
数最大值的功能。可以通过配置参数改变池化核大小。
[0059] 本发明包括一种FPGA端BiLSTM的加速核心设计方法。BiLSTM加速电路是CTPN网络加速器中的一部分,本发明提供的BiLSTM加速核心设计方法,有利于在异构环境中减少
CTPN网络中,RNN部分的计算时间。
[0060] CTPN加速器包括CNN部分,RNN部分和其他部分,其中本发明中RNN部分在FPGA上实现,称RNN的核心是BiLSTM,RNN加速是整个CTPN加速器的重要组成部分,对其性能影响较
大,而BiLSTM是RNN的重要组成部分,对整体性能影响也较大。
[0061] 所述BiLSTM加速核心主要由以下5个模块构成:LSTM权重读取模块(正向和反向共用)、前向LSTM计算模块,后向LSTM计算模块,前向中间数据调度模块(包括循环中间结果h,
c以及特征图等),后向中间数据调度模块。所述5个模块之间采用类似FIFO的连接,实现流
水线执行,提高处理性能:
[0062] 1、按照前向LSTM的计算方向读取特征图信息和bias数据并通过kernel之间的channel将其发送至前向LSTM计算模块。
[0063] 2、将缓存的LSTM中间记忆数据c和输出数据h发送至前向LSTM计算模块参与计算。
[0064] 3、循环等待接收前向LSTM计算模块计算完毕得到新的记忆数据c和输出数据h并更新缓存。
[0065] 后向中间数据调度模块功能上与前向中间数据调度模块相同,对应于后向LSTM计算模块。
[0066] 所述LSTM权重读取模块、前向LSTM计算模块、后向LSTM计算模块均为单任务核心模块。其中前向LSTM计算模块、后向LSTM计算模块并行执行,前向、反向的计算和数据调度
模块分开,所述前向和方向的计算共用权重读取模块。
[0067] 前向LSTM计算模块和后向LSTM计算模块功能相同,并行执行,分别对应于前向和后向LSTM,功能如下:
[0068] 1、接收权重读取模块和中间数据调度模块通过channel发来的权重,特征图以及bias信息,高度并行的计算矩阵乘法;
[0069] 2、接收中间数据调度模块发来的之前的记忆数据c和输出数据h,执行激活函数和点乘,加和等计算;
[0070] 3、将计算得到的新的记忆数据c和输出数据h发送给中间数据调度模块形成闭环完成一轮计算。
[0071] 4、对分块的矩阵乘法在计算过程中实现分块不同精度量化,减小精度损失。
[0072] 所述LSTM权重读取模块通过正向反向LSTM的共用来大幅度减少对外部存储器的重复访问,提高了数据提取的效率。
[0073] 针对多个矩阵乘法在FPGA上分别单独运算效果并不理想,逻辑控制较为复杂而且数据片上缓存较多的问题。所述LSTM计算中进行矩阵重排,矩阵的运算进行拼接并进行交
错重排。
[0074] CTPN网络的主要功能由CNN,RNN和其他部分,功能上依次执行。本发明将CTPN加速器按照运行方式和可加速特点,将这些功能分为三个子图,并分别在CPU或者FPGA上运行,
其中在FPGA运行部分可以实现加速和性能提升,对于不适合FPGA运行部分仍然在CPU上运
行。本发明的优化子模块设计(CNN加速器,BiLSTM加速),能够减少子模块(子图)的执行时
间,本发明的子图划分和执行方式能够减少子模块(子图)之间的数据交互开销,这两者结
合能够提升加速性能。
[0075] 本发明实施例中基于OpenCL实现CTPN网络(场景文字识别网络)FPGA、CPU的异构加速器设计,主要模块包括:CNN(VGG)加速模块、RNN(BiLSTM)加速模块、CPU端调度加速器
的主机函数和CPU端网络子图实现模块,如附图1所示。
[0076] 本发明实施例中针对于CTPN以及类似结构网络的FPGA、CPU异构执行最优化子图分割方法。由于FPGA的资源限制以及性能上的考虑,在FPGA上加速的都是神经网络中并行
性高,但是复杂性较低的操作。CTPN网络的后半部分的RPN网络以及NMS等操作在FPGA上执
行的并行度并不高而且较为复杂,占用FPGA资源,甚至影响卷积计算的性能。对不同的输入
神经网络,需要确定网络各层在异构加速平台上的执行方式。如果FPGA支持该层的运行则
设置该层为FPGA执行,否则设置为CPU。根据网络中各层在网络模型中的位置和硬件的执行
位置,可以把原网络图分成多个子图,其中每个子图都在同一个设备上执行。
[0077] 虽然在FPGA上加速某些网络层如卷积层等效果明显,但是CPU和FPGA之间的数据传输很消耗时间,对性能影响较大。所以子图数量需要越少越好,尽量减少数据在CPU和
FPGA之间的传输次数。所以对于CTPN网络,需要在FPGA、CPU异构加速器设计上进行优化使
得子图划分方式更好。
[0078] 在本发明实施例中,在节点CONV/RELU处和BiLSTM/Reshape_1处对子图进行分割,分割为图2所示的三部分,由于CNN部分以及RNN部分需要消耗大量的运算资源,这两部分被
部署在FPGA上执行,网络的后半部分RPN网络以及RPN网络、非极大值抑制(NMS)以及网络的
后处理操作被部署在CPU上执行,这些操作耗时较短,数据量较少,适合部署在CPU上执行。
[0079] 在本发明实施例中,在平衡了加速器设计以及子图划分方式之后得到了CTPN网络的最优子图划分方法,如附图2所示。在CPU端进行网络预处理之后,将CTPN网络主要划分为
3个子图,最大限度减少了CPU和FPGA之间的传输时间。整个网络运算过程中只有两次CPU和
FPGA的数据交互,对性能的影响已经降到最低。前两个子图都在FPGA上实现加速,两个子图
之间的数据通过FPGA的外部存储器进行交互。其中CTPN网络的VGG特征提取部分在第1个子
图上执行,该子图包含大部分的卷积。RNN序列特征提取部分在第2个子图上执行,其中包含
双向LSTM模块的实现和优化加速。第3个子图在CPU上实现,包含CTPN中除CNN和RNN之外的
部分如RPN网络、非极大值抑制(NMS)以及网络的后处理操作等。
[0080] 本发明实施例中的FPGA端CNN部分(VGG)采用OpenCL加速kernel设计。本发明实施例中CNN加速kernel采用单引擎架构,VGG的多层卷积层分层配置并执行。CTPN中的卷积神
经网络为VGG16网络去除全连接层的部分,共有13层卷积层和四层最大池化层。在最后一层
卷积层之后再进行一次卷积,并将最后的结果输入到BiLSTM部分。该部分网络结构如附图3
所示。
[0081] 本发明实施例中,OpenCL加速kernel主要分为以下几个模块:数据读取模块,卷积激活函数计算模块,池化模块和数据写回模块,除了逻辑简单重复度高的数据读写模块为
NDRange kernel之外其他kernel均为流水线执行的Single Task Kernel。整体的架构图如
附图4所示。
[0082] 数据读取模块负责从全局内存中读取特征图和权重,以及偏置数据。该模块包含两个global buffer,采用Ping‑Pong的方式搬用数据,两个global buffer交替作为数据的
输入来源和输出目的,不需要重复搬运数据,节约了资源,提高了运算速率,提高了缓存区
的利用效率,如附图5所示。内核每次获取一个覆盖卷积滤波器区域的数据窗口,并将数据
缓存在片上缓冲区中。对于连续的卷积过滤操作,从本地存储器重复加载特征图和权重,从
而避免访问外部存储器。该内核同时利用了OpenCL编程的特性:将任务分为多个工作组,每
个工作组又分为多个工作项,每个工作组、工作项之间都是并行的关系,这样大大提高了运
算性能。同时采用了一些OpenCL编译指令进行优化,通过循环展开操作或忽略循环间相关
来提高并行度。
[0083] 卷积激活函数计算模块用来计算数据读取模块传输的数据,对这些数据进行卷积计算。卷积操作通过乘积累加运算来实现,乘积累加运算是占用最多运算时间的部分,我们
借助了RTL代码调用IP的方法对其进行了优化,具体优化方法在实例三中阐释。卷积函数中
采取的乘积累加运算有八个输入数据,每次计算四个特征图输入数据与四个权重数据相乘
后,乘积相加的结果。之后这些结果将会被存入队列,进行累加操作,当每个卷积核层的所
有运算结束后,将累加结果与偏置数据相加后输出,便完成了本次卷积运算。这样的运算存
在于多个工作组中,多个乘积累加单元一同工作,使系统的运算性能大大提升,如附图6所
示。之后在该内核中完成ReLU激活后,数据被写入OpenCL channel,供其他模块读取。
[0084] 数据写回模块负责将运算完成的数据存到全局内存中。该操作需要在之前的所有操作完成之后执行,该模块不同于其他模块,其使用NDRange核心,可以提高数据写回外部
存储器的并行度,提高将数据写入外部存储器的执行效率。
[0085] 池化模块负责对数据进行最大池化(maxpooling)操作。在进行池化操作前同样需要进行内存访问同步,避免出现混乱。池化操作必须在卷积激活操作之后才能开始。池化操
作的基于比较函数,该函数可以返回输入数据中的最大值。池化操作同样分为不同的工作
组和工作项并行执行。每个工作项为一个基本的比较单元,可以比较九个数据,得到其中的
最大值。该流程如附图7所示。执行与否取决于CPU主机函数对于该层的配置信息,不执行则
被旁路。
[0086] CNN中的多层卷积层分层配置并执行。在主机函数中包含了各层的信息,包括数据维度,卷积核大小,步长,激活函数以及是否需要池化等信息。
[0087] 本发明实施例中使用RTL替换OpenCL函数实现更好乘加性能的方法。在CNN网络中包含大量的卷积运算,每个卷积运算都包含许多乘积累加运算(MAC)。卷积基本运算方式如
下:卷积核在图像上滑动,卷积核中元素与图像中元素对应相乘后,再将所有的结果相加,
就完成了一次运算。之后卷积核继续滑动,并进行相同的操作。在硬件实现中,本发明采取
多路并行计算卷积的方法,并行组数为64,该参数可以根据具体需求进行调整。在每个并行
组中,会有八个数据被进行处理。这八个数据分别为四个图像数据与四个权重数据。图像数
据分别与权重数据相乘,之后四个不同的乘积被相加起来,就完成了这个并行组的工作。该
流程示意图如附图8所示。
[0088] 乘积累加操作数量庞大,而且运算量较大。该加速系统主要的速度限制点就在于乘累加操作中。仅使用OpenCL代码编写功能时,编译器不能充分分配FPGA上的DSP资源,性
能不能达到最优。在编译OpenCL时,我们可以设置RTL语言作为OpenCL library。OpenCL函
数可以调用RTL编写的模块。在最终综合分配资源时,RTL语言将会完成预设的功能。该操作
流程如附图9所示。首先我们需要编写好Verilog代码,该代码可以实现八个操作数的乘加
功能,之后利用编译器首先将其综合为library文件。在OpenCL代码中对应的函数中引用该
库中模块,编译时将OpenCL kernel与OpenCL library一同编译,最终可以得到所需的可执
行文件。
[0089] RTL代码中使用了altera_mult_add IP,该IP可以完成指定操作数的乘累加运算。为了保证IP可以与OpenCL中数据类型匹配。我们在设置IP时,将各输入数据位宽设置为
8bit,输出设为32bit。为了保证计算结果的稳定性和正确性,我们在输入输出处设置寄存
器暂存数据。IP内部采用流水线式的运算方式,当数据输入IP后,两个周期可以在输出处得
到结果。该IP的示意图如附图10所示。
[0090] 本发明实施例中,FPGA端BiLSTM采用OpenCL加速kernel设计方法。双向BiLSTM由输入图片信息顺序相反的两个LSTM构成,其输出结果是两个LSTMcell输出结果的叠加。文
字序列是前后关联的,由于BiLSTM从图片的不同方向来进行文字的识别和推测,大大提高
了CTPN网络文字识别的准确率。
[0091] 在FPGA端实现BiLSTM模块的加速,双向LSTM在硬件端可以并行实现。除权重读取共用外,用相同的两组OpenCLkernel来实现,每一组单独实现LSTMcell的功能。LSTMcell单
次循环的算法实现方式如附图11所示,遗忘门ft、输入门it,更新门 输出门ot的计算公式
如下:
[0092] ft=δ(Wf·[ht‑1+xt]+bf)
[0093] it=δ(Wi·[ht‑1+xt]+bi)
[0094]
[0095] ot=δ(Wo·[ht‑1+xt]+bo)
[0096] 后续根据四个门的输出结果计算LSTM循环的中间结果Ct和ht并输入下一层循环。
[0097]
[0098] ht=ot*tanh(Ct)
[0099] δ表示sigmoid激活函数;Wf表示遗忘门权重数据;ht‑1表示上一次循环的中间输出结果h;xt表示当前循环的输入特征图序列数据;bf表示遗忘门偏置;下标t表示当前循环的
结果,t‑1为上次循环的结果,下标f则表示遗忘门相关的数据;WC表示更新门权重;bC表示更
新门偏置;下标C表示更新门相关的数据;Wo表示输出门权重;bo表示输出门偏置;下表o表示
输出门相关的数据。
[0100] 但是八个矩阵乘法分别单独运算在FPGA上计算效果并不理想,逻辑控制较为复杂而且数据片上缓存较多。本发明的解决方法是将八个矩阵的运算拼接并进行交错重排,优
化后的合并重排矩阵如附图12所示。将权重八个矩阵如图水平方向上x和h拼接,竖直方向
上icfo四个门交错排列,xt和ht‑1在竖直方向拼接,这样可以在计算时尽量少存储中间结
果,每算得一组四个itC1tftot之后直接算得当前次计算的h结果并存回存储h的buffer,可
以实现数据无相关性的完全流水线执行,并且可以在不影响矩阵乘法并行计算性能情况下
大幅度节省FPGA的资源。
[0101] 附图13为BiLSTM OpenCL加速kernel的设计模块框图。整个加速kernel由五个模块组成:权重读取模块,前向数据调度模块,后向数据调度模块,前向计算模块,后向计算模
块。各个模块之间通过channel(类似FIFO)来连接并完成kernel之间的数据传输保证各个
kernel流水线执行。
[0102] 由于双向LSTM共用相同的权重,所以前向和反向LSTM共用一个权重读取模块做权重提取,负责每次从外部存储器中提取固定长度的权重分别给到前向和反向的LSTM计算模
块,用于同一个时间点的多个CU并行计算。
[0103] 前向计算模块和后向计算模块是加速器中LSTM部分的主要计算模块,主要完成以下功能:首先需要完成矩阵乘法的乘加计算,需要调用之前用RTL替换的乘加模块计算乘加
并累积结果。之后通过OpenCL中自带的可编译为expf函数完成sigmoid和tanh激活函数的
计算,将四个门的一组计算数据it C1t ft ot得出,最后再得到这一组的h结果,并返回给
下文提到的调度模块。
[0104] 前向数据调度模块和后向数据调度模块分别是前向和反向LSTM bias,h,c,x值调度模块,负责提供与当前提取权重相对应的输入数据(bias,h,c,x,其中一次循环的x和
bias从外部存储器中一次性读取并存于buffer中,h和c一直存于buffer中),之后通过
channel接收来自计算模块的计算结果并写回存储循环中间结果(h,c)的buffer。
[0105] 本发明实施例中,VGG和BiLSTM的权重以及层间数据以int8量化方法。由于在FPGA上实现卷积的浮点运算时间开销太大,所以在整个加速器的CNN和RNN采用int8量化。加速
器的VGG部分,对于权重和层间结果都要进行int8量化。由于卷积中大数对特征提取更为重
要,所以采用最大值映射的方式。量化前后的计算关系式如下,其中sf为量化因子,决定
8bit数的小数点位置:
[0106] FP32 Tensor(T)=scale_fact or(sf)*8‑bit Tensor(t)
[0107] 对于单层卷积来说,假设输入权重的sf值为2^(‑p),上一层输出的层间结果的sf值为2^(q),则当前卷积层输出结果的sf值为2^(q‑p)。其中乘加的中间结果采用int32来存
储,在卷积某一结果累加结束后再将int32的数据根据其sf值转换为int8存储回外部存储
器中。
[0108] 由于采取了矩阵的拼接,权重Wx和Wh的数量级以及分布范围相近,所以BiLSTM模块在权重矩阵拼接重排后可以对整个权重矩阵采用同样的sf值。但是对于由x和循环中间
结果h拼接而成的input矩阵由于x与h的大小差异较大,所以不能在该矩阵中使用相同的sf
值,需要对x和h进行分块分精度int8量化。在矩阵乘法的乘累加中,在累加时需要将x部分
的部分和乘以一个分精度量化系数m,使得矩阵乘法结果无误,计算方法如下所示:
[0109] Sumtotal=m*Sumx+Sumh
[0110] m=sfx/sfh
[0111] sfx表示输入特征图x对应量化因子;sfh表示中间输出结果h对应量化因子。
[0112] 矩阵乘法之后得到的四个门的结果经过激活函数浮点运算后根据sfh来将浮点数转换为int8格式存回local_buffer中。
[0113] 本发明实施例中,CPU端网络子图切割和RPN网络实现方法包括。CPU端网络子图切割,就是在将完整的神经网络模型视作为完整的计算图的基础上,选择网络中适合在CPU上
执行的部分,将该部分的计算图分割出来。在执行完整的网络推断时,被截取的计算图所涉
及到的计算任务由CPU执行。本例中的CPU端网络子图切割在Intel OpenVINO 2020R2软件
框架下进行,通过在命令行参数中声明拟截取的子图起始节点与末尾节点,执行Model 
Optimizer工具下的mo.py脚本来实现。本例中的RPN网络实现方法基于上述CPU端网络子图
切割方法。具体来说,RPN网络是所实现的CTPN网络的组成部分,可以被看作是CTPN网络的
计算图的子图。通过应用上述CPU端网络子图切割方法将RPN网络以子图的形式切割出来,
并在Intel OpenVINO 2020R2软件框架下调用Inference Engine工具下的IENetwork软件
接口对子图形式的RPN网络进行网络推断,从而在CPU端实现RPN网络。
[0114] 本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的
系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微
控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为
是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结
构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部
件内的结构。
[0115] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影
响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相
互组合。