CN114579925A - 一种卷积运算方法及装置和卷积核拆分方法及单元 - Google Patents
一种卷积运算方法及装置和卷积核拆分方法及单元 Download PDFInfo
- Publication number
- CN114579925A CN114579925A CN202210211596.4A CN202210211596A CN114579925A CN 114579925 A CN114579925 A CN 114579925A CN 202210211596 A CN202210211596 A CN 202210211596A CN 114579925 A CN114579925 A CN 114579925A
- Authority
- CN
- China
- Prior art keywords
- sub
- convolution
- splitting
- size
- matrix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Complex Calculations (AREA)
Abstract
本申请适用于神经网络技术领域,涉及一种卷积运算方法及装置和卷积核拆分方法及单元,卷积运算方法,应用于大小为m*m的卷积运算单元,方法包括:获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将所述卷积核按照卷积运算单元的大小分成N个子核,并将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,N为大于1的整数;将N个所述子矩阵中的每个所述子矩阵与一一对应的所述子核进行卷积运算,得到N个第一运算结果;将N个所述第一运算结果进行累加得到第二运算结果,所述第二运算结果为所述卷积核和所述特征数据的卷积运算结果。本申请实施例可以提升计算资源利用率,降低成本。
Description
技术领域
本申请属于神经网络技术领域,尤其涉及一种卷积运算方法及装置和卷积核拆分方法及单元。
背景技术
近年来,随着人工智能的不断发展,神经网络在众多领域取得了巨大成功,其应用范围也越来越广泛。
目前,神经网络架构中常用的卷积核大小一般包括1*1、3*3、5*5和7*7。为了实现这些不同的卷积核的卷积计算,神经网络处理器(Neural-network Processing Unit,NPU)一般需要按照所支持的最大卷积核大小来设计计算资源,即按照7*7进行设置。
但是,神经网络架构中绝大部分计算所使用的卷积核是1*1和3*3大小,极少部分是5*5和7*7大小。为了支持7*7大小而按照7*7大小来设置计算资源的话,在大部分时间中就会有部分计算资源没有执行,导致资源的浪费,同时这部分计算资源也会导致芯片成本的增加。
发明内容
有鉴于此,本申请实施例提供了一种卷积运算方法及装置和卷积核拆分方法及单元,能够解决相关技术中的一个或多个技术问题。
第一方面,本申请一实施例提供了一种卷积运算方法,应用于大小为m*m的卷积运算单元,所述卷积运算方法包括:获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将所述卷积核按照卷积运算单元的大小拆分成N个子核,并将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,N为大于1的整数;将N个所述子矩阵中的每个所述子矩阵与一一对应的所述子核进行卷积运算,得到N个第一运算结果;将N个所述第一运算结果进行累加得到第二运算结果,所述第二运算结果为所述卷积核和所述特征数据的卷积运算结果。
在一些实施例中,所述将所述卷积核按照卷积运算单元的大小拆分成N个子核,包括:将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核;所述将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,包括:将所述特征数据在高度方向上拆分成N部分以形成N个与所述子核一一对应的所述子矩阵;其中,所述特征数据在高度方向上包括h个数据,则所述子矩阵在高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据到后一个子矩阵中。
在一些实施例中,所述将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核,包括:当n为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;当n不为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
在一些实施例中,在所述至少一个部分中的属于所述n*n的矩阵的原数据行的前面或后面用0数据补齐高度不足m的部分。
在一些实施例中,当在所述至少一个部分中的属于所述n*n的矩阵的原数据行的后面用0数据补齐高度不足m的部分形成子核时,与该子核一一对应的所述子矩阵在所述高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据以及补0以把高度方向补齐。
第二方面,本申请一实施例提供了一种卷积核拆分方法,适配于大小为m*m的卷积运算单元,所述卷积核拆分方法包括:获取用于卷积运算的卷积核,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将所述卷积核按照卷积运算单元的大小拆分成N个大小为m*n的子核,N为大于1的整数。
在一些实施例中,所述将所述卷积核按照卷积运算单元的大小拆分成N个大小为m*n的子核,包括:将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核。
在一些实施例中,所述将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核,包括:当n为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;当n不为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
第三方面,本申请一实施例提供了一种卷积运算装置,包括:拆分单元,用于获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将所述卷积核按照卷积运算单元的大小拆分成N个子核,并将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,N为大于1的整数;大小为m*m的卷积运算单元,用于将N个所述子矩阵中的每个所述子矩阵与一一对应的所述子核进行卷积运算,得到N个第一运算结果;将N个所述第一运算结果进行累加得到第二运算结果,所述第二运算结果为所述卷积核和所述特征数据的卷积运算结果。
第四方面,本申请一实施例提供了一种卷积核拆分单元,适配于大小为m*m的卷积运算单元,所述卷积核拆分单元包括:获取模块,用于获取用于卷积运算的卷积核,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;拆分执行模块,用于将所述卷积核按照卷积运算单元的大小拆分成N个大小为m*n的子核,N为大于1的整数。。
第五方面,本申请一实施例提供了一种芯片,包括如前述第三方面实施例所述的卷积运算装置,或,前述第四方面实施例所述的卷积核拆分单元。
第六方面,本申请一实施例提供了一种电子设备,包括如前述第五方面实施例所述的芯片。
第七方面,本申请一实施例提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述第一方面任一实施例所述的卷积运算方法,或,实现如前述第二方面任一实施例所述的卷积核拆分方法。
第八方面,本申请一实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备实现如前述第一方面任一实施例所述的卷积运算方法,或,实现如前述第二方面任一实施例所述的卷积核拆分方法。
本申请实施例通过将高大于m的卷积核的卷积运算进行拆分后再执行卷积运算,使用m*m大小卷积核的计算资源就可以进行大尺寸的卷积计算,从而提高芯片的单位面积性能(PPA),缩减成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种卷积核和图像数据的示意图;
图2是本申请一实施例提供的一种卷积运算的基本原理示意图;
图3是本申请一实施例提供的一种卷积运算方法的实现流程示意图;
图4是本申请一实施例提供的一种卷积运算方法的常规计算过程示意图;
图5是本申请一实施例提供的一种计算单元的结构示意图;
图6是本申请一实施例提供的一种乘累加计算过程示意图;
图7是本申请一实施例提供的一种5*5卷积核的拆分过程示意图;
图8是本申请一实施例提供的一种6*6特征数据的拆分过程示意图;
图9是本申请一实施例提供的另一种5*5卷积核的拆分过程示意图;
图10是本申请一实施例提供的另一种6*6特征数据的拆分过程示意图;
图11是本申请一实施例提供的两个子核和两个子矩阵的卷积计算过程示意图;
图12是本申请一实施例提供的一种7*7卷积核的拆分过程示意图;
图13是本申请一实施例提供的一种卷积运算装置的结构示意图;
图14是本申请一实施例提供的一种拆分单元的结构示意图;
图15是本申请一实施例提供的一种卷积核拆分单元的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
在本申请说明书中描述的“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
此外,在本申请的描述中,“多个”的含义是两个或两个以上。术语“第一”和“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
还应当理解,除非另有明确的规定或限定,术语“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是直接相连,也可以是通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
神经网络架构中,绝大部分计算所使用的卷积核是1*1和3*3大小,极少部分是使用5*5和7*7大小。为了支持7*7大小而按照7*7大小来设置计算资源的话,在大部分时间中就会有部分计算资源没有执行,导致资源的浪费,同时这部分计算资源也会导致芯片成本的增加。
因此,本申请实施例提供一种卷积运算方法及装置和卷积核拆分方法及单元,通过将高大于m的卷积核的卷积运算进行拆分,使用m*m大小卷积核的计算资源就可以进行大尺寸的卷积计算,从而提高芯片的单位面积性能(PPA),缩减成本。在一些非限制性实施例中,通过将5*5和7*7大小卷积核的卷积运算进行拆分,从而能够使用3*3大小卷积核的计算资源就可以进行5*5和7*7大小的卷积计算。
为了更好地说明本申请的技术方案,接着结合一些具体参数对本申请的技术方案进行详细的阐述和说明。应理解,这些参数只是为了便于说明而优选的一些参数,并不能解释为对本申请的具体限定。
神经网络架构中包括大量的卷积计算,卷积是一种数学运算,其基本原理是将特征数据(又称为输入特征)与卷积核进行乘累加计算得到输出特征。卷积运算包括卷积核大小(size)和步长(stride)两个参数。特征数据和卷积核均为矩阵。
图1和图2所示为本申请一实施例提供的卷积的基本原理示意图。在图1和图2所示的实施例中,以特征数据为图像数据且为6*6像素大小,以卷积核大小为3*3,以步长为1,输出4*4像素大小的图像作为示例性描述。卷积核在图像上滑动,可以在图像的宽度w方向和高度h方向移动,输出每次对应位置的图像数据和卷积核相乘结果之和,以得到输出图像。需注意的是,图中标识有单个数字(例如0、1、2、3、4、5、6、7、8)的元素为卷积核的元素,图中标识有两个数字(例如00、01、10等)的像素为输入图像或输出图像的像素。图中各元素或像素上标识的数字(例如0、00等)仅用于区分不同行(row)和/或列(column)的元素或像素,元素或像素上标识的数字(例如0、00等)不代表该元素或像素具有与该数字相同(或不同)的数值。
如图1和图2所示,输出图像中(00)像素、(01)像素和(10)像素的值分别按照如下公式进行计算。
(00)像素=(00)*(0)+(01)*(1)+(02)*(2)+(10)*(3)+(11)*(4)+(12)*(5)+(20)*(6)+(21)*(7)+(22)*(8)。
(01)像素=(01)*(0)+(02)*(1)+(03)*(2)+(11)*(3)+(12)*(4)+(13)*(5)+(21)*(6)+(22)*(7)+(23)*(8)。
(00)像素=(10)*(0)+(11)*(1)+(12)*(2)+(20)*(3)+(21)*(4)+(22)*(5)+(30)*(6)+(31)*(7)+(32)*(8)。
其中,括号中的单个数字代表卷积核中该位置的元素的值,括号中的两个数字代表图像中该位置的像素的值。
本申请一实施例提供一种卷积运算方法。卷积运算方法可以由卷积运算装置执行,卷积运算装置可以配置于诸如神经网络芯片等芯片。如图3所示为本申请一实施例提供的一种卷积运算方法的实现流程示意图。如图3所示,卷积运算方法包括步骤S110至步骤S140。
S110,获取用于卷积运算的卷积核和特征数据。
本申请实施例的卷积运算方法,应用于大小为m*m的卷积运算单元,也就是说,本申请实施例使用m*m大小卷积核的计算资源。而用于卷积运算的卷积核为n*n的矩阵,n大于m,n和m为大于1的整数。
在一些实施例中,m取值为3,而卷积核为n大于3的矩阵。
在本申请一些实施例中,可以从存储器中获取卷积核和特征数据,以进行后续的卷积运算。
在本申请一些实施例中,存储卷积核和特征数据的存储器可以为相同存储器或不同存储器。
在本申请一些实施例中,存储器可以为片外存储器。可选地,从片外存储器获取卷积核和特征数据。
S120,将卷积核按照卷积运算单元的大小拆分成N个子核,并将特征数据对应拆分成N个与子核一一对应的子矩阵。
其中,N个子矩阵与N个子核一一对应,N为大于1的整数。
本申请实施例使用m*m大小卷积核的计算资源,而用于卷积运算的卷积核为n*n的矩阵,且n大于m。
在一些实施例中,将卷积核按照卷积运算单元的大小拆分成N个子核,包括:将n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核。将特征数据对应拆分成N个与子核一一对应的子矩阵,包括:将特征数据在高度方向上拆分成N部分以形成N个与子核一一对应的子矩阵。其中,特征数据在高度方向上包括h个数据,子矩阵在高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据到后一个子矩阵中。
如前所述,通常情形下卷积核通常采用的高为1、3、5和7。本申请一些实施例中,对高大于3的卷积核,即高通常为5或7的卷积核先进行高度方向的拆分,然后再进行卷积运算。
可以理解的是,在一些其他实施例中,根据计算方式的需求,也可以从宽度方向对卷积核进行拆分,所采用的拆分逻辑与本申请相同。
在本申请实施例中,根据卷积运算单元的大小,将高大于m的卷积核拆分成N个高度为m的卷积核。同样的,将待计算的特征数据也拆分成数量相同的几个子矩阵,即N个子矩阵,N个子矩阵一对一的适用于N个子核。
在一些实施例中,当n为m的N倍时,将n*n的矩阵在高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;当n不为m的N倍时,将n*n的矩阵在高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
在一些实施例中,在至少一个部分中的属于n*n的矩阵的原数据行的前面或后面用0数据补齐高度不足m的部分。
在一些实施例中,当在至少一个部分中的属于n*n的矩阵的原数据行的前面用0数据补齐高度不足m的部分形成子核时,与该子核一一对应的子矩阵在高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据以把高度方向补齐。
在其他一些实施例中,当在至少一个部分中的属于n*n的矩阵的原数据行的后面用0数据补齐高度不足m的部分形成子核时,与该子核一一对应的子矩阵在高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据以及补0以把高度方向补齐。
可以理解的是,在对特征数据进行对应拆分时,除了第一部分外,其他部分当需要复制数据或补0以把高度方向补齐时,需要考虑对应的子卷积核的拆分情况,以保证子核与对应的子矩阵的卷积运算过程与原始的卷积核和特征数据的卷积运算过程相符。
在一些实施例中,将N个子矩阵和N个子核存储至存储器,存储子矩阵和子核的存储器可以相同也可以不相同。可选地,存储器可以为片内(即片上)存储器。
S130,将N个子矩阵中的每个所述子矩阵与一一对应的子核进行卷积运算,得到N个第一运算结果。
在本申请实施例中,将每个子矩阵与一一对应的子核进行卷积运算,也就是说,N个子矩阵与一一对应的N个子核分别进行卷积运算,得到N个第一运算结果。
在一些实施例中,可以将N个第一运算结果存储至存储器,可选地,该存储器可以为片内存储器。
S140,将N个第一运算结果进行累加得到第二运算结果。
其中,第二运算结果为卷积核和特征数据的卷积运算结果。
在一些实施例中,可以将第二运算结果存储至存储器,可选地,该存储器可为片内存储器。
在一些实施例中,存储第一运算结果和第二运算结果的存储器可以相同也可以不相同。
具体地,使用的卷积核的高大于m,且进行步长为1的卷积运算时,可以采用本申请实施例的技术方案。本申请实施例对步骤S130中,将子矩阵与子核进行步长为1的卷积运算的实现流程不予具体限制,任何可实现卷积运算的方案都适用于本申请。
本申请实施例提供一种卷积运算方法,通过将高大于m的卷积核进行拆分后再执行卷积运算,能够使用m*m大小卷积核的计算资源进行大尺寸的卷积计算,从而提高芯片的单位面积性能(PPA),缩减成本。在一些实施例中,通过将高大于3的卷积核进行拆分后分成多个高为3的卷积核,能够使用3*3大小卷积核的计算资源进行大尺寸的卷积计算,例如大小为5*5或7*7的卷积计算,从而提高芯片的单位面积性能(PPA),缩减成本。
在本申请一些实施例中,对M*N大小的输入特征,使用S*S大小的卷积核做步长为1的卷积运算,可以得到一个(M-S+1)*(N-S+1)的输出结果。下面以6*6大小的输入特征数据,5*5大小的卷积核,得到一个2*2的输出结果为例对本申请实施例提供的卷积运算方法的实现过程进行详细说明。
如图4所示为针对6*6大小的输入特征,使用5*5大小的卷积核,进行步长为1的卷积运算的常规计算过程示意图,5*5大小的卷积核在输入特征上滑动,卷积核可以看作滑动窗口,针对滑动窗口的每个滑动位置,计算对应的输入特征数据与卷积核数据的卷积运算结果,如图4所示,滑动窗口共有四个滑动位置,共得到四个卷积运算结果,即2*2的输出特征。
如图4所示,输出结果的(00)像素=(00)*(0)+(01)*(1)+(02)*(2)+(03)*(3)+(04)*(4)+(10)*(5)+(11)*(6)+(12)*(7)+(13)*(8)+……+(44)*(24)。其中,括号中的单个数字代表卷积核中该位置的元素的值,括号中的两个数字代表特征数据中该位置的像素的值。
图5所示为本申请一实施例提供的一种计算单元(或称为乘累加计算单元)的结构示意图。计算单元为一种逻辑器件,计算2个数的乘法,并将结果进行累加。在图4所示实施例的这种情况下,结合图6所示,如果计算单元每次计算一列的乘累加,针对每个滑动位置的卷积运算,计算单元(或乘累加计算单元)需要按照5*5卷积核设置资源,硬件上需实现5个计算单元,每个计算单元每个时钟周期进行一列特征数据(高为5)和一列卷积核(高为5)的乘累加计算,5个计算单元可以同步完成5列特征数据和5列卷积核的乘累加计算,再将这5个计算单元得到的乘累加计算结果进行累加,得到每个滑动位置的最终的卷积运算结果。按照5*5卷积核设置资源时,如果计算的是3*3卷积核,则每次只有3个乘累加器能够工作,其他2个处于空闲,就造成了资源浪费。
而在本申请实施例提供的卷积运算方法中,先对6*6的输入特征数据和5*5的卷积核进行拆分。具体地,一方面,根据卷积运算单元的大小,将5*5的卷积核按照高等于3且宽不变进行拆分,第一部分为卷积核前3行原始数据,第二部分包括剩余两行原始数据,并用0数据补齐第二部分中高度不足3的部分,即补一行0数据,得到两个3*5的卷积核,即两个子核,如图7所示。另一方面,同样地,将6*6的输入特征数据对应的拆分成两部分且每部分包括4行数据,即第一部分为特征数据前4行原始数据,第二部分包括剩余两行原始数据不足4行则需要进行复制或补零,根据卷积核与特征数据的卷积运算过程以及对应子核的拆分方式则复制第一部分的部分数据以补齐第二部分中高度不足4的部分,得到两个4*6的输入特征数据,即两个子矩阵,如图8所示。两个子矩阵与两个子核一一对应。
如图7所示,对5*5的卷积核进行拆分时,补齐或增加的一行数据“0”在属于卷积核的原始数据的前面一行,并且根据卷积运算过程,子核中以标识“15”为开头的数据需要与特征数据中标识“30”开头的数据进行运算,相适应地,如图8所示,6*6的输入特征数据拆分成2部分时,第二部分复制的数据包括第一部分中以标识“20”为开头和以标识“30”为开头的两行原始数据。或者,也可以将第二部分中的第一行采用补“0”的方式将高度方向补齐。需要说明的是,在其他可能的实现方式中,对5*5的卷积核进行拆分时,增加的一行数据“0”可以在属于卷积核的原始数据的后面一行,如图9所示。此时,相适应地,6*6的输入特征数据拆分成2部分时,第二部分复制的第一部分中的数据只包括以标识“30”为开头的那一行,并增加一行数据“0”在原始数据的后面,如图10所示。
然后,如图11所示,针对图8所示的拆分后得到的两个4*6的输入特征数据,分别进行对应的如图7所示的两个3*5卷积核的卷积计算,得到两个拆分计算结果。最后,通过加法器将两个拆分计算结果相加得到最终的卷积计算结果,这个卷积计算结果就是针对6*6大小的输入特征数据,使用5*5大小的卷积核,进行步长为1的卷积运算的结果。
如图11所示,输出结果中的(00a)=(00)*(0)+(01)*(1)+(02)*(2)+(03)*(3)+(04)*(4)+(10)*(5)+(11)*(6)+(12)*(7)+(13)*(8)+……+(24)*(14);输出结果中的(00b)=(20)*“0”+(21)*“0”+(22)*“0”+(23)*“0”+(24)*“0”+(30)*(15)+(31)*(16)+(32)*(17)+(33)*(18)+……+(44)*(24)。其中,“0”表示插入的数值为0的值,括号中的单个数字代表卷积核中该位置的元素的值,括号中的两个数字代表输入特征数据中该位置的像素的值。任何数与数值“0”相乘均为0,所以去除算式中包含“0”的项,同时将两个算式相加后,得到:(00)像素=(00a)+(00b)=00)*(0)+(01)*(1)+(02)*(2)+(03)*(3)+(04)*(4)+(10)*(5)+(11)*(6)+(12)*(7)+(13)*(8)+……+(24)*(14)+(30)*(15)+(31)*(16)+(32)*(17)+(33)*(18)+……+(44)*(24),与前述图4所示的常规计算方式的输出结果中(00)像素的计算结果相同。
针对7*7大小的卷积核可以采用类似的方案,将其拆分为3个子核分别进行卷积运算,再对结果进行累加,实现用3*3的资源计算7*7的计算。如图12所示,7*7大小的卷积核可以拆分成图12所示的3个子核,具体地,将7*7大小的卷积核按照高为3宽度为7进行切分,切分为三部分,第一部分包括原始数据的前三行,第二部分包括原始数据的第四和第五两行,第三部分包括原始数据的最后两行(即第六和第七两行),并在第二部分的原始数据前面插入一行数值“0”,在第三部分的原始数据前面插入一行数值“0”,以补齐高度不足3的部分。作为图12的替代方案,可以在第二部分的原始数据后面插入一行数值“0”,在第三部分的原始数据后面插入一行数值“0”。
在其他一些实现方式中,针对7*7大小的卷积核,切分为三部分,第一部分包括原始数据的前三行,第二部分包括原始数据的第四、第五和第六这三行,第三部分包括原始数据的最后一行(即第七行),在第三部分的原始数据前面或后面一行数值“0”以补齐高度不足3的部分。
需要说明的是,此处以将7*7大小的卷积核拆分成3*7大小的子核为例进行说明,未穷举。在实际应用中,根据相同的工作原理,还可以将7*7大小的卷积核拆分成5*7大小的子核,不再赘述。
采用本申请实施例提供的卷积运算方法进行卷积运算,由于将卷积核拆分为高为3的子核,计算单元(或乘累加计算单元)只需要按照3*3卷积核设置资源,每个计算单元每个时钟周期计算一列高为3的乘累加计算,大大降低了成本。如果系统按照最大5*5设置计算资源,则计算3*3大小时,利用率为3/5=60%。采用本申请实施例提供的方法后,利用率可上升至1*0.5+2/3*0.5=83.3%。如果系统按照最大7*7设置计算资源,则计算3*3大小时,利用率为3/7=42.8%。采用本申请实施例提供的方法后,利用率可上升至1*0.33+2/3*0.33+2/3*0.33=77%。
本申请一实施例提供一种卷积运算装置。如图13所示为卷积运算装置的结构示意图。在一些实施例中,卷积运算装置可配置于芯片。如图13所示,卷积运算装置包括拆分单元131,大小为m*m的卷积运算单元132,第一存储器133和第二存储器134。
其中,拆分单元131,用于获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将卷积核按照卷积运算单元的大小拆分成N个的子核,将特征数据按照卷积运算单元的大小拆分成N个子矩阵,N个子矩阵与N个子核一一对应,N为大于1的整数。
在一些实施例中,将N个子核和N个子矩阵存储至第一存储器133。第一存储器133与拆分单元131耦接。
卷积运算单元132,用于将N个子矩阵中的每个子矩阵与一一对应的子核进行卷积运算,得到N个第一运算结果;将N个第一运算结果进行累加得到第二运算结果。其中,第二运算结果为卷积核和特征数据的卷积运算结果。具体地,卷积运算单元132从第第一存储器133中读取子矩阵和一一对应的子核,再进行两者的卷积运算。
在一些实施例中,将N个第一运算结果存储至第二存储器134,将第二运算结果存储至第二存储器134。第二存储器134与卷积运算单元132耦接。
在一个实施例中,将第一个第一运算结果写入第二存储器134后,其余的第一运算结果累加至第二存储器134中的相应地址,以得到累加后的第二运算结果。
在一些实施例中,拆分单元131具体用于:将n*n的矩阵在高度方向拆分成N部分,得到N个大小为m*n的子核;将特征数据在高度方向拆分成N部分以形成N个与子核一一对应的子矩阵。其中,特征数据在高度方向上包括h个数据,子矩阵在高度方向上被配置为包括h-(n-m)个数据,并且基于卷积运算单元的大小复制前一个子矩阵的部分数据到后一个子矩阵中。
在一些实施例中,所述卷积运算单元为3*3的卷积运算单元,卷积核为n等于5的矩阵。
这种情形下,拆分单元131具体用于:将大小为5*5的卷积核在高度方向拆分成2部分,并用0数据补齐高度不足3的部分,得到大小均为3*5的第一子核和第二子核;根据卷积运算单元的大小,将特征数据在高度方向按照高等于4拆分成2部分,并复制部分数据以补齐高度不足4的部分,得到高度均为4的第一子矩阵和第二子矩阵,第一子矩阵对应于第一子核,第二子矩阵对应于第二子核。
卷积运算单元132具体用于:将第一子矩阵与第一子核进行卷积运算得到第一一运算结果,将第二子矩阵与第二子核进行卷积运算得到第一二运算结果;将第一一运算结果和第一二运算结果相加得到第二运算结果。
在其他一些实施例中,所述卷积运算单元为3*3的卷积运算单元,卷积核为n等于7的矩阵。
这种情形下,拆分单元131具体用于:将大小为7*7的卷积核在高度方向按照高等于3且宽不变拆分成3部分,并用0数据补齐高度不足3的部分,得到大小均为3*7的第一子核、第二子核和第三子核;根据卷积运算单元的大小,将特征数据在高度方向按照高等于4拆分成3部分,并复制部分数据以补齐高度不足4的部分,得到第一子矩阵、第二子矩阵和第三子矩阵,第一子矩阵对应于第一子核,第二子矩阵对应于第二子核,第三子矩阵对应于第三子核。
卷积运算单元132具体用于:将第一子矩阵与第一子核进行卷积运算得到第一一运算结果,将第二子矩阵与第二子核进行卷积运算得到第一二运算结果,将第三子矩阵与第三子核进行卷积运算得到第一三运算结果;将第一一运算结果、第一二运算结果和第一三运算结果相加得到第二运算结果。
在一些实施例中,如图14所示,拆分单元131包括:卷积核拆分单元1311和特征数据拆分单元1312。卷积核拆分单元1311和特征数据拆分单元1312均适配于大小为m*m的卷积运算单元。具体地,卷积核拆分单元1311用于将用于卷积运算的卷积核按照卷积运算单元的大小拆分成N个大小为m*n的子核。特征数据拆分单元1312用于将特征数据按照卷积运算单元的大小拆分成N个与子核一一对应的子矩阵。
在一些实施例中,如图15所示,卷积核拆分单元1311包括:获取模块13111和拆分执行模块13112。
其中,获取模块13111,用于获取用于卷积运算的卷积核,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数。
在一些实施例中,获取模块13211用于从片外存储器读取卷积核。
拆分执行模块13112,用于将卷积核按照卷积运算单元的大小拆分成N个大小为m*n的子核,N为大于1的整数。
在一些实施例中,将N个子核存储至第一存储器133。
在一些实施例中,拆分执行模块13112,具体用于:将n*n的矩阵在高度方向拆分成N部分,得到N个大小为m*n的子核。
在一些实施例中,拆分执行模块13112,具体用于:当n为m的N倍时,将n*n的矩阵在高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;当n不为m的N倍时,将n*n的矩阵在高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
在一些实施例中,当卷积运算单元为3*3的卷积运算单元,卷积核为n等于5的矩阵时,拆分执行模块13112具体用于:将大小为5*5的卷积核在高度方向按照高等于3且宽不变进行拆分成2部分,并用0数据补齐高度不足3的第二部分,得到大小均为3*5的第一子核和第二子核。
在其他一些实施例中,当卷积运算单元为3*3的卷积运算单元,卷积核为n等于7的矩阵时,所述拆分执行模块13112具体用于:将大小为7*7的卷积核在高度方向按照高等于3且宽不变拆分成3部分,并用0数据补齐高度不足3的部分(例如用0数据补齐高度不足3的第二部分和第三部分,或者,又如用0数据补齐高度不足3的第三部分),得到大小均为3*7的第一子核、第二子核和第三子核。
在一些实施例中,本申请实施例所称的片外存储器可以包括:双倍速率同步动态随机存储器(DDR)、同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)、动态随机存储器(Dynamic Random Access Memory,DRAM),或伪静态随机存储器(Pseudo Static Random Access Memory,PSRAM)等。本申请实施例所称的片内存储器可以包括:随机存储器(Random Access Memory,RAM)、静态随机存储器(Static Random AccessMemory,SRAM)或寄存器等。
本申请一实施例还提供一种芯片。在一个实施例中,所述芯片包括神经网络芯片。在一个实施例中,该芯片可以包括:图13实施例所述的卷积运算装置,或,图14实施例所述的拆分单元,或,图15实施例所述的卷积核拆分单元。
本申请一实施例还提供了一种电子设备,包括前述实施例中所述的芯片。
本申请一实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时可实现前述任一方法实施例。
本申请一实施例提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备可实现前述任一方法实施例。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
依照不同的设计需求,上述卷积运算装置、拆分单元以及卷积核拆分单元等的实现方式可以是硬件(hardware)、固件(firmware)、软件(software,即计算机程序)或是前述三者中的多者的组合形式。以硬件形式而言,上述卷积运算装置、拆分单元以及卷积核拆分单元等可以是实现于集成电路(integrated circuit)上的逻辑电路。上述卷积运算装置、拆分单元以及卷积核拆分单元等的相关功能可以利用硬件描述语言(hardwaredescription languages,例如Verilog HDL或VHDL)或其他合适的编程语言来实现为硬件。举例来说,上述卷积运算装置、拆分单元以及卷积核拆分单元等的相关功能可以被实现于一或多个控制器、微控制器、微处理器、特殊应用集成电路(Application-specificintegrated circuit,ASIC)、数字信号处理器(digitalsignal processor,DSP)、场可程序逻辑门阵列(Field Programmable Gate Array,FPGA)及/或其他处理单元中的各种逻辑区块、模块和电路。以软件形式及/或固件形式而言,上述卷积运算装置、拆分单元以及卷积核拆分单元等的相关功能可以被实现为计算机程序。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机程序代码可以被记录/存放在计算机可读介质中。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(read-only memory,ROM)、RAM、电载波信号、电信信号以及软件分发介质等。中央处理器(Central Processing Unit,CPU)、控制器、微控制器或微处理器可以从所述计算机可读介质中读取并执行所述计算机程序代码,从而实现上述卷积运算装置、拆分单元以及卷积核拆分单元等的相关功能。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种卷积运算方法,应用于大小为m*m的卷积运算单元,其特征在于,所述卷积运算方法包括:
获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;
将所述卷积核按照所述卷积运算单元的大小拆分成N个子核,并将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,N为大于1的整数;
将N个所述子矩阵中的每个所述子矩阵与一一对应的所述子核进行卷积运算,得到N个第一运算结果;
将N个所述第一运算结果进行累加得到第二运算结果,所述第二运算结果为所述卷积核和所述特征数据的卷积运算结果。
2.如权利要求1所述的卷积运算方法,其特征在于,
所述将所述卷积核按照所述卷积运算单元的大小拆分成N个子核,包括:将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核;
所述将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,包括:将所述特征数据在所述高度方向上拆分成N部分以形成N个与所述子核一一对应的所述子矩阵;
其中,所述特征数据在所述高度方向上包括h个数据,则所述子矩阵在所述高度方向上被配置为包括h-(n-m)个数据,并且基于所述复制前一个子矩阵的部分数据到后一个子矩阵中。
3.如权利要求2所述的卷积运算方法,其特征在于,所述将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核,包括:
当n为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;
当n不为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
4.如权利要求3所述的卷积运算方法,其特征在于,在所述至少一个部分中的属于所述n*n的矩阵的原数据行的前面或后面用0数据补齐高度不足m的部分。
5.如权利要求4所述的卷积运算方法,其特征在于,当在所述至少一个部分中的属于所述n*n的矩阵的原数据行的后面用0数据补齐高度不足m的部分形成子核时,与该子核一一对应的所述子矩阵在所述高度方向上被配置为包括h-(n-m)个数据,并且复制前一个子矩阵的部分数据以及补0以把高度方向补齐。
6.一种卷积核拆分方法,适配于大小为m*m的卷积运算单元,其特征在于,所述卷积核拆分方法包括:
获取用于卷积运算的卷积核,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;
将所述卷积核按照所述卷积运算单元的大小拆分成N个大小为m*n的子核,N为大于1的整数。
7.如权利要求6所述的卷积核拆分方法,其特征在于,所述将所述卷积核按照所述卷积运算单元的大小拆分成N个大小为m*n的子核,包括:将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核。
8.如权利要求7所述的卷积核拆分方法,其特征在于,所述将所述n*n的矩阵在高度方向上拆分成N部分,得到N个大小为m*n的子核,包括:
当n为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,得到N个大小为m*n的子核;
当n不为m的N倍时,将所述n*n的矩阵在所述高度方向上以m为高度拆分成N部分,在除第一部分外的其他部分的至少一个部分中用0数据补齐高度不足m的部分,得到N个大小为m*n的子核。
9.一种卷积运算装置,其特征在于,包括:
拆分单元,用于获取用于卷积运算的卷积核和特征数据,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;将所述卷积核按照卷积运算单元的大小拆分成N个子核,并将所述特征数据对应拆分成N个与所述子核一一对应的子矩阵,N为大于1的整数;
大小为m*m的所述卷积运算单元,用于将N个所述子矩阵中的每个所述子矩阵与一一对应的所述子核进行卷积运算,得到N个第一运算结果;将N个所述第一运算结果进行累加得到第二运算结果,所述第二运算结果为所述卷积核和所述特征数据的卷积运算结果。
10.一种卷积核拆分单元,适配于大小为m*m的卷积运算单元,其特征在于,所述卷积核拆分单元包括:
获取模块,用于获取用于卷积运算的卷积核,所述卷积核为n*n的矩阵,n大于m,n和m为大于1的整数;
拆分执行模块,用于将所述卷积核按照所述卷积运算单元的大小分成N个大小为m*n的子核,N为大于1的整数。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210211596.4A CN114579925A (zh) | 2022-03-04 | 2022-03-04 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
PCT/CN2022/100633 WO2023165054A1 (zh) | 2022-03-04 | 2022-06-23 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210211596.4A CN114579925A (zh) | 2022-03-04 | 2022-03-04 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114579925A true CN114579925A (zh) | 2022-06-03 |
Family
ID=81778120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210211596.4A Pending CN114579925A (zh) | 2022-03-04 | 2022-03-04 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114579925A (zh) |
WO (1) | WO2023165054A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023165054A1 (zh) * | 2022-03-04 | 2023-09-07 | 奥比中光科技集团股份有限公司 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108304923B (zh) * | 2017-12-06 | 2022-01-18 | 腾讯科技(深圳)有限公司 | 卷积运算处理方法及相关产品 |
US20190228285A1 (en) * | 2018-01-24 | 2019-07-25 | The Regents Of The University Of Michigan | Configurable Convolution Neural Network Processor |
CN113641952B (zh) * | 2021-10-14 | 2022-02-08 | 北京壁仞科技开发有限公司 | 卷积设备、卷积方法、矩阵拆聚装置以及矩阵拆聚方法 |
CN114579925A (zh) * | 2022-03-04 | 2022-06-03 | 奥比中光科技集团股份有限公司 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
-
2022
- 2022-03-04 CN CN202210211596.4A patent/CN114579925A/zh active Pending
- 2022-06-23 WO PCT/CN2022/100633 patent/WO2023165054A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023165054A1 (zh) * | 2022-03-04 | 2023-09-07 | 奥比中光科技集团股份有限公司 | 一种卷积运算方法及装置和卷积核拆分方法及单元 |
Also Published As
Publication number | Publication date |
---|---|
WO2023165054A1 (zh) | 2023-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111095241B (zh) | 加速数学引擎 | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
WO2018130029A1 (zh) | 用于神经网络计算的计算设备和计算方法 | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
US11341400B1 (en) | Systems and methods for high-throughput computations in a deep neural network | |
CN112703511B (zh) | 运算加速器和数据处理方法 | |
CN110399591B (zh) | 基于卷积神经网络的数据处理方法和装置 | |
CN110109646B (zh) | 数据处理方法、装置和乘加器及存储介质 | |
CN113947200B (zh) | 神经网络的加速计算方法及加速器、计算机可读存储介质 | |
EP4227886A1 (en) | Matrix operation method and apparatus for image data, device, and storage medium | |
US11586442B2 (en) | System and method for convolving image with sparse kernels | |
CN114579925A (zh) | 一种卷积运算方法及装置和卷积核拆分方法及单元 | |
EP0997828A2 (en) | Signal processing distributed arithmetic architecture | |
CN111240746A (zh) | 一种浮点数据反量化及量化的方法和设备 | |
CN110580519A (zh) | 一种卷积运算结构及其方法 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
EP4206996A1 (en) | Neural network accelerator with configurable pooling processing unit | |
CN112765540A (zh) | 数据处理方法、装置及相关产品 | |
CN112639836A (zh) | 数据处理装置、电子设备和数据处理方法 | |
CN117795473A (zh) | 用于存储器内计算的部分和管理和可重新配置的脉动流架构 | |
CN116010313A (zh) | 一种通用、可配置的图像滤波计算多行输出系统和方法 | |
CN114281755A (zh) | 一种面向向量处理器的半精度向量化卷积方法及系统 | |
JP2022074442A (ja) | 演算装置および演算方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |