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

一种卷积神经网络的加速方法及装置与流程

2022-02-20 04:59:49 来源:中国专利 TAG:


1.本发明属于深度学习领域,具体涉及一种卷积神经网络的加速方法及装置。


背景技术:

2.本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
3.卷积神经网络(convolutional neural networks,简称cnn)是一种深度前馈人工神经网络,已被应用于诸多领域,如图像识别。卷积神经网络在处理过程中会进行较为复杂的计算,主要包括卷积计算、批标准化计算、激活计算等。目前大部分神经网络芯片(npu)主要就是要解决cnn的计算问题,对cnn的计算进行加速。
4.现有技术中,常用的方法是利用im2col函数优化卷积运算。如图1所示,在cnn学习训练过程中,通常不会一次处理整张图片,而是先将图片划分为多个小的块(patch),并且每个patch需要经过im2col处理进行重排,将三维的patch展开成为一维向量,进而可以将卷积操作转换为二维矩阵乘法:c=d
×
w,其中d为输入图像矩阵,w为权重矩阵。
5.在上述方案中,计算一个卷积需要同时访问多行和多列的数据,以3*3的卷积为例的话,一次卷积需要的9个数分布在3行和3列,应当理解,数据读取只有针对连续的数据才能确保数据读取的带宽,如需同时访问到上述9个数需要对内部存储器的排布做特殊设计,例如通过内部存储器切分提高内存访问的并行度。然而,由于npu通常需要支持不同尺寸的卷积,因此若需要实现针对不同的卷积核的通用性,则需要把内存切分成很多小块才能兼容各种设置,这样一方面会增大内部存储器的面积,另一方面提升了数据访问逻辑的复杂度。因此,设计出一种具有高通用性、低复杂度的卷积神经网络的加速方法是当前亟需解决的技术问题。


技术实现要素:

6.针对上述现有技术的卷积运算的通用性较差且复杂度高的问题。本发明实施例提出了一种卷积神经网络的加速方法及装置。利用这种方法及装置,能够解决上述问题。
7.本发明的实施例中提供了以下方案。
8.第一方面,提供一种卷积神经网络的加速方法,方法包括:将卷积层的权重矩阵按行拆分为多个权重段,并将多个权重段分别缓存至计算单元阵列中的多个计算单元;读取多个权重段分别对应的多路输入数据流,并将多路输入数据流并行输入至多行计算单元,其中,输入数据流是根据卷积层的输入特征图中的多行数据拼接组成;在每个计算单元内部,基于缓存的权重段对输入数据流进行滑窗操作和乘累加运算,得到卷积层的输出特征图。
9.在一种可能的实施方式中,读取多个权重段分别对应的多路输入数据流,还包括:针对每个权重段,根据卷积层的卷积步长确定输入特征图中的多行数据,并依次读取多行数据以拼接组成每个权重段对应的输入数据流。
10.在一种可能的实施方式中,基于缓存的权重段对输入数据流进行滑窗操作和乘累加运算,还包括:在每个计算单元内部,将缓存的权重段作为滑动窗,并将卷积层的卷积步长作为滑动步长,对输入每个计算单元的输入数据流进行滑窗操作,并根据权重段和窗内数据进行乘累加运算。
11.在一种可能的实施方式中,若每个计算单元的缓存空间小于权重矩阵的整行长度,方法还包括:将每个权重段拆分为多个分组;在不同的时间段内,分别缓存每个权重段的不同分组至对应的计算单元,使每个计算单元基于当前缓存的分组对输入数据流重复进行滑窗操作和卷积运算,从而在不同的时间段内获得不同的输出特征子图;以及,将获得的输出特征子图叠加。
12.在一种可能的实施方式中,方法还包括:根据每个计算单元当前缓存的分组,确定滑窗操作的索引偏移值,索引偏移值用于指示初始滑窗的位置。
13.第二方面,提供一种卷积神经网络的加速装置,包括:逻辑控制单元和计算单元阵列,其中每个计算单元包括:缓存单元、控制单元和乘累加单元;其中,逻辑控制单元被配置为用于:将卷积层的权重矩阵按行拆分为多个权重段,并将多个权重段分别缓存至计算阵列中的多个计算单元;以及,读取多个权重段分别对应的多路输入数据流,并将多路输入数据流并行输入至多行计算单元,其中,输入数据流是根据卷积层的输入特征图中的多行数据拼接组成;在每个计算单元内部,缓存单元被配置为用于缓存权重段;控制单元被配置为用于基于缓存的权重段对输入数据流进行滑窗操作;乘累加单元被配置为用于执行乘累加运算。
14.在一种可能的实施方式中,逻辑控制单元被配置为用于:针对每个权重段,根据卷积层的第一卷积步长确定输入特征图中的多行数据,并依次读取多行数据以拼接组成每个权重段对应的输入数据流。
15.在一种可能的实施方式中,在每个计算单元内部,控制单元被配置为用于:将缓存的权重段作为滑动窗,并将卷积层的第二卷积步长作为滑动步长,对输入每个计算单元的输入数据流进行滑窗操作;乘累加单元被配置为用于:根据权重段和窗内数据进行乘累加运算。
16.在一种可能的实施方式中,若每个计算单元的缓存空间小于权重矩阵的整行长度,逻辑控制单元被配置为用于:将每个权重段拆分为多个分组;在不同的时间段内,分别缓存每个权重段的不同分组至对应的计算单元,使每个计算单元基于当前缓存的分组对输入数据流重复进行滑窗操作和卷积运算,从而在不同的时间段内获得不同的输出特征子图;以及,将获得的输出特征子图叠加。
17.在一种可能的实施方式中,逻辑控制单元被配置为用于:根据每个计算单元当前缓存的分组,确定滑窗操作的索引偏移值,索引偏移值用于指示初始滑窗的位置。
18.本技术实施例采用的上述至少一个技术方案能够达到以下有益效果:无需使用im2col函数,通过对卷积层的权重矩阵进行拆分,将拆分获得的权重段缓存在各计算单元中,利用输入特征图中的多行数据拼接组成各行计算单元的输入数据流,由各个计算单元基于缓存的权重段在输入数据流上进行滑窗操作和乘累加运算实现加速卷积运算,通过这种方案,进入各行计算单元的数据是按整行数据连续读取,不需要跨行或者跨列读取,因此无需对内存的排布进行特殊设计,可支持不同尺寸的卷积运算,并且不需要单独实现
im2col的功能,降低了复杂度。
19.应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举例说明本发明的具体实施方式。
附图说明
20.通过阅读下文的示例性实施例的详细描述,本领域普通技术人员将明白本文所述的优点和益处以及其他优点和益处。附图仅用于示出示例性实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的标号表示相同的部件。在附图中:
21.图1为现有技术中基于im2col的卷积运算的示意图;
22.图2为一种卷积神经网络计算装置的结构示意图;
23.图3为根据本发明一实施例的卷积神经网络的加速方法的流程示意图;
24.图4为三维cnn卷积示意图;
25.图5为根据本发明一实施例的利用缓存有权重段的计算单元(pe)进行卷积的示意图;
26.图6为根据本发明一实施例的利用缓存有权重段的计算单元(pe)进行滑窗操作的示意图;
27.图7为根据本发明一实施例的卷积神经网络的加速装置的结构示意图;
28.图8为根据本发明一实施例的卷积神经网络的加速装置的计算单元(pe)的结构示意图。
29.在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
30.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
31.在本发明中,应理解,诸如“包括”或“具有”等术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不旨在排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在的可能性。
32.另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
33.图2示出了一种卷积神经网络计算装置的结构示意图20。其包括:计算平台21和外部存储器22,计算平台21至少包括用于执行卷积计算的计算单元(pe)阵列211和内部存储器212,其中,外部存储器22通常选用低成本的存储介质,通常带宽受限且读写功耗也较高。内部存储器通常选用访问速度较快的存储介质,比如sram,其带宽较高,读写代价也较低,但通常成本较高,因此一般容量受限。
34.图3示出了根据本发明实施例的卷积神经网络的加速方法300的流程示意图。以下结合图2所示出的卷积神经网络计算装置,对图3中卷积神经网络的加速方法300的各个方
面进行详细阐述。
35.如图3所示,该方法300可以包括:
36.步骤301:将卷积层的权重矩阵按行拆分为多个权重段,并将多个权重段分别缓存至计算单元(pe)阵列中的多个计算单元(pe);
37.步骤302:读取多个权重段分别对应的多路输入数据流,并将多路输入数据流并行输入至多行计算单元(pe),
38.步骤303:在每个计算单元(pe)内部,基于缓存的权重段对输入数据流进行滑窗操作和乘累加运算,得到卷积层的输出特征图。
39.图4是一种三维cnn卷积示意图,其中,针对卷积神经网络的任意一个卷积层,假设该卷积层的输入特征图是由若干个d
abc
组成的矩阵数据,其尺寸为6(列)*6(行)*n(输入通道数),其中,d
abc
的下标a表示输入通道序号,取值0,1,

,(n-1);下标b表示行序号,取值为0,1,

,5;下标c表示列序号,取值0,1,

,5;该输入特征图通常在外部存储器22上逐行逐通道地依次连续存储,其中,n为大于2的正整数。该卷积层的权重矩阵是由若干个w
mnpq
组成的数据,通常在外部存储器22上存储,其尺寸为3(列)*3(行)*n(输入通道数)*2(输出通道数),其中,w
mnpq
的下标n表示输入通道序号,取值为0,1,

,(n-1);下标p表示行序号,取值为0,1,2;下标q表示列序号,取值0,1,2;下标m表示输出通道序号,取值0,1,分别对应图4中的过滤器0和过滤器1。输出特征图是由若干个p
xyz
组成的矩阵数据,其尺寸为4(列)*4(行)*2(输出通道数),其中,p
xyz
的下标x表示输出通道序号,取值0,1;下标y表示行序号,取值为0,1,2,3;下标z表示列序号,取值0,1,2,3;本实施例中,希望实现的卷积运算也即由输入特征图和权重矩阵映射出输出特征图的操作。
40.本发明实施例中,以图4所示出的三维cnn卷积为例,首先,如步骤s301,可以从外部存储器22中读取卷积层的权重矩阵进入内部存储器212,进而将权重矩阵按行进行拆分以获得多个权重段。例如,可以将图4所示出的权重矩阵拆分为3*n*2个权重段,每个权重段对应于权重矩阵的一行权重值,尺寸为3(列)*1(行)*1(输入通道数)*1(输出通道数);进一步,图5为本实施例的利用缓存有权重段的计算单元(pe)进行卷积的示意图,如图5所示,将多个权重段分别缓存至计算单元(pe)阵列中的多个计算单元(pe),比如将(w
0000
,w
0001
,w
0002
)缓存至一个计算单元(pe),将(w
0010
,w
0011
,w
0012
)缓存至另一个计算单元(pe),依次类推。
41.其中,如图5所示,该权重矩阵中,对应于同一输出通道的多个权重段被缓存在计算单元(pe)阵列的同一列中,比如两列计算单元(pe)可以分别用于缓存过滤器0和过滤器1中的各个权重段。进一步地,若不同的权重段对应于相同的输入数据流,则将该不同的权重段排列在计算单元(pe)阵列的同一行。
42.进一步,如步骤302,读取多个权重段分别对应的多路输入数据流,并将多路输入数据流并行输入至多行计算单元(pe)。
43.其中,基于权重矩阵和输入特征图进行卷积运算而确定的多个卷积窗中,每个权重段所面临的数据d
abc
是不同的,以卷积步长k=2为例,权重段(w
00000
,w
0001
,w
0002
)只需要和行序号b=0,2的输入数据进行卷积运算。因此针对每个权重段,可以针对性地确定输入特征图中的多行数据以拼接组成对应每个权重段的输入数据流,在卷积计算过程中,读取多个权重段分别对应的多路输入数据流以并行输入至多行计算单元(pe)。
44.在一些可能的实施方式中,上述步骤302还包括:针对每个权重段,根据卷积层的卷积步长确定输入特征图中的多行数据,并依次读取多行数据以拼接组成每个权重段对应的输入数据流。例如,假设卷积层的步长为k,那么权重段(w
0000
,w
0001
,w
0002
)对应的输入数据流由图4的输入特征图的对应输入通道内的行0,行k,

,行(e-1)k的数据拼接组成,假设k=1,也即(d
000
,d
001
,d
002
,d
003
,d
004
,d
005
,d
0,10
,d
011
,..).;权重段(w
0010
,w
0011
,w
0012
)对应的输入数据流由图4中的输入特征图的对应输入通道内的行1,行k 1,

,行(e-1)k 1的数据拼接组成,权重段(w
0020
,w
0021
,w
0022
)对应的输入数据流由图4中的输入特征图的对应输入通道内的行2,行k 2,

,行(e-1)k 2的数据拼接组成,依次类推。
45.进一步,如步骤303,在每个计算单元(pe)内部,基于缓存的权重段对输入数据流进行滑窗操作和乘累加运算,得到卷积层的输出特征图。
46.在一些可能的实施方式中,上述步骤303还包括:在每个计算单元(pe)内部,将缓存的权重段作为滑动窗,并将卷积层的卷积步长作为滑动步长,对输入每个计算单元(pe)的输入数据流进行滑窗操作,并根据权重段和窗内数据进行乘累加运算。例如,图6示出了利用缓存有权重段的计算单元(pe)进行滑窗操作的示意图,如图6所示,针对权重段(w
0000
,w
0001
,w
0002
),其对应的输入数据流为图4的输入特征图d
abc
中的输入通道序号a=0、行序号b=0,k,

,(e-1)k的数据,也即(d
000
,d
001
,d
002
,d
003
,d
004
,d
005
,d
0,10
,d
011
,...;基于此,在时序t1,权重段(w
0000
,w
0001
,w
0002
)在输入数据流上进行滑动至(d
000
,d
001
,d
002
),并基于窗内的权重段和输入数据执行乘加操作:w
0000
×d000
w
0001
×d001
w
0002
×d002
;与此同时,其他计算单元(pe)也基于缓存的权重段在其对应的输入数据流上进行同步滑动,以及基于权重段和窗内数据执行乘加操作,比如,权重段(w
0010
,w
0011
,w
0012
)滑动至(d
010
,d
011
,d
012
),权重段(w
0020
,w
0021
,w
0022
)滑动至(d
020
,d
021
,d
022
),其他输入通道的权重段依次类推,可以获得每个计算单元(pe)在时序t1处的乘累加结果,进而可以将对应于过滤器0的一列计算单元(pe)在时序t1处的全部乘累加结果相加得到一个输出通道的输出值p
000
,将对应于过滤器1的一列计算单元(pe)在时序t1处的全部乘累加结果相加得到另一个输出通道的输出值p
100
;在时序t2,权重段(w
0000
,w
0001
,w
0002
)在输入数据流上滑动k个值,假设k=1,则滑动至(d
001
,d
002
,d
003
),基于窗内的权重段和输入数据执行乘加操作:w
0000
×d001
w
0001
×d002
w
0002
×d003

,依次类推。最终可以得到图4中的输出特征图中的每个值。
47.本实施例中,通过采用上述方法,可以从外部存储器中整行地读取输入特征图中的数据,并数据流的形式将数据并行输入每行计算单元(pe),无需同时对外部存储器上基于单个存储方向上连续存储的输入特征图进行频繁的跨行或跨列读取,因此无需对内存的排布进行特殊设计,即可支持不同尺寸的卷积运算。此外,也无需在计算平台中额外实现im2col的功能,节省了硬件资源和运算功耗。
48.在一些可能的实施方式中,若每个计算单元(pe)的缓存空间小于权重矩阵的整行长度,方法还包括:将每个权重段拆分为多个分组;在不同的时间段内,分别缓存每个权重段的不同分组至对应的计算单元(pe),使每个计算单元(pe)基于当前缓存的分组对输入数据流重复进行滑窗操作和卷积运算,从而在不同的时间段内获得不同的输出特征子图;以及,将获得的输出特征子图叠加。
49.例如,假设卷积层的权重矩阵的尺寸为10(列)*10(行)*n(输入通道数)*2(输出通道数),因此单个权重段的尺寸为10(列)*1(行)*1(输入通道数)*1(输出通道数),若计算单
元(pe)的缓存空间有限,比如每个计算单元(pe)只能缓存5个权重值,在这种情况下,本实施方式可以将每个权重段拆分为多个分组,比如,假设一个权重段为(w
0000
,w
0001
,...,w
0009
),可以分为第一分组:(w
0000
,w
0001
,...,w
0004
)和第二分组:(w
0005
,w
0006
,...,w
0009
)。进而可以在第一时间段内,先从外部存储器读取多个权重段的第一分组,并缓存到对应的计算单元(pe),从外部存储器读取每个权重段对应的输入数据流并输入对应的计算单元(pe),每个计算单元(pe)基于缓存的第一分组对输入数据流进行第一滑窗操作和乘累加运算,得到第一输出特征子图。在第一分组涉及的运算执行完毕之后,在第二时间段内,从外部存储器读取多个权重段的第二分组,缓存到对应的计算单元(pe)以替换原有的第一分组,从外部存储器重复读取每个权重段对应的输入数据流并输入对应的计算单元(pe),每个计算单元(pe)基于缓存的第二分组对输入数据流进行第二滑窗操作和乘累加运算,得到第二输出特征子图;进一步,将该第一输出特征子图和第二输出特征子图进行矩阵累加,输出该卷积层的输出特征图。
50.本实施方式中,通过对权重段进行分组,无需扩大片内缓存空间即可适用于权重数据较大的卷积,进一步提升了针对各自尺寸卷积运算的通用性。
51.在一些可能的实施方式中,还包括:根据每个计算单元(pe)当前缓存的分组,确定滑窗操作的索引偏移值,索引偏移值用于指示初始滑窗的位置。
52.其中,由于在对权重段进行拆分之后,每个分组在进行滑窗操作时在输入数据流上的滑动起始位置不同,比如,第一分组:(w
0000
,w
0001
,...,w
0004
)在输入数据流中的每行数据中的滑动起始位置无需偏移,第二分组:(w
0005
,w
0006
,...,w
0009
)在输入数据流中的每行数据中的滑动起始位置则需偏移5个值,该5个值为每个权重段中第二分组之前的值个数。其中,针对均匀分组的情况,该索引偏移值可以为s*l,其中s用于指示分组的序号,取值0,1,2,

,其中l用于指示分组的尺寸。
53.基于相同或类似的技术构思,本发明实施例还提供一种卷积神经网络的加速装置,其包括:包括:逻辑控制单元和计算单元(pe)阵列,其中每个计算单元(pe)包括:缓存单元、控制单元和乘累加(mac)单元;
54.在本实施例中,如图7和图8所示,逻辑控制单元71和计算单元(pe)阵列211可以设置于图2所示出的卷积神经网络计算装置20的计算平台21上;其中,逻辑控制单元71被配置为用于:将卷积层的权重矩阵按行拆分为多个权重段,并将多个权重段分别缓存至计算阵列中的多个计算单元(pe);以及,读取多个权重段分别对应的多路输入数据流,并将多路输入数据流并行输入至多行计算单元(pe),其中,输入数据流是根据卷积层的输入特征图中的多行数据拼接组成;在每个计算单元(pe)内部,缓存单元被配置为用于缓存权重段;控制单元被配置为用于基于缓存的权重段对输入数据流进行滑窗操作;乘累加单元被配置为用于执行乘累加运算。
55.在一些可能的实施方式中,逻辑控制单元71被配置为用于:针对每个权重段,根据卷积层的第一卷积步长确定输入特征图中的多行数据,并依次读取多行数据以拼接组成每个权重段对应的输入数据流。
56.在一些可能的实施方式中,在每个计算单元(pe)内部,控制单元被配置为用于:将缓存的权重段作为滑动窗,并将卷积层的第二卷积步长作为滑动步长,对输入每个计算单元(pe)的输入数据流进行滑窗操作;乘累加单元被配置为用于:根据权重段和窗内数据进
行乘累加运算。
57.在一些可能的实施方式中,若每个计算单元(pe)的缓存空间小于权重矩阵的整行长度,逻辑控制单元被配置为用于:将每个权重段拆分为多个分组;在不同的时间段内,分别缓存每个权重段的不同分组至对应的计算单元(pe),使每个计算单元(pe)基于当前缓存的分组对输入数据流重复进行滑窗操作和卷积运算,从而在不同的时间段内获得不同的输出特征子图;以及,将获得的输出特征子图叠加。
58.在一种可能的实施方式中,逻辑控制单元被配置为用于:根据每个计算单元(pe)当前缓存的分组,确定滑窗操作的索引偏移值,索引偏移值用于指示初始滑窗的位置。
59.本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置而言,由于其基本相似于方法实施例,所以其描述进行了简化,相关之处可参见方法实施例的部分说明即可。
60.本技术实施例提供的装置与方法是一一对应的,因此,装置也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述装置的有益技术效果。
61.虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
62.虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
再多了解一些

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

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

相关文献