卷积运算装置、方法、电子设备及介质

文档序号:28636365发布日期:2022-01-26 17:12阅读:101来源:国知局
卷积运算装置、方法、电子设备及介质

1.本公开涉及卷积神经网络硬件加速领域,特别是涉及一种卷积运算装置、方法、电子设备及介质。


背景技术:

2.卷积神经网络(convolutional neural networks,cnn)是深度学习的代表算法之一。cnn因其在人工智能领域的卓越性能,被广泛关注并应用于图像分类、语音识别、人脸识别、自动驾驶以及医学成像等高科技应用中。目前已涌现出如alexnet、vgg、resnet等性能优秀的cnn结构。随着cnn的持续发展,网络结构日益复杂,参数数量爆炸增长,对cnn硬件加速器的设计提出新的挑战。
3.由于现场可编程门阵列(field programmable gate array,fpga) 出色的灵活编程性和突出的性能功耗比,目前主流的cnn正向推断加速器多采用基于fpga的加速方案。cnn是计算密集型结构,其中海量的矩阵卷积计算对加速器设计带来挑战。为了达到更好的加速效果,很多经典cnn fpga加速器设计都聚焦于矩阵卷积计算结构的优化。
4.在矩阵卷积运算过程中,相邻卷积窗口有大量的数据交叠,在 cnn fpga加速器中,这些数据的交叠在电路实现时,往往会带来对输入数据的重复读取。通常输入数据被存储在存储模块中,而对这些存储模块的重复访问不但会带来额外的动态功耗,还会降低加速器的时序性能。为优化实现矩阵卷积计算结构,需要尽可能减少对输入矩阵数据的重复读取。
5.在传统的矩阵卷积计算结构中,相邻卷积窗口的数据交叠是以多次重复访问输入数据为代价实现的。在一些优化的矩阵卷积计算结构中,虽然通过结构创新实现了输入数据的复用,但是依旧存在一定程度的输入数据重复读取。而与之相对的,还有一些优化的矩阵卷积计算结构,虽然避免了输入矩阵数据的重复读取,但为此牺牲了结构的灵活度和计算结果的输出速度。


技术实现要素:

6.(一)要解决的技术问题
7.针对于上述技术问题,本公开提出一种卷积运算装置、方法、电子设备及介质,用于至少部分解决上述技术问题。
8.(二)技术方案
9.根据本公开第一方面,提供一种卷积运算装置,用于对输入矩阵及权值矩阵进行卷积运算,包括:水平数据处理模块,用于对输入矩阵的行数据的顺序进行转换,以实现读取的行数据的共享,其中,一个水平数据处理模块处理一行行数据;竖直数据处理模块,用于将权值矩阵与水平数据处理模块输出的矩阵数据做乘法运算,对乘法运算结果做交叉加法运算,对交叉加法运算结果做累加运算,得到输入矩阵的卷积运算结果;其中,竖直数据处理模块包括多个输入,每个输入连接至一个水平数据处理模块的输出。
10.可选地,水平数据处理模块包括:第一移位寄存器链、第二移位寄存器链以及第一多路选择器,第一移位寄存器链的输出连接至第二移位寄存器链的输入,第二移位寄存器链的输出连接至第一移位寄存器链的输入;第一移位寄存器链、第二移位寄存器链以及第一多路选择器基于fpga芯片实现;第一多路选择器用于选择行数据输入的移位寄存器链;第一移位寄存器链及第二移位寄存器链用于对行数据进行移位,将行数据转换成卷积窗口所需要的单行数据顺序;其中,当第一移位寄存器链或第二移位寄存器链的最后一个移位移位寄存器的输出数据为相邻卷积窗口的交叠数据时,第一移位寄存器链将此时最后一个移位移位寄存器的输出数据输入至第二移位寄存器链,或第二移位寄存器链将此时最后一个移位移位寄存器的输出数据输入至第一移位寄存器链。
11.可选地,竖直数据处理模块包括:乘法器、加法树、累加器及第二多路选择器,乘法器、加法树、累加器及第二多路选择器基于fpga 芯片实现;第二多路选择器用于选择当前执行的数据运算通路;乘法器用于将权值矩阵的每行数据与对应的水平数据处理模块输出的矩阵数据做乘法运算;加法树用于对乘法运算的结果做交叉加法运算;累加器用于对交叉加法运算的结果做累加运算,得到卷积运算结果。
12.可选地,卷积运算装置还包括:存储单元,存储单元的数量与输入矩阵的行数相同,每一个存储单元用于存储一行输入矩阵的行数据。
13.可选地,存储单元按照预设时序向水平数据处理模块输入行数据,包括:卷积运算开始时,存储单元连续k个时钟周期内,每一个时周期钟按照行数据中元素的排列顺序,向水平数据处理模块输入行数据的中的一个元素;之后间隔(k-s)个时钟周期,存储单元不向水平数据处理模块输入数据;间隔(k-s)个时钟周期之后,存储单元连续s 个时钟周期内,每一个时周期钟按照行数据中元素的排列顺序,向水平数据处理模块输入行数据的中的一个元素;其中,k为权值矩阵的尺寸,s为卷积运算的跨度大小。
14.可选地,第一移位寄存器链及第二移位寄存器链的长度为(k-s),其中,k为权值矩阵的尺寸,s为卷积运算的跨度大小。
15.可选地,累加器在执行累加运算的过程中,每k个时钟周期输出累加运算的结果,并将累加运算的起始值清零。
16.根据本公开第二方面,提供一种卷积运算方法,用于对输入矩阵及权值矩阵进行卷积运算,包括:将输入矩阵按行分割,将每一行数据分别存储在一个存储单元中;存储单元按照预设时序向其对应的水平数据处理模块输入行数据,以对输入矩阵的行数据的顺序进行转换;将每一个水平数据处理模块转化后的矩阵数据输入竖直数据处理模块,以使竖直数据处理模块对权值矩阵与转化后的矩阵数据依次进行乘法运算、交叉加法运算及累加运算,得到卷积运算结果。
17.根据本公开第三方面,提供一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器实现上述卷积运算方法。
18.根据本公开第四方面,提供一种计算机可读存储介质,存储有计算机可执行指令,指令在被执行时用于实现上述卷积运算方法。
19.(三)有益效果
20.本公开提出一种卷积运算装置、方法、电子设备及介质,有益效果为:
21.1、该卷积运算装置首先将输入矩阵按照行分割后分别对每一行数据进行顺序转换,以将输入矩阵数据转换成水平卷积窗口所需的单行数据顺序,实现水平方向上输入矩阵读取的数据的共享。然后,对转换后的行数据在竖直方向上与权值矩阵依次进行乘法运算、交叉加法运算以及累加运算,实现了输入矩阵竖直方向的数据共享。两者相互结合避免了矩阵卷积运算中数据的重复读取,从而显著降低了冗余的访存,降低了整体算法运行所需的能耗。
22.2、将不同行的矩阵数据分别存储于不同的存储单元,存储单元按照预设时序向水平数据处理模块输入输入矩阵的行数据,通过优化数据的存储方式及输出方式,进一步优化实现卷积运算过程中读取数据的共享。
23.3、该卷积运算装置硬件单元的尺寸或数量或数据输出方式或运算方式可根据卷积运算的参数进行灵活设计,以适应不同的矩阵尺寸和卷积跨度,也即该卷积运算装置具有高度的灵活性。
附图说明
24.为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。其中:
25.图1示意性示出了卷积运算过程的运算流程图;
26.图2示意性示出了根据本公开实施例的输入矩阵的按行分割的结构图;
27.图3示意性示出了根据本公开实施例的按照预设时序输出数据的结果图;
28.图4示意性根据本公开实施例的一种水平数据处理单元的电路结构图;
29.图5示意性根据本公开实施例的水平数据处理单元处理后的产生的卷积窗口单行数据图;
30.图6示意性根据本公开实施例的一种竖直数据处理单元的电路结构图;
31.图7示意性示出了根据本公开实施例的卷积运算方法的流程图;
32.图8示意性示出了根据本公开实施例的电子设备的框图。
具体实施方式
33.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
34.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本发明。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
35.本公开提供了一种卷积运算方法及能够运用该方法的卷积运算装置,可对输入矩阵及权值矩阵进行卷积运算。该卷积运算装置包括:水平数据处理单元及竖直数据处理单元,水平数据处理模块,用于对输入矩阵的行数据的顺序进行转换,以实现读取的行数据的
共享,其中,一个水平数据处理模块处理一行所述行数据。竖直数据处理模块,用于将权值矩阵与水平数据处理模块输出的矩阵数据做乘法运算,对乘法运算结果做交叉加法运算,对交叉加法运算结果做累加运算,得到输入矩阵的卷积运算结果;其中,竖直数据处理模块包括多个输入,每个输入连接至一个水平数据处理模块的输出。该装置通过将输入矩阵数据分别在水平方向上和竖直方向时进行运算,同时实现了输入矩阵水平方向及竖直方向的数据共享,避免了卷积运算过程中数据的重复读取,并且保证了卷积运算的灵活性及运算速度。
36.在本公开一实施例中,该卷积运算装置还可以包括存储单元,所述储存单元的数量与输入矩阵的行数相同,每一个存储单元用于存储一行输入矩阵的行数据,从而实现将不同行的数据存储在不同的存储单元中。
37.存储单元例如可以按照预设时序向水平数据处理模块输入所述行数据,具体包括:卷积运算开始时,存储单元连续k个时钟周期内,每一个时周期钟按照行数据中元素的排列顺序,向水平数据处理模块输入所述行数据的中的一个元素。之后间隔(k-s)个时钟周期,存储单元不向水平数据处理模块输入数据。间隔(k-s)个时钟周期之后,存储单元连续s个时钟周期内,每一个时周期钟按照行数据中元素的排列顺序,向水平数据处理模块输入所述行数据的中的一个元素。其中,所述k为所述权值矩阵的尺寸,所述s为卷积运算的跨度大小。
38.在本公开一实施例中,水平数据处理模块例如可以包括第一移位寄存器链、第二移位寄存器链以及第一多路选择器。第一移位寄存器链的输出连接至第二移位寄存器链的输入,第二移位寄存器链的输出连接至第一移位寄存器链的输入;第一移位寄存器链、第二移位寄存器链以及第一多路选择器基于fpga芯片实现。其中,第一多路选择器用于选择行数据输入的移位寄存器链,第一移位寄存器链及第二移位寄存器链用于对行数据进行移位,将行数据转换成卷积窗口所需要的单行数据顺序。其中,当第一移位寄存器链或第二移位寄存器链的最后一个移位移位寄存器的输出数据为相邻卷积窗口的交叠数据时,第一移位寄存器链将此时最后一个移位移位寄存器的输出数据输入至第二移位寄存器链,或第二移位寄存器链将此时最后一个移位移位寄存器的输出数据输入至第一移位寄存器链。其中,第一移位寄存器链及第二移位寄存器链的长度例如可以为(k-s)。
39.在本公开一实施例中,竖直数据处理模块例如可以包括:乘法器、加法树、累加器及第二多路选择器,乘法器、加法树、累加器及第二多路选择器可以基于fpga芯片实现。
40.第二多路选择器用于选择当前执行的数据运算通路。乘法器用于将权值矩阵的每行数据与对应的水平数据处理模块输出的矩阵数据做乘法运算。加法树用于对乘法运算的结果做交叉加法运算。累加器用于对交叉加法运算的结果做累加运算,得到卷积运算结果。
41.为了更加清楚的阐述上述卷积运算装置的结构,下面以一个具体的实例对卷积运算装置进行介绍。应当理解,该实例只是示例性的,并不用于限制本公开。
42.在进行具体的介绍之前,先对矩阵的卷积运算做一个简要的介绍。
43.图1示意性示出了卷积运算过程的运算流程图。
44.如图1所示,该卷积运算的尺寸为7*7,权值矩阵的尺寸为3*3,卷积跨度为2,输出矩阵的尺寸为3*3。3*3的卷积窗口在输入矩阵上以步长2为间隔滑动,每个卷积窗口内的9个输入数据与对应位置的权值数据相乘,乘法结果累加得到输出矩阵中的一个数值,也即
最终的卷积运算结果。
45.为简化说明,本公开实施例以大小为5*5的输入矩阵、3*3的权值矩阵、3*3的输出矩阵、卷积跨度为1的矩阵卷积过程为例进行示例说明
46.图2示意性示出了根据本公开实施例的输入矩阵的按行分割的结构图。
47.如图2所示,输入矩阵被按行分割,不同行的输入数据存储在不同的存储单元(bram)中。每一个存储单元独立为一个水平数据处理模块(data conversion unit,dcu)提供数据。存储单元可以是片上存储。
48.存储单元按照一定的时序向dcu输出数据,具体执行时序为:
49.(1),计算开始时,连续k个时钟周期每一时钟输出输入矩阵数据中的一个元素。
50.(2),之后间隔k-s个时钟周期,在此间隔中存储单元不输出数据。
51.(3),间隔之后连续s个时钟周期每一时钟输出输入矩阵数据的一个元素。
52.上述步骤(1)仅在存储单元最初输出数据时执行一次,之后重复执行(2)及(3),直至每一行数据的所有元素均输出至dcu。
53.图3示意性示出了根据本公开实施例的按照预设时序输出数据的结果图。
54.如图3所示,此时k的取值为3,s的取值为1,最初连续3个时钟周期每一时钟输出输入矩阵数据中的一个元素(图3中所示的0、1、 2);之后每间隔2个时钟周期后,输出输入矩阵数据的一个元素(图 3中所示的3、4)。
55.图4示意性根据本公开实施例的一种水平数据处理单元的电路结构图。
56.如图4所示,dcu由多路选择器、ab两组移位寄存器链及控制状态机组成,其中每组移位寄存器链的长度为(k-s)。clk代表时钟信号,d为寄存器输入,q为寄存器输出,mux为多路选择器,c为通路切换开关。
57.在状态机的控制下,从存储单元输入的数据首先进入a组移位寄存器链。当a组移位寄存器链的最后一个寄存器输出数值为水平相邻卷积窗口的交叠数据时,a组的输出数据被同时传输给输出寄存器和 b组移位寄存器链。当a组完成一个卷积窗口单行数据输出时,输入数据被传输到b组移位寄存器链。之后b组中存储的从a组共享的交叠卷积窗口数据以及新的输入数据一起组成了相邻水平方向卷积窗口所需的单行数据。同理,当b组的输出数值为水平相邻卷积窗口的交叠数据时,b组的输出数据被同时传输给输出寄存器和a组移位寄存器链。通过上述过程,数据交替地通过a、b组移位寄存器链,并按照如图5所示的时序将单行的输入矩阵数据转换成水平卷积窗口所需的单行数据顺序。图中两侧虚线框中的数据为a组移位寄存器链产生的卷积窗口单行数据,中间的虚线框中的数据为b组移位寄存器链产生的卷积窗口单行数据。通过上述数据处理过程,dcu可以实现从输入矩阵中读取的数据的共享,从而避免了输入矩阵水平方向的数据重复读取。
58.图6示意性根据本公开实施例的一种竖直数据处理单元的电路结构图。
59.如图6所示,该竖直数据处理模块由乘法器、加法树、累加器组成。in代表来自dcu的输入数据,wi为权值矩阵的第i行数据,addertree为加法树,mux为多路选择器,acc为累加器,outtemp为中间计算结果,out为矩阵卷积的计算输出结果。
60.各个dcu的输出数据被按照需要扇出到对应的乘法器。权值矩阵被按行分割,每行的权值数据被周期地输入到对应的乘法器。乘法器的计算结果被交叉传输到加法树中,完成竖直卷积窗口对应乘法结果的求和。加法树的计算结果在累加器中完成累加,每k个时钟
周期累加结果被输出且累加起始值被清零。
61.结合图2、图3、图5及图6,in0的输入数据(0 1 2 1 2 3 2 3 4) 与周期性输入的权值矩阵的第一行数据(0 1 2 0 1 2 0 1 2)进行乘法运算,其结果输入adder tree 0,in1的输入数据(5 6 7 6 7 8 7 8 9) 扇出成两路数据,一路数据与周期性输入的权值矩阵的第二行数据(34 5 3 4 5 3 4 5)进行乘法运算,其结果输入adder tree 0,in2的输入数据(10 11 12 11 12 13 12 13 14)扇出成三路数据,一路数据与周期性输入的权值矩阵的第三行数据(6 7 8 6 7 8 6 7 8)进行乘法运算,其结果输入adder tree 0,adder tree 0对输入的三路结果进行加法运算。同理,adder tree 1与adder tree 2执行与adder tree 0类似的运算,从而实现了对个乘法器结果的交叉加法运算。
62.该竖直数据处理单元通过dcu数据扇出和乘法器结果交叉求和,实现了输入矩阵竖直方向的数据共享,避免了输入矩阵竖直方向数据的重复读取。
63.通过本公开实施例水平数据处理模块和竖直数据处理模块共同组成了矩阵卷积运算装置,从而避免对输入矩阵数据的重复读取,且保证矩阵卷积的其他性能不受干扰。此外,该卷积运算装置具有高度的灵活性,可以根据矩阵卷积的参数变化进行调整,以适应不同的矩阵尺寸和卷积跨度。具体调整方法为:根据需求调整水平数据处理模块中移位寄存器链的长度;调整竖直数据处理模块中dcu数据的扇出方式、权值数据供给方式、加法树输入数据的交叉供给方式、累加器累加周期。
64.综上所述,本公开实施例提供一种矩阵卷积运算装置,首先将输入矩阵按照行分割后分别对每一行数据进行顺序转换,以将输入矩阵数据转换成水平卷积窗口所需的单行数据顺序,实现水平方向上输入矩阵读取的数据的共享。然后,对转换后的行数据在竖直方向上与权值矩阵依次进行乘法运算、交叉加法运算以及累加运算,实现了输入矩阵竖直方向的数据共享。两者相互结合避免了矩阵卷积运算中数据的重复读取,从而显著降低了冗余的访存,降低了整体算法运行所需的能耗。进一步的,将不同行的矩阵数据分别存储于不同的存储单元,存储单元按照预设时序向水平数据处理模块输入输入矩阵的行数据,通过优化数据的存储方式及输出方式,进一步优化实现卷积运算过程中读取数据的共享。此外该卷积运算装置硬件单元的尺寸或数量或数据输出方式或运算方式可根据卷积运算的参数进行灵活设计,以适应不同的矩阵尺寸和卷积跨度,也即该卷积运算装置具有高度的灵活性。
65.图7示意性示出了根据本公开实施例的卷积运算方法的流程图,该方法基于上述所述的卷积运算装置实现。
66.如图7所示,该卷积运算方法例如可以包括操作s701~s703。
67.在操作s701,将输入矩阵按行分割,将每一行数据分别存储在一个存储单元中。
68.在操作s702,存储单元按照预设时序向其对应的水平数据处理模块输入行数据,以对输入矩阵的行数据的顺序进行转换。
69.在操作s703,将每一个水平数据处理模块转化后的矩阵数据输入竖直数据处理模块,以使所竖直数据处理模块对权值矩阵与转化后的矩阵数据依次进行乘法运算、交叉加法运算及累加运算,得到卷积运算结果。
70.方法实施例部分的实施方式以技术效果与装置实施例部分相似,具体细节请参见装置实施例部分,此处不再赘述。
71.图8示意性示出了根据本公开实施例的电子设备的框图。图8示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
72.如图8所示,电子设备800包括处理器810、计算机可读存储介质 820。该电子设备800可以执行根据本公开实施例的方法。
73.具体地,处理器810例如可以包括通用微处理器、指令集处理器和 /或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器810还可以包括用于缓存用途的板载存储器。处理器810可以是用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
74.计算机可读存储介质820,例如可以是非易失性的计算机可读存储介质,具体示例包括但不限于:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram) 或闪存;等等。
75.计算机可读存储介质820可以包括计算机程序821,该计算机程序 821可以包括代码/计算机可执行指令,其在由处理器810执行时使得处理器810执行根据本公开实施例的方法或其任何变形。
76.计算机程序821可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序821中的代码可以包括一个或多个程序模块,例如包括821a、模块821b、
……
。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器 810执行时,使得处理器810可以执行根据本公开实施例的方法或其任何变形。
77.本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
78.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
79.本领域技术人员可以理解,尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1