CN114764615A - 卷积运算的实现方法、数据处理方法及装置 - Google Patents
卷积运算的实现方法、数据处理方法及装置 Download PDFInfo
- Publication number
- CN114764615A CN114764615A CN202110040705.6A CN202110040705A CN114764615A CN 114764615 A CN114764615 A CN 114764615A CN 202110040705 A CN202110040705 A CN 202110040705A CN 114764615 A CN114764615 A CN 114764615A
- Authority
- CN
- China
- Prior art keywords
- matrix
- convolution
- data
- convolution kernel
- sub
- 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
- 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
-
- 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/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
-
- 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/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/28—Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
-
- 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
-
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
本申请提供了一种卷积运算的实现方法,其卷积运算中的滑动步长s大于1,包括:将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;各对数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算后,对得到的各矩阵进求和;或将数据子矩阵和卷积核子矩阵分别构成数据重组矩阵和卷积核重组矩阵,并将数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。本申请将卷积运算变换为步长为1的卷积运算,从而可以使用加速算法进行加速运算。
Description
技术领域
本发明涉及神经网络技术领域,尤其涉及卷积运算的实现方法和装置、数据处理方法和装置、计算设备和计算机可读存储介质。
背景技术
随着物联网(Internet of things,IoT)和人工智能(Artificial Intelligence,AI)日新月异的发展,深度学习的浪潮也伴随着智能芯片并行计算能力以及海量数据分布存储能力的提升而被推向云端。现有的智能算法大都是利用函数的方式去模拟和仿真人类大脑的思维,利用数据来改善系统自身的性能,而数学模型和算法的实现要依赖高性能的硬件处理。
卷积神经网络(Convolutional Neural Network,CNN)作为深度学习中被广泛采用的算法,被人们实现在大量的应用中,比如人脸识别、车道检测、立体视觉匹配、语音识别,视频识别等等。
在卷积神经网络中,会包括至少一个卷积层,在卷积层,采用卷积核对输入数据的矩阵进行卷积运算,能够提取到特征矩阵。卷积运算是大量的乘加运算,通常卷积神经网络包括多个卷积层,卷积运算占据了卷积神经网络的大部分的运算量,因此,如何能实现卷积运算的加速,是非常重要的技术问题。
发明内容
鉴于现有技术的以上问题,本申请提供一种卷积运算的实现方法和装置、数据处理方法和装置、计算设备和计算机可读存储介质,可以实现滑动步长大于1的卷积运算的加速。
为达到上述目的,本申请第一方面提供了一种卷积运算的实现方法,其卷积运算中的滑动步长s大于1,该方法包括:
将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;
各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
由上,将滑动步长s大于1的卷积运算,变换为多对数据子矩阵和卷积核子矩阵的滑动步长为1的卷积运算,从而可以支持现有的加速算法进行该卷积运算。
作为第一方面的一种可能的实现方式,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
作为第一方面的一种可能的实现方式,所述加速算法包括Winograd快速卷积算法及基于其的改进算法。
由上,由于变换为子矩阵,卷积核子矩阵尺寸较小时,可以选用Winograd快速卷积算法及基于其的改进算法。改进算法例如Cook-Toom算法、Coppersmith–Winograd算法、Agarwal-Cooley算法等。
本申请第二方面提供了一种卷积运算的实现方法,其卷积运算中的滑动步长s大于1,包括:
将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
各对数据子矩阵和卷积核子矩阵分别按位置摆放,构成数据重组矩阵和卷积核重组矩阵;
数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
由上,将滑动步长s大于1的卷积运算,变换为数据重组矩阵和卷积核重组矩阵的滑动步长为1的卷积运算,从而可以支持现有的加速算法进行该卷积运算。
作为第二方面的一种可能的实现方式,还包括:各卷积核子矩阵之间进行空洞填充形成所述卷积核重组矩阵。
由上,通过进行空洞填充,使得卷积核重组矩阵形成稀疏矩阵,便于快速运算。
作为第二方面的一种可能的实现方式,所述数据重组矩阵与卷积核重组矩阵的空洞矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
作为第二方面的一种可能的实现方式,所述加速算法包括快速傅里叶变换卷积算法及基于其的改进算法。改进算法例如常规的FFT的改进算法,又如快速数论变换(NumberTheory Transformation,NTT)算法。
由上,由于卷积核重组矩阵尺寸较大时,可以选用快速傅里叶变换卷积算法及基于其的改进算法。
本申请第三方面提供了一种数据处理方法,在数据处理过程中包括卷积运算,其中至少一次的卷积运算使用第一方面任一所述的方法来实现,或至少一次使用第二方面任一所述的方法来实现。
由上,该数据处理可以是图像识别、视频识别、语音识别等神经网络算法中对相应数据的处理,图像识别包括人脸识别、车道检测、车辆识别等,视频识别包括视频分类、立体视觉匹配等等。
本申请第四方面提供了一种卷积运算的实现装置,用于处理滑动步长s大于1的卷积运算,包括:
第一处理单元,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;
第二处理单元,用于将各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
作为第四方面的一种可能的实现方式,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
作为第四方面的一种可能的实现方式,所述加速算法包括Winograd快速卷积算法或基于其的改进算法。
本申请第五方面提供了一种卷积运算的实现装置,用于处理滑动步长s大于1的卷积运算,包括:
第一处理单元,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
第二处理单元,用于将各对数据子矩阵和卷积核子矩阵分别按位置摆放,构成数据重组矩阵和卷积核重组矩阵;
第三处理单元,用于将数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
作为第五方面的一种可能的实现方式,还包括:各卷积核子矩阵之间进行空洞填充形成所述卷积核重组矩阵;
作为第五方面的一种可能的实现方式,所述数据重组矩阵与卷积核重组矩阵的空洞矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
作为第五方面的一种可能的实现方式,所述加速算法包括快速傅里叶变换卷积算法或基于其的改进算法。
本申请第六方面提供了一种数据处理装置,用于在数据处理过程中包括卷积运算,其中至少一次的卷积运算使用第一方面任一所述的方法来实现,或至少一次使用第二方面任一所述的方法来实现。
本申请第七方面提供了一种计算设备,包括:
通信接口;
至少一个处理器,其与所述通信接口连接;以及
至少一个存储器,其与所述处理器连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行第一方面任一所述的方法,或第二方面任一所述的方法,或第三方面所述的方法。
作为第七方面的一种可能的实现方式,所述处理器包括卷积计算单元,所述卷积计算单元包括各处理元件PE,所述PE包括:
输入变换单元,用于将输入数据进行矩阵变换计算;
卷积核变换单元,用于将卷积核或者中间计算结果数据进行矩阵变换计算;
矩阵乘法单元,与输入变换单元和卷积核变换单元耦合,用于对输入变换单元和卷积核变换单元的输出矩阵进行乘法计算;
逆变换单元,与矩阵乘法单元耦合,用于对矩阵乘法单元计算后的输出数据进行矩阵逆变换计算。
作为第七方面的一种可能的实现方式,所述矩阵乘法单元包括:
第一脉动阵列单元,用于根据第一矩阵和第二矩阵输出第三矩阵;
第二脉动阵列单元,用于根据第一矩阵和所述第三矩阵输出结果矩阵。
由上,通过上述两个脉动阵列单元,可以根据第一矩阵B和第二矩阵dT输出结果矩阵BTdB,而Winograd快速卷积算法中,Winograd快速卷积算法定义的针对2D卷积、3D卷积的运算公式中存在这样结构的公式,如GgGT、BTdB、AT(…)A,采用上述脉动阵列单元,则可以对这样结构的公式实现快速运算。
作为第七方面的一种可能的实现方式,所述矩阵乘法单元包括呈阵列的各MAC单元;
至少一个MAC单元中,包括各第一输入端ki,各第二输入端gi,以及一第三输入端pin;其输出为各第一输出端oi,及一第二输出端pou;
各第二输入端gi连接一MUX后,其输出与每个第一输入端ki分别输入一乘法器,各乘法器的输出hi及第二输出端pou连接到一加法器,该加法器的输出ha与每个第一输入端ki分别输入到一MUX后输出到各输出端oi;
所述加法器的输出ha与所述第三输入端pin输入到一MUX后输出到第二输出端pou。
由上,通过具有MUX的MAC单元,当进行卷积运算的矩阵中的0值元素,如具有空洞的卷积核重组矩阵的0值元素,输入到该MAC单元时,可以根据MUX来选择是否进行本次的处理,从而省略了稀疏矩阵中的大量0元素的处理过程,实现了针对稀疏矩阵的卷积运算的提速。
本申请第八方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行第一方面任一所述的方法,或第二方面任一所述的方法,或第三方面所述的方法。
本申请本的技术方案,可以应用于不同滑动步长的卷积核的卷积运算,通过本申请技术方案将滑动步长大于1的卷积运算变换为滑动步长为1的卷积运算,进而可以支持现有的快速卷积算法,例如支持传统的Winograd快速卷积算法和FFT快速卷积算法及其改进算法,从而可以更好地平衡时间和空间开销。
并且,本申请适用于1D卷积、2D卷积和3D卷积的卷积运算加速,可加速卷积神经网络训练和推理过程。并且,本申请的计算设备中,提供了适合Winograd快速卷积算法和FFT快速卷积算法的结构,并且,通过增加稀疏化脉动阵列,对稀疏矩阵的处理得以优化。
本发明的这些和其它方面在以下(多个)实施例的描述中会更加简明易懂。
附图说明
以下参照附图来进一步说明本发明的各个特征和各个特征之间的联系。附图均为示例性的,一些特征并不以实际比例示出,并且一些附图中可能省略了本申请所涉及领域的惯常的且对于本申请非必要的特征,或是额外示出了对于本申请非必要的特征,附图所示的各个特征的组合并不用以限制本申请。另外,在本说明书全文中,相同的附图标记所指代的内容也是相同的。具体的附图说明如下:
图1为本申请提供的卷积运算实现方法第一实施例的流程图;
图2为本申请提供的卷积运算实现方法第二实施例的流程图;
图3A为本申请提供的2D卷积运算实现方法第一具体实施方式的流程图;
图3B为2D卷积运算的示意图;
图3C为本申请2D卷积中的子矩阵的提取过程的示意图;
图3D为本申请2D卷积中的各对的数据子矩阵和卷积核子矩阵分别进卷积运算后求和的示意图;
图4为本申请1D卷积中的子矩阵的提取过程的示意图;
图5为本申请3D卷积中的子矩阵的提取过程的示意图;
图6A为本申请提供的2D卷积运算实现方法第二具体实施方式的流程图;
图6B为图6A中数据重组矩阵与卷积核重组矩阵的卷积运算的示意图;
图7为本申请提供的卷积运算实现装置的第一实施例的示意图;
图8为本申请提供的卷积运算实现装置的第二实施例的示意图;
图9为本申请计算设备实施例的示意图;
图10A为本申请计算设备的一具体实施方式的示意图;
图10B为图10A中的PE的逻辑结构示意图;
图10C为图10B中的矩阵乘法单元的逻辑示意图;
图10D为图10C的一种具体实现方式的结构示意图;
图10E为图10D中的MAC单元的示意图。
具体实施方式
说明书和权利要求书中的词语“第一、第二、第三等”或模块A、模块B、模块C等类似用语,仅用于区别类似的对象,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
在以下的描述中,所涉及的表示步骤的标号,如S110、S120……等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。
说明书和权利要求书中使用的术语“包括”不应解释为限制于其后列出的内容;它不排除其它的元件或步骤。因此,其应当诠释为指定所提到的所述特征、整体、步骤或部件的存在,但并不排除存在或添加一个或更多其它特征、整体、步骤或部件及其组群。因此,表述“包括装置A和B的设备”不应局限为仅由部件A和B组成的设备。
本说明书中提到的“一个实施例”或“实施例”意味着与该实施例结合描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在本说明书各处出现的用语“在一个实施例中”或“在实施例中”并不一定都指同一实施例,但可以指同一实施例。此外,在一个或多个实施例中,能够以任何适当的方式组合各特定特征、结构或特性,如从本公开对本领域的普通技术人员显而易见的那样。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。如有不一致,以本说明书中所说明的含义或者根据本说明书中记载的内容得出的含义为准。另外,本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。为了准确地对本申请中的技术内容进行叙述,以及为了准确地理解本发明,在对具体实施方式进行说明之前先对本说明书中所使用的术语给出如下的解释说明或定义:
1D卷积、2D卷积、3D卷积:1D卷积指输入矩阵与卷积核矩阵均为一维矩阵,2D卷积指输入矩阵与卷积核矩阵均为二维矩阵,3D卷积指输入矩阵与卷积核矩阵均为三维矩阵。这里的维度指矩阵本身维度,并不是指输入数据的通道数或卷积核的个数。
单参数卷积核:或称为单元素卷积核,参数量(元素量)为一个的卷积核,在1D卷积中称为1卷积核,在2D卷积中称为1*1卷积核,在3D卷积中称为1*1*1卷积核,卷积核的值可以是1。
空洞卷积(Dilated/Atrous Convolution):也称为带孔卷积、扩张卷积、膨胀卷积、多孔卷积等,指卷积核矩阵的元素间填充空格或零形成空洞矩阵,使用该空洞矩阵对输入矩阵进行的卷积运算。
威诺格拉德(Winograd)快速卷积算法:简称为Winograd快速卷积算法,是一种快速卷积算法,通过将输入数据矩阵与卷积核矩阵分别进行矩阵变换,而后进行哈达玛乘积后,再对结果进行变换得到卷积结果。其中哈达玛(Hadamard)乘积也称为元素对应乘积(element-wise product),是矩阵的一类运算,该运算是两个矩阵中对应元素的乘积。
快速傅里叶变换(Fast Fourier Transform,FFT)快速卷积算法:简称为FFT快速卷积算法,是一种快速卷积算法,通过将输入数据矩阵与卷积核矩阵分别进行傅里叶变换,其结果相乘后再通过逆傅里叶变换的方式求取卷积结果。
脉动阵列:基于脉动阵列设计的矩阵运算单元,可以很好的加速神经网络的计算,标准的脉动阵列包括布置成二维阵列的多个单元,沿着脉动阵列的第一维度、第二维度输入第一、二矩阵各元素,输出结果为这两个矩阵的卷积运算的结果矩阵,例如图10D示出了本申请一实施例中的脉动阵列。
Cook-Toom算法,库克-图姆算法,是一种Winograd改进算法。
Coppersmith–Winograd算法,库珀史密斯-威诺格拉德算法,是一种Winograd改进算法。
Agarwal-Cooley算法,阿嘎沃尔-库利算法,是一种Winograd改进算法。
下面先对现有的Winograd快速卷积算法、FFT快速卷积算法进行介绍,然后再对本申请的技术方案进行详细介绍。
在对输入数据矩阵使用卷积核进行卷积运算时,针对小尺寸的卷积核,如2*2,或3*3尺寸的卷积核,可以使用Winograd快速卷积算法减少乘法次数来实现提速,当卷积核尺寸较大时,则可以使用快速傅里叶变换(Fast Fourier Transform,FFT)快速卷积算法来实现提速。下面对这两种快速卷积算法进行介绍:
其中,Winograd快速卷积算法中,对于卷积运算的步长1为的1D卷积、2D卷积和3D卷积运算,Winograd快速卷积算法定义的运算公式分别如下:
针对1D卷积:Y=AT((Gg)⊙(BTd));
针对2D卷积:Y=AT((GgGT)⊙(BTdB))A;
针对3D卷积:Y=(AT((GgGT)RGT⊙(BTdB)RB)A)RA;
其中,上述运算公式中,Y表示运算结果,d表示输入数据矩阵,g表示卷积核矩阵,G表示卷积核变换(Filter Transform)矩阵,BT表示输入变换(Input Transform)矩阵,AT表示输出变换(Output Transform)矩阵,⊙表示哈达玛(Hadamard)乘积,R表示矩阵顺时针旋转90°。
Winograd快速卷积算法的整个计算过程在逻辑上包括下面几个步骤:
首先,对输入的数据矩阵d进行变换;对卷积核矩阵g进行变换;
然后,进行哈达玛(Hadamard)乘积运算;
然后,对输出矩阵A进行变换。
使用Winograd快速卷积算法,减少了乘法次数,增加了少量加法次数。由于计算设备的乘法计算一般比加法慢,因此可以实现卷积运算的提速。但是,当前已有的Winograd快速卷积算法及其改进算法只适用于步长为1的卷积运算,当步长大于1时便无法使用该算法进行卷积运算的提速。
使用Winograd快速卷积算法时虽然会减少乘法次数,但是会相应增加加法次数,并且,还需要额外的矩阵变换计算以及存储变换矩阵。因此,随着卷积核和输入矩阵的尺寸增大,需要考虑加法、矩阵变换和存储的代价及计算精度的损失,故,Winograd快速卷积算法通常适用于较小尺寸的卷积核,如上面提到的2*2,或3*3尺寸的卷积核。而对大尺寸的卷积核,则可使用FFT快速卷积算法进行卷积运算的提速。
FFT实现的原理是基于时域的卷积和频域的乘法是等价的,故其将待卷积的数据进行FFT变换,在频域做乘法后再进行IFFT变换,然后提取得到卷积结果。下面以一图像f(x,y)尺寸为A*B,一个卷积核h(x,y)尺寸为C*D,使用FFT实现快速2D卷积举例说明,包括步骤:
首先,读取图像f(x,y)尺寸A*B,卷积核h(x,y)尺寸C*D;对图像f和卷积核h分别进行填充操作,分别填充成Q*P尺寸,其中P≥(A+C-1),Q≥(B+D-1);
然后,分别对填充后的图像f和卷积核h分别做二维快速傅里叶变换(FFT)得到F、H,对得到的所述F和H做乘法运算得到G,即G=F*H;
最后,对所述G做二维快速傅里叶逆变换(IFFT),再对得到的结果进行剪切得到卷积运算结果。
其中,FFT快速卷积算法实现了将卷积运算量中的大量乘法,更改为三次FFT计算的运算量,对于较大尺寸的卷积核,可以明显缩短运算量。但是,FFT快速卷积的所针对卷积运算也只适用于步长1的卷积运算,当步长大于1时无法使用该算法进行卷积运算的提速。
由上面的介绍可知,现有的Winograd快速卷积算法和FFT快速卷积算法均适用于步长1的卷积运算,当步长大于1时无法使用这两种算法进行卷积运算的提速。基于此,本申请提供了一种卷积运算方法,该方法将步长大于1的卷积的运算,通过矩阵变换,变换为步长为1的卷积运算,从而可以适用于上述的快速卷积算法,或其他快速卷积算法。并且,对于矩阵变换后的矩阵卷积运算,可根据矩阵变换后的卷积核尺寸的大小灵活选用Winograd快速卷积算法,或FFT快速卷积算法。
本申请可应用的场景:本申请的技术可以应用于需要卷积运算的各应用领域中,例如应用于图像识别、视频识别、语音识别神经网络算法中,图像识别包括人脸识别、车道检测、车辆识别等,视频识别包括视频分类、立体视觉匹配等等。相应的产品领域包括手机,如对手机相册中图像的分类、识别等,产品领域还可以是智能车辆等。
【卷积运算实现方法的第一实施例】
如图1示出了本申请提供的卷积运算实现方法的第一实施例的流程图,其卷积运算中的滑动步长s大于1时,该卷积运算步骤包括:
S110:将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵。
S120:各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
通过上述方式,可以将步长大于1的卷积运算,变换为各对数据子矩阵和卷积核子矩阵步长为1的卷积运算,由于步长为1,因此可以适用于现有的各种卷积加速算法。
基于上述的分析,由于可适用于现有的各种卷积加速算法,因此,在一些实施例中,对于上述步骤S120中,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算时,当卷积核尺寸较小,如小于3*3尺寸时,加速算法可以采用Winograd快速卷积算法或基于其的改进算法。例如,所述改进算法包括Cook-Toom算法、Coppersmith–Winograd算法、Agarwal-Cooley算法,阿嘎沃尔-库利算法等。
【卷积运算实现方法的第二实施例】
如图2示出了本申请提供的卷积运算的实现方法的第二实施例的流程图,其卷积运算中的滑动步长s大于1时,该卷积运算步骤包括:
S210:将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
S220:各对数据子矩阵、卷积核子矩阵对应的按位置摆放,构成数据重组矩阵和卷积核重组矩阵;其中,可分别构成与数据矩阵大小相同的数据重组矩阵、与卷积核矩阵大小相同的卷积核重组矩阵。
进行按位置摆放时,可以参照各子矩阵的首位元素在原矩阵中的位置进行摆放。另外,如果某对数据子矩阵与对应的卷积核子矩阵未参照该方式摆放,则该对数据子矩阵与卷积核子矩阵的位置都应同步对应改变位置。
S230:数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
在一些实施例中,在上述步骤S220中,还可进一步在卷积核子矩阵之间进行空洞填充形成具有空洞的卷积核重组矩阵,从而形成稀疏矩阵。
其中,所述具有空洞的卷积核重组矩阵中,相邻的卷积核子矩阵之间的空洞尺寸可以为1个空洞,也可以为多个空洞,空洞越多矩阵约稀疏。其中,这是说明的是,由于卷积核重组矩阵的卷积核的大小是预先设定好的,因此转换成空洞卷积时的间隔的空洞也是可确定的。
通过上述方式,可以将步长大于1的卷积运算,变换为数据重组矩阵与卷积核重组矩阵步长为1的卷积运算,或变换为数据重组矩阵与具有空洞的卷积核重组矩阵的步长为1的卷积运算,由于步长为1,因此可以适用于现有的各种卷积加速算法。
基于上述的分析,由于可适用于现有的各种卷积加速算法,因此,在一些实施例中,对于上述步骤S230中,所述数据重组矩阵与卷积核重组矩阵步长为1的卷积运算时,使用加速算法运算时,当卷积核尺寸较大时,可以采用FFT快速卷积算法或基于其的改进算法。改进算法例如常规的FFT的改进算法,又如快速数论变换(Number TheoryTransformation,NTT)算法。
针对上述步骤S110和S210中提到的子矩阵提取步骤,下面以2D卷积为例进行说明,以便于更清楚的理解该子矩阵提取过程。假设一矩阵如下:
并假设本次子矩阵提取时,当前尚未进行元素提取的各位置中的第一个位置是元素Am,n所在位置:
此时,从该元素Am,n所在位置开始、并根据滑动步长s移动到各相应位置提取各元素,获得如下子矩阵:
该子矩阵即为本次所提取生成的子矩阵。其中,该子矩阵的提取方法,也可以理解为以滑动步长s,使用一个值为1的单参数卷积核对从Am,n到Ax,y对应位置的各元素,即上述实线矩形框里的矩阵,进行卷积操作所得到的矩阵。
另外,由于步长为s,因此不难理解,对于步长s内的从A1,1到As-1,s-1对应位置的各元素,即上述虚线框里的各元素,实际上是每次子矩阵提取时,对应每次进行元素提取的各第一个位置的元素。
上述子矩阵提取步骤,同样适用于1D卷积和3D卷积。当为1D卷积时,从元素Am所在位置进行的子矩阵的提取方法可以理解为,以滑动步长s,使用一个值为1的单参数卷积核,对从Am到Ax形成的一维矩阵进行卷积操作所得到的一维矩阵。其中Ax指最后一个元素。当为3D卷积时,从元素Am,n,o所在位置进行的子矩阵的提取方法可以理解为,以滑动步长s,使用一个值为1的单参数卷积核,对从Am,n,o到Ax,y,z形成的三维矩阵进行卷积操作所得到的三维矩阵。其中Ax,y,z指最后一个元素。
将在后面的具体实施方式中对子矩阵提取过程进一步举例说明。
【2D卷积运算实现方法的第一具体实施方式】
图3A示出了2D卷积运算实现方法第一具体实施方式的流程图,图3B示出了一个2D卷积运算的示意图,图3B示出的2D卷积中,输入数据矩阵尺寸为11*11,卷积核矩阵尺寸为5*5,卷积运算的滑动步长为3。下面同时参加图3C-图3D,对本申请的2D卷积运算方法进行详细说明,包括以下步骤:
S310:将输入的尺寸为11*11的数据矩阵和尺寸为5*5的卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
下面参见图3C示出的对卷积核的各子矩阵的提取过程的示意图,进一步举例说明所述子矩阵提取步骤,具体如下:
首次提取时,从卷积核矩阵第一行第一个位置开始,以滑动步长为3进行第一子矩阵的提取,获得图中示出的卷积核的第一子矩阵;
再次提取时,从尚未进行元素提取的各位置的第一个位置开始,即从第一行第二个位置开始,以步长为3进行第二子矩阵的提取,获得图中示出的卷积核的第二子矩阵;
再次提取时,从尚未进行元素提取的各位置的第一个位置开始,即从第一行第三个位置开始,以步长为3进行第三子矩阵的提取,获得图中示出的卷积核的第三子矩阵;
再次提取时,从尚未进行元素提取的各位置的第一个位置开始,即从第二行第一个位置开始,以步长为3进行第四子矩阵的提取以获得卷积核的第四子矩阵,该提取过程及后续提取过程不再赘述。
通过本步骤,即可得到如图3D示出的提取数据矩阵和卷积核矩阵分别得到的各数据子矩阵和各卷积核子矩阵。
其中,数据子矩阵和卷积核子矩阵的对数为ndim对,其中n为滑动步长,dim是卷积维度,本例为2D卷积,故dim=2,因此获得了如图3D示出的3^2=9对的数据子矩阵和卷积核子矩阵。
S320:对得到的各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,得到矩阵尺寸相同的矩阵。并将运算得到的各矩阵进行矩阵求和得到结果矩阵。可参见图3D中示出了本步骤的示意图。
并且,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,由于卷积核子矩阵均为不大于3*3尺寸的卷积核,故可进一步选用Winograd快速卷积算法对该卷积运算进行加速运算。
【1D卷积运算实现方法的第一具体实施方式】
下面仅针对子矩阵的提取部分进行说明,其他步骤与2D卷积运算中的步骤相同,不再赘述。
图4示出了一个1D卷积运算的中的卷积核子矩阵提取示意图,图4示出的卷积核矩阵尺寸为5*1,卷积运算的滑动步长为3。
子矩阵的提取步骤的不同之处在于,由于是1D卷积运算,相对于2D卷积来说,矩阵仅一行,因此仅针对这一行的各元素进行子矩阵的提取。
【3D卷积运算实现方法的第一具体实施方式】
下面仅针对子矩阵的提取部分进行说明,其他步骤与2D卷积运算中的步骤相同,不再赘述。
图5示出了一个3D卷积运算的中的卷积核子矩阵提取示意图,这里仅示出了第一子矩阵的提取示意图。图5示出的卷积核矩阵尺寸为5*5*5,卷积运算的滑动步长为3。
子矩阵的提取步骤的不同之处在于,由于是3D卷积运算,相对于2D卷积来说,矩阵还存在z轴数据,因此,需要在z轴的各个x、y平面内的元素,均进行子矩阵的提取。这里的z、x、y指3D矩阵的三个维度。
【2D卷积运算实现方法的第二具体实施方式】
仍以图3A示出的2D卷积运算的示意图,同时参加图6A示出的流程图,对本申请的2D卷积运算方法的第二实施例进行详细说明,包括以下步骤:
S610:将输入的尺寸为11*11的数据矩阵和尺寸为5*5的卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
该步骤可参见上述步骤310,此处不再赘述。
S620:如图6B所示,将各数据子矩阵按位置摆放,构成与数据矩阵大小相同的数据重组矩阵;以及,各卷积核子矩阵按位置摆放,且卷积核子矩阵之间进行空洞填充形成具有空洞的卷积核重组矩阵。
其中摆放时,各对数据子矩阵和卷积核子矩阵在各重组矩阵中的位置应对应摆放,例如,均摆放在各重组矩阵中的第一位置、或均摆放在第二位置等。
另外,可选的,如图所示,各位置可以参照步骤S310提取子矩阵步骤中,各子矩阵的首个元素所在原矩阵中的位置进行摆放。
S630:数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
本实施方式中,所述具有空洞的卷积核重组矩阵中,如图6B所示,该卷积核重组矩阵设定为9*9的尺寸,因此原5*5大小的卷积核矩阵变为图示出的9个卷积核子矩阵时,相邻的卷积核子矩阵之间的空洞尺寸为2个空洞。
并且,所述数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算时,由于卷积核子矩阵均为大于3*3尺寸的卷积核,故可进一步使用FFT快速卷积算法对该卷积运算进行加速运算。
【卷积运算实现装置的第一实施例】
如图7示出了为本申请提供的卷积运算实现装置的第一实施例的示意图,该实施例中,所述卷积运算实现装置用于处理卷积运算中的滑动步长s大于1的卷积运算,所述卷积运算实现装置包括:
第一处理单元410,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;
第二处理单元420,用于将各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
在一些实施例中,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
在一些实施例中,所述加速算法包括Winograd快速卷积算法及基于其的改进算法。
【卷积运算实现装置的第二实施例】
如图8示出了本申请提供的卷积运算实现装置的第二实施例的示意图,该实施例中,所述卷积运算实现装置用于处理卷积运算中的滑动步长s大于1的卷积运算,所述卷积运算实现装置包括:
第一处理单元510,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
第二处理单元520,用于将各对数据子矩阵和卷积核子矩阵分别按位置摆放,构成数据重组矩阵和卷积核重组矩阵;
第三处理单元530,用于将数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
在一些实施例中,各卷积核子矩阵之间进行空洞填充形成所述卷积核重组矩阵;
在一些实施例中,所述数据重组矩阵与卷积核重组矩阵的空洞矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
在一些实施例中,所述加速算法包括快速傅里叶变换卷积算法及基于其的改进算法。
【本申请计算设备的实施例】
图9是本申请实施例提供的一种计算设备900的结构性示意性图。该计算设备900包括:处理器910、存储器920、通信接口930。
应理解,图中所示的计算设备900中的通信接口930可以用于与其他设备之间进行通信。
其中,该处理器910可以与存储器920连接。该存储器920可以用于存储该程序代码和数据。因此,该存储器920可以是处理器910内部的存储单元,也可以是与处理器910独立的外部存储单元,还可以是包括处理器910内部的存储单元和与处理器910独立的外部存储单元的部件。
可选的,计算设备900还可以包括总线。其中,存储器920、通信接口930可以通过总线与处理器910连接。总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。
应理解,在本申请实施例中,该处理器910可以采用中央处理单元(centralprocessing unit,CPU)。该处理器还可以是其它通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门矩阵(field programmable gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器910采用一个或多个集成电路,用于执行相关程序,以实现本申请实施例所提供的技术方案。
该存储器920可以包括只读存储器和随机存取存储器,并向处理器910提供指令和数据。处理器910的一部分还可以包括非易失性随机存取存储器。例如,处理器910还可以存储设备类型的信息。
在计算设备900运行时,所述处理器910执行所述存储器920中的计算机执行指令执行上述方法的操作步骤。
应理解,根据本申请实施例的计算设备900可以对应于执行根据本申请各实施例的方法中的相应主体,并且计算设备900中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。
【本申请计算设备的一具体实施方式】
图10A为本申请计算设备的一具体实施方式的示意图,该具体实施方式中,计算设备由一芯片实现,该芯片可以为神经网络处理器(NPU),且,该具体实施方式中,图9中的通信接口930可由芯片中的主机接口710、多端口RAM接口730及芯片内部线路实现;图9中的处理器910可由控制单元740和卷积计算单元760、累加器单元770及激活器计算单元780实现;图9中的存储器920可由多端口RAM720、统一缓存单元750及指令存储器790实现。
下面对该具体实施方式中的计算设备进行详细说明,其中:
主机接口(Host Interface)710,用于与外部主机之间的数据通信,接收外部主机分配的任务或数据(包括输入矩阵、卷积核矩阵的数据),主机接口710为可选组件。外部主机可以是主CPU,在一些实施例中,该计算设备为NPU时,NPU作为协处理器与外部主CPU进行通信,获取主CPU分配的任务。
多端口RAM(Multi-ported RAM)720,多端口RAM720内部具有多个存储区,可分别与控制单元740耦合,实现对各数据的并行读取或写入。在一些实施例中,可以采用基于异或(XOR-based)的多端口RAM720,多端口RAM720相比传统DRAM可进一步提升数据带宽,为可选组件。
多端口RAM接口(Multi-ported RAM Interface)730,是用于访问多端口RAM720及统一缓存单元750的接口,也用于实现多端口RAM720及统一缓存单元750之间的数据搬运,如将多端口RAM(Multi-ported RAM)720中的输入数据搬运到统一缓存单元750中,或将统一缓存单元750缓存的计算的结果数据搬运到多端口RAM720中。
控制单元(Controller)740,主要用于控制指令读取、通过多端口RAM接口730对多端口RAM720及统一缓存单元750的读写和时序逻辑控制等。
统一缓存单元(Unified Buffer)750,用于存放卷积计算单元760的临时数据,包括输入数据(包括输入矩阵、卷积核矩阵的数据)、中间处理的数据、输出数据等。
卷积计算单元(Convolution Engine)760,主要用于实现卷积运算,包括加速1D卷积、2D卷积或3D卷积的卷积运算;其内具有多个处理元件(Processing Element,PE),卷积运算是在PE中进行的。例如,可以用于实现图3D中的各个数据子矩阵与卷积核子矩阵的卷积运算,以得到各个结果子矩阵。
累加器单元(Accumulator)770,主要用于对卷积计算单元760的运算结果进行矩阵求和运算处理。例如,可以用于实现图3D中的各个结果子矩阵的矩阵求和计算。
激活器计算单元(Activation)780,用于对累加器单元770的运算结果进行处理,该处理包括将将非线性函数应用到累加器单元770的运算结果,用以生成激活值。激活器计算单元780相当于用于实现激活函数的功能。
指令存储器(Instruction Buffer)790,用于存储控制单元740使用的指令;
上述的基本原理是,通过控制单元740控制卷积计算单元760从统一缓存单元750中读取各个数据子矩阵与对应的卷积核子矩阵分别进行卷积运算,运算结果并依次由累加器单元770和激活器计算单元780分别进行各结果子矩阵求和、生成激活值后输出。
对卷积计算单元760进一步举例来说明其工作原理,假设有各个第一矩阵A、对应的各个第二矩阵B,该卷积运算为:卷积计算单元760从统一缓存单元750中读取各个第二矩阵B相应的数据,并缓存卷积计算单元760中各个PE上,然后从统一缓存单元750中读取各个第一矩阵A相应的数据与各个第二矩阵B进行矩阵运算,得到各个所述第三矩阵C,该各个第三矩阵C的部分结果或最终结果,提供给累加器单元770进行矩阵求和运算。
对应图3D的实施例中,该第一矩阵A可以是图3D中示出的一数据子矩阵,该第二矩阵B可以是图3D中示出对应该数据子矩阵的一卷积核子矩阵。另外,图3D中的各对数据子矩阵和卷积核子矩阵,可以并行到在相应的PE上进行运算。
对应图6B的实施例中,该第一矩阵A可以是图6B中示出的数据重组矩阵,该第二矩阵B可以是图6B中示出的具有空洞的卷积核重组矩阵。
图10B为图10A中的一个PE的逻辑结构示意图,如图所示,该实施方式中,PE包括:
输入寄存器(Input Registers)761,用于缓存输入的数据,可以为输入矩阵的数据;例如可以是上面提到的第一矩阵A的数据。
卷积核寄存器(Filter Registers)762,用于缓存卷积核或者中间计算结果数据,可以为卷积核矩阵的各元素;例如可以是上面提到的第二矩阵B的数据。
输入变换单元(Input Transform)763,用于将从输入寄存器761获取的输入数据进行矩阵变换计算;
卷积核变换单元(Filter Transform)764,用于将从输入寄存器761获取的卷积核或者中间计算结果数据进行矩阵变换计算;
矩阵乘法单元(Multiplicator Block)765,用于对输入变换单元763的输出矩阵、卷积核变换单元764的输出矩阵,进行矩阵乘法计算;矩阵乘法单元765将在后文进一步进行说明;
逆变换单元(Inverse Transform)766,用于对矩阵乘法单元765输出数据进行矩阵逆变换计算;
输出寄存器(Output Registers)767,用于缓存计算结果以输出。
当用于实现Winograd快速卷积算法时,参照前述的快速卷积算法中的公式,上述输入变换单元763用于对输入的数据矩阵d进行变换,卷积核变换单元764用于对卷积核矩阵g进行变换,矩阵乘法单元765用于进行哈达玛(Hadamard)乘积运算,逆变换单元用于对输出矩阵A进行变换。
当用于实现FFT快速卷积算法时,参照前述的FFT快速卷积算法,上述输入变换单元763和卷积核变换单元764分别用于对输入数据矩阵和卷积核矩阵进行FFT变换,矩阵乘法单元765用于进行矩阵乘法运算,逆变换单元用于对输出矩阵运算结果进行IFFT变换。
图10C为图10B中的矩阵乘法单元765的逻辑示意图,如图所示的实施方式中,矩阵乘法单元765使用可配置的脉动阵列(Systolic Tensor Array),用于实现Winograd快速卷积算法。该脉动阵列包括至少两个脉动阵列单元,具体描述如下:
第一脉动阵列单元用于接收第一矩阵B,并缓存到内部,以及接收第二矩阵dT,并使用第一矩阵B对第二矩阵进行操作输出第三矩阵(dTB)T;
第二脉动阵列单元用于接收第一矩阵B,并缓存到内部,以及接收第三矩阵(dTB)T,并使用第一矩阵B对第三矩阵进行操作输出结果矩阵BTdB。
由上可见,该脉动阵列可以根据第一矩阵B和第二矩阵dT输出结果矩阵BTdB,而上文对Winograd快速卷积算法的介绍中,Winograd快速卷积算法定义的针对2D卷积、3D卷积的运算公式中存在这样结构的公式,如GgGT、BTdB、AT(…)A,采用图10C示出的脉动阵列的示意图,则可以对这样结构的公式实现快速运算。
另一方面,为了使得上述脉动阵列能够对卷积运算中的稀疏数据进行很好的处理,例如对图6B示出的具有空洞的卷积核重组矩阵进行卷积运算,还将实现所述矩阵乘法单元765(即所述脉动阵列)的各乘积累加运算单元(Multiple Multiply Accumulate,MAC)增加了多路选择器(Multiplexer,MUX),下面进行详述:
图10D为矩阵乘法单元765,即图10C所述脉动阵列的一种具体实现方式的结构示意图,该脉动阵列包括了呈阵列的若干MAC单元,图10E为图10D中的一个MAC单元的示意图,如图10D和图10E所示,该MAC单元中,包括对应第一矩阵的若干第一输入端k1-k4(或以ki表示),对应第二矩阵的若干第二输入端g1-g4(或以gi表示),以及第三输入端pin;其输出为各第一输出端o1-o4(或以oi表示),第二输出端pou;
各第二输入端g1-g4同时连接一MUX后,其输出与每个第一输入端k1-k4分别输入一乘法器,经各乘法器输出h1-h4(或以hi表示),各乘法器的输出h1-h4以及第二输出端pou连接到一加法器(ACC)后输出ha,加法器的输出ha与每个第一输入端k1-k4分别输入到一MUX后输出到各输出端o1-o4;所述加法器的输出ha还与第三输入端pin输入到一MUX后输出到寄存器(即图中带黑三角的方块)缓存后输出到第二输出端pou。
另外,本申请中还对MAC和寄存器分组设计以减少面积,如图10D所示的实施例中,四个MAC为一组(图中以左上角虚线框的示例),在该组整体的输出侧(图中左上角虚线框内该组MAC下方和右方表示该组MAC的输出侧)共需设置四组寄存器,而相比每个MAC输出侧都设置两组寄存器来说,减少了四组寄存器,从而可以减少电路面积。
通过具有MUX的MAC单元,当进行卷积运算的矩阵中的0值元素,如图6B示出的具有空洞的卷积核重组矩阵的0值元素,输入到该MAC单元时,例如上述MAC的第二输入端g1-g4收到0值,则可以根据MUX来选择是否进行本次的处理,从而省略了稀疏矩阵中的大量0元素的处理过程,实现了卷积运算的提速。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行一种多样化问题生成方法,该方法包括上述各个实施例所描述的方案中的至少之一。
本申请实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本申请的较佳实施例及所运用的技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明的构思的情况下,还可以包括更多其他等效实施例,均属于本发明的保护范畴。
Claims (21)
1.一种卷积运算的实现方法,其卷积运算中的滑动步长s大于1,其特征在于,包括:
将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;
各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
2.根据权利要求1所述的方法,其特征在于,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
3.根据权利要求2所述的方法,其特征在于,所述加速算法包括Winograd快速卷积算法或基于其的改进算法。
4.一种卷积运算的实现方法,其卷积运算中的滑动步长s大于1,其特征在于,包括:
将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;
所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
各对数据子矩阵和卷积核子矩阵分别按位置摆放,构成数据重组矩阵和卷积核重组矩阵;
数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
5.根据权利要求4所述的方法,其特征在于,还包括:各卷积核子矩阵之间进行空洞填充形成所述卷积核重组矩阵。
6.根据权利要求4-5任一所述的方法,其特征在于,所述数据重组矩阵与卷积核重组矩阵的空洞矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
7.根据权利要求6所述的方法,其特征在于,所述加速算法包括快速傅里叶变换卷积算法或基于其的改进算法。
8.一种数据处理方法,其特征在于,在数据处理过程中包括卷积运算,其中至少一次的卷积运算使用权利要求1-3任一所述的方法来实现,或至少一次的卷积运算使用权利要求4-7任一所述的方法来实现。
9.一种卷积运算的实现装置,用于处理滑动步长s大于1的卷积运算,其特征在于,包括:
第一处理单元,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s移动到各位置提取各元素构成一子矩阵;
第二处理单元,用于将各对的数据子矩阵和卷积核子矩阵分别进行滑动步长为1的卷积运算,并将运算得到的各矩阵进行矩阵求和。
10.根据权利要求9所述的装置,其特征在于,所述数据子矩阵和卷积核子矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
11.根据权利要求10所述的装置,其特征在于,所述加速算法包括Winograd快速卷积算法或基于其的改进算法。
12.一种卷积运算的实现装置,用于处理滑动步长s大于1的卷积运算,其特征在于,包括:
第一处理单元,用于将输入的数据矩阵和卷积核矩阵,分别循环执行子矩阵提取步骤,生成多对数据子矩阵和卷积核子矩阵;所述子矩阵提取步骤包括:针对矩阵中尚未进行元素提取的各位置,从第一个位置开始、并根据滑动步长s可移动到的各位置提取各元素构成一子矩阵;
第二处理单元,用于将各对数据子矩阵和卷积核子矩阵分别按位置摆放,构成数据重组矩阵和卷积核重组矩阵;
第三处理单元,用于将数据重组矩阵与卷积核重组矩阵进行滑动步长为1的卷积运算。
13.根据权利要求12所述的装置,其特征在于,还包括:各卷积核子矩阵之间进行空洞填充形成所述卷积核重组矩阵。
14.根据权利要求12-13任一所述的装置,其特征在于,所述数据重组矩阵与卷积核重组矩阵的空洞矩阵进行滑动步长为1的卷积运算时,使用加速算法运算。
15.根据权利要求14所述的装置,其特征在于,所述加速算法包括快速傅里叶变换卷积算法或基于其的改进算法。
16.一种数据处理装置,其特征在于,用于在数据处理过程中包括卷积运算,其中至少一次的卷积运算使用权利要求1-3任一所述的方法来实现,或至少一次的卷积运算使用权利要求4-7任一所述的方法来实现。
17.一种计算设备,其特征在于,包括:
通信接口;
至少一个处理器,其与所述通信接口连接;以及
至少一个存储器,其与所述处理器连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行权利要求1-3任一所述的方法,或权利要求4-7任一所述的方法,或权利要求8所述的方法。
18.根据权利要求17所述的计算设备,其特征在于,所述处理器包括卷积计算单元,所述卷积计算单元包括各处理元件PE,所述PE包括:
输入变换单元,用于将输入数据进行矩阵变换计算;
卷积核变换单元,用于将卷积核或者中间计算结果数据进行矩阵变换计算;
矩阵乘法单元,与输入变换单元和卷积核变换单元耦合,用于对输入变换单元和卷积核变换单元的输出矩阵进行乘法计算;
逆变换单元,与矩阵乘法单元耦合,用于对矩阵乘法单元计算后的输出数据进行矩阵逆变换计算。
19.根据权利要求18所述的计算设备,其特征在于,所述矩阵乘法单元包括:
第一脉动阵列单元,用于根据第一矩阵和第二矩阵输出第三矩阵;
第二脉动阵列单元,用于根据第一矩阵和所述第三矩阵输出结果矩阵。
20.根据权利要求19所述的计算设备,其特征在于,所述矩阵乘法单元包括呈阵列的各MAC单元;
至少一个MAC单元中,包括各第一输入端ki,各第二输入端gi,以及一第三输入端pin;其输出为各第一输出端oi,及一第二输出端pou;
各第二输入端gi连接一MUX后,其输出与每个第一输入端ki分别输入一乘法器,各乘法器的输出hi及第二输出端pou连接到一加法器,该加法器的输出ha与每个第一输入端ki分别输入到一MUX后输出到各第一输出端oi;
所述加法器的输出ha与所述第三输入端pin输入到一MUX后输出到第二输出端pou。
21.一种计算机可读存储介质,其上存储有程序指令,其特征在于,所述程序指令当被计算机执行时使得所述计算机执行权利要求1-3任一所述的方法,或权利要求4-7任一所述的方法,或权利要求8所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110040705.6A CN114764615A (zh) | 2021-01-13 | 2021-01-13 | 卷积运算的实现方法、数据处理方法及装置 |
PCT/CN2021/124460 WO2022151779A1 (zh) | 2021-01-13 | 2021-10-18 | 卷积运算的实现方法、数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110040705.6A CN114764615A (zh) | 2021-01-13 | 2021-01-13 | 卷积运算的实现方法、数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114764615A true CN114764615A (zh) | 2022-07-19 |
Family
ID=82364184
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110040705.6A Pending CN114764615A (zh) | 2021-01-13 | 2021-01-13 | 卷积运算的实现方法、数据处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114764615A (zh) |
WO (1) | WO2022151779A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115292662A (zh) * | 2022-08-18 | 2022-11-04 | 上海燧原科技有限公司 | 一种卷积加速运算方法、装置、电子设备及存储介质 |
CN115578243A (zh) * | 2022-10-09 | 2023-01-06 | 北京睿芯高通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
WO2024108584A1 (zh) * | 2022-11-25 | 2024-05-30 | 华为技术有限公司 | 稀疏算子处理方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107305538B (zh) * | 2016-04-22 | 2020-07-31 | 中科寒武纪科技股份有限公司 | 一种子矩阵运算装置及方法 |
KR20190051697A (ko) * | 2017-11-07 | 2019-05-15 | 삼성전자주식회사 | 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법 |
KR102065672B1 (ko) * | 2018-03-27 | 2020-01-13 | 에스케이텔레콤 주식회사 | 합성곱 연산을 위한 장치 및 방법 |
CN110020678A (zh) * | 2019-03-25 | 2019-07-16 | 联想(北京)有限公司 | 一种数据处理方法、电子设备及计算机存储介质 |
CN113641952B (zh) * | 2021-10-14 | 2022-02-08 | 北京壁仞科技开发有限公司 | 卷积设备、卷积方法、矩阵拆聚装置以及矩阵拆聚方法 |
-
2021
- 2021-01-13 CN CN202110040705.6A patent/CN114764615A/zh active Pending
- 2021-10-18 WO PCT/CN2021/124460 patent/WO2022151779A1/zh active Application Filing
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115292662A (zh) * | 2022-08-18 | 2022-11-04 | 上海燧原科技有限公司 | 一种卷积加速运算方法、装置、电子设备及存储介质 |
CN115292662B (zh) * | 2022-08-18 | 2023-09-22 | 上海燧原科技有限公司 | 一种卷积加速运算方法、装置、电子设备及存储介质 |
CN115578243A (zh) * | 2022-10-09 | 2023-01-06 | 北京睿芯高通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
CN115578243B (zh) * | 2022-10-09 | 2024-01-05 | 北京中科通量科技有限公司 | 一种面向稀疏矩阵的膨胀处理方法 |
WO2024108584A1 (zh) * | 2022-11-25 | 2024-05-30 | 华为技术有限公司 | 稀疏算子处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2022151779A1 (zh) | 2022-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110050267B (zh) | 用于数据管理的系统和方法 | |
US11526731B2 (en) | Systems and methods for vectorized FFT for multidimensional convolution operations | |
CN111095241B (zh) | 加速数学引擎 | |
CN108133270B (zh) | 卷积神经网络加速方法及装置 | |
CN114764615A (zh) | 卷积运算的实现方法、数据处理方法及装置 | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
CN108205700B (zh) | 神经网络运算装置和方法 | |
EP3651070A1 (en) | Computation device and method | |
WO2018107383A1 (zh) | 神经网络的卷积运算方法、装置及计算机可读存储介质 | |
EP3093757B1 (en) | Multi-dimensional sliding window operation for a vector processor | |
CN112703511B (zh) | 运算加速器和数据处理方法 | |
WO2018228399A1 (zh) | 运算装置和方法 | |
CN111125617A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
Carranza et al. | Fast and scalable computation of the forward and inverse discrete periodic radon transform | |
JP2024028901A (ja) | ハードウェアにおけるスパース行列乗算 | |
CN115994565A (zh) | 离散傅立叶相关变换的硬件实施 | |
WO2021081854A1 (zh) | 一种卷积运算电路和卷积运算方法 | |
CN112348182B (zh) | 一种神经网络maxout层计算装置 | |
CN110716751B (zh) | 高并行度计算平台、系统及计算实现方法 | |
CN114003201A (zh) | 矩阵变换方法、装置及卷积神经网络加速器 | |
CN111178513B (zh) | 神经网络的卷积实现方法、卷积实现装置及终端设备 | |
CN109740730B (zh) | 运算方法、装置及相关产品 | |
CN110750249B (zh) | 一种快速傅里叶变换代码的生成方法及装置 | |
WO2023019972A1 (zh) | 一种计算装置、方法、系统、电路、芯片及设备 | |
CN116051345A (zh) | 图像数据处理方法、装置、计算机设备及可读存储介质 |
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 |