基于G2D实现卷积计算的方法及系统与流程

文档序号:28267287发布日期:2021-12-31 18:51阅读:670来源:国知局
基于G2D实现卷积计算的方法及系统与流程
基于g2d实现卷积计算的方法及系统
技术领域
1.本发明涉及图像智能识别的技术领域,特别涉及一种基于g2d实现卷积计算的方法及系统。


背景技术:

2.卷积是cnn中的基本运算。对cnn进行训练或推理的过程需要进行大量的卷积运算。对图像求卷积的过程是卷积核在图像上滑动,重合部分的数据进行卷积运算,其本质是两个二维数组数据相乘和相加的运算集合。卷积核滑动过程中每次进行的卷积运算相互独立,理论上可以进行并行计算。
3.如果通过cpu进行计算,最多只能以cpu的核数个数来创建对应个线程计算,每个线程中仍然是串行计算,效率非常低下,导致使用cnn训练和应用时的效率非常低,同时设备功耗非常高。随着样本图片的分辨率增加,这种问题会被进一步放大。


技术实现要素:

4.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种基于g2d实现卷积计算的方法,能够有效提高卷积计算效率。
5.本发明还提出一种具有上述基于g2d实现卷积计算的方法的基于g2d实现卷积计算的系统。
6.本发明还提出一种具有上述基于g2d实现卷积计算的方法的计算机可读存储介质。
7.根据本发明的第一方面实施例的基于g2d实现卷积计算的方法,包括以下步骤:根据g2d能处理的数据阈值及卷积核,获取量化参数,并根据所述量化参数将卷积核和图像的数据转换至g2d能处理的数据范围内;根据卷积运算的矩阵乘法实现方法,将卷积核转换成对应的矩阵,基于g2d的bitblt功能,分别将图像和卷积核矩阵填充构造成满足卷积矩阵元素与图像元素相乘的二维数组,得到第一卷积二维数组和第一图像二维数组;基于g2d的blend功能,将所述第一卷积二维数组和所述第一图像二维数组进行相乘操作,得到相乘结果;基于g2d的blend功能,根据所述相乘结果得出卷积输出结果。
8.根据本发明实施例的基于g2d实现卷积计算的方法,至少具有如下有益效果:通过soc(system on chip,系统级芯片)的g2d模块进行计算,可减少cpu或gpu的负担,充分利用系统资源,提高整个系统的算力性能;同时通过g2d进行blend计算,可以并行计算,提高了卷积计算的效率。
9.根据本发明的一些实施例,根据g2d能处理的数据阈值及卷积核,获取量化参数的方法包括:
10.[0011][0012]
其中,s和z为量化参数,r
max
和r
min
为卷积核的最大值与最小值,q
max
和q
min
为g2d模块可处理的整数范围的上限与下限。
[0013]
根据本发明的一些实施例,根据所述量化参数将卷积核和图像的数据转换至g2d能处理的数据范围内包括:
[0014][0015]
其中,r为量化前的数据,q为量化后的数据。
[0016]
根据本发明的一些实施例,所述第一卷积二维数组和所述第一图像二维数组的获取方法包括:将每张图像作为1维行向量i,将(n

2)*(m

2)个i拼成所述第一图像二维数组,其中n*m为每张图像的大小;将所述卷积核扩展为n*m的矩阵,并展开为1*(n*m)的第一行向量,基于所述第一行向量拓展为[(n

2)*(m

2)]*(n*m)的所述第一卷积二维数组,所述第一卷积二维数组中,第i行等于第i

1行右移1个元素并于左侧补0。
[0017]
根据本发明的一些实施例,基于g2d的blend功能,将所述第一卷积二维数组和所述第一图像二维数组进行相乘操作,得到相乘结果包括:基于所述第一卷积二维数组,拆分构造为两个卷积二维数组c0、c1;基于所述第一图像二维数组,拆分构造为两个卷积二维数组c
s
、c
d
;基于blend结果的计算方法:c
r
=c0*c
s
+c1*c
d
,得到所述相乘结果。
[0018]
根据本发明的一些实施例,基于g2d的blend功能,将所述第一卷积二维数组和所述第一图像二维数组进行相乘操作,得到相乘结果包括:根据c
r
=c0*c
s
+c1*c
d
,得到所述相乘结果,其中,配置c1=0,c0为所述第一卷积矩阵数据,c
s
为所述第一图像二维数组。
[0019]
根据本发明的一些实施例,基于g2d的blend功能,根据所述相乘结果得出卷积输出结果包括:按行对所述相乘结果中的元素求和,得到所述卷积输出结果;或者,将所述相乘结果旋转90度,按列对所述相乘结果中的元素求和,得到所述卷积输出结果。
[0020]
根据本发明的一些实施例,基于g2d的blend功能,根据所述相乘结果得出卷积输出结果包括:s410,基于g2d的图像旋转功能,将所述相乘结果旋转90度,得到第二图像d;s420,若图像的大小n*m是偶数,将所述第二图像d的0~[(n*m)/2]

1行作为图d1,d的(n*m)/2~(n*m)

1行作为图d2;若n*m是奇数,将所述第二图像d的0~[(n*m

1)/2]

1行作为图d1,d的(n*m

1)/2~(n*m

1)

1行作为图d2;s430,令c0为1,c1为1,c
s
为d1,c
d
为d2,执行blend操作,得到第三图像e;s440,将所述第三图像e设置为所述第二图像d,重复执行步骤s420,直到得到1*(m

2)的结果;s450,若n*m是偶数,则s440的结果为所述卷积输出结果,如果n*m是奇数,则再将s430的结果与所述第二图像d的n*m

1行进行blend,得出的结果为所述卷积输出结果。
[0021]
根据本发明的第二方面实施例的基于g2d实现卷积计算的系统,包括:量化模块,用于根据g2d能处理的数据阈值及卷积核,获取量化参数,并根据所述量化参数将卷积核和图像的数据转换至g2d能处理的数据范围内;构造模块,用于根据卷积运算的矩阵乘法实现方法,将卷积核转换成对应的矩阵,基于g2d的bitblt功能,分别将图像和卷积核矩阵填充构造成满足卷积矩阵元素与图像元素相乘的二维数组,得到第一卷积二维数组和第一图像二维数组;第一blend模块,用于基于g2d的blend功能,将所述第一卷积二维数组和所述第
一图像二维数组进行相乘操作,得到相乘结果;第二blend模块,用于基于g2d的blend功能,根据所述相乘结果得出卷积输出结果。
[0022]
根据本发明实施例的基于g2d实现卷积计算的系统,至少具有如下有益效果:通过soc(system on chip,系统级芯片)的g2d模块进行计算,可减少cpu或gpu的负担,充分利用系统资源,提高整个系统的算力性能;同时通过g2d进行blend计算,可以并行计算,提高了卷积计算的效率。
[0023]
根据本发明的第三方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面实施例的方法。
[0024]
根据本发明实施例的计算机可读存储介质,至少具有与本发明的第一方面实施例的方法同样的有益效果。
[0025]
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
[0026]
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
[0027]
图1为本发明实施例的方法的流程示意图;
[0028]
图2为本发明实施例之一的方法的详细流程示意图;
[0029]
图3为本发明实施例之二的方法的详细流程示图;
[0030]
图4为本发明实施例的系统的模块示意框图。
[0031]
附图标记:
[0032]
量化模块100、构造模块200、第一blend模块300、第二blend模块400。
具体实施方式
[0033]
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
[0034]
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。在本发明的描述中,步骤标号仅是为了描述的方便或者引述的方便所作出的标识,各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0035]
参照图1,本发明的实施例的方法包括:根据g2d能处理的数据阈值及卷积核,获取量化参数,并根据量化参数将卷积核和图像的数据转换至g2d能处理的数据范围内;根据卷积运算的矩阵乘法实现方法,将卷积核转换成对应的矩阵,利用g2d的bitblt功能,分别将图像和卷积核矩阵填充构造成满足卷积矩阵元素与图像元素相乘的二维数组,得到第一卷积矩阵数据和第一图像二维数组;基于g2d的blend功能,将第一卷积矩阵数据和第一图像
二维数组进行相乘操作,得到相乘结果;基于g2d的blend功能,根据相乘结果得出卷积输出结果。
[0036]
下面将详述本发明的实施例之一的方法。参照图2,本发明的实施例之一中包括如下步骤s100至s400中的所述的方法。
[0037]
s100,获取卷积核的量化参数,根据该量化参数对卷积核中的每个元素及图像数据进行量化处理,使量化后的卷积核和图像数据为g2d模块能够处理的数据范围内。
[0038]
由浮点数到整数的量化处理方法如下:
[0039][0040]
其中q是整数,r是浮点数,s为整数量化后可以表示的最小刻度,z表示浮点数0点对应的整数0点位置。即,s和z为待求解的量化参数。
[0041]
s的求法如下:
[0042][0043]
z的求法如下:
[0044][0045]
其中,r
max
和r
min
为卷积核的最大值与最小值,q
max
和q
min
为g2d模块可处理的整数范围的上限与下限。
[0046]
例如,卷积核的最大值是10.5,最小值是

10.5,g2d处理的整数范围是[0,255],则量化的参数是:
[0047][0048][0049]
以3x3的卷积核,步长为1,填充(padding)为0举例说明。对矩阵进行量化处理指利用公式将矩阵中的每个元素进行处理,量化处理时,r对应于量化前的矩阵中的元素,q对应于量化后的矩阵中的元素。
[0050]
假设翻转后并经过量化处理的卷积核为k:
[0051][0052]
图像的大小为n*m,可将其看作1维行向量i:
[0053]
i=[x
0 x
1 x2ꢀ…ꢀ
x
n*m
‑1]
[0054]
s200,根据卷积运算的矩阵乘法实现方法,将卷积核转换成对应的矩阵,利用g2d的bitblt功能,分别将图像和卷积核矩阵填充,构造成满足卷积矩阵元素与图像元素相乘的二维数组。分别通过将图像及卷积核进行拼接构造,得到第一图像二维数组及第一卷积核二维数组。图2中先构造第一图像二维数组再构造第一卷积核二维数组的顺序仅为示例,两者的顺序可以前后颠倒,本发明的实施例并不对获取第一图像二维数组和第一卷积核二
维数组的先后顺序进行限制;图3中与此类似,不再复述。
[0055]
详细方法步骤如下:
[0056]
s210,根据卷积核的属性特征,获取输出图像的大小:
[0057][0058][0059]
得到输出图像的大小为(n

2)*(m

2),其中h
i
、w
i
分别表示输入图像的高和宽,h
k
、w
k
分别表示卷积核的高和宽。使用bitblt功能,将(n

2)*(m

2)个i拼成一幅图a(图a相当于第一图像二维数组),a的步幅(stride)可以看作是n*m,则a的大小是[(n

2)*(m

2)]*(n*m)。
[0060][0061]
s220,将卷积核k拓展成与图像i大小一致的n*m的矩阵:
[0062][0063]
将该矩阵展开当作1*(n*m)行向量,
[0064]
[w
0 w
1 w
2 0
ꢀ…ꢀ
0 w
3 w
4 w
5 0
ꢀ…ꢀ
0 w
6 w
7 w
8 0
ꢀ…ꢀ
0]
[0065]
基于该行向量进一步拓展成[(n

2)*(m

2)]*(n*m)的矩阵k`(矩阵k`相当于第一卷积核二维数组),其中第i行等于第i

1行向右移1个元素并且左侧补0的结果。例如第二行为:
[0066]
[0 w
0 w
1 w
2 0
ꢀ…ꢀ
0 w
3 w
4 w
5 0
ꢀ…ꢀ
0 w
6 w
7 w
8 0
ꢀ…ꢀ
0]
[0067]
s300,利用g2d的blend功能,将卷积核矩阵的数组k`和图像a的数组进行相乘操作。
[0068]
此时k`和a是大小一致的二维数组,根据blend结果的计算方法:
[0069]
c
r
=c0*c
s
+c1*c
d
[0070]
可以设置c1为0,c0为k`,cs为a,对k`、a进行blend处理,得到图像b,b的大小为同样是[(n

2)*(m

2)]*(n*m),b的每个元素是k`和a元素直接相乘的结果。
[0071]
s400,利用g2d的blend功能,根据相乘的结果,得到卷积输出结果。
[0072]
可以直接将相乘结果b进行按行求和,得到最终的结果。
[0073]
根据卷积计算方法,b的每行之和就是卷积核进行卷积运算的结果,所以对b的行进行求和,即可的到卷积输出的图像,求和操作为:定义图像c,循环将b的每行所有元素相加到c中,最终c就是卷积输出的图像,c的大小为(n

2)*(m

2)。
[0074]
上述s400在计算时,需要进行[(n

2)*(m

2)]*(n*m)次相加运算,为了减少运算的次数,也可以使用如图3所示的方法进行优化。即将输出图像平分为上下两部分,执行blend
操作,直到执行至最后一行。具体地,如下述步骤s410至s450所述。
[0075]
s410,使用g2d的图像旋转功能,对b进行旋转

90度,得到(n*m)*[(n

2)*(m

2)]的图像d。
[0076]
显然,此时对d的各列元素求和,相当于对b的各行元素求和,同样可以得到卷积输出结果c;但这样并没有减少运算次数。
[0077]
s420,将图像d按行均分为两张图d1和d2。
[0078]
如果n*m是偶数,将d的0~[(n*m)/2]

1行看成图d1,d的(n*m)/2~(n*m)

1行看成图d2;如果n*m是奇数,将d的0~[(n*m

1)/2]

1行看成图d1,d的(n*m

1)/2~(n*m

1)

1行看成图d2。
[0079]
s430,将d1和d2进行blend,得到[(n*m)/2]*[(n

2)*(m

2)]的图e。
[0080]
即可在blend计算中,c
r
=c0*c
s
+c1*c
d
中,令c0为1,c1为1,c
s
为d1,c
d
为d2,相当于c
r
=d1+d2。
[0081]
s440,将e设置为d,返回执行步骤s430,直到最后得到1*(m

2)的结果。
[0082]
s450,如果n*m是偶数,则s440的结果是最终结果;如果n*m是奇数,则再将s430的结果e与d的n*m

1行进行blend,得出的结果为最终结果。
[0083]
更进一步,可以利用更多的内存空间来减少blend的次数。根据blend结果的计算方法:
[0084]
c
r
=c0*c
s
+c1*c
d
[0085]
在上述介绍的方法中,当设定c1为0,即blend实际执行的计算为:c
r
=c0*c
s
。如果构造合适的卷积核二维数组核图像二维数组,把c1*cd利用起来,那么执行一次blend将会同时进行乘加操作,从而可以减少一次blend的操作。具体方法的示例如下。
[0086]
上述构造卷积核核图像二维数组时,得到k`和a两个大小均为[(n

2)*(m

2)]*(n*m)的二维数组,分别抽取1~[(n

2)*(m

2)]*(n*m)/2列和[[(n

2)*(m

2)]*(n*m)/2]+1~[(n

2)*(m

2)]*(n*m)列,分别组成大小为[(n

2)*(m

2)]*(n*m)/2的矩阵k
′1和k'2,a1和a2。
[0087]
使k
′1作为c0,a1作为c
s
,k'2作为c1,a2作为c
d
,执行一次blend,然后得到大小为[(n

2)*(m

2)]*(n*m)/2的r,此时再对r的行进行求和或者旋转

90度后进行列求和,同样可以得出同样的结果。
[0088]
本发明实施例的系统,参照4,包括:量化模块100,用于根据g2d能处理的数据阈值及卷积核,获取量化参数,并根据量化参数将卷积核和图像的数据转换至g2d能处理的数据范围内;构造模块200,用于根据卷积运算的矩阵乘法实现方法,将卷积核转换成对应的矩阵,基于g2d的bitblt功能,分别将图像和卷积核矩阵填充构造成满足卷积矩阵元素与图像元素相乘的二维数组,得到第一卷积二维数组和第一图像二维数组;第一blend模块300,用于基于g2d的blend功能,将第一卷积二维数组和第一图像二维数组进行相乘操作,得到相乘结果;第二blend模块400,用于基于g2d的blend功能,根据相乘结果得出卷积输出结果。
[0089]
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,
对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
[0090]
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
[0091]
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
[0092]
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
[0093]
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
[0094]
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
[0095]
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1