一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种图像矩阵卷积的实现方法、计算设备及储存介质与流程

2021-12-01 01:31:00 来源:中国专利 TAG:

一种图像矩阵卷积的实现方法、计算设备及储存介质
1.本技术是2021年8月02日提交的发明专利申请2021108783669的分案申请。
技术领域
2.本发明涉及数据处理技术领域,特别涉及一种图像矩阵卷积的实现方法、计算设备及储存介质。


背景技术:

3.在信息化时代,对于数据处理(例如图像数据)的实时性、高效性的要求越来越高,图像矩阵卷积作为非常基础的数据处理手段而处于至关重要的地位,因此提高图像矩阵卷积的计算效率是目前关注的主要问题。
4.已有技术中,多通过算法提高图像矩阵卷积的计算效率,例如im2col算法等。im2col算法可以理解为是提前将二维的图像矩阵根据卷积核的大小,按从左到右、从上到下的顺序展开为了一个个的行,而新的行在内存中连续分布,相当于将原矩阵展开为行矩阵。进行卷积运算时由于内存分布连续,因此大幅降低了缓存未命中的概率,显著提高了访问内存的速度。但是,上述的图像矩阵卷积过程中仅仅根据软件的功能,然而仅依赖编译器实现图像矩阵卷积,计算速度有所限制,若要提高计算效率,需要接入额外的设备,使得已有的图像矩阵卷积实现繁琐,且效率低下。
5.为此,丞需提供一种高效的图像矩阵卷积的实现方法,以解决上述问题。


技术实现要素:

6.为此,本发明提供一种图像矩阵卷积的实现方法,以力图解决或者至少缓解上面存在的问题。
7.根据本发明的一个方面,提供了一种图像矩阵卷积的实现方法,在计算设备中执行,方法包括:
8.获取待卷积图像矩阵和卷积核,其中,所述待卷积图像矩阵的每一元素为图像的像素值;
9.将待卷积图像矩阵展开为行矩阵,得到第一展开图像矩阵;
10.将第一展开图像矩阵转换为列矩阵,得到第二展开图像矩阵,其中,第二展开图像矩阵中每一行数据大小为计算设备中cpu的向量寄存器的大小;
11.将卷积核展开为以第二展开图像矩阵的列数作为列数、以卷积核大小作为行数的矩阵,得到第三展开矩阵,其中,第三展开矩阵中每一行数据大小为向量寄存器的大小;
12.将第二展开图像矩阵和第三展开矩阵进行卷积运算,得到图像矩阵的卷积结果矩阵,所述卷积结果矩阵为图像矩阵的特征矩阵。
13.可选地,将待卷积图像矩阵展开为行矩阵,得到第一展开图像矩阵的步骤包括:
14.根据卷积核的大小,通过im2col算法将待卷积图像矩阵展开为行矩阵,作为第一展开图像矩阵。
15.可选地,还包括步骤:
16.将待卷积图像矩阵进行归一化处理,使得得到的待卷积图像矩阵中每一元素大小为向量寄存器支持浮点数据运算的浮点数据的大小。
17.可选地,还包括步骤:
18.为第一展开图像矩阵分配连续的内存地址,作为第一内存空间;
19.将第一展开图像矩阵保存至第一内存空间。
20.可选地,将第一展开图像矩阵转换为列矩阵,得到第二展开图像矩阵的步骤包括:
21.确定向量寄存器可同时执行浮点数据运算的次数,将执行浮点数据运算的次数作为第一数值;
22.将第一展开图像矩阵相邻的行中、每一列的元素作为一组数据,以一组数据作为矩阵的一行元素,其中,第一展开图像矩阵相邻行的行数与第一数值相等;
23.当第一展开图像矩阵余下的行数少于第一数值时,通过零元素将第一展开图像矩阵中缺失的元素补齐至余下的行数与第一数值相等,得到第二展开图像矩阵。
24.可选地,还包括步骤:
25.为第二展开图像矩阵分配连续的内存地址,作为第二内存空间;
26.将第二展开图像矩阵保存至第二内存空间中。
27.可选地,还包括步骤:
28.将卷积核中每一元素大小强制转换为向量寄存器支持浮点数据运算的浮点数据的大小;
29.其中,将卷积核展开为以第二展开图像矩阵的列数作为列数、以卷积核大小作为行数的矩阵,得到第三展开矩阵的步骤包括:
30.按照第一预设规则将转换后的卷积核中每一个元素复制为第二展开图像矩阵的列数个,得到一组相同数据,其中,第一预设规则为由左至右、由上至下的顺序规则;
31.按照复制的顺序依次将得到的一组相同的数据作为矩阵的一行元素,得到第三展开矩阵。
32.可选地,还包括步骤:
33.为第三展开矩阵分配连续的内存地址,作为第三内存空间;
34.将第三展开矩阵保存至第三内存空间。
35.可选地,将第二展开图像矩阵和第三展开矩阵进行卷积运算,得到卷积结果矩阵的步骤包括:
36.根据待卷积图像矩阵和卷积核确定卷积结果矩阵的大小;
37.将第二展开图像矩阵根据第三展开矩阵的大小划分为多组矩阵,其中,每一组矩阵的行数和列数与第三展开矩阵的相同,各组矩阵中的每一行元素不重叠;
38.将各组矩阵与第三展开矩阵进行卷积运算,得到各组矩阵中每一元素的卷积结果;
39.将各组矩阵的最后一行元素的卷积结果,按照第一预设规则写入卷积结果矩阵中。
40.可选地,将各组矩阵的最后一行元素的卷积结果,按照第一预设规则写入卷积结果矩阵中的步骤包括:
41.若各组矩阵的最后一行元素的卷积结果的总个数大于卷积结果矩阵的大小,从各组矩阵的最后一行元素的卷积结果中选取前卷积核大小个卷积结果,按照第一预设规则写入卷积结果矩阵中。
42.可选地,将各组矩阵与第三展开矩阵进行卷积运算,得到各组矩阵中每一元素的卷积结果的步骤包括:
43.从多组矩阵的任一组矩阵中读取一行元素,作为第一组元素;
44.从第三展开矩阵中读取与第一组元素的行数相等的一行元素,作为第二组元素;
45.将第一组元素中的每一元素与第二组元素中对应位置的元素做乘积,将乘积结果与每一元素相同列数、上一行元素的卷积结果求和,得到每一元素的卷积结果。
46.可选地,向量寄存器支持的浮点数据运算的浮点数据大小为16位、32位和64位中的任意一个。
47.可选地,计算设备的cpu支持simd指令集,计算设备的cpu包括向量寄存器。
48.根据本发明的一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述的方法的指令。
49.根据本发明的一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述的方法。
50.根据本发明的技术方案,提供了一种图像矩阵卷积的实现方法,该方法中,首先获取待卷积图像矩阵和卷积核,根据卷积核的大小将待卷积图像矩阵展开为行矩阵,得到第一展开图像矩阵,将第一展开图像矩阵转换为列矩阵,得到第二展开图像矩阵,第二展开图像矩阵中每一行数据大小为计算设备中cpu的向量寄存器的大小,将卷积核展开为以第二展开图像矩阵的列数作为列数、以卷积核大小作为行数的矩阵,得到第三展开矩阵,第三展开矩阵中每一行数据大小为向量寄存器的大小,将第二展开图像矩阵的每一行数据和第三展开矩阵对应行数据进行卷积运算,得到卷积后的图像矩阵,且第二展开图像矩阵和第三展开矩阵的数据存储地址是连续的。
51.通过上述内容可知,本发明的矩阵卷积的实现方法中,单次从第二展开图像矩阵和第三展开矩阵中分别读取与向量寄存器的大小相等大小的数据,相当于充分利用了计算设备中cpu的向量寄存器,能够实现在同一时间内,执行多次浮点数据运算,即能够实现simd指令,因此,相比于已有的卷积计算方法,本发明可充分利用cpu的特点,达到计算效率最大化,显著提高卷积计算速度,且上述过程中无需添加额外的设备,实现简便。
52.其次,在卷积运算的过程中,由于第二展开图像矩阵和第三展开矩阵的数据存储地址是连续的,因此从第二展开图像矩阵和第三展开矩阵中读写数据的速度快,从而进一步提高图像矩阵卷积计算的速度。另外,在反归一化的过程中,由于图像矩阵的卷积结果矩阵的数据存储地址是连续的,因此读取图像矩阵的卷积结果矩阵的速度快,从而进一步提高图像矩阵卷积计算的速度。
附图说明
53.为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面
旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
54.图1示出了根据本发明一个实施例的计算设备100的示意图;
55.图2示出了根据本发明一个实施例的图像矩阵卷积的实现方法200的流程图;
56.图3示出了根据本发明一个实施例的归一化后的待卷积图像矩阵的示意图;
57.图4示出了根据本发明一个实施例的预处理后的卷积核的示意图;
58.图5示出了根据本发明一个实施例的第一展开图像矩阵的示意图;
59.图6示出了根据本发明一个实施例的第一展开图像矩阵补齐3行大小为0的元素之后所形成的矩阵;
60.图7示出了根据本发明一个实施例的第二展开图像矩阵的示意图;
61.图8示出了根据本发明一个实施例的第三展开矩阵的示意图;以及
62.图9示出了根据本发明一个实施例的图像矩阵的卷积结果矩阵的示意图。
具体实施方式
63.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
64.矩阵卷积,是得到图像处理的一个初级效果非常有效并快捷的工具。图像处理中,将图像以矩阵的形式进行卷积,即对图像矩阵进行卷积操作,图像矩阵卷积的过程可以视作是一个“滑窗”的过程,具体地,使用一个较小的矩阵作为卷积核滑过整个被卷积的矩阵,每个滑过的地方都需要与卷积核做一次矩阵内积运算(即将滑窗所对应的被卷积矩阵的一个小矩阵与卷积核进行乘累加运算),运算结果将构成一个全新的矩阵。
65.已有技术中,多通过算法提高图像矩阵卷积的计算效率,例如im2col算法、fft算法、winograd算法等。上述算法均是为了加速这个卷积计算过程,以im2col算法为例对矩阵卷积的计算过程进行说明。im2col算法可以理解为是提前将二维的图像矩阵根据卷积核的大小,按从左到右、从上到下的顺序展开为了一个个的行,而新的行在内存中连续分布,相当于将原矩阵展开为行矩阵,进行卷积运算时由于内存分布连续,因此大幅降低了缓存未命中的概率,显著提高了访问内存的速度。但是,上述的图像矩阵卷积过程仅仅依赖于软件的功能,然而仅依赖编译器实现图像矩阵卷积,计算速度有所限制,若要提高计算效率,需要接入额外的设备,使得已有的图像矩阵卷积实现繁琐,且计算效率低下。
66.为此,本发明提出了一种图像矩阵卷积的实现方法,该方法在计算设备中执行。图1示出了根据本发明一个实施例的计算设备100的结构图。计算设备100的框图如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
67.取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μp)、微控制器(μc)、数字信息处理器(dsp)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心
114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(alu)、浮点数单元(fpu)、数字信号处理核心(dsp核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
68.取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。程序数据124包括指令,在根据本发明的计算设备100中,程序数据124包含用于执行图像矩阵卷积的实现方法200的指令。
69.计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。本发明中,程序执行过程中发生的各事件的相关数据和指示各事件发生的时间信息,可存储于储存设备132中,操作系统120适于管理储存设备132。其中,储存设备132可为磁盘。
70.计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图像处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个a/v端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个i/o端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
71.网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(rf)、微波、红外(ir)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
72.计算设备100可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和web服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(pda)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备100被配置为执行根据本发明的一种图像矩阵卷积的实现方法200。
73.图2示出了根据本发明一个实施例的图像矩阵卷积的实现方法200的流程图。方法200适于在计算设备100(例如前述计算设备100)中执行。需要说明的是,本发明的方法可应用于图像处理(包括图像识别(例如ai图像识别)、图像增强、图像分割等)领域中的卷积神经网络的卷积计算过程中,也可以集成于图像矩阵卷积的卷积算法中,以提高卷积计算的
速度。
74.值得注意的是,本发明中计算设备的cpu支持simd指令集,并且计算设备的cpu包括向量寄存器,所有满足上述条件的cpu均在本发明的保护范围之内,本发明对此不做限制。例如计算设备的cpu可以为龙芯3a4000cpu,龙芯3a4000cpu支持mipsmsa指令集,而mips msa指令集属于simd指令集,即,龙芯3a4000cpu支持simd指令集,simd指令集为单指令多数据,即同一时间内单一cpu指令操作多个数据,并且龙芯3a4000cpu包括向量寄存器,其中,向量寄存器的大小可以为128位、256位、512位等,本发明对此不做限制。
75.如图2所示,方法200包括步骤s201至步骤s210。方法200始于步骤s201,在步骤s201中,获取待卷积图像矩阵和预设的卷积核。本发明中,主要针对图像矩阵的卷积运算,图像矩阵可以为图像处理(图像处理例如图像识别(例如ai图像识别)、图像增强、图像分割等)中的图像矩阵,待卷积图像矩阵的每一元素为图像的像素值。本发明对待卷积图像矩阵大小和卷积核大小不做限制,例如,待卷积图像矩阵大小为5x5、卷积核大小为3x3。
76.在获取到待卷积图像矩阵后,执行步骤s202,将待卷积图像矩阵进行归一化处理,得到归一化后的待卷积图像矩阵,在一个实施方式中,归一化的过程中会将待卷积图像矩阵中的每一元素统一处理为统一的大小,而统一的大小即为向量寄存器支持浮点数据运算的浮点数据大小。其中,向量寄存器支持的浮点数据运算的浮点数据大小为16位、32位和64位中的一种,也即,归一化的过程中可将待卷积图像矩阵中的每一元素统一处理为16位或者32位或者64位。例如,图3示出了根据本发明一个实施例的归一化后的待卷积图像矩阵的示意图,图3中归一化后的待卷积图像矩阵大小为5x5。
77.接着执行步骤s203,对卷积核进行预处理,具体地,将卷积核中每一元素大小强制转换为与向量寄存器支持浮点数据运算的浮点数据大小,例如,通过编译器将卷积核中每一元素大小强制转换为与向量寄存器支持浮点数据运算的浮点数据大小,此处的浮点数据大小与步骤s202中确定的统一的大小相同,若统一的大小为32位,那么步骤s203中将卷积核中每一元素大小强制转换为32位,若统一的大小为64位,那么步骤s203中将卷积核中每一元素大小强制转换为64位。例如,图4示出了根据本发明一个实施例的预处理后的卷积核的示意图,图4中预处理后的卷积核大小为3x3。
78.在将待卷积图像矩阵进行归一化后,以及将卷积核进行预处理之后,执行步骤s204,将归一化的待卷积图像矩阵展开为行矩阵,得到第一展开图像矩阵。在一个实施方式中,根据卷积核的大小,通过im2col算法将归一化的待卷积图像矩阵展开为行矩阵。具体地,将归一化后的待卷积图像矩阵根据卷积核的大小,并按从左到右、从上到下的顺序,单次向右滑动一个元素,将归一化后的待卷积图像矩阵展开为第一展开图像矩阵的一个个行。
79.以归一化后的待卷积图像矩阵大小为5x5(如图3所示)、卷积核大小为3x3(如图4所示)、归一化后的待卷积图像矩阵中每一元素大小为32位、预处理后的卷积核中每一元素的大小为32位为例,对得到第一展开图像矩阵的过程进行说明。根据卷积核的大小,以归一化后的待卷积图像矩阵的第一行第一列元素为起始位置,选取卷积核大小的元素,如图3中的方形框3

1中包括的元素,将方形框3

1中的元素按从左到右、从上到下的顺序展开为了一行元素(即1,1,1,0,1,0,1,0,0),得到了如图5所示矩阵的第一行元素,图5示出了根据本发明一个实施例的第一展开图像矩阵的示意图。
80.向右滑动一个元素,以归一化后的待卷积图像矩阵的第一行第二列元素为起始位置,选取卷积核大小的元素,如图3中的方形框3

2中包括的元素,将方形框3

2中的元素按从左到右、从上到下的顺序展开为了一行元素(即1,1,1,1,0,1,0,0,1),得到了如图5所示矩阵的第二行元素。接着向右滑动一个元素,以归一化后的待卷积图像矩阵的第一行第三列元素为起始位置,选取卷积核大小的元素,如图3中的方形框3

3中包括的元素,将方形框3

3中的元素按从左到右、从上到下的顺序展开为了一行元素(即1,1,1,0,1,1,0,1,0),得到了如图5所示矩阵的第三行元素。
81.在将归一化后的待卷积图像矩阵第一行元素展开后,从归一化后的待卷积图像矩阵的第一行第一列元素向下滑动一个元素,即以归一化后的待卷积图像矩阵的第二行第一列元素为起始位置,如图3中的方形框3

4中包括的元素,按照上述过程展开为如图5所示矩阵的第四行元素(0,1,0,1,0,0,1,0,1)。依此类推,得到了归一化的待卷积图像矩阵对应的第一展开图像矩阵(如图5所示)。
82.在得到第一展开图像矩阵之后,执行步骤s205,为第一展开图像矩阵分配连续的内存地址,作为第一内存空间,并将第一展开图像矩阵保存至第一内存空间中。其中,连续内存地址的起始地址为向量寄存器对应的字节大小(即向量寄存器的大小与8的比值)的整数倍。之后读写第一展开图像矩阵元素时,由于第一展开空间的内存地址连续,因此读写速度快,从而提高图像矩阵卷积计算的速度。
83.之后,执行步骤s206,将第一展开图像矩阵转换为列矩阵,得到第二展开图像矩阵。具体地,确定向量寄存器可同时执行浮点数据运算的次数,将执行浮点数据运算的次数作为第一数值,将第一展开图像矩阵相邻行中、每一列的元素作为一组数据,以一组数据作为矩阵的一行元素,其中,第一展开图像矩阵相邻行的行数与第一数值相等,若第一数值为4,就是将第一展开图像矩阵相邻4行中、每一列的元素作为一组数据,以一组数据作为矩阵的一行元素。当第一展开图像矩阵余下的行数少于第一数值时,通过零元素将第一展开图像矩阵中缺失的元素补齐至余下的行数与第一数值相等,若第一数值为4,那么通过零元素将第一展开图像矩阵中缺失的元素补齐至4行,得到第二展开图像矩阵。
84.由于单次将第一数值行中、每一列的元素作为第二展开图像矩阵的一个行,已知第一数值是向量寄存器可同时执行浮点数据运算的次数,而第一展开图像矩阵的每一元素大小与向量寄存器支持浮点数据运算的浮点数据大小相同,也就是说,第二展开图像矩阵中每一行元素的大小为向量寄存器的大小,且第二展开图像矩阵的列数即为向量寄存器可同时执行浮点数据运算的次数。
85.以龙芯3a4000cpu、统信uos v20 1030作为操作系统、图5所示的第一展开图像矩阵为例对得到第二展开图像矩阵的过程进行说明。已知龙芯3a4000cpu包括大小为128位的向量寄存器,该向量寄存器支持32位的浮点数据运算(此时第一展开图像矩阵、预处理后的卷积核中每一个元素均为32位),由于cpu包括大小为128位的向量寄存器,该向量寄存器支持32位的浮点数据运算,那么第一数值为128/32=4,即将图5所示的第一展开图像矩阵相邻的第一组4个行中、第一列的元素作为第二展开图像矩阵的第一行元素,也就是将图5中的长方形框5

1中的元素作为第二展开图像矩阵的第一行元素,得到如图7所示的第二展开图像矩阵的第一行元素(1,1,1,0),图7示出了根据本发明一个实施例的第二展开图像矩阵的示意图。也就是说,每次读取128位的数据作为第二展开图像矩阵的一行元素。
86.接着向右滑动一个元素,以第一展开图像矩阵相邻的第一组4个行中、第二列的元素作为第二展开图像矩阵的第二行元素,也就是将图5中的长方形框5

2中的元素作为第二展开图像矩阵的第二行元素,得到如图7所示的第二展开图像矩阵的第二行元素(1,1,1,1),依此类推,直至第一组4个行中所有列均作为第二展开图像矩阵的一行元素后,接着以图5中的第5行至第8行作为第二组的4个行,将图5所示的第一展开图像矩阵相邻的第二组4个行中、第一列的元素作为第二展开图像矩阵的第10行元素,也就是将图5中的长方形框5

3中的元素作为第二展开图像矩阵的第10行元素,得到如图7所示的第二展开图像矩阵的第10行元素(1,0,1,0),直至第二组的4个行中所有列均作为第二展开图像矩阵的一行元素。
87.由于图5中的矩阵仅剩一行元素未被读取,不满足每一组4个行的要求,在一个实施方式中,补齐3行大小为0的元素,得到图6所示的矩阵,图6示出了根据本发明一个实施例的第一展开图像矩阵补齐3行大小为0的元素之后所形成的矩阵,其中,补齐3行大小为0的元素之后所对应的第三组的4个行如图6中的方形框6

1中的元素。并同样以第一展开图像矩阵相邻的第三组4个行中、第一列的元素作为第二展开图像矩阵的第19行元素,得到如图7所示的第二展开图像矩阵的第19行元素(0,0,0,0),直至第三组的4个行中所有列均作为第二展开图像矩阵的一行元素,得到完整的图7所示的第二展开图像矩阵。
88.其中,以下为将第一展开图像矩阵转换为列矩阵从而得到第二展开图像矩阵的关键性代码示例:
[0089][0090][0091]
之后,执行步骤s207,为第二展开图像矩阵分配连续的内存地址,作为第二内存空间,并将第二展开图像矩阵保存至第二内存空间中,其中,连续内存地址的起始地址为向量寄存器对应的字节大小(即向量寄存器的大小与8的比值)的整数倍。并执行步骤s208,将经过步骤s203预处理后的卷积核展开为以第二展开图像矩阵的列数作为列数、以卷积核大小作为行数的矩阵,得到第三展开矩阵。具体地,按照第一预设规则将转换后的卷积核中每一个元素复制为第二展开图像矩阵的列数个,得到一组相同数据,其中,第一预设规则为由左至右、由上至下的顺序规则,按照复制的顺序依次将得到的一组相同的数据作为矩阵的一
行元素,得到第三展开矩阵。以图4所示的卷积核为例,得到的第三展开矩阵如图8所示,图8示出了根据本发明一个实施例的第三展开矩阵的示意图。由于卷积核中每一个元素大小为向量寄存器支持浮点数据运算的浮点数据大小,展开的列数与第二展开图像矩阵的相同,而第二展开图像矩阵的列数即为向量寄存器可同时执行浮点数据运算的次数,因此,第三展开矩阵中的每一行元素大小同样为向量寄存器的大小。
[0092]
在得到展开后的卷积核对应的第三展开矩阵后,执行步骤s209,为第三展开矩阵分配连续的内存地址,作为第三内存空间,并将第三展开矩阵保存至第三内存空间中,同样地,连续内存地址的起始地址为向量寄存器对应的字节大小的整数倍。以下为将卷积核展开为第三展开矩阵、并为其分配连续的内存地址的关键性代码示例:
[0093][0094]
随后执行步骤s210,将第二展开图像矩阵和第三展开矩阵进行卷积运算,得到图像矩阵的卷积结果矩阵,卷积结果矩阵为图像矩阵的特征矩阵。在一个实施方式中,根据待卷积图像矩阵和卷积核确定卷积结果矩阵的大小,将第二展开图像矩阵根据第三展开矩阵的大小划分为多组矩阵,其中,每一组矩阵的行数和列数与第三展开矩阵的相同,各组矩阵中的每一行元素不重叠,将各组矩阵与第三展开矩阵进行卷积运算,得到各组矩阵中每一元素的卷积结果,若各组矩阵的最后一行元素的卷积结果的总个数大于卷积结果矩阵的大小,从各组矩阵的最后一行元素的卷积结果中选取前卷积核大小个卷积结果,按照第一预设规则写入卷积结果矩阵中,第一预设规则如上所述,此处不再赘述。若各组矩阵的最后一行元素的卷积结果的总个数等卷积结果矩阵的大小,将各组矩阵的最后一行元素的卷积结果按照第一预设规则写入卷积结果矩阵中。
[0095]
以图3所示的归一化后的待卷积图像矩阵(5x5)和图4所示的预处理后的卷积核(3x3)为例,卷积结果矩阵的大小的计算方式为:5

round(3/2)=3,从而确定最终卷积结果矩阵的大小为3x3,其中round含义为四舍五入。
[0096]
在一个实施方式中,将各组矩阵与第三展开矩阵进行卷积运算,得到各组矩阵中每一元素的卷积结果的步骤包括:从多组矩阵的任一组矩阵中读取一行元素,作为第一组元素,从第三展开矩阵中读取与第一组元素的行数相等的一行元素,作为第二组元素,将第一组元素中的每一元素与第二组元素中对应位置的元素做乘积,将乘积结果与每一元素相同列数、上一行元素的卷积结果求和,得到每一元素的图像矩阵的卷积结果。针对每一组矩阵的每一行元素均重复上述过程,最终得到第二展开图像矩阵中所有元素的图像矩阵的卷积结果。
[0097]
在上述过程中,由于第二展开图像矩阵和第三展开矩阵的数据存储地址是连续的,因此从第二展开图像矩阵和第三展开矩阵中读写数据的速度快,从而进一步提高图像矩阵的卷积计算的速度。
[0098]
以图7所示的第二展开图像矩阵和图8示出的第三展开矩阵为例,对图像矩阵的卷
积计算的过程进行详细说明。
[0099]
从图7的第二展开图像矩阵中读取前9行元素,作为第一组矩阵,如图7中方形框7

1所示的元素,从第一组矩阵中读取第一行元素(1,1,1,0),作为第一组元素,从第三展开矩阵中读取第一行元素(0,0,0,0),作为第二组元素,将第一组元素中的每一元素与第二组元素中对应位置的元素做乘积(即1*0、1*0、1*0、0*0),得到的结果分别为0、0、0、0,将乘积结果与每一元素相同列数、上一行元素的卷积结果求和,由于此时是对第一行元素进行卷积计算,因此与第一行元素的每一元素相同列数、上一行元素的卷积结果为0,因此将乘积结果与每一元素相同列数、上一行元素的卷积结果求和得到0 0=0、0 0=0、0 0=0、0 0=0,从而得到第一组矩阵的第一行元素的卷积结果0、0、0、0。
[0100]
接着,从第一组矩阵中读取第二行元素(1,1,1,1),从第三展开矩阵中读取第二行元素(1,1,1,1),将第一组元素中第二行元素的每一元素与第三展开矩阵中第二行元素对应位置的元素做乘积(即1*1、1*1、1*1、1*1),得到的结果分别为1、1、1、1,将乘积结果与每一元素相同列数、上一行元素的卷积结果求和,第一行元素的每一元素的卷积结果分别为0、0、0、0,将乘积结果分别与卷积结果矩阵的第一行元素中对应位置的每一元素求和,得到1 0=1、1 0=1、1 0=1、1 0=1,从而得到第一组矩阵第二行元素的卷积结果1、1、1、1。依此类推,得到第二展开图像矩阵的第一组矩阵的卷积结果,分别为(0,0,0,0)、(1,1,1,1)、(1,1,1,1)、(1,2,1,2)、(2,2,2,2)、(2,3,3,2)、(2,3,3,2)、(2,3,4,2)、(2,3,4,2)。
[0101]
之后从图7的第二展开图像矩阵中读取第10行至18行的元素,作为第二组矩阵,如图7中的方形框7

2所示的元素,从第二组矩阵中读取第一行元素(1,0,1,0),从第三展开矩阵中读取第一行元素(0,0,0,0),将从第二组矩阵中读取的第一行元素中的每一元素与从第三展开矩阵中读取的第一行元素中对应位置的元素做乘积(即1*0、0*0、1*0、0*0),得到的结果分别为0、0、0、0。由于此时是对第一行元素进行卷积计算,因此与第一行元素的每一元素相同列数、上一行元素的卷积结果为0,将乘积结果分别与上一行元素中对应位置的每一元素求和,得到0 0=0、0 0=0、0 0=0、0 0=0,从而得到第二组矩阵的第一行元素的卷积结果0、0、0、0。依此类推,得到第二展开图像矩阵的第二组矩阵的卷积结果,分别为(0,0,0,0)、(0,1,0,0)、(0,1,0,0)、(0,1,1,0)、(0,2,1,1)、(1,2,2,1)、(1,2,2,1)、(2,2,2,2)、(2,2,2,2)。
[0102]
再从图7的第二展开图像矩阵中读取第19行至27行的元素,作为第三组矩阵,如图7中的方形框7

3所示的元素,从第三组矩阵中读取第一行元素(0,0,0,0),从第三展开矩阵中读取第一行元素(0,0,0,0),将从第三组矩阵中读取的第一行中的每一元素与从第三展开矩阵中读取的第一行元素中对应位置的元素做乘积(即0*0、0*0、0*0、0*0),得到的结果分别为0、0、0、0。由于此时是对第一行元素进行卷积计算,因此与第一行元素的每一元素相同列数、上一行元素的卷积结果为0,将乘积结果分别与第一行元素中对应位置的每一元素求和,得到0 0=0、0 0=0、0 0=0、0 0=0,从而得到第三组矩阵中第一行元素的卷积结果0、0、0、0。依此类推,得到第二展开图像矩阵的第三组矩阵的卷积结果,分别为(0,0,0,0)、(1,0,0,0)、(1,0,0,0)、(2,0,0,0)、(2,0,0,0)、(3,0,0,0)、(3,0,0,0)、(4,0,0,0)、(4,0,0,0)。
[0103]
之后,提取第一组矩阵的最后一行卷积结果(2、3、4、2)、第二组矩阵的最后一行卷积结果(2,2,2,2)、第三组矩阵的最后一行卷积结果(4,0,0,0),可见提取出的卷积结果个
数为12个,由于上述已经算出图3所示的待卷积图像矩阵(5x5)和图4所示的卷积核(3x3)的卷积结果矩阵的大小为3x3,因此第二展开图像矩阵与第三展开矩阵的卷积结果矩阵的大小是3x3,相当于卷积结果矩阵包括9个元素,而提取出的卷积结果个数12大于卷积结果矩阵的大小9,因此按照由左至右、由上至下的顺序,将第一组矩阵的最后一行卷积结果写入卷积结果矩阵中,具体地:将第一组矩阵的最后一行卷积结果中的第一个卷积结果(2)作为卷积结果矩阵的第一行第一列元素、第二个卷积结果(3)作为卷积结果矩阵的第一行第二列元素,依此类推,将第一组矩阵的最后一行卷积结果中的第四个卷积结果(2)作为卷积结果矩阵的第二行第一列元素。
[0104]
接着,从卷积结果矩阵的第二行第二列开始,同样按照由左至右、由上至下的顺序,将第二组矩阵的最后一行卷积结果中的第一个卷积结果(2)作为卷积结果矩阵的第二行第二列元素、第二组矩阵的最后一行卷积结果中的第二个卷积结果(2)作为卷积结果矩阵的第二行第三列元素,依此类推,将第二组矩阵的最后一行卷积结果中的第四个卷积结果(2)作为卷积结果矩阵的第三行第二列元素。最后,从卷积结果矩阵的第三行第三列开始,同样按照由左至右、由上至下的顺序,将第三组矩阵的最后一行卷积结果中的第一个卷积结果(4)作为卷积结果矩阵的第三行第三列元素,至此,得到如图9所示的卷积结果矩阵,图9示出了根据本发明一个实施例的图像矩阵的卷积结果矩阵的示意图。
[0105]
以下为将第二展开图像矩阵和第三展开矩阵进行卷积运算得到卷积结果的关键性代码示例:
[0106]
[0107]
由于第二展开图像矩阵中每一行元素大小为向量寄存器的大小,也即,单次从第二展开图像矩阵和第三展开矩阵中分别读取大小为向量寄存器的大小的数据,相当于每一次的卷积运算时的数据大小为向量寄存器的大小,也即充分利用了计算设备中cpu的向量寄存器,能够实现在同一时间内,执行多次浮点数据运算,因此,可充分利用cpu的特点,达到计算效率最大化,且上述过程中无需添加额外的设备,实现简便。另外,在卷积运算的过程中,由于第二展开图像矩阵和第三展开矩阵的数据存储地址是连续的,因此从第二展开图像矩阵和第三展开矩阵中读写数据的速度快,从而进一步提高图像矩阵卷积计算的速度。
[0108]
最后,为卷积结果矩阵分配连续的内存空间,作为第四内存空间。并从第四内存空间读取卷积结果矩阵,将卷积结果矩阵进行反归一化处理,得到卷积结果,并将卷积结果写入第四内存空间。在上述过程中,由于卷积结果矩阵的数据存储地址是连续的,因此在反归一化的过程中,读取卷积结果矩阵的速度快,从而进一步提高图像矩阵的卷积计算的速度。
[0109]
由上述内容可知,本发明的图像矩阵卷积的实现方法中,单次从第二展开图像矩阵和第三展开矩阵中分别读取与向量寄存器的大小相等大小的数据,相当于充分利用了计算设备中cpu的向量寄存器,能够实现在同一时间内,执行多次浮点数据运算,即能够实现sidm指令,因此,相比于已有的卷积计算方法,本发明可充分利用cpu的特点,同一时间执行多次浮点数据运算,达到图像矩阵卷积计算效率最大化,显著提高图像矩阵的卷积计算速度,且上述过程中无需添加额外的设备,实现简便。
[0110]
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、u盘、软盘、cd

rom或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
[0111]
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的图像矩阵卷积的实现方法。
[0112]
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献