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

图像预处理方法和装置、图像处理方法、电子设备及介质与流程

2022-10-22 01:19:21 来源:中国专利 TAG:


1.本公开的实施例涉及一种图像预处理方法、图像预处理装置、图像处理方法、电子设备以及计算机可读存储介质。


背景技术:

2.残差神经网络被广泛应用于图像分类和物体识别,其特点是容易优化,并且能够通过增加网络的深度来提高准确率。resnet结构是残差神经网络在图像识别中近年来最成功的算法之一。在残差神经网络中,对输入图像数据进行卷积运算之前,往往需要对数据进行预处理,使得数据处理的效率更高。


技术实现要素:

3.本公开至少一个实施例提供一种图像预处理方法,包括:获取输入图像;对输入图像进行预处理计算得到计算结果;将计算结果与输入图像进行比较得到变换参数;根据变换参数,对输入图像进行预处理。
4.例如,在本公开一实施例提供的图像预处理方法中,计算结果包括n个第一输出图像矩阵和n个第二输出图像矩阵,n为正整数,变换参数包括第一组变换参数和第二组变换参数,对输入图像进行预处理计算得到计算结果包括:对输入图像进行填充操作得到填充图像矩阵;对填充图像矩阵中的数据进行拆分操作得到n个拆分图像矩阵;对n个拆分图像矩阵进行折叠操作得到n个第一输出图像矩阵和n个第二输出图像矩阵;将计算结果与输入图像进行比较得到变换参数,包括:将n个第一输出图像矩阵与n个拆分图像矩阵进行比较得到第一组变换参数;将n个第二输出图像矩阵与n个拆分图像矩阵进行比较得到第二组变换参数。
5.例如,在本公开一实施例提供的图像预处理方法中,将n个第一输出图像矩阵与n个拆分图像矩阵进行比较得到第一组变换参数,包括:将n个第一输出图像矩阵的尺寸与n个拆分图像矩阵的尺寸进行比较得到第一组变换参数;将n个第二输出图像矩阵与n个拆分图像矩阵进行比较得到第二组变换参数,包括:将n个第二输出图像矩阵的尺寸与n个拆分图像矩阵进行比较得到第二组变换参数。
6.例如,在本公开一实施例提供的图像预处理方法中,根据变换参数,对输入图像进行预处理,包括:对输入图像中的数据进行拆分操作得到n个拆分数据矩阵,n为正整数;以及对n个拆分数据矩阵进行填充折叠操作,以得到多个输出数据矩阵,填充折叠操作包括填充操作和折叠操作,对n个拆分数据矩阵进行填充折叠操作,以得到多个输出数据矩阵,包括:加载n个拆分数据矩阵,对所加载的n个拆分数据矩阵进行折叠操作得到2n个折叠数据矩阵,根据变换参数对2n个折叠数据矩阵进行填充操作,以得到多个输出数据矩阵。
7.例如,在本公开一实施例提供的图像预处理方法中,每个折叠数据矩阵包括四个侧边,填充操作包括多个子填充操作,一个子填充操作被用于执行到一个折叠数据矩阵上,对每个折叠数据矩阵执行的子填充操作包括以下操作中的至少一种:对每个折叠数据矩阵
中的至少一个侧边不做任何操作、在每个折叠数据矩阵中的至少一个侧边上增加相应的尺寸的数据、在每个折叠数据矩阵中的至少一个侧边上截取相应的尺寸的数据。
8.例如,在本公开一实施例提供的图像预处理方法中,每个折叠数据矩阵中的数据在第一方向和第二方向上阵列排布为多行多列,每个折叠数据矩阵的四个侧边包括在第一方向上彼此相对的第一侧边和第二侧边和在第二方向上彼此相对的第三侧边和第四侧边。
9.例如,在本公开一实施例提供的图像预处理方法中,2n个折叠数据矩阵包括n个第一折叠数据矩阵和n个第二折叠数据矩阵,对2n个折叠数据矩阵进行填充操作,以得到多个输出数据矩阵,包括:对n个第一折叠数据矩阵进行第一组子填充操作,得到n个第一输出数据矩阵;对n个第二折叠数据矩阵进行第二组子填充操作,得到n个第二输出数据矩阵;第一组子填充操作包括分别对n个第一折叠数据矩阵所执行的n个子填充操作,第二组子填充操作包括分别对n个第二折叠数据矩阵所执行的n个子填充操作,多个输出数据矩阵包括n个第一输出数据矩阵和n个第二输出数据矩阵。
10.例如,在本公开一实施例提供的图像预处理方法中,对n个第一折叠数据矩阵进行第一组子填充操作,包括:对n个第一折叠数据矩阵中的每一个进行第一组子填充操作中的一个子填充操作,以得到一个第一输出数据矩阵;对n个第二折叠数据矩阵进行第二组子填充操作,包括:对n个第二折叠数据矩阵中的每一个进行第二组子填充操作中的一个子填充操作,以得到一个第二输出数据矩阵。
11.例如,在本公开一实施例提供的图像预处理方法中,2n个折叠数据矩阵包括n个第一折叠数据矩阵和n个第二折叠数据矩阵,每个拆分数据矩阵对应一个第一折叠数据矩阵和一个第二折叠数据矩阵,对所加载的n个拆分数据矩阵进行折叠操作得到2n个折叠数据矩阵,包括:针对n个拆分数据矩阵中的每个拆分数据矩阵:为拆分数据矩阵中的每个数据添加至少一个通道,以得到与拆分数据矩阵对应的第一折叠数据矩阵;基于第一折叠数据矩阵,得到与拆分数据矩阵对应的第二折叠数据矩阵;第一折叠数据矩阵与第二折叠数据矩阵相同。
12.例如,在本公开一实施例提供的图像预处理方法中,为拆分数据矩阵中的每个数据添加至少一个通道,包括:将待填充数据填充到至少一个通道中。
13.例如,在本公开一实施例提供的图像预处理方法中,填充到至少一个通道中的待填充数据为0。
14.例如,在本公开一实施例提供的图像预处理方法中,输入图像中的数据排列以形成多个数据行,对输入图像中的数据进行拆分操作得到n个拆分数据矩阵,包括:读取多个数据行中的奇数行得到第一中间数据矩阵,第一中间数据矩阵中的数据排列以形成多个第一中间数据列,每个第一中间数据列包括多个数据行中的每个奇数行中的一个数据;读取多个数据行中的偶数行得到第二中间数据矩阵,第二中间数据矩阵中的数据排列以形成多个第二中间数据列,每个第二中间数据列包括多个数据行中的每个偶数行中的一个数据;读取多个第一中间数据列中的奇数列得到第一拆分数据矩阵,读取多个第一中间数据列中的偶数列得到第二拆分数据矩阵,读取多个第二中间数据列中的奇数列得到第三拆分数据矩阵,读取多个第二中间数据列中的偶数列得到第四拆分数据矩阵,n个拆分数据矩阵包括第一拆分数据矩阵、第二拆分数据矩阵、第三拆分数据矩阵以及第四拆分数据矩阵。
15.例如,本公开一实施例提供的图像预处理方法,还包括:在对输入图像中的数据进
行拆分操作之前,对输入图像中的数据进行归一化操作。
16.本公开至少一个实施例还提供一种图像处理方法,包括:获取输入图像;利用本公开至少一个实施例提供的图像预处理方法对输入图像中的数据进行处理,以得到与输入图像对应的多个输出数据矩阵;利用神经网络对多个输出数据矩阵进行处理,以得到神经网络的输出。
17.例如,在本公开一实施例提供的图像处理方法中,神经网络为一种50层的残差神经网络。
18.本公开至少一个实施例还提供一种图像预处理装置,包括:获取单元,配置为获取输入图像;预处理计算单元,配置为对输入图像进行预处理计算得到计算结果;比较单元,配置为将计算结果与输入图像进行比较得到变换参数;预处理单元,配置为根据变换参数,对输入图像进行预处理。
19.本公开至少一个实施例还提供一种电子设备,包括:处理器;以及存储器,存储有计算机可执行指令,计算机可执行指令在被处理器执行时实现本公开至少一个实施例提供的图像预处理方法或本公开至少一个实施例提供的图像处理方法。
20.本公开至少一个实施例还提供一种计算机可读存储介质,用于非瞬时性地存储计算机可执行指令,该计算机可执行指令在被处理器执行时实现本公开至少一个实施例提供的图像预处理方法或本公开至少一个实施例提供的图像处理方法。
附图说明
21.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
22.图1示出了本公开至少一个实施例提供的一种图像预处理方法的示意性流程图;
23.图2示出了本公开实施例提供的预处理计算步骤的一个示例的流程图;
24.图3示出了预处理计算中的填充操作和拆分操作的一个示例的示意图;
25.图4示出了对填充图像矩阵的拆分操作步骤的示意性流程图;
26.图5示出了预处理计算中的折叠操作的一个示例的示意图;
27.图6示出了图1所示的图像预处理方法中的步骤s140的示意性流程图;
28.图7示出了图6所示的图像预处理方法中的步骤s601的一个示例的示意图;
29.图8示出了图6所示的图像预处理方法中的步骤s602的示意性流程图;
30.图9示出了根据变换参数对第一折叠数据矩阵和第二折叠数据矩阵进行填充操作的一个示例的示意图;
31.图10示出了图8所示的图像预处理方法中的步骤s803的示意性流程图;
32.图11示出了本公开至少一个实施例提供的根据变换参数对输入图像进行预处理的步骤的流程图;
33.图12示出了本公开至少一个实施例提供的一种图像处理方法的示意性流程图;
34.图13示出了本公开至少一实施例提供的一种图像预处理装置的示意框图;
35.图14为本公开一些实施例提供的一种电子设备的示意框图;
36.图15为本公开一些实施例提供的另一种电子设备的示意框图;以及
37.图16为本公开一些实施例提供的一种计算机可读存储介质的示意图。
具体实施方式
38.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
39.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
40.图1示出了本公开至少一个实施例提供的一种图像预处理方法的示意性流程图。
41.如图1所示,该图像预处理方法包括以下的步骤s110-s130。
42.步骤s110:获取输入图像。
43.步骤s120:对输入图像进行预处理计算得到计算结果。
44.步骤s130:将计算结果与输入图像进行比较得到变换参数。
45.步骤s140:根据变换参数,对输入图像进行预处理。
46.例如,输入图像的尺寸为n*c*h*w,其中,n为输入图像的数量,c为输入图像的通道数,h为输入图像的高度,w为输入图像的宽度。例如,输入图像的尺寸为2*3*224*224,即输入图像的数据以2*3*224*224的矩阵形式排列。
47.对输入图像进行预处理计算,即在卷积运算前,预先计算输入图像进行预处理后可能发生的变化。卷积运算前可能对图像进行的预处理,通常从神经网络算法本身及软硬件结合两个角度进行考虑。例如,在输入数据尺寸为2*3*224*224,硬件通道粒度为8,即硬件每次最少处理8通道数据的情况下,用3*3的卷积核进行步长为2的卷积运算时,不仅可以从卷积计算本身考虑对数据进行预处理以使得计算效率提高,还可以从软硬件结合的方面来考虑,使得预处理后的数据符合硬件的计算要求。
48.例如,计算结果包括n个第一输出图像矩阵和n个第二输出图像矩阵,n为正整数,在本公开的一些实施例中,步骤s120可以包括:对输入图像进行填充操作得到填充图像矩阵;对填充图像矩阵中的数据进行拆分操作得到n个拆分图像矩阵;对n个拆分图像矩阵进行折叠操作得到n个第一输出图像矩阵和n个第二输出图像矩阵。
49.图2示出了本公开实施例提供的预处理计算步骤的一个示例的流程图。
50.如图2所示,以50层的残差神经网络(resnet50)为例,一般采用如下的预处理计算顺序进行预处理计算:填充(pad)操作——拆分(split)操作——折叠(fold)操作。经此预处理计算后可以得到适用于卷积运算的n个第一输出图像矩阵和n个第二输出图像矩阵,n为正整数。在卷积运算前,通常会对输入图像矩阵进行填充,以使得卷积计算可以保留输入图像中尽可能多的信息。填充操作后再进行拆分操作,可以使得后续的卷积运算保留更多
的有效数据,节约硬件的算力。折叠操作可以使图像数据的通道数与硬件对齐,使得处理效率更高。
51.预处理计算可以通过计算机进行操作,也可以采用人工的方式进行操作,本公开不限制进行预处理计算的方式。
52.需要说明的是,图2仅仅是预处理计算的一个示例,预处理计算的步骤可以根据神经网络类型、输入图像尺寸、卷积核尺寸、硬件通道数等因素确定,本公开对此不做限制。例如,可以仅对图像进行填充操作及拆分操作,不进行折叠操作,或者仅对图像进行填充操作及折叠操作而不进行拆分操作,也可以进行除填充操作、拆分操作、折叠操作之外的其他操作,如归一化操作。
53.归一化操作包括对输入图像中的数据中的每个中的每个分量乘以对应的比例(scale)再加上相应的偏差(bias)。scale和bias的值都是根据反向计算迭代得到的值。
54.例如,输入图像中的数据的图像格式可以为rgb格式,其中,r表示红色分量,g表示绿色分量,b表示蓝色分量。输入图像中的每个数据包括红色分量、绿色分量和蓝色分量。红色分量对应的比例为scale_r,对应的偏差为bias_r;绿色分量对应的比例为scale_g,对应的偏差为bias_g;蓝色分量对应的比例为scale_b,对应的偏差为bias_b。则归一化后的红色分量的数值表示为normed_r=r0*scale_r bias_r,归一化后的绿色分量的数值表示为normed_g=g0*scale_g bias_g,归一化后的蓝色分量的数值表示为normed_b=b0*scale_b bias_b,其中,r0表示红色分量的初始值,g0表示绿色分量的初始值,b0表示蓝色分量的初始值。
55.例如,输入图像中的所有数据的红色分量对应的比例相同,输入图像中的所有数据的红色分量对应的偏差也相同;类似地,输入图像中的所有数据的绿色分量对应的比例相同,输入图像中的所有数据的绿色分量对应的偏差也相同,输入图像中的所有数据的蓝色分量对应的比例相同,输入图像中的所有数据的蓝色分量对应的偏差也相同。
56.下面,结合图3说明预处理计算中的填充操作和拆分操作的过程。
57.输入图像的尺寸为2*3*224*224,即2个通道数为3,宽和高均为224像素的图像。输入图像中的数据排布形成了矩阵101,单个输入图像数据矩阵101的尺寸为3*224*224,(通道数3未示出),首先对输入图像矩阵101进行填充操作。在后续卷积运算采用3*3的卷积核进行步长为2的卷积运算的情况下,填充操作的方案可以为在矩阵101的左侧边和上侧边分别填充3个像素点,下侧边和右侧边分别填充2个像素点,从而得到填充图像矩阵102。填充的数据可以为0,也可以为其它值,本公开对此不做限制。填充操作后得到的填充图像矩阵102尺寸为3*229*229。
58.例如,填充图像矩阵102中的数据排列以形成多个数据行。
59.在得到填充图像矩阵102后,可以对填充图像矩阵102进行拆分操作,使得后续卷积运算效率更高。填充图像矩阵102可以被拆分成多个拆分图像矩阵。例如,如图3所示,对于矩阵101和102中的数据,被拆分到矩阵split_ee1的数据被标记为“ee”,被拆分到矩阵split_eo1的数据被标记为“eo”,被拆分到矩阵split_oe1的数据被标记为“oe”,被拆分到矩阵split_oo1的数据被标记为“oo”;对于矩阵102中的填充的数据,要被拆分到矩阵split_ee1的填充像素点被标记为“1”,要被拆分到矩阵split_eo1的填充像素点被标记为“2”,要被拆分到矩阵split_oe1的填充像素点被标记为“3”,要被拆分到矩阵split_oo1的
填充像素点被标记为“4”。
60.对填充图像矩阵102的拆分操作步骤可结合图4来进行说明,该拆分操作可以包括如下步骤s401~s406。
61.步骤s401:读取多个数据行中的奇数行得到第一中间图像矩阵。
62.步骤s402:读取多个数据行中的偶数行得到第二中间图像矩阵。
63.步骤s403:读取多个第一中间数据列中的奇数列得到第一拆分图像矩阵。
64.步骤s404:读取多个第一中间数据列中的偶数列得到第二拆分图像矩阵。
65.步骤s405:读取多个第二中间数据列中的奇数列得到第三拆分图像矩阵。
66.步骤s406:读取多个第二中间数据列中的偶数列得到第四拆分图像矩阵。
67.例如,在一些实施例中,填充图像矩阵的尺寸为h*w,当h和w均为偶数时,第一拆分图像矩阵的尺寸、第二拆分图像矩阵的尺寸、第三拆分图像矩阵的尺寸以及第四拆分图像矩阵的尺寸均相同,且均为h/2*w/2;当h为偶数而w为奇数时,第一拆分图像矩阵的尺寸和第三拆分图像矩阵的尺寸相同,且均为h/2*((w 1)/2),第二拆分图像矩阵的尺寸和第四拆分图像矩阵的尺寸相同,且均为h/2*((w-1)/2);当h为奇数而w为偶数时,第一拆分图像矩阵的尺寸和第二拆分图像矩阵的尺寸相同,且均为((h 1)/2)*w/2,第三拆分图像矩阵的尺寸和第四拆分图像矩阵的尺寸相同,且均为((h-1)/2)*w/2;当h和w均为奇数时,第一拆分图像矩阵的尺寸为((h 1)/2)*((w 1)/2),第二拆分图像矩阵的尺寸为((h 1)/2)*((w-1)/2),第三拆分图像矩阵的尺寸为((h-1)/2)*((w 1)/2),第四拆分图像矩阵的尺寸为((h-1)/2)*((w-1)/2)。
68.因此,在填充图像矩阵的尺寸为2*3*229*229的情况下,第一拆分图像矩阵记为split_ee1,其尺寸为2*3*115*115。第二拆分图像矩阵记为split_eo1,其尺寸为2*3*115*114。第三拆分图像矩阵记为split_oe1,其尺寸为2*3*114*115。第四拆分图像矩阵记为split_oo1,其尺寸为2*3*114*114。
69.需要说明的是,输入图像进行拆分后,需要对卷积核也进行对应的处理,因不是本发明内容,因此不再赘述。
70.下面,结合图5说明对输入图像进行预处理计算中折叠操作的过程。
71.拆分操作后,可以根据硬件的特性对拆分图像矩阵进行折叠操作。例如,在残差神经网络中,输入的图像可以为rgb图像,rgb图像通道数为3。在硬件计算单元计算粒度为8通道,即硬件每次处理8通道数据的情况下,可以将图像矩阵在通道维度进行折叠以使图像矩阵通道数与硬件通道数对齐。
72.在一些实施例中,若输入图像中的数据的图像格式不是rgb格式,则在归一化操作之前,还可以对输入图像中的数据执行格式转换操作,例如,若输入图像中的数据图像格式是yuv格式,则可以首先对输入图像中的数据执行格式转换操作,以使得该输入图像中的数据的图像格式变为rgb格式,然后对该输入图像中的rgb格式的数据执行后续操作。
73.例如,拆分图像矩阵的3个通道分别记为通道0-2,首先可以添加一层数据全为0的通道,令其为通道3,以split_ee1为例,添加一层通道后尺寸变为2*4*115*115,在保证后续卷积运算等效性的前提下,可以对拆分图像矩阵进行折叠操作以使得图像矩阵通道数变大,宽或高变小,以贴合硬件的处理要求。即,折叠操作表示将拆分图像矩阵的k个通道变为2k个通道的过程。原k个通道的数据和新增的k个通道的数据相同。但为了保证卷积运算的
等效性,需要对不同的通道的数据进行不同方式的截取。因此,最终可供硬件直接进行卷积运算的输出图像矩阵的前k个通道与后k个通道的数据不完全相同。
74.折叠操作可以沿水平方向进行,也可以沿垂直方向进行。每个拆分图像矩阵在进行折叠操作后可以得到其对应的折叠图像矩阵,第一拆分图像矩阵进行折叠操作后得到第一折叠图像矩阵fold_ee,第二拆分图像矩阵进行折叠操作后得到第二折叠图像矩阵fold_eo、第三拆分图像矩阵进行折叠操作后得到第三折叠图像矩阵fold_oe,第四拆分图像矩阵进行折叠操作后得到第四折叠图像矩阵fold_oo。
75.由图5可知,第一拆分图像矩阵split_ee1沿水平方向折叠后,为了保证折叠前后卷积运算具有等效性,第一折叠图像矩阵fold_ee通道0的数据后两列被截取,而fold_ee通道4的数据为在split_ee1通道4数据的基础上截取后两列,与fold_ee的通道0-3堆叠(灰色部分表示截取的部分)。即通道0折叠后产生通道4,通道1折叠后产生通道5,以此类推。需要注意的是,图中仅示出通道0与通道4,通道1-3的折叠操作均与通道0相同,通道5-7的形成过程均与通道4相同。即水平方向折叠后通道0-3截取后两列,通道4-7截取前两列。这样使得3通道矩阵变为了硬件可以直接处理的8通道矩阵。需要注意的是,折叠操作在后续处理中需要对卷积核也进行对应的折叠操作,以保证操作前后卷积运算的等效性。因对卷积核的处理不是本发明内容,因此不再赘述。
76.例如,变换参数包括第一组变换参数和第二组变换参数,在本公开的一些实施例中,步骤s130可以包括:将n个第一输出图像矩阵与所述n个拆分图像矩阵进行比较得到第一组变换参数;将n个第二输出图像矩阵与n个拆分图像矩阵进行比较得到第二组变换参数。
77.例如,在本公开的一些实施例中,将n个第一输出图像矩阵与所述n个拆分图像矩阵进行比较得到第一组变换参数可以包括:将n个第一输出图像矩阵的尺寸与n个拆分图像矩阵的尺寸进行比较得到第一组变换参数;将n个第二输出图像矩阵与n个拆分图像矩阵进行比较得到第二组变换参数可以包括:将n个第二输出图像矩阵的尺寸与n个拆分图像矩阵进行比较得到第二组变换参数。
78.例如,对输入图像进行填充操作得到填充数据矩阵,对该填充数据矩阵中的数据进行拆分操作得到4个拆分图像矩阵,对4个拆分图像矩阵进行折叠操作得到4个第一输出图像矩阵和4个第二输出图像矩阵,4个拆分图像矩阵与4个第一输出图像矩阵一一对应且4个拆分图像矩阵与4个第二输出图像矩阵一一对应,将4个第一输出图像矩阵中的每一个与其对应的拆分图像矩阵进行比较得到第一组变换参数,将4个第二输出图像矩阵中的每一个与其对应的拆分图像矩阵进行比较得到第二组变换参数。例如将矩阵fold_ee与拆分数据矩阵split_ee1进行比较得到变换参数。
79.如果用硬件直接进行预处理计算对应的上述操作,那么硬件运算过程与存取关系复杂,并且通道4-7数据需要依赖于通道0-3数据的在先处理,因此整个过程运算量大,并行程度低。因此可以先利用预处理计算得到变换参数,然后根据变换参数对输入图像进行预处理。
80.图6示出了本公开至少一个实施例提供的步骤s140的示意性流程图。
81.如图6所示,步骤s140包括如下的步骤s601~s602。
82.步骤s601:对输入图像中的数据进行拆分操作得到n个拆分数据矩阵。
83.例如,输入图像中的数据排列以形成多个数据行。
84.例如,n为正整数,在一些实施例中,n可以为4。
85.例如,在一些实施例中,步骤s601可以包括步骤s701~s706。
86.步骤s701:读取多个数据行中的奇数行得到第一中间数据矩阵。
87.步骤s702:读取多个数据行中的偶数行得到第二中间数据矩阵。
88.步骤s703:读取多个第一中间数据列中的奇数列得到第一拆分数据矩阵。
89.步骤s704:读取多个第一中间数据列中的偶数列得到第二拆分数据矩阵。
90.步骤s705:读取多个第二中间数据列中的奇数列得到第三拆分数据矩阵。
91.步骤s706:读取多个第二中间数据列中的偶数列得到第四拆分数据矩阵。
92.步骤s602:对n个拆分数据矩阵进行填充折叠操作,以得到多个输出数据矩阵。
93.图7示出了步骤s601的一个示例的示意图。
94.如图7所示,输入图像的尺寸为2*3*224*224,输入图像中的数据排布形成了矩阵700,经过拆分操作,矩阵700被拆分为四个拆分数据矩阵,分别为拆分数据矩阵split_ee2、拆分数据矩阵split_eo2、拆分数据矩阵split_oe2、拆分数据矩阵split_oo2,图7中省略了各拆分数据矩阵中的部分数据,虽然图7中示出的矩阵大小不同,但由步骤s701~s706可知,各拆分数据矩阵大小相同,其中,拆分数据矩阵split_ee2的尺寸为:2*3*112*112,拆分数据矩阵split_eo2的尺寸为:2*3*112*112,拆分数据矩阵split_oe2的尺寸为:2*3*112*112,拆分数据矩阵split_oo2的尺寸为:2*3*112*112。
95.例如,如图7所示,对于矩阵700中的数据,被拆分到矩阵split_ee2的数据被标记为“ee”,被拆分到矩阵split_eo2的数据被标记为“eo”,被拆分到矩阵split_oe2的数据被标记为“oe”,被拆分到矩阵split_oo2的数据被标记为“oo”。
96.然后,可以对n个拆分数据矩阵进行填充折叠操作。例如,填充折叠操作包括填充操作和折叠操作。填充操作表示通过对矩阵的至少一个侧边上填充或截取相应的尺寸或不进行操作从而使得填充后的矩阵的形状满足要求。折叠操作表示将拆分数据矩阵的k个通道变为2k个通道的过程。在本公开的实施例中,通过将填充操作和折叠操作结合在一起,可以仅加载一次拆分数据矩阵则可以实现填充操作和折叠操作,有效减少了数据存取次数,增加了数据复用率。
97.如图8所示,在一些实施例中,步骤s602可以包括步骤s801~s803。
98.步骤s801:加载n个拆分数据矩阵。
99.步骤s802:对所加载的n个拆分数据矩阵进行折叠操作得到2n个折叠数据矩阵。
100.2n个折叠数据矩阵包括n个第一折叠数据矩阵和n个第二折叠数据矩阵,每个拆分数据矩阵对应一个第一折叠数据矩阵和一个第二折叠数据矩阵,第一折叠数据矩阵的4个通道被表示为通道0~3,第二折叠数据矩阵的4个通道被表示为通道4~7。此处的折叠操作与预处理计算中的折叠操作相同,例如从3通道矩阵变成8通道矩阵,需将3通道矩阵添加一层数据全为0的通道,再进行通道的折叠。
101.例如,拆分数据矩阵split_ee2对应第一折叠数据矩阵fold_ee1和第二折叠数据矩阵fold_ee2,拆分数据矩阵split_eo2对应第一折叠数据矩阵fold_eo1和第二折叠数据矩阵fold_eo2,拆分数据矩阵split_oe2对应第一折叠数据矩阵fold_oe1和第二折叠数据矩阵fold_oe2,拆分数据矩阵split_oo2对应第一折叠数据矩阵fold_oo1和第二折叠数据
矩阵fold_oo2。
102.例如,在一些实施例中,步骤s802可以包括:针对n个拆分数据矩阵中的每个拆分数据矩阵:为拆分数据矩阵中的每个数据添加至少一个通道,以得到与拆分数据矩阵对应的第一折叠数据矩阵;基于第一折叠数据矩阵,得到与拆分数据矩阵对应的第二折叠数据矩阵。例如,第一折叠数据矩阵与第二折叠数据矩阵相同。需要说明的是,在本公开的实施例中,“折叠操作”包括为每个数据添加至少一个通道的操作以及基于第一折叠数据矩阵得到第二折叠数据矩阵的操作。
103.例如,在一些实施例中,为拆分数据矩阵中的每个数据添加至少一个通道可以包括将待填充数据填充到至少一个通道中。
104.例如,在一些实施例中,填充到至少一个通道中的待填充数据为0。需要说明的是,待填充数据可以根据实际需求设置,本公开的实施例对待填充数据的值不作具体限制。
105.步骤s803:根据变换参数对2n个折叠数据矩阵进行填充操作,以得到多个输出数据矩阵。
106.例如,在一些实施例中,每个折叠数据矩阵包括四个侧边,每个折叠数据矩阵中的数据在第一方向和第二方向上阵列排布为多行多列,每个折叠数据矩阵的四个侧边包括在第一方向上彼此相对的第一侧边和第二侧边和在第二方向上彼此相对的第三侧边和第四侧边。
107.例如,第一方向可以为折叠数据矩阵的行方向,第二方向可以为折叠数据矩阵的列方向,例如,折叠数据矩阵的行方向与输入图像的行方向平行,折叠数据矩阵的列方向与输入图像的列方向平行。例如,第一侧边可以为左侧,第二侧边可以为右侧,第一侧边和第二侧边在折叠数据矩阵的行方向上彼此相对。第三侧边可以为顶侧,第四侧边可以为底侧,第三侧边和第四侧边在折叠数据矩阵的列方向上彼此相对。
108.例如,在本公开的一些实施例中,填充操作包括多个子填充操作,一个子填充操作被用于执行到一个折叠数据矩阵上,对每个折叠数据矩阵执行的子填充操作包括以下操作中的至少一种:对每个折叠数据矩阵中的至少一个侧边不做任何操作、在每个折叠数据矩阵中的至少一个侧边上增加相应的尺寸的数据、在每个折叠数据矩阵中的至少一个侧边上截取相应的尺寸的数据。
109.表格1示出了用于第一折叠数据矩阵的变换参数的一个示例。表格1中的数据即为变换参数,得到变换参数的具体方式可以参考上文的相关描述,在此不再赘述。在表格1中,0表示在一个侧边上不做任何操作,正数表示在一个侧边上填充相应尺寸的数据,负数表示在一个侧边上截取相应尺寸的数据。
110.表格1:变换参数的一个示例
[0111] 左侧右侧顶侧底侧fold_oo11011fold_oe12-111fold_eo1112-1fold_ee1212-1
[0112]
表格2示出了用于第二折叠数据矩阵的变换参数的一个示例,表格2中的数据即为变换参数,得到变换参数的具体方式可以参考上文的相关描述,在此不再赘述。在表格2中,
0表示在一个侧边上不做任何操作,正数表示在一个侧边上填充相应尺寸的数据,负数表示在一个侧边上截取相应尺寸的数据。
[0113]
表格2:变换参数的另一个示例
[0114] 左侧右侧顶侧底侧fold_oo2-1211fold_oe20111fold_eo21101fold_ee22101
[0115]
例如,在上述表格1和表格2中,“x”表示在相应的侧边上填充x行数据或x列数据,
“‑
x”表示在相应的侧边上截取x行数据或x列数据,例如,x为正整数,x可以为1、2等。
[0116]
下面以根据变换参数对第一折叠数据矩阵fold_ee1和第二折叠数据矩阵fold_ee2进行填充操作为例进行说明。
[0117]
如图9所示,变换参数即为输入数据经拆分变换后的矩阵与经过预处理计算的输出数据矩阵相比,四个侧边增加或截取数据的情况。变换参数可以用于对拆分数据矩阵进行填充操作。对于矩阵fold_ee来说,标记有数字1的虚线方块表示增加的数据,灰色阴影方块表示截取的数据。
[0118]
例如,如图9所示,基于表格1所示的填充操作,对第一折叠数据矩阵fold_ee1的子填充操作为,对其左侧增加2列数据,对其右侧增加1列数据,对其顶侧增加2行数据,对其底侧截取1行数据。基于表格2所示的填充操作,对第二折叠数据矩阵fold_ee2的子填充操作为,对其左侧增加2列数据,对其右侧增加1列数据,对其顶侧不做任何操作,对其底侧增加1行数据。需要说明的是,对第一折叠数据矩阵或第二折叠数据矩阵的四个侧边的子填充操作的顺序影响对每个侧边增加的数据的数目。
[0119]
需要说明的是,对折叠数据矩阵进行填充操作的变换参数是通过步骤s120和s130得到的,具体的计算过程可以参见上文的描述,在此不再赘述。
[0120]
如图10所示,在一些实施例中,步骤s803可以包括步骤s1001~s1002。
[0121]
例如,2n个折叠数据矩阵包括n个第一折叠数据矩阵和n个第二折叠数据矩阵。
[0122]
步骤s1001:对n个第一折叠数据矩阵进行第一组子填充操作,得到n个第一输出数据矩阵。
[0123]
步骤s1002:对n个第二折叠数据矩阵进行第二组子填充操作,得到n个第二输出数据矩阵。
[0124]
例如,n个第一折叠数据矩阵与n个拆分数据矩阵一一对应,n个第二折叠数据矩阵与n个拆分数据矩阵一一对应,即每个拆分数据矩阵对应一个第一折叠数据矩阵和一个第二折叠数据矩阵。
[0125]
例如,第一组子填充操作包括分别对n个第一折叠数据矩阵所执行的n个子填充操作,第二组子填充操作包括分别对n个第二折叠数据矩阵所执行的n个子填充操作,多个输出数据矩阵包括n个第一输出数据矩阵和n个第二输出数据矩阵。
[0126]
例如,填充操作包括第一组子填充操作中的n个子填充操作和第二组子填充操作中的n个子填充操作,也就是说,填充操作可以包括2n个子填充操作。
[0127]
例如,第一组子填充操作和第二组子填充操作可以并行且同时执行。
[0128]
需要说明的是,根据实际需求,第一组子填充操作中的n个子填充操作中的至少部分子填充操作可以相同,类似地,第二组子填充操作中的n个子填充操作中的至少部分子填充操作可以相同。本公开的实施例对第一组子填充操作中的n个子填充操作和第二组子填充操作中的n个子填充操作不作具体限制,只要使得每个拆分数据矩阵对应两个折叠数据矩阵经过填充后的数据矩阵的尺寸相同即可。
[0129]
例如,在一些实施例中,步骤s1001可以包括:对n个第一折叠数据矩阵中的每一个进行第一组子填充操作中的一个子填充操作,以得到一个第一输出数据矩阵;步骤s1002可以包括:对n个第二折叠数据矩阵中的每一个进行第二组子填充操作中的一个子填充操作,以得到一个第二输出数据矩阵。
[0130]
图11示出了本公开至少一个实施例提供的根据变换参数对输入图像进行预处理的步骤的流程图。
[0131]
如图11所示,对于2*3*224*224的输入图像,首先对输入图像进行拆分操作。经过拆分操作,得到四个拆分数据矩阵,分别为拆分数据矩阵sp_ee、拆分数据矩阵sp_eo、拆分数据矩阵sp_oe、拆分数据矩阵sp_oo,其中,拆分数据矩阵sp_ee的尺寸为:2*3*112*112,拆分数据矩阵sp_eo的尺寸为:2*3*112*112,拆分数据矩阵sp_oe的尺寸为:2*3*112*112,拆分数据矩阵sp_oo的尺寸为:2*3*112*112。
[0132]
接着分别对四个拆分数据矩阵sp_ee、sp_eo、sp_oe、sp_oo进行填充操作和折叠操作得到八个输出数据矩阵,分别为输出数据矩阵pad_fold_ee1、输出数据矩阵pad_fold_eo1、输出数据矩阵pad_fold_oe1、输出数据矩阵pad_fold_oo1、输出数据矩阵pad_fold_ee2、输出数据矩阵pad_fold_eo2、输出数据矩阵pad_fold_oe2、输出数据矩阵pad_fold_oo2,其中,输出数据矩阵pad_fold_ee1的尺寸为:2*4*113*115,输出数据矩阵pad_fold_eo1的尺寸为:2*4*113*114,输出数据矩阵pad_fold_oe1的尺寸为:2*4*114*113,输出数据矩阵pad_fold_oo1的尺寸为:2*4*114*113。输出数据矩阵pad_fold_ee2的尺寸为:2*4*113*115,输出数据矩阵pad_fold_eo2的尺寸为:2*4*113*114,输出数据矩阵pad_fold_oe2的尺寸为:2*4*114*113,输出数据矩阵pad_fold_oo2的尺寸为:2*4*114*113。
[0133]
输出数据矩阵pad_fold_ee1、输出数据矩阵pad_fold_eo1、输出数据矩阵pad_fold_oe1、输出数据矩阵pad_fold_oo1对应表格1所示的4个子填充操作。输出数据矩阵pad_fold_ee2、输出数据矩阵pad_fold_eo2、输出数据矩阵pad_fold_oe2、输出数据矩阵pad_fold_oo2对应于表格2所示的4个子填充操作。
[0134]
需要说明的是,与同一个拆分数据矩阵对应的两个输出数据矩阵的尺寸相同,例如,对于拆分数据矩阵sp_ee,基于第一组子填充操作中的一个子填充操作对该拆分数据矩阵sp_ee进行填充折叠处理后得到的第一输出数据矩阵pad_fold_ee1的尺寸和基于第二组子填充操作中的一个子填充操作对由该拆分数据矩阵sp_ee进行填充折叠处理后得到的第二输出数据矩阵pad_fold_ee2的尺寸是相同的。
[0135]
八个输出数据矩阵pad_fold_ee1、pad_fold_eo1、pad_fold_oe1、pad_fold_oo1、pad_fold_ee2、pad_fold_eo2、pad_fold_oe2、pad_fold_oo2可以被输入到神经网络中以用于后续的卷积、批归一化、最大池化等操作。
[0136]
需要说明的是,图11仅仅是预处理的一个示例,在此示例中,将输入图像拆分成4个拆分数据矩阵,将输入图像的通道数由3变为8,然而本公开对拆分数据矩阵的数目以及
通道数等不作限制,仅需要和预处理计算保持一致。例如,在预处理计算中,将输入图像拆分成4个拆分数据矩阵,则在预处理中也要将输入图像拆分成4个拆分数据矩阵;又例如,在预处理计算中,将输入图像的通道数由3变为16,则在预处理中也要将输入图像的通道数由3变为16。
[0137]
需要说明的是,图11所示的预处理采用如下的操作步骤:拆分操作——折叠操作——填充操作,然而本公开对预处理包含的操作不作限制,仅需要和预处理计算包含的操作一致。例如,预处理计算包含拆分操作、折叠操作和填充操作,预处理也包含拆分操作、折叠操作和填充操作;又例如,预处理计算不包含折叠操作,预处理也不包含折叠操作。但是,预处理包含的操作的顺序可以和预处理计算包含的操作的顺序不同。
[0138]
图12示出了本公开至少一个实施例提供的一种图像处理方法的示意性流程图。
[0139]
如图12所示,该图像处理方法包括如下的步骤s1201~s1203。
[0140]
步骤s1201:获取输入图像。
[0141]
步骤s1202:利用本公开至少一个实施例提供的图像预处理方法对输入图像中的数据进行处理,以得到与输入图像对应的多个输出数据矩阵。
[0142]
步骤s1202是对输入图像中的数据进行的预处理操作。
[0143]
步骤s1203:利用神经网络对与多个输出数据矩阵进行处理,以得到神经网络的输出。
[0144]
例如,利用神经网络对多个输出数据矩阵进行卷积等处理。
[0145]
例如,在一些实施例中,神经网络为一种50层的残差神经网络(resnet50)。本公开的实施例提供的图像处理方法可以应用于人工智能中卷积神经网络resnet50的应用场景,在该图像处理方法中,通过本公开的实施例提供的一种高效的软硬件协同的图像预处理方法实现图像的预处理,实现图像数据到卷积输入数据的转换,减少图像预处理的计算负担,极大地减少了计算时间,可以增大图像数据读取的灵活性,可以减少计算量,提高计算效率。
[0146]
该图像处理方法的技术效果与图1所示的图像预处理方法的技术效果相同,在此不再赘述。
[0147]
图13示出了本公开至少一实施例提供的一种图像预处理装置1300的示意框图,该图像预处理装置可以用于执行图1所示的图像预处理方法。
[0148]
如图13所示,图像预处理装置1300包括获取单元1301、预处理计算单元1302、比较单元1303和预处理单元1304。
[0149]
获取单元1301被配置为获取输入图像。
[0150]
预处理计算单元1302被配置为对输入图像进行预处理计算得到计算结果。
[0151]
比较单元1303被配置为将计算结果与输入图像进行比较得到变换参数。
[0152]
预处理单元1304被配置为根据变换参数,对输入图像进行预处理。
[0153]
上述图像预处理装置的技术效果与图1所示的图像预处理方法的技术效果相同,在此不再赘述。
[0154]
本公开的至少一个实施例还提供了一种电子设备,该电子设备包括处理器;存储器,存储有计算机可执行指令,其中,计算机可执行指令在被处理器执行时实现本公开至少一实施例提供的图像预处理方法或图像处理方法。
[0155]
图14为本公开一些实施例提供的一种电子设备1400的示意框图。如图14所示,该电子设备1400包括处理器1410和存储器1420。存储器1420用于存储计算机可执行指令(例如一个或多个计算机程序模块)。处理器1410用于运行计算机可执行指令,计算机可执行指令被处理器1410运行时可以执行上文所述的图像预处理方法或图像处理方法中的一个或多个步骤。存储器1420和处理器1410可以通过总线系统和/或其它形式的连接机构(未示出)互连。
[0156]
例如,处理器1410可以是中央处理单元(cpu)、图形处理单元(gpu)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元。例如,中央处理单元(cpu)可以为x86或arm架构等。处理器1410可以为通用处理器或专用处理器,可以控制电子设备1400中的其它组件以执行期望的功能。
[0157]
例如,存储器1420可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、可擦除可编程只读存储器(eprom)、便携式紧致盘只读存储器(cd-rom)、usb存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块,处理器1410可以运行一个或多个计算机程序模块,以实现电子设备1400的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
[0158]
需要说明的是,本公开的实施例中,电子设备1400的具体功能和技术效果可以参考上文中关于图像预处理方法和图像处理方法的描述,此处不再赘述。
[0159]
图15为本公开一些实施例提供的另一种电子设备的示意框图。该电子设备1000例如适于用来实施本公开实施例提供的图像预处理方法和/或图像处理方法。电子设备1000可以是终端设备等。需要注意的是,图15示出的电子设备1000仅仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
[0160]
如图15所示,电子设备1000可以包括处理装置(例如中央处理器、图形处理器等)1010,其可以根据存储在只读存储器(rom)1020中的程序或者从存储装置1080加载到随机访问存储器(ram)1030中的程序而执行各种适当的动作和处理。在ram 1030中,还存储有电子设备1000操作所需的各种程序和数据。处理装置1010、rom 1020以及ram 1030通过总线1040彼此相连。输入/输出(i/o)接口1050也连接至总线1040。
[0161]
通常,以下装置可以连接至i/o接口1050:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1060;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置1070;包括例如磁带、硬盘等的存储装置1080;以及通信装置1090。通信装置1090可以允许电子设备1000与其他电子设备进行无线或有线通信以交换数据。虽然图10示出了具有各种装置的电子设备1000,但应理解的是,并不要求实施或具备所有示出的装置,电子设备1000可以替代地实施或具备更多或更少的装置。
[0162]
例如,根据本公开的实施例,上述图像预处理方法或图像处理方法可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述图像预处理方法或图像处理方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置1090从网络上被
下载和安装,或者从存储装置1080安装,或者从rom 1020安装。在该计算机程序被处理装置1010执行时,可以实现本公开实施例提供的图像预处理方法或图像处理方法中限定的功能。
[0163]
本公开至少一个实施例提供一种计算机可读存储介质,用于非暂时性存储计算机可执行指令,其中,计算机可执行指令在被处理器执行时实现本公开至少一实施例提供的图像预处理方法或图像处理方法。
[0164]
图16为本公开一些实施例提供的一种计算机可读存储介质的示意图。如图16所示,计算机可读存储介质1100用于存储计算机可执行指令1110。例如,当计算机可执行指令1110由计算机执行时可以执行根据上文所述的图像预处理方法或图像处理方法中的一个或多个步骤。
[0165]
例如,计算机可读存储介质1100可以为非瞬时性计算机可读存储介质。
[0166]
例如,该计算机可读存储介质1100可以应用于上述电子设备中,例如,其可以包括电子设备中的存储器1420。
[0167]
例如,关于计算机可读存储介质1100的说明可以参考电子设备的实施例中对于存储器1420的描述,重复之处不再赘述。
[0168]
有以下几点需要说明:
[0169]
(1)本公开实施例附图只涉及到本公开实施例涉及到的结构,其他结构可参考通常设计。
[0170]
(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。
[0171]
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,本公开的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献