CN116050474A - 一种卷积计算方法、soc芯片、电子设备及存储介质 - Google Patents
一种卷积计算方法、soc芯片、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116050474A CN116050474A CN202211718228.5A CN202211718228A CN116050474A CN 116050474 A CN116050474 A CN 116050474A CN 202211718228 A CN202211718228 A CN 202211718228A CN 116050474 A CN116050474 A CN 116050474A
- Authority
- CN
- China
- Prior art keywords
- cylinders
- convolution
- round
- feature map
- data
- 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
- 238000004364 calculation method Methods 0.000 title claims abstract description 128
- 239000011159 matrix material Substances 0.000 claims abstract description 165
- 238000010586 diagram Methods 0.000 claims abstract description 72
- 239000013598 vector Substances 0.000 claims description 158
- 230000015654 memory Effects 0.000 claims description 63
- 238000000034 method Methods 0.000 claims description 59
- 238000009825 accumulation Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004088 simulation Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 18
- 238000013527 convolutional neural network Methods 0.000 description 10
- 230000009471 action Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 229910052757 nitrogen Inorganic materials 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229910052698 phosphorus Inorganic materials 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
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/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- 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
- G06F17/153—Multidimensional correlation or convolution
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请涉及一种卷积计算方法、SOC芯片、电子设备及存储介质,属于计算机技术领域。该卷积计算方法包括:获取包含H*W个第一圆柱体的输入特征图数据;获取N个包含R*S个第二圆柱体的卷积核;每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的P个圆柱体的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。该卷积计算方法通过将二维矩阵中的一行或一列抽象为三维的圆柱体(数组),使得在进行卷积计算时,无需将输入特征图数据展开,即可实现所需的卷积计算,进一步提高卷积计算效率和性能功耗比。
Description
技术领域
本申请属于计算机技术领域,具体涉及一种卷积计算方法、SOC芯片、电子设备及存储介质。
背景技术
卷积(Convolution)广泛应用于传统的图像滤波和目前流行的深度学习,其所具有的网络局部连接和卷积核参数共享的特点,使得卷积神经网络在图像识别和图像分类中占据主流。卷积的核心操作就是滑窗,图1显示了单通道(Channel)卷积操作的卷积过程,卷积核内的每个权重会根据自己在卷积核内的相对位置与输入特征图里相对应的数据进行相乘并累加操作。示例的输入特征图尺寸是高H=6,宽W=6;卷积核尺寸是高R=3,宽S=3;输出特征图尺寸是高P=4,宽Q=4;步长stride=1,表示每次卷积的相对偏移量。各变量之间的关系是P=(H-R)/stride+1,Q=(W-S)/stride+1。
当前,在进行卷积操作时,通常是通过im2col(Image to Column,图像到列转换)把卷积操作转化为矩阵操作,图2示出了将图1所示的卷积操作转换为矩阵操作的原理。图2中左矩阵的每行对应一次卷积操作对应的输入特征图,一行有R*S=9个输入特征值,由于步长为1,一共要移动滑动窗做16次卷积操作,所以共有P*Q=16行,但是因卷积的滑窗特性会导致左矩阵在斜对角方向上有大量重复的数据。右矩阵是卷积核展开的列向量,这样就能通过矩阵操作得到16个输出特征值的列向量,其实就是卷积操作产生的4*4输出特征值。
根据展开数据的位置和方法不同,一般分为显式通用矩阵乘(explicit GEMM(GEneral Matrix Multiplication)),隐式通用矩阵乘(implicit GEMM)和预计算偏移量的通用矩阵乘(pre-compute offset GEMM)。但是这三种通用矩阵乘方式都需要将输入特征图(Feature Map)数据展开,从而会产生很多重复的数据,这会加大内存占用和数据搬运量。
发明内容
鉴于此,本申请的目的在于提供一种卷积计算方法、SOC芯片、电子设备及存储介质,以改善现有卷积方法需要将数据展开,导致会产生很多重复的数据,从而加大内存占用和数据搬运的问题。
本申请的实施例是这样实现的:
第一方面,本申请实施例提供了一种卷积计算方法,所述方法包括:获取包含H*W个第一圆柱体的输入特征图数据,其中,H表示所述输入特征图数据的高,W表示所述输入特征图数据的宽,一个所述第一圆柱体包含H*W维度上的一个元素位置沿输入通道所在方向上的Cin个数据,Cin为输入通道数。获取N个包含R*S个第二圆柱体的卷积核,其中,R表示每个所述卷积核的高、S表示每个所述卷积核的宽,一个所述第二圆柱体包含R*S维度上的一个元素位置沿输入通道所在方向上的Cin个数据,N为大于等于1的正整数;每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;或者,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;其中,P表示所述输出特征图的高、Q表示所述输出特征图的宽,每一个所述第三圆柱体包含N个元素,每个元素为R*S个第二圆柱体与各自对应的第一圆柱体的乘累加结果。
本申请实施例中,通过将二维矩阵中的一行或一列抽象为三维的圆柱体(数组),使得在进行卷积计算时,只需要每一轮从输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,或者,每一轮从输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,便可得到包含P*Q个第三圆柱体的输出特征图,从而无需将输入特征图数据展开,即可实现所需的卷积计算,进一步提高卷积计算效率和性能功耗比,改善现有卷积方法需要将数据展开,导致会产生很多重复的数据,从而加大内存占用和数据搬运的问题。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,包括:每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成Cin*N的右矩阵,i沿R方向依次取1至R*S;每一次沿H方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的P个圆柱体,组成P*Cin的左矩阵;将每一次的所述左矩阵与其对应的所述右矩阵进行乘积,得到乘积结果;将R*S个乘积结果按照对应元素位置进行累加,得到所述输出特征图中的一列。
本申请实施例中,每次选取每个卷积核同一元素位置的第二圆柱体组成右矩阵,其次选取与当前选取的第二圆柱体对应的P个第一圆柱体组成左矩阵,将左矩阵与右矩阵相乘,按照卷积的滑窗顺序和卷积核在输入特征图中的相对位置,重复之前的过程,把卷积核内的所有R*S个第二圆柱体的乘积结果都累加一起,这样就完成了一轮卷积操作,得到了一列数量为P的第三圆柱体,从而实现无需将数据展开,即可实现卷积操作。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,包括:每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成N*Cin的左矩阵,i沿S方向依次取1至R*S;每一次沿W方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的Q个圆柱体,组成Cin*Q的右矩阵;将每一次的所述左矩阵与其对应的所述右矩阵进行乘积,得到乘积结果;将R*S个乘积结果按照对应元素位置进行累加,得到所述输出特征图中的一行。
本申请实施例中,每次选取每个卷积核同一元素位置的第二圆柱体组成左矩阵,其次选取与当前选取的第二圆柱体对应的Q个第一圆柱体组成右矩阵,将左矩阵与右矩阵相乘,按照卷积的滑窗顺序和卷积核在输入特征图中的相对位置,重复之前的过程,把卷积核内的所有R*S个第二圆柱体的乘积结果都累加一起,这样就完成了一轮卷积操作,得到了一行数量为Q的第三圆柱体,从而实现无需将数据展开,即可实现卷积操作。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,包括:每一轮模拟按照预设步长沿W方向在所述输入特征图数据中进行滑窗,从所述输入特征图数据中选取滑窗所得的H*S个第一圆柱体。
本申请实施例中,每一轮从输入特征图数据中获取H*S个第一圆柱体时,选取的是模拟按照预设步长沿W方向在输入特征图数据中进行滑窗所得的H*S个第一圆柱体,使得每一轮从输入特征图数据中获取的H*S个第一圆柱体均不完全相同,从而保证了卷积计算的可靠性和准确性。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,包括:每一轮模拟按照预设步长沿H方向在所述输入特征图数据中进行滑窗,从所述输入特征图数据中选取滑窗所得的W*R个第一圆柱体。
本申请实施例中,每一轮从输入特征图数据中获取W*R个第一圆柱体时,选取的是模拟按照预设步长沿H方向在输入特征图数据中进行滑窗所得的W*R个第一圆柱体,使得每一轮从输入特征图数据中获取的W*R个第一圆柱体均不完全相同,从而保证了卷积计算的可靠性和准确性。
结合第一方面实施例的一种可能的实施方式,所述方法还包括:在获取到所述输入特征图数据后,将所述输入特征图数据存入第一向量寄存器堆,其中,所述第一向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第一圆柱体所包含的Cin个数据。
本申请实施例中,在将输入特征图存入第一向量寄存器堆时,可以是每一个向量寄存器存储至少一个第一圆柱体所包含的Cin个数据,也可以是多个向量寄存器用于存储一个第一圆柱体所包含的Cin个数据,使得存储方式非常灵活,可以适用于各种场景。
结合第一方面实施例的一种可能的实施方式,将所述输入特征图数据存入第一向量寄存器堆,包括:按照所述输入特征图数据中的第一圆柱体的编号顺序,顺次将H*W个第一圆柱体对应的数据,存入连续编号的多个向量寄存器中;其中,以位于所述输入特征图数据中指定位置的第一圆柱体的编号为起点,按照特定规律沿H方向或W方向对每一个第一圆柱体进行编号。
本申请实施例中,在存储第一圆柱体包含的数据时,是按照输入特征图数据中的第一圆柱体的编号顺序,顺次将H*W个第一圆柱体对应的数据,存入连续编号的多个向量寄存器中,以保证存入向量寄存器中的第一圆柱体的编号是连续的,以便于编写矩阵指令(矩阵指令读取数据时需要寄存器编号连续的要求)。
结合第一方面实施例的一种可能的实施方式,所述方法还包括:在获取到N个卷积核之后,将所述N个卷积核存入第二向量寄存器堆,其中,所述第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第二圆柱体所包含的Cin个数据。
本申请实施例中,在将N个卷积核存储第二向量寄存器堆时,可以是每一个向量寄存器用于存储至少一个第二圆柱体所包含的Cin个数据,也可以是多个向量寄存器用于存储一个第二圆柱体所包含的Cin个数据,使得存储方式非常灵活,可以适用于各种场景。
结合第一方面实施例的一种可能的实施方式,将所述N个卷积核存入第二向量寄存器堆,包括:按照所述第二圆柱体的编号顺序,顺次将N*R*S个所述第二圆柱体对应的数据,存入连续编号的多个向量寄存器中,其中,N个卷积核中同一元素位置所在的N个第二圆柱体的编号连续。
本申请实施例中,将N个卷积核存入第二向量寄存器堆时,是按照第二圆柱体的编号顺序,顺次将N*R*S个第二圆柱体对应的数据存入对应的向量寄存器中,且N个卷积核中同一元素位置所在的N个第二圆柱体的编号连续,以满足矩阵指令读取数据时需要寄存器编号连续的要求。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体与N个卷积核中对应的第二圆柱体进行卷积计算,包括:根据每一轮的矩阵指令流从所述输入特征图数据中获取H*S个第一圆柱体,以及从所述N个卷积核中获取对应的第二圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算。
本申请实施例中,通过利用可编程的矩阵指令,便可灵活地实现卷积的滑动窗口操作,从而完成不同配置和种类的卷积操作。
结合第一方面实施例的一种可能的实施方式,每一轮的矩阵指令流包含R*S条矩阵指令;第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿H方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的P个圆柱体,i沿R方向依次取1至R*S。
本申请实施例中,通过矩阵指令的编程组合,使得每一轮的矩阵指令流仅需要包含R*S条矩阵指令,采用最少的矩阵指令即可实现每一轮的卷积计算,真正达到了高效灵活且可编程(可以根据R*S来灵活编辑所需的指令)的目的。
结合第一方面实施例的一种可能的实施方式,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体与N个卷积核中对应的第二圆柱体进行卷积计算,包括:根据每一轮的矩阵指令流从所述输入特征图数据中获取W*R个第一圆柱体,以及从所述N个卷积核中获取对应的第二圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算。
结合第一方面实施例的一种可能的实施方式,每一轮的矩阵指令流包含R*S条矩阵指令;第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿W方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的Q个圆柱体,i沿S方向依次取1至R*S。
第二方面,本申请实施例还提供了一种SOC芯片,包括:第一向量寄存器堆、第二向量寄存器堆、张量引擎;第一向量寄存器堆,用于存储包含H*W个第一圆柱体的输入特征图数据,其中,每一个所述第一圆柱体包含H*W维度上的一个元素位置沿输入通道所在方向上的Cin个数据,H表示所述输入特征图数据的高,W表示所述输入特征图数据的宽,Cin为输入通道数;第二向量寄存器堆,用于存储N个包含R*S个第二圆柱体的卷积核,其中,一个所述第二圆柱体包含R*S维度上的一个元素位置沿输入通道所在方向上的Cin个数据;其中,R表示每个所述卷积核的高、S表示每个所述卷积核的宽,N为大于等于1的正整数;张量引擎,用于每一轮从所述第一向量寄存器堆中获取H*S个第一圆柱体,以及从所述第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的H*S个第一圆柱体,分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;或者,每一轮从所述第一向量寄存器堆中获取W*R个第一圆柱体,以及从所述第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;其中,P表示所述输出特征图的高、Q表示所述输出特征图的宽,每一个所述第三圆柱体包含N个元素,每个元素为R*S个第二圆柱体与各自对应的第一圆柱体的乘累加结果。
结合第二方面实施例的一种可能的实施方式,所述张量引擎,用于根据每一轮的矩阵指令流从所述第一向量寄存器堆中获取H*S个第一圆柱体以及从所述第二向量寄存器堆中获取对应的第二圆柱体,或者,根据每一轮的矩阵指令流从所述第一向量寄存器堆中获取W*R个第一圆柱体以及从所述第二向量寄存器堆中获取对应的第二圆柱体。
结合第二方面实施例的一种可能的实施方式,所述第一向量寄存器堆包含多个向量寄存器,每一个向量寄存器用于存储至少一个所述第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述一圆柱体所包含的Cin个数据。
结合第二方面实施例的一种可能的实施方式,所述第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述二圆柱体所包含的Cin个数据。
结合第二方面实施例的一种可能的实施方式,所述SOC芯片还包括指令调度单元,所述指令调度单元用于向所述张量引擎下发进行卷积计算所需的矩阵指令流。
第三方面,本申请实施例还提供了一种电子设备,包括:共享内存,用于存储卷积计算所需的输入特征图数据和卷积核;和如上述的SOC芯片,所述SOC芯片与所述共享内存连接。
第四方面,本申请实施例还提供了一种电子设备,包括:存储器和处理器,所述处理器与所述存储器连接;所述存储器,用于存储程序;所述处理器,用于调用存储于所述存储器中的程序,以执行上述第一方面实施例和/或结合第一方面实施例的任一种可能的实施方式提供的方法。
第五方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述第一方面实施例和/或结合第一方面实施例的任一种可能的实施方式提供的方法。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本申请的主旨。
图1为单通道卷积操作的卷积过程示意图。
图2为将图1所示的卷积操作转换为矩阵操作的原理示意图。
图3示出了三种通用矩阵乘方式的不同数据展开位置及不同的数据搬运路径的示意图。
图4示出了本申请实施例提供的一种卷积计算方法的流程示意图。
图5A示出了本申请实施例提供的第一种卷积计算的原理示意图。
图5B示出了本申请实施例提供的第二种卷积计算的原理示意图。
图6A示出了图5A中的第一轮卷积计算的原理示意图。
图6B示出了图5B中的第一轮卷积计算的原理示意图。
图7示出了图6A中的步骤①的原理示意图。
图8示出了本申请实施例提供的一种将二维矩阵抽象为三维圆柱体进行卷积计算的原理示意图。
图9示出了本申请实施例提供的一种带有寄存器编号的卷积计算的原理示意图。
图10示出了实现图9中卷积计算的矩阵指令伪代码的示例图。
图11示出了本申请实施例提供的一种卷积计算的部分原理示意图。
图12示出了本申请实施例提供的又一种卷积计算的部分原理示意图。
图13示出了本申请实施例提供的第三种卷积计算的原理示意图。
图14示出了图13中的第一轮卷积计算的原理示意图。
图15示出了本申请实施例提供的一种扩展卷积计算的原理示意图。
图16示出了本申请实施例提供的第四种卷积计算的原理示意图。
图17示出了图16中的第一轮卷积计算的原理示意图。
图18示出了本申请实施例提供的一种SOC芯片的结构示意图。
图19示出了本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中诸如“第一”、“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
鉴于当前在进行卷积操作时所使用的三种通用矩阵乘方式(显式通用矩阵乘、隐式通用矩阵乘、预计算偏移量的通用矩阵乘)都需要将输入特征图数据展开,从而会产生很多重复的数据,这会加大内存占用和数据搬运量,从而降低芯片的性能。
其中,显式通用矩阵乘会根据卷积核的尺寸,例如3*3,把输入特征图数据展成原来的9倍,并存储在全局内存中(Global Memory),数据展开量正比于卷积核尺寸,这会产生很多重复的数据,以3*3的卷积核为例,意味着会有8倍的重复数据,这会加大内存占用和数据搬运量。隐式通用矩阵乘和预计算偏移量的通用矩阵乘并没有从根本上解决显式通用矩阵乘所存在的问题。隐式通用矩阵乘只是把输入特征图数据展开的位置从全局内存变到共享内存(Shared Memory)里,减少了全局内存中的内存占用和全局到共享内存的数据搬运量,但并未减少共享内存的内存占用和共享内存到向量寄存器堆的数据搬运量。而预计算偏移量的通用矩阵乘利用卷积滑窗的特性,用偏移量的增量来索引输入特征图数据,但并未减少共享内存到向量寄存器堆的数据搬运量,此外该方法还需要额外的偏移量,可能还会引发共享内存访问冲突。
图3比较了上述三种通用矩阵乘方式的不同数据展开位置及不同的数据搬运路径。对于显式通用矩阵乘会将输入特征图数据展开后存入全局内存,之后传输到共享内存,再从共享内存搬运到向量寄存器堆。而隐式通用矩阵乘与显式通用矩阵乘的区别仅在于,把输入特征图数据展开的位置从全局内存变到共享内存,对于隐式通用矩阵乘,全局内存存储的是原始输入特征图数据。对于预计算偏移量的通用矩阵乘,全局内存存储的也是原始输入特征图数据,需要在共享内存处用偏移量的增量来索引输入特征图数据,以将输入特征图数据展开。无论哪种方法都无法在不重复展开原始输入特征图数据或不增加数据搬运的情况下,将原始输入特征图数据送入向量寄存器堆。
基于此,本申请提供了一种无需将原始输入特征图数据展开的卷积计算方法,来进一步提高卷积计算效率和性能功耗比,以支撑日益增加的算力需求。本申请可以将原始输入特征图数据,无需展开地送入向量寄存器堆,并且利用可编程的矩阵指令灵活地实现卷积的滑动窗口操作,从而完成不同配置和种类的卷积操作。
本申请提供的卷积计算方法可以应用于各自涉及卷积计算的场景,比如应用于任何结构的卷积神经网络(Convolutional Neural Network,CNN),例如,可以应用于只有一个卷积层的CNN,还可以应用于一些复杂CNN,比如包括多达上百或者更多的卷积层的CNN。此外,本申请实施例中的CNN还可以有池化层、全连接层等。也就是说,本申请实施例的方案并不局限于某种特定的卷积神经网络,只要是包含有卷积层的神经网络,都可以认为是本申请中的“卷积神经网络”,其卷积层部分都可以按照本申请实施例进行运算。
下面将结合图4,对本申请实施例提供的卷积计算方法进行说明。
S1:获取包含H*W个第一圆柱体的输入特征图数据。
可以理解的是,此处获取的包含H*W个第一圆柱体的输入特征图数据可以为完整输入特征图数据中的一部分或全部,若完整输入特征图数据过大,则需要对其进行切分,将一个大数据块切分为多个小数据块。
其中,H表示输入特征图数据的高,W表示输入特征图数据的宽,一个第一圆柱体包含H*W维度上的一个元素位置沿输入通道所在方向上的Cin个数据,Cin为输入通道数。
S2:获取N个包含R*S个第二圆柱体的卷积核。
其中,R表示每个卷积核的高、S表示每个卷积核的宽,一个第二圆柱体包含R*S维度上的一个元素位置沿输入通道所在方向上的Cin个数据,N为大于等于1的正整数。
可以理解的是,在卷积神经网络模型中,不同层对应的卷积核数量和卷积核尺寸是不同的。
S3:每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。
在获取到输入特征图数据和卷积核后,便可进行卷积计算,每一轮卷积计算时,从输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列(一列包括P个第三圆柱体),经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。
可以理解的是,也可以是每一轮卷积计算时,得到输出特征图中的一行(一行包括Q个第三圆柱体),经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。此时,S3可以替换为:每一轮从输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。
其中,P表示输出特征图的高、Q表示输出特征图的宽,每一个第三圆柱体包含N个元素,每个元素为R*S个第二圆柱体与各自对应的第一圆柱体的乘累加结果。P=(H-R)/stride+1,Q=(W-S)/stride+1,stride表示步长。
可以理解的是,当(H-R)/stride以及(W-S)/stride的商不为整数时,需要重新切分输入特征图数据,以保证将重新切分后的输入特征图数据的H和W代入上述表达式时,(H-R)/stride以及(W-S)/stride的商为整数。或者,需要对输入特征图数据进行填充,将输入特征图数据的尺寸扩大,以使(H-R)/stride以及(W-S)/stride的商为整数,例如,假设H*W=6*6,R*S=3*3,stride=2,此时,(H-R)/stride以及(W-S)/stride的商均不为整数,则需要对输入特征图数据进行填充或者重新划分,将其尺寸从6*6扩大到9*9,此时,P*Q=4*4。
其中,每一轮从输入特征图数据中获取H*S个第一圆柱体时,每一轮均是模拟按照预设步长沿W方向在输入特征图数据中进行滑窗,从输入特征图数据中选取滑窗所得的H*S个第一圆柱体。所以,每一轮从输入特征图数据中获取的H*S个第一圆柱体均不完全相同。或者,每一轮从输入特征图数据中获取W*R个第一圆柱体时,每一轮均是模拟按照预设步长沿H方向在输入特征图数据中进行滑窗,从输入特征图数据中选取滑窗所得的W*R个第一圆柱体。所以,每一轮从输入特征图数据中获取的W*R个第一圆柱体均不完全相同。
为了更好的理解,下面以R*S=3*3,H*W=6*6,步长stride=1为例,则对应的P*Q=4*4。可以理解的是,R*S、H*W以及步长并不限于此。
上述的卷积计算的原理如图5A和5B所示,共需要进行4轮卷积运算,每一轮卷积计算得到输出特征图中的一列或一行。每一列包含P个由N(输出通道数Cout)个元素组成的第三圆柱体,其中N=Cout。每一行包含Q个由N(输出通道数Cout)个元素组成的第三圆柱体。图5A中的每一轮均是从输入特征图数据中获取H*S个第一圆柱体,分别与N个卷积核中对应的第二圆柱体进行卷积计算。图5B中的每一轮均是从输入特征图数据中获取W*R个第一圆柱体,分别与N个卷积核中对应的第二圆柱体进行卷积计算。可以理解的是,图5A所示的示意图中,是从右侧往左侧的方向进行滑窗示例的,其也可以替换为从左侧往右侧的方向进行滑窗,若从左侧往右侧的方向进行滑窗,其顺序与图5A所示的顺序正好相反,即图5A中的第四轮即为第一轮,图5A中的第三轮即为第二轮,图5A中的第二轮即为第三轮,图5A中的第一轮即为第四轮。同理,图5B所示的示意图中,是从下侧往上侧的方向进行滑窗示例的,其也可以替换为从上侧往下侧的方向进行滑窗,若从上侧往下侧的方向进行滑窗,其顺序与图5B所示的顺序正好相反,即图5B中的第四轮即为第一轮,图5B中的第三轮即为第二轮,图5B中的第二轮即为第三轮,图5B中的第一轮即为第四轮。
此外,轮间的顺序并非是固定的,可以任意设置,包括但不限于,可以先计算第一轮,之后计算第三轮,再计算第二轮,最后计算第四轮。轮间的顺序可以通过矩阵指令流来设置。
其中,将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列的过程包括:每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成Cin*N的右矩阵,i沿R方向依次取1至R*S;每一次沿H方向从输入特征图数据中选取与第i个元素位置所在的第二圆柱体对应的P个圆柱体,组成P*Cin的左矩阵,将每一次的左矩阵与其对应的右矩阵进行乘积,得到乘积结果,将R*S个乘积结果按照对应元素位置进行累加,得到输出特征图中的一列。即每一轮卷积计算包括R*S次矩阵运算和R*S-1次累加运算。
其中,每一轮从输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行的过程包括:每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成N*Cin的左矩阵,i沿S方向依次取1至R*S;每一次沿W方向从输入特征图数据中选取与第i个元素位置所在的第二圆柱体对应的Q个圆柱体,组成Cin*Q的右矩阵;将每一次的左矩阵与其对应的右矩阵进行乘积,得到乘积结果;将R*S个乘积结果按照对应元素位置进行累加,得到输出特征图中的一行。
为了更好的理解,下面以R*S=3*3,H*W=6*6,步长stride=1为例,则图5A所示的每一轮均包含9个小步骤,其原理如图6A所示,图6A中的M=P。可以看出图6A中所示的9个步骤中,每一次都是选取每个卷积核同一个元素位置所在的第二圆柱体,组成Cin*N的右矩阵。例如,对于①,是选取每个卷积核最右下角所在的第二圆柱体,组成Cin*N的右矩阵,假设以最右下角为坐标原点,则每个卷积核最右下角所在的第二圆柱体即为每个卷积核第0行、第0列所在的第二圆柱体。对于②,是选取每个卷积核第1行、第0列所在的第二圆柱体(若是以最左上角为坐标原点,则是选取每个卷积核第1行、第2列所在的第二圆柱体),组成Cin*N的右矩阵……对于⑨,是选取每个卷积核最左上角所在的第二圆柱体,组成Cin*N的右矩阵。
图5B中的每一轮与图5A中的每一轮类似,也是包含R*S个步骤,下面以R*S=3*3,H*W=6*6,步长stride=1为例,图5B所示的每一轮均包含9个小步骤,其原理如图6B所示。
可以理解的是,每一轮卷积内的各个步骤(如图6A或图6B中①~⑨、)之间顺序并非是固定的,可以任意设置。以图6A或图6B所示的9个步骤为例,这9个步骤的先后顺序可以随意设置,并不限于图6A或图6B示意的①~⑨的顺序。每一轮卷积内的各个步骤的顺序可以通过矩阵指令流中各个矩阵指令的执行先后顺序来设置。
基于上述的描述,以及图5A、图5B、图6A以及图6B所示的原理,可以看出,在进行卷积计算时,每一轮卷积计算是得到输出特征图中的一行,还是得到输出特征图中的一列,二者的原理是非常相似的,区别仅在于选取的数据不同。为了避免赘述,在后续的描述中,主要以每一轮卷积计算得到输出特征图中的一列进行说明。
对于图6A中的①的计算过程,其原理如图7所示,选取每个卷积核同一个元素位置(如最右下角)所在的第二圆柱体,组成Cin*N的右矩阵。从输入特征图数据中选取的M(M=P)个第一圆柱体,组成M*Cin的左矩阵,将左矩阵的一个第一圆柱体与右矩阵中的每个第二圆柱体相乘,会得到包含Cout(Cout=N)个切片(一个切片代表一个数据)的乘积结果。同理,对于图6A中的②~⑨,将左矩阵的一个第一圆柱体与右矩阵中的每个第二圆柱体相乘,也会得到各自包含N个切片的乘积结果,并将对应输出特征图中的同一个元素位置9个乘积结果(每个乘积结果均包含对应该元素位置的N个切片)按照对应元素位置进行累加,从而得到该元素位置所在的第三圆柱体。比如,对于图6A中的①~⑨,将每个左矩阵中的第一个圆柱体(为图6A中每个步骤所示的输入特征图数据中最上方的黑色圆柱体)分别与对应的右矩阵中的每个圆柱体相乘,之后将得到的9个乘积结果按照对应元素位置进行累加,得到图7所示的输出特征图中最右上角所在位置的第三圆柱体。
为了更好理解,假设N=4,对于图7所示的输出特征图中最右上角所在位置,假设第i次乘积得到的4个切片为Ai,Bi,Ci,Di,则将9次乘积各自得到的4个切片按照对应元素位置进行累加的结果为:A1+A2+A3+……+A9,B1+B2+B3+……+B9,C1+C2+C3+……+C9,D 1+D2+D3+……+D9,从而得到图7所示的输出特征图中最右上角所在位置的第三圆柱体。
本申请实施例中,通过将二维矩阵中的一行或一列抽象为三维的圆柱体(数组),使得在进行卷积计算时,无需将输入特征图数据展开,即可实现所需的卷积计算。为了更好的理解,下面结合图8对其原理进行说明。图8中,M*Cin代表左矩阵,Cin*N代表右矩阵。将二维左矩阵的一行(包含Cin个切片,一个切片代表一个数据)抽象为一个第一圆柱体,将二维右矩阵的一列(包含Cin个切片,一个切片代表一个数据)抽象为一个第二圆柱体。相乘时,将每个左矩阵的一个第一圆柱体与右矩阵中的每个第二圆柱体相乘后累加,产生新的N个切片,并把一行里的N个切片存放在一个结果圆柱体内,得到第三圆柱体。重复左矩阵中M个第一圆柱体的计算就能得到M个深度为N个切片的第三圆柱体。
通过搭配可编程的矩阵指令,可灵活地实现卷积的滑动窗口操作,从而完成不同配置和种类的卷积操作。为了便于搭配可编程的矩阵指令,本申请在获取到包含H*W个第一圆柱体的输入特征图数据后,该卷积计算方法还包括:将该输入特征图数据存入第一向量寄存器堆中,第一向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个第一圆柱体所包含的Cin个数据。相应地,每一轮从输入特征图数据中获取H*S个第一圆柱体变更为:每一轮从第一向量寄存器堆中获取H*S个第一圆柱体。
可以理解的是,当每一个向量寄存器用于存储一个第一圆柱体所包含的Cin个数据,第一向量寄存器堆包含编号连续的H*W个向量寄存器。当一个向量寄存器用于存储多个第一圆柱体所包含的Cin个数据时,则第一向量寄存器堆包含的向量寄存器的数量小于H*W;当多个向量寄存器用于存储一个第一圆柱体所包含的Cin个数据,第一向量寄存器堆包含的向量寄存器的数量大于H*W。
同理,在获取到N个包含R*S个第二圆柱体的卷积核之后,该卷积计算方法还包括:将N个卷积核存入第二向量寄存器堆,第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第二圆柱体所包含的Cin个数据。相应地,将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算变更为:将该轮获取的H*S个第一圆柱体,分别与从第二向量寄存器堆中对应获取的第二圆柱体进行卷积计算。
可以理解的是,当每一个向量寄存器用于存储一个第二圆柱体所包含的Cin个数据,第二向量寄存器堆包含编号连续的N*R*S个向量寄存器。当一个向量寄存器用于存储多个第二圆柱体所包含的Cin个数据时,则第二向量寄存器堆包含的向量寄存器的数量小于N*R*S;当多个向量寄存器用于存储一个第二圆柱体所包含的Cin个数据,第二向量寄存器堆包含的向量寄存器的数量大于N*R*S。
通过搭配矩阵指令流,便可实现上述的卷积计算。例如,根据每一轮的矩阵指令流从第一向量寄存器堆中获取H*S(或W*R)个第一圆柱体以及从第二向量寄存器堆中获取对应的第二圆柱体,之后,将该轮获取的H*S(或W*R)个第一圆柱体,分别与从第二向量寄存器堆中获取的对应的第二圆柱体进行卷积计算,得到输出特征图中的一列(或一行)。每一轮的矩阵指令流包含R*S条矩阵指令,第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿H(或W)方向从输入特征图数据中选取与第i个元素位置所在的第二圆柱体对应的P(或Q)个圆柱体,i沿R方向(或沿S方向)依次取1至R*S。
整个卷积过程可以用一条条矩阵指令的形式表现出来,真正做到灵活高效,且可编程,以适应不同的卷积操作。例如,图9中的圆柱体上的Vx表示了对应的向量寄存器编号,以表示和图10中的指令伪代码之间的对应关系。输入特征图使用了V0~V35,卷积核使用了V36~V71,输出特征图使用了V72~V87。可以理解的是,在图9所示示意图中,卷积核的数量为N=4,其值并不限于此。在图9所示的示意图中,一个圆柱体对应一个向量寄存器。
可以理解的是,图9所示的示意图中,第一圆柱体是沿H方向连续编号的,第二圆柱体是沿R方向连续编号的,如果每一轮卷积计算时,要得到输出特征图中的一行,只需要将图9中的第一圆柱体编号顺序替换为沿W方向连续编号,将第二圆柱体是沿S方向连续编号的即可,例如,还是以最右下角的位置为起点,沿W方向编号,此时,V6替换为V1,V30替换为V5,即将W方向的编号与H方向上的编号互换即可。
图10显示了相应的指令伪代码,gemm是一条通用的矩阵指令,每条矩阵指令有四个操作数,dest是结果矩阵寄存器,srca是左矩阵寄存器,srcb是右矩阵寄存器,srcc是累加矩阵寄存器,4vrf表示连续的4个寄存器,4vrf中的数字可以根据卷积核的数量N进行修改,如5vrf表示连续的5个寄存器。mem_load是从内存到寄存器堆的搬运指令,ml_mov是写寄存器指令,写#0是为了初始化寄存器值为0。IAxy表示输入特征图数据中的第x行、第y列所在的第一圆柱体,Wx表示卷积核中第x个元素位置所在的第二圆柱体,OAxy表示输出特征图中的第x行、第y列所在的第三圆柱体。
例如,对于计算图9中输出特征图中的一列(如V72~V75),即OA00~OA30,则只需要9条矩阵指令就可,每条矩阵指令对应图6A中的一个步骤,例如,“Gemm v72,v0,v36,v72//IA00*W0”这条指令,对应图6A中的①。
对于“Gemm v72,v0,v36,v72”这条指令来说,其中的含义为:v72表示从编号v72开始的4个连续寄存器(即v72~v75)为结果矩阵寄存器,v0表示从编号v0开始的4个连续寄存器(即v0~v3)为左矩阵寄存器,v36表示从编号v36开始的4个连续寄存器(即v36~v39)为右矩阵寄存器。需要说明的是:“//”为注释符,“IA00*W0”为“Gemm v72,v0,v36,v72”这条指令的注释。
以图5A所示的尺寸为例,整个卷积计算过程需要4轮,每轮计算得到输出特征图中的一列第三圆柱体,4轮计算完全部的4列第三圆柱体;每轮需要R*S=9条矩阵指令,分别对应卷积核内的每个第二圆柱体,共需要36条矩阵指令。第一轮结果都累加在V72~V75,第二轮结果都累加在V76~V79,第三轮结果都累加在V80~V83,第四轮结果都累加在V84~V87。
图10中的OA00~OA30对应图5A中的第一轮,图10中的OA01~OA31对应图5A中的第二轮,图10中的OA03~OA33对应图5A中的第四轮。通过调整图10中的矩阵指令流(OA00~OA30、OA01~OA31、OA03~OA33)的执行顺序,便可设置图5A中每一轮卷积的顺序。
可以理解的是,图10所示的指令伪代码,是针对图9所示的卷积计算而言的,当卷积计算时,卷积核的尺寸、输入特征图的尺寸、步长中的其中一个参数变化时,相应的指令也需要随之进行变化,以适配不同的卷积计算。
通过搭配可编程地通用指令实现卷积的滑窗操作以适配各种卷积设置和卷积类型。编程方式不限于编译器产生的汇编,手写的汇编,内联函数调用,寄存器控制的调度,或者固化为硬件行为的调度等。
本申请所示的卷积计算方法,在各种存储器里(如全局内存、共享内存以及向量寄存器堆)里,数据都无需展开,就能进行卷积运算,极大的减少了内存占用和数据搬运量。以图9所示的示例进行说明,整个卷积过程,从全局内存到共享内存再到向量寄存器堆,数据全程都没有重复(V0~V36都是不重复的原始数据),节省了存储空间和数据搬运。通过矩阵指令的编程组合(每轮里面的9条矩阵指令),完成了卷积的滑动窗口操作,达到了高效灵活且可编程的目的。
一种实施方式下,在将H*W个第一圆柱体所包含的数据写入第一向量寄存器堆中时,可以先对输入特征图数据中的H*W个第一圆柱体按照指定顺序进行编号,例如,以位于输入特征图数据的指定位置(如最右下角或最左上角)的第一圆柱体的编号为起始编号(比如v0),按照特定规律沿H或W方向对每一个第一圆柱体进行编号。之后,按照第一圆柱体的编号顺序顺次将H*W个第一圆柱体顺次存放在连续编号的向量寄存器中,例如,将v0所在的第一圆柱体存入编号为v0的向量寄存器,将v1所在的第一圆柱体存入编号为v1的向量寄存器……将v35所在的第一圆柱体存入编号为v35的向量寄存器。
其中,如果每一轮卷积计算时时得到输出特征图中的一列,在对输入特征图数据中的H*W个第一圆柱体按照指定顺序进行编号时,以位于输入特征图数据的指定位置(如最右下角或最左上角)的第一圆柱体的编号为起始编号(比如v0),按照特定规律沿H方向对每一个第一圆柱体进行编号。如果每一轮卷积计算时时得到输出特征图中的一行,在对输入特征图数据中的H*W个第一圆柱体按照指定顺序进行编号时,以位于输入特征图数据的指定位置(如最右下角或最左上角)的第一圆柱体的编号为起始编号(比如v0),按照特定规律沿W方向对每一个第一圆柱体进行编号。
可以理解的是,步长不同,对输入特征图数据中的第一圆柱体进行编号的结果是不同的,例如,若步长为1,则以位于输入特征图数据的最右下角或最左上角的第一圆柱体的编号为起始点,沿H方向依次对每一个第一圆柱体进行连续编号即可,其原理图如图9所示。
若步长为2,则以位于输入特征图数据的最右下角或最左上角的第一圆柱体的编号为起始点,沿H(或W)方向先对元素位置/步长的余数为1的第一圆柱体进行连续编号,再对元素位置/步长的余数为0的第一圆柱体进行连续编号,也即沿H(或W)方向先对奇数位置的第一圆柱体进行连续编号,之后再对偶数位置的第一圆柱体进行连续编号。例如,对位于1、3、5、7、9……35位置的第一圆柱体进行连续编号,得到v0~v15,对位于2、4、6、8、10……36位置的第一圆柱体进行连续编号,得到v16~v35。以便存储时,将奇数位置的第一圆柱体连续存放在连续编号的寄存器堆,将偶数位置的第一圆柱体连续存放在连续编号的寄存器堆。
若步长为3则以位于输入特征图数据的最右下角或最左上角的第一圆柱体的编号为起始点,沿H(或W)方向先对元素位置/步长的余数为1的第一圆柱体进行连续编号,再对元素位置/步长的余数为2的第一圆柱体进行连续编号,最后对元素位置/步长的余数为0的第一圆柱体进行连续编号。例如,对位于1、4、7、10、13……34元素位置的第一圆柱体进行连续编号,得到v0~v11,对位于2、5、8、11、14……35元素位置的第一圆柱体进行连续编号,得到v12~v23,对位于3、6、9、12、15……36元素位置的第一圆柱体进行连续编号,得到v24~v35。
若步长为4,则以位于输入特征图数据的最右下角或最左上角的第一圆柱体的编号为起始点,沿H(或W)方向先对元素位置/步长的余数为1的第一圆柱体进行连续编号,再对元素位置/步长的余数为2的第一圆柱体进行连续编号,再对元素位置/步长的余数为3的第一圆柱体进行连续编号,最后对元素位置/步长的余数为0的第一圆柱体进行连续编号。例如,对位于1、5、9、13……33元素位置的第一圆柱体进行连续编号,得到v0~v8,对位于2、6、10、14……34元素位置的第一圆柱体进行连续编号,得到v9~v17,对位于3、7、11、15……35元素位置的第一圆柱体进行连续编号,得到v18~v26,对位于4、8、12、16……36元素位置的第一圆柱体进行连续编号,得到v27~v35。
其余步长的编号不再示例,均是按照上述规律进行编号。
一种实施方式下,在将N*R*S个第二圆柱体所包含的数据写入第二向量寄存器堆中时,也可以先对N个卷积核中的的R*S个第二圆柱体按照指定顺序(如沿S或R方向)进行编号,之后,按照第二圆柱体的编号顺序顺次将其所包含的数据写入对应的向量寄存器中,例如,对N个卷积核中同一个元素位置所在的第二圆柱体进行顺序编号,可以参阅图9所示的示意图。图9的示意图中,第二圆柱体是沿R方向进行编号的。
可以理解的是,本申请所示的卷积计算方法,可以适用于不同尺寸的卷积核,当卷积核的尺寸由3x3变为4x4,只需要把输入特征图由6x6变为7x7,就仍旧能用同样的矩阵指令得到同样的4x4输出特征图。整个卷积过程仍旧需要4轮完成,每轮的矩阵指令变成R*S=16条,共需要64条矩阵指令来完成,其原理如图11所示。可以理解的是,图11为卷积计算的局部原理示意图,仅为说明,当卷积核的尺寸由3x3变为4x4,若仍然要得到4x4输出特征图,需要将输入特征图由6x6变为7x7。
当然,也可以保持输入特征图为6x6不变,此时需要改变矩阵指令的尺寸M为3,在4x4的卷积核时,得到3x3的输入特征图,整个卷积过程共需要3轮完成,每轮的矩阵指令是R*S=16条,共需要48条矩阵指令来完成,其原理图如图12所示。可以理解的是,图12为卷积计算的局部原理示意图,仅为说明,当卷积核的尺寸由3x3变为4x4,若输入特征图为6x6不变,则输出特征图会从4x4变为3x3。
本申请所示的卷积计算方法,可以适用于各种不同步长的卷积计算,不仅适用于步
长为1的普通卷积,也适用于步长为2的卷积,只需要将奇数位置的第一圆柱体连续存5放在连续编号的寄存器堆,偶数位置的第一圆柱体连续存放在连续编号的寄存器堆,就
能用之前步长为1的方法进行卷积计算。其原理图如图13所示,图13所示的示例中,H*W=9*9,R*S=3*3,步长stride=2,相应地,P*Q=4*4。图13中对于输入特征图数据中的白色第一圆柱体表示位于奇数位置的第一圆柱体,输入特征图数据中的灰色第一圆柱体表示位于偶数位置的第一圆柱体。
0如果步长为2时,完成整个卷积计算,也需要重复Q轮,由于Q=4,因此整个卷积
过程仍旧需要4轮完成,每一轮从输入特征图数据中选取H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体相乘,得到输出特征图中的一列。不同的是每轮向左的步长现在变成了2。
对于每一轮仍然包含9(R*S=9)个步骤,对于图13中的第一轮,其原理如图14所示,和步长为1不同的是,每次卷积核的偏移步长是2。但是由于已经将奇偶圆柱体
分开存放,所以不影响矩阵指令读取数据时需要寄存器编号连续的要求。
对于步长为3的卷积,只需要将元素位置/步长的余数为1的第一圆柱体连续存放在连续编号的寄存器堆,将元素位置/步长的余数为2的第一圆柱体连续存放在连续编号的寄存器堆,将元素位置/步长的余数为0的第一圆柱体连续存放在连续编号的寄存器堆,0就能用之前步长为1的方法进行卷积计算,此处不再示例。
该发明不仅适用于普通卷积,也适用于任何有滑动窗口行为的卷积类型,比如,可以适用于扩张卷积(Dilated Convolution),可分离卷积(Separable Convolution),分组卷积(Grouped Convolution),三维卷积(3D Convolution)等。
下面以适用于扩展卷积为例,扩展卷积的目的是为了在不增大卷积核和卷积计算量5的前提下拓展感受野,如果在输入特征图尺寸不变的情况下,相应的输出特征图的尺寸
会变小,如图15所示。示例中的扩展卷积(dilate)的系数为1,对于普通卷积来说,卷积核对应的输入特征图数据为11,12,13,21,22,23,31,32,33。对于图15所示的扩展卷积来说,卷积核对应的输入特征图数据为11,13,15,31,33,35,51,53,
55。可以看出,在卷积核对应的输入特征图数据,并不是连续的,而是会跨越一个数据0(扩展卷积的系数为1)取数据。
对于步长为1,扩展卷积的系数为1的扩展卷积,仍然能用普通卷积,步长为1的方法进行计算,不同的是每一轮卷积计算的起始地址不是连续的圆柱体,,会跨越一个圆柱体,其原理图如图16所示,示例中,H*W=8*8,R*S=3*3,步长stride=1,相应地,
P*Q=4*4。对于扩展卷积来说,P=(H-R')/stride+1,R'=R+(R-1)*扩展系数,Q=(W5-S')/stride+1,S'=S+(S-1)*扩展系数。
对于扩展卷积老说,整个卷积过程仍旧需要4(Q=4)轮完成,每一轮从输入特征图数据中选取H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体相乘,得到输出特征图中的一列。不同的是每一轮卷积计算的起始地址不是连续的圆柱体,会跨越一个圆柱体。
对于每一轮仍然包含9(R*S=9)个步骤,对于图16中的第一轮,其原理如图17所示。和普通卷积不同的是,在于每一个步骤中卷积核对应的输入特征图数据不同,需要将其修改为适配扩展卷积的输入特征图数据。
本申请所示的卷积计算方法除了可以适用于不同的卷积类型外,也适用于各种卷积设置,卷积设置包括但不限于:批处理量N(即参与卷积计算的卷积核数量),输入特征图尺寸H*W,卷积核尺寸R*S,输入通道Cin,输出通道Cout,边界填充数量(padding),步长(Stride)等与卷积相关的参数设置。
基于同样的发明构思,本申请实施例还提供了一种SOC(System on Chip,片上系统,也称系统级芯片)芯片,如图18所示,该SOC芯片包括:第一向量寄存器堆、第二向量寄存器堆和张量引擎。
该SOC芯片可以是各自通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、图形处理器(Graphics Processing Unit)等;通用处理器可以是微处理器。该SOC芯片还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、或者其他人工智能芯片或者其他任何常规的处理器等。
第一向量寄存器堆,用于存储包含H*W个第一圆柱体的输入特征图数据。第二向量寄存器堆,用于存储N个包含R*S个第二圆柱体的卷积核。
张量引擎,用于每一轮从第一向量寄存器堆中获取H*S个第一圆柱体,以及从第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的H*S个第一圆柱体,分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图,或者,张量引擎用于每一轮从第一向量寄存器堆中获取W*R个第一圆柱体,以及从第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。
其中,第一向量寄存器堆包含多个向量寄存器,每一个向量寄存器用于存储至少一个第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个第一圆柱体所包含的Cin个数据。第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个二圆柱体所包含的Cin个数据。
可选地,张量引擎,用于根据每一轮的矩阵指令流从第一向量寄存器堆中获取H*S个第一圆柱体以及从第二向量寄存器堆中获取对应的第二圆柱体。每一轮的矩阵指令流包含R*S条矩阵指令,第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿H方向从输入特征图数据中选取与第i个元素位置所在的第二圆柱体对应的P个圆柱体,i沿R方向依次取1至R*S。
或者,张量引擎,用于根据每一轮的矩阵指令流从第一向量寄存器堆中获取W*R个第一圆柱体以及从第二向量寄存器堆中获取对应的第二圆柱体,每一轮的矩阵指令流包含R*S条矩阵指令,第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿W方向从输入特征图数据中选取与第i个元素位置所在的第二圆柱体对应的Q个圆柱体,i沿S方向依次取1至R*S。
可选地,该SOC芯片还可以包括,用于存储卷积运算结果的第三向量寄存器堆,用于存储包含P*Q个第三圆柱体的输出特征图。第三向量寄存器堆可以包含编号连续的P*Q个向量寄存器,每一个向量寄存器用于存储一个第三圆柱体所包含的Cout(Cout=N)个数据。
可以理解的是,上述的第一向量寄存器堆、第二向量寄存器堆以及第三向量寄存器堆本质上可以是同一个大的向量寄存器堆(可以包含H*W+N*R*S+P*Q个向量寄存器),此处仅是为了便于描述,将其拆分为3个向量寄存器堆进行描述。此外,此处示例是以一个向量寄存器存储一个圆柱体所包含的数据为例进行说明的。
可选地,SOC芯片还包括指令调度单元,指令调度单元用于向张量引擎下发进行卷积计算所需的矩阵指令流。张量引擎根据指令调度单元下发的矩阵指令流进行卷积操作。
SOC芯片实施例所提供的实现原理及产生的技术效果和前述方法实施例相同,为简要描述,SOC芯片实施例部分未提及之处,可参考前述方法实施例中相应内容。
基于同样的发明构思,本申请实施例还提供了一种电子设备,包括:共享内存和上述的SOC芯片。共享内存,用于存储卷积计算所需的输入特征图数据和卷积核。该SOC芯片与共享内存连接。在进行卷积计算时,将存储于共享内存中的数据搬运至SOC芯片中的向量寄存器堆。
该电子设备包括但不限于手机、平板、电脑(笔记本、台式电脑等)、服务器等各种电子产品。
基于同样的发明构思,如图19所示,图19示出了本申请实施例提供的一种电子设备200的结构框图。所述电子设备200包括:收发器210、存储器220、通讯总线230以及处理器240。
所述收发器210、所述存储器220、处理器240各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线230或信号线实现电性连接。其中,收发器210用于收发数据。存储器220用于存储计算机程序,如该计算机程序包括至少一个可以软件或固件(Firmware)的形式存储于所述存储器220中或固化在所述电子设备200的操作系统(Operating System,OS)中的软件功能模块。所述处理器240,用于执行存储器220中存储的可执行模块,例如,处理器240,用于获取包含H*W个第一圆柱体的输入特征图数据,获取N个包含R*S个第二圆柱体的卷积核,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图,或者,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图。
其中,存储器220可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器240可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器240也可以是任何常规的处理器等。
其中,上述的电子设备200,包括但不限于手机、平板、电脑(笔记本、台式电脑等)、服务器等等。
本申请实施例还提供了一种非易失性的计算机可读取存储介质(以下简称存储介质),该存储介质上存储有计算机程序,该计算机程序被计算机如上述的电子设备200运行时,执行上述所示的卷积计算方法。而前述的计算机可读存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,笔记本电脑,服务器,或者电子设备等)执行本申请各个实施例所述方法的全部或部分步骤。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (21)
1.一种卷积计算方法,其特征在于,所述方法包括:
获取包含H*W个第一圆柱体的输入特征图数据,其中,H表示所述输入特征图数据的高,W表示所述输入特征图数据的宽,一个所述第一圆柱体包含H*W维度上的一个元素位置沿输入通道所在方向上的Cin个数据,Cin为输入通道数;
获取N个包含R*S个第二圆柱体的卷积核,其中,R表示每个所述卷积核的高、S表示每个所述卷积核的宽,一个所述第二圆柱体包含R*S维度上的一个元素位置沿输入通道所在方向上的Cin个数据,N为大于等于1的正整数;
每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;或者,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;
其中,P表示所述输出特征图的高、Q表示所述输出特征图的宽,每一个所述第三圆柱体包含N个元素,每个元素为R*S个第二圆柱体与各自对应的第一圆柱体的乘累加结果。
2.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,包括:
每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成Cin*N的右矩阵,i沿R方向依次取1至R*S;
每一次沿H方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的P个圆柱体,组成P*Cin的左矩阵;
将每一次的所述左矩阵与其对应的所述右矩阵进行乘积,得到乘积结果;
将R*S个乘积结果按照对应元素位置进行累加,得到所述输出特征图中的一列。
3.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,包括:
每一次选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,组成N*Cin的左矩阵,i沿S方向依次取1至R*S;
每一次沿W方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的Q个圆柱体,组成Cin*Q的右矩阵;
将每一次的所述左矩阵与其对应的所述右矩阵进行乘积,得到乘积结果;
将R*S个乘积结果按照对应元素位置进行累加,得到所述输出特征图中的一行。
4.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,包括:
每一轮模拟按照预设步长沿W方向在所述输入特征图数据中进行滑窗,从所述输入特征图数据中选取滑窗所得的H*S个第一圆柱体。
5.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,包括:
每一轮模拟按照预设步长沿H方向在所述输入特征图数据中进行滑窗,从所述输入特征图数据中选取滑窗所得的W*R个第一圆柱体。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在获取到所述输入特征图数据后,将所述输入特征图数据存入第一向量寄存器堆,其中,所述第一向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第一圆柱体所包含的Cin个数据。
7.根据权利要求6所述的方法,其特征在于,将所述输入特征图数据存入第一向量寄存器堆,包括:
按照所述输入特征图数据中的第一圆柱体的编号顺序,顺次将H*W个第一圆柱体对应的数据,存入连续编号的多个向量寄存器中;其中,以位于所述输入特征图数据中指定位置的第一圆柱体的编号为起点,按照特定规律沿H或W方向对每一个第一圆柱体进行编号。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在获取到N个卷积核之后,将所述N个卷积核存入第二向量寄存器堆,其中,所述第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第二圆柱体所包含的Cin个数据。
9.根据权利要求8所述的方法,其特征在于,将所述N个卷积核存入第二向量寄存器堆,包括:
按照所述第二圆柱体的编号顺序,顺次将N*R*S个所述第二圆柱体对应的数据,存入连续编号的多个向量寄存器中,其中,N个卷积核中同一元素位置所在的N个第二圆柱体的编号连续。
10.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取H*S个第一圆柱体,并将该轮获取的H*S个第一圆柱体与N个卷积核中对应的第二圆柱体进行卷积计算,包括:
根据每一轮的矩阵指令流从所述输入特征图数据中获取H*S个第一圆柱体,以及从所述N个卷积核中获取对应的第二圆柱体,并将该轮获取的H*S个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算。
11.根据权利要求10所述的方法,其特征在于,每一轮的矩阵指令流包含R*S条矩阵指令;第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿H方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的P个圆柱体,i沿R方向依次取1至R*S。
12.根据权利要求1所述的方法,其特征在于,每一轮从所述输入特征图数据中获取W*R个第一圆柱体,并将该轮获取的W*R个第一圆柱体与N个卷积核中对应的第二圆柱体进行卷积计算,包括:
根据每一轮的矩阵指令流从所述输入特征图数据中获取W*R个第一圆柱体,以及从所述N个卷积核中获取对应的第二圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算。
13.根据权利要求12所述的方法,其特征在于,每一轮的矩阵指令流包含R*S条矩阵指令;第i条矩阵指令,用于选取N个卷积核中的每个卷积核第i个元素位置所在的第二圆柱体,以及沿W方向从所述输入特征图数据中选取与所述第i个元素位置所在的第二圆柱体对应的Q个圆柱体,i沿S方向依次取1至R*S。
14.一种SOC芯片,其特征在于,包括:
第一向量寄存器堆,用于存储包含H*W个第一圆柱体的输入特征图数据,其中,每一个所述第一圆柱体包含H*W维度上的一个元素位置沿输入通道所在方向上的Cin个数据,H表示所述输入特征图数据的高,W表示所述输入特征图数据的宽,Cin为输入通道数;
第二向量寄存器堆,用于存储N个包含R*S个第二圆柱体的卷积核,其中,一个所述第二圆柱体包含R*S维度上的一个元素位置沿输入通道所在方向上的Cin个数据;其中,R表示每个所述卷积核的高、S表示每个所述卷积核的宽,N为大于等于1的正整数;
张量引擎,用于每一轮从所述第一向量寄存器堆中获取H*S个第一圆柱体,以及从所述第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的H*S个第一圆柱体,分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一列,经过Q轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;或者,每一轮从所述第一向量寄存器堆中获取W*R个第一圆柱体,以及从所述第二向量寄存器堆中获取对应的第二圆柱体,并将该轮获取的W*R个第一圆柱体分别与N个卷积核中对应的第二圆柱体进行卷积计算,得到输出特征图中的一行,经过P轮卷积计算,得到包含P*Q个第三圆柱体的输出特征图;
其中,P表示所述输出特征图的高、Q表示所述输出特征图的宽,每一个所述第三圆柱体包含N个元素,每个元素为R*S个第二圆柱体与各自对应的第一圆柱体的乘累加结果。
15.根据权利要求10所述的SOC芯片,其特征在于,所述张量引擎,用于根据每一轮的矩阵指令流从所述第一向量寄存器堆中获取H*S个第一圆柱体以及从所述第二向量寄存器堆中获取对应的第二圆柱体,或者,根据每一轮的矩阵指令流从所述第一向量寄存器堆中获取W*R个第一圆柱体以及从所述第二向量寄存器堆中获取对应的第二圆柱体。
16.根据权利要求10所述的SOC芯片,其特征在于,所述第一向量寄存器堆包含多个向量寄存器,每一个向量寄存器用于存储至少一个所述第一圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述第一圆柱体所包含的Cin个数据。
17.根据权利要求10所述的SOC芯片,其特征在于,所述第二向量寄存器堆包含编号连续的多个向量寄存器,每一个向量寄存器用于存储至少一个所述第二圆柱体所包含的Cin个数据,或者,多个向量寄存器用于存储一个所述二圆柱体所包含的Cin个数据。
18.根据权利要求10所述的SOC芯片,其特征在于,所述SOC芯片还包括指令调度单元,所述指令调度单元用于向所述张量引擎下发进行卷积计算所需的矩阵指令流。
19.一种电子设备,其特征在于,包括:
共享内存,用于存储卷积计算所需的输入特征图数据和卷积核;
和如权利要求14-18任一项所述SOC芯片,所述SOC芯片与所述共享内存连接。
20.一种电子设备,其特征在于,包括:
存储器和处理器,所述处理器与所述存储器连接;
所述存储器,用于存储程序;
所述处理器,用于调用存储于所述存储器中的程序,以执行如权利要求1-13中任一项所述的方法。
21.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如权利要求1-13中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211718228.5A CN116050474A (zh) | 2022-12-29 | 2022-12-29 | 一种卷积计算方法、soc芯片、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211718228.5A CN116050474A (zh) | 2022-12-29 | 2022-12-29 | 一种卷积计算方法、soc芯片、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116050474A true CN116050474A (zh) | 2023-05-02 |
Family
ID=86130686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211718228.5A Pending CN116050474A (zh) | 2022-12-29 | 2022-12-29 | 一种卷积计算方法、soc芯片、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116050474A (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018120740A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳光启合众科技有限公司 | 图片分类方法和装置、机器人 |
WO2020258528A1 (zh) * | 2019-06-25 | 2020-12-30 | 东南大学 | 一种可配置的通用卷积神经网络加速器 |
CN113240047A (zh) * | 2021-06-02 | 2021-08-10 | 西安电子科技大学 | 基于部件解析多尺度卷积神经网络的sar目标识别方法 |
CN113313252A (zh) * | 2021-05-24 | 2021-08-27 | 东南大学 | 一种基于脉动阵列的深度可分离卷积实现方法 |
CN113537482A (zh) * | 2021-09-14 | 2021-10-22 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
CN113537120A (zh) * | 2021-07-28 | 2021-10-22 | 中国人民解放军空军预警学院 | 基于复数坐标注意力模块的卷积神经网络及目标识别方法 |
CN113869498A (zh) * | 2021-10-13 | 2021-12-31 | 安徽芯纪元科技有限公司 | 一种卷积运算电路及其运算方法 |
US20220051433A1 (en) * | 2020-08-13 | 2022-02-17 | Industry-Academic Cooperation Foundation, Yonsei University | Apparatus for performing cylindrical convolutional neural network operation and apparatus and method for object recognition and viewpoint estimation using the same |
WO2022147969A1 (zh) * | 2021-01-08 | 2022-07-14 | 中国民航大学 | 基于深度学习的机场道面地下结构病害自动检测方法 |
KR20220142333A (ko) * | 2021-04-14 | 2022-10-21 | 주식회사 딥엑스 | 데이터 재사용이 가능한 신경 프로세싱 유닛 및 그 방법 |
WO2022252568A1 (zh) * | 2021-06-03 | 2022-12-08 | 沐曦集成电路(上海)有限公司 | 一种基于gpgpu可重构架构的方法、计算系统及重构架构的装置 |
-
2022
- 2022-12-29 CN CN202211718228.5A patent/CN116050474A/zh active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018120740A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳光启合众科技有限公司 | 图片分类方法和装置、机器人 |
WO2020258528A1 (zh) * | 2019-06-25 | 2020-12-30 | 东南大学 | 一种可配置的通用卷积神经网络加速器 |
US20220051433A1 (en) * | 2020-08-13 | 2022-02-17 | Industry-Academic Cooperation Foundation, Yonsei University | Apparatus for performing cylindrical convolutional neural network operation and apparatus and method for object recognition and viewpoint estimation using the same |
WO2022147969A1 (zh) * | 2021-01-08 | 2022-07-14 | 中国民航大学 | 基于深度学习的机场道面地下结构病害自动检测方法 |
KR20220142333A (ko) * | 2021-04-14 | 2022-10-21 | 주식회사 딥엑스 | 데이터 재사용이 가능한 신경 프로세싱 유닛 및 그 방법 |
CN113313252A (zh) * | 2021-05-24 | 2021-08-27 | 东南大学 | 一种基于脉动阵列的深度可分离卷积实现方法 |
CN113240047A (zh) * | 2021-06-02 | 2021-08-10 | 西安电子科技大学 | 基于部件解析多尺度卷积神经网络的sar目标识别方法 |
WO2022252568A1 (zh) * | 2021-06-03 | 2022-12-08 | 沐曦集成电路(上海)有限公司 | 一种基于gpgpu可重构架构的方法、计算系统及重构架构的装置 |
CN113537120A (zh) * | 2021-07-28 | 2021-10-22 | 中国人民解放军空军预警学院 | 基于复数坐标注意力模块的卷积神经网络及目标识别方法 |
CN113537482A (zh) * | 2021-09-14 | 2021-10-22 | 绍兴埃瓦科技有限公司 | 神经网络计算模块、方法和通信设备 |
CN113869498A (zh) * | 2021-10-13 | 2021-12-31 | 安徽芯纪元科技有限公司 | 一种卷积运算电路及其运算方法 |
Non-Patent Citations (6)
Title |
---|
FENG-MING JIN等: "Speckle Suppression Using Cylindrical Self-Diffraction for Cylindrical Phase-Only Hologram", 《 IEEE PHOTONICS JOURNAL》, 15 January 2021 (2021-01-15) * |
丁博;伊明;: "基于卷积神经网络的三维CAD模型分类", 哈尔滨理工大学学报, no. 01, 31 December 2020 (2020-12-31) * |
于挺;杨军;: "基于K近邻卷积神经网络的点云模型识别与分类", 激光与光电子学进展, no. 10, 25 May 2020 (2020-05-25) * |
张军阳;郭阳;: "二维矩阵卷积在向量处理器中的设计与实现", 国防科技大学学报, no. 03, 28 June 2018 (2018-06-28) * |
李炳剑;秦国轩;朱少杰;裴智慧;: "面向卷积神经网络的FPGA加速器架构设计", 计算机科学与探索, no. 03, 31 December 2020 (2020-12-31) * |
王斯瑶: "基于深度学习的未知物体抓取技术研究", 《硕士电子期刊出版信息》, 15 March 2022 (2022-03-15) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11449576B2 (en) | Convolution operation processing method and related product | |
CN112840356B (zh) | 运算加速器、处理方法及相关设备 | |
CN110659728B (zh) | 神经网络优化方法、装置、计算机设备及存储介质 | |
US20200202198A1 (en) | Neural network processor | |
CN111758107A (zh) | 用于基于硬件的池化的系统和方法 | |
CN107944545B (zh) | 应用于神经网络的计算方法及计算装置 | |
CN111656390B (zh) | 用于机器学习的图像变换 | |
US11763131B1 (en) | Systems and methods for reducing power consumption of convolution operations for artificial neural networks | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
CN110399591B (zh) | 基于卷积神经网络的数据处理方法和装置 | |
CN114722994A (zh) | 在硬件中实现全连接神经网络层 | |
WO2023065983A1 (zh) | 计算装置、神经网络处理设备、芯片及处理数据的方法 | |
US11748100B2 (en) | Processing in memory methods for convolutional operations | |
CN112966729A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
KR20210014561A (ko) | 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체 | |
CN116050474A (zh) | 一种卷积计算方法、soc芯片、电子设备及存储介质 | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
US11687831B1 (en) | Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference | |
CN114692854A (zh) | 用于生成人工神经网络模型的内核的npu及其方法 | |
CN115114575B (zh) | 面向向量处理器的图像到矩阵行转换方法、装置及介质 | |
CN111047024A (zh) | 一种计算装置及相关产品 | |
CN111198714B (zh) | 重训练方法及相关产品 | |
CN118052283A (zh) | 一种二进制神经网络的简化推理方法、系统、介质及设备 | |
Kiran et al. | Accelerating Finite Element Assembly on a GPU | |
GB2602494A (en) | Implementing fully-connected neural-network layers in hardware |
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 |