掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法、装置及相关产品

文献发布时间:2023-06-19 10:54:12


数据处理方法、装置及相关产品

技术领域

本公开涉及数据处理技术领域,尤其涉及一种数据处理方法、装置及相关产品。

背景技术

在人工智能技术领域,神经网络算法是最近非常流行的一种机器学习算法,在各种领域中都取得了非常好的效果,比如图像识别,语音识别,自然语言处理等。随着神经网络算法的发展,算法的复杂度也越来越高,为了提高识别度,模型的规模也在逐渐增大。用GPU和CPU处理起这些大规模的模型,要花费大量的计算时间,并且耗电量很大。

发明内容

基于此,有必要针对上述技术问题,提供一种能够减小计算量、节约计算时间、节能的数据处理方法、装置及相关产品。

根据本公开的第一方面,提供了一种数据处理方法,包括:将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核;根据所述多个子卷积核在所述卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据;针对任一子卷积核,将所述子卷积核与对应的目标子输入数据执行winograd卷积操作,得到所述子卷积核对应的卷积结果;对所述多个子卷积核对应的卷积结果执行求和操作,得到所述卷积核与所述输入数据的卷积结果。

根据本公开的第二方面,提供了一种数据处理装置,包括:卷积核拆分模块,用于将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核;输入数据拆分模块,用于根据所述多个子卷积核在所述卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据;卷积模块,用于针对任一子卷积核,将所述子卷积核与对应的目标子输入数据执行winograd卷积操作,得到所述子卷积核对应的卷积结果;求和模块,用于对所述多个子卷积核对应的卷积结果执行求和操作,得到所述卷积核与所述输入数据的卷积结果。

根据本公开的第三方面,提供了一种人工智能芯片,所述芯片包括上述第二方面所述的数据处理装置。

根据本公开的第四方面,提供了一种电子设备,所述电子设备包括上述第三方面所述的人工智能芯片。

根据本公开的第五方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为执行上述第一方面所述的数据处理方法方法。

根据本公开的第六方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述第一方面所述的数据处理方法。

通过将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核,以及根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,每个子卷积核对应一个或多个目标子输入数据,进而针对任一子卷积核,将该子卷积核与对应的目标子输入数据执行winograd卷积操作,得到该子卷积核对应的卷积结果,使得对多个子卷积核对应的卷积结果执行求和操作,得到卷积核与输入数据的卷积结果。将卷积核拆分为尺寸小于等于3*3以及将输入数据拆分为尺寸小于等于4*4,由于尺寸小于等于3*3的卷积核以及尺寸小于等于4*4的输入数据对应的变换矩阵中没有小数,使得winograd卷积操作时无需进行乘法运算,只需通过移位和求和运算即可得到卷积结果,从而可以减小计算量、节约计算时间、减少能耗。

根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。

图1示出根据本公开实施例的数据处理方法的处理器的示意图;

图2示出本公开一实施例的数据处理方法的流程示意图;

图3示出本公开一实施例的将5*5卷积核拆分为多个子卷积核的示意图;

图4示出本公开一实施例的基于图3所示对5*5卷积核拆分方式将8*8输入数据拆分为多个第一子输入数据的示意图;

图5示出本公开一实施例的基于图4所示每个子卷积核对应的第一子输入数据得到的每个子卷积核对应的尺寸小于等于4*4的多个目标子输入数据的示意图;

图6示出本公开一实施例的数据处理装置的结构示意图;

图7示出本公开一实施例的板卡的结构框图。

具体实施方式

下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

应当理解,本公开的权利要求、说明书及附图中的术语“第一”、“第二”、和“第三”等是用于区别不同对象,而不是用于描述特定顺序。本公开的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本公开说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本公开。如在本公开说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本公开说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。

根据本公开实施例的数据处理方法可应用于处理器中,该处理器可以是通用处理器,例如CPU(Central Processing Unit,中央处理器),也可以是用于执行人工智能运算的人工智能处理器(IPU)。人工智能运算可包括机器学习运算,类脑运算等。其中,机器学习运算包括神经网络运算、k-means运算、支持向量机运算等。该人工智能处理器可例如包括GPU(Graphics Processing Unit,图形处理单元)、NPU(Neural-Network Processing Unit,神经网络处理单元)、DSP(Digital Signal Process,数字信号处理单元)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)芯片中的一种或组合。本公开对处理器的具体类型不作限制。

在一种可能的实现方式中,本公开中所提及的处理器可包括多个处理单元,每个处理单元可以独立运行所分配到的各种任务,如:卷积运算任务、池化任务或全连接任务等。本公开对处理单元及处理单元所运行的任务不作限制。

图1示出根据本公开实施例的数据处理方法的处理器的示意图。如图1所示,处理器100包括多个处理单元101以及存储单元102,多个处理单元101用于执行指令序列,存储单元102用于存储数据,可包括随机存储器(RAM,Random Access Memory)和寄存器堆。处理器100中的多个处理单元101既可共用部分存储空间,例如共用部分RAM存储空间和寄存器堆,又可同时拥有各自的存储空间。

winograd卷积是一种基于多项式插值算法的卷积加速实现方式。它通过对卷积操作的两个输入:输入数据(神经元)、卷积核(权值)进行一定规模拆分后分别进行线性变换(winograd正变换),再将变换后的输入数据和卷积核进行对位乘法,最后对对位乘法结果再次进行线性变换(winograd逆变换)得到与原卷积操作等价的卷积结果。输入数据可以是图像数据、声音数据或者视频数据等。以输入数据是图像数据为例,输入数据可以表示为NHWC(batch height width channels)的形式,其中,N可以表示图像的数量,HW可以分别表示在高度和宽度方向的像素个数,C可以表示通道数,例如,C可以表示RGB(Red GreenBlue)三个通道,需要说明的是,以上表示方式仅仅是本公开的一个示例,本公开不限于此。

winograd变换的表达式如下所示:

对于一维的输入数据和卷积核:S=A

对于二维的输入数据和卷积核:S=A

其中,g表示卷积核,G表示卷积核对应的左乘正变换矩阵,G

通过winograd卷积替代原始卷积操作能够带来硬件能效比和运算时间上的较大收益,同时也可以在不增加、或者增加较少的硬件开销的情况下实现更高的神经网络性能。但是,winograd卷积中,对于不同大小的卷积核以及不同大小的输入数据,需要不同大小的变换矩阵,当卷积核较大和/或输入数据较大时,变换矩阵中会存在小数,导致大量的乘法运算在计算过程中仍然消耗较长的运算时间,且会降低winograd卷积结果的精度。

为了解决上述技术问题,本公开提供了一种数据处理算法,通过将卷积核拆分为尺寸小于等于3*3,以及将输入数据拆分为尺寸小于等于4*4,由于尺寸小于等于3*3的卷积核以及尺寸小于等于4*4的输入数据对应的变换矩阵中没有小数,使得winograd卷积操作时无需进行乘法运算,只需通过移位和求和运算即可得到卷积结果,从而可以减小计算量、节约计算时间、减少能耗,以及提高卷积结果的精度。

图2示出本公开一实施例的数据处理方法的流程示意图。如图2所示,该方法包括:

在步骤S201中:将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核。

在步骤S202中:根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据。

在步骤S203中:针对任一子卷积核,将该子卷积核与对应的目标子输入数据执行winograd卷积操作,得到该子卷积核对应的卷积结果。

在步骤S204中:对多个子卷积核对应的卷积结果执行求和操作,得到卷积核与输入数据的卷积结果。

实际应用中,尺寸小于等于3*3的卷积核以及尺寸小于等于4*4的输入数据对应的变换矩阵中没有小数,根据本公开的数据处理方法,通过将卷积核拆分为尺寸小于等于3*3,以及将输入数据拆分为尺寸小于等于4*4,使得winograd卷积操作时无需进行乘法运算,只需通过移位和求和运算即可得到卷积结果,从而可以减小计算量、节约计算时间、减少能耗,以及提高卷积结果的精度。

在一种可能的实现方式中,将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核,包括:将卷积核划分为尺寸小于等于3*3、且互相不重合的多个部分,每一部分确定为一个子卷积核。

图3示出本公开一实施例的将5*5卷积核拆分为多个子卷积核的示意图。如图3所示,将5*5卷积核拆分为四个子卷积核:3*3子卷积核、3*2子卷积核、2*3子卷积核和2*2子卷积核。

基于对卷积核的拆分,同样对输入数据进行拆分,得到每个子卷积核对应的一个或多个目标子输入数据。

在一种可能的实现方式中,根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,包括:根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为多个第一子输入数据,其中,任一子卷积核存在唯一对应的第一子输入数据;针对任一子卷积核,若该子卷积核对应的第一子输入数据的尺寸大于4*4,将尺寸大于4*4的第一子输入数据拆分为尺寸小于等于4*4的多个第二子输入数据;将尺寸小于等于4*4的多个第二子输入数据确定为该子卷积核对应的目标子输入数据。

在一种可能的实现方式中,该方法还包括:针对任一子卷积核,若该子卷积核对应的第一子输入数据的尺寸小于等于4*4,将该第一子输入数据确定为该子卷积核对应的目标子输入数据。

在一种可能的实现方式中,针对任一子卷积核,该子卷积核与对应的第一子输入数据的对应关系为:该子卷积核中的第一个元素在卷积核中的位置,与对应的第一子输入数据中的第一个元素在输入数据中的位置相同;第一子输入数据由卷积核遍历输入数据中所有元素时该子卷积核能够遍历到的元素共同构成。

仍以上述图3为例,根据图3所示的对5*5卷积核的拆分方式,对8*8输入数据进行拆分。图4示出本公开一实施例的基于图3所示对5*5卷积核拆分方式将8*8输入数据拆分为多个第一子输入数据的示意图。

如所示,由于3*3子卷积核中的第一个元素位于卷积核中的第1行第1列,则与3*3子卷积核对应的第一子输入数据中的第一个元素位于输入数据中的第1行第1列,且该第一子输入数据中包括的元素由5*5卷积核遍历8*8输入数据中所有元素时3*3子卷积核能够遍历到的元素共同构成,即,3*3子卷积核对应的第一子输入数据为由输入数据中第1-6行、第1-6列中的元素构成的6*6第一子输入数据;

由于3*2子卷积核中的第一个元素位于卷积核中的第1行第4列,则与3*2子卷积核对应的第一子输入数据中的第一个元素位于输入数据中的第1行第4列,且该第一子输入数据中包括的元素由5*5卷积核遍历8*8输入数据中所有元素时2*3子卷积核能够遍历到的元素共同构成,即,2*3子卷积核对应的第一子输入数据为由输入数据中第1-6行、第4-8列中的元素构成的6*5第一子输入数据;

由于2*3子卷积核中的第一个元素位于卷积核中的第4行第1列,则与2*3子卷积核对应的第一子输入数据中的第一个元素位于输入数据中的第4行第1列,且该第一子输入数据中包括的元素由5*5卷积核遍历8*8输入数据中所有元素时3*2子卷积核能够遍历到的元素共同构成,即,3*2子卷积核对应的第一子输入数据为由输入数据中第4-8行、第1-6列中的元素构成的5*6第一子输入数据;

由于2*2子卷积核中的第一个元素位于卷积核中的第4行第4列,则与2*2子卷积核对应的第一子输入数据中的第一个元素位于输入数据中的第4行第4列,且该第一子输入数据中包括的元素由5*5卷积核遍历8*8输入数据中所有元素时2*3子卷积核能够遍历到的元素共同构成,即,2*3子卷积核对应的第一子输入数据为由输入数据中第4-8行、第4-8列中的元素构成的5*5第一子输入数据。

在确定每个子卷积核唯一对应的第一子输入数据之后,根据每个子卷积核对应的第一子输入数据,进一步确定每个子卷积核对应的尺寸小于等于4*4的一个或多个目标子输入数据。当每个子卷积核对应的第一子输入数据的尺寸大于4*4时,通过对第一子输入数据进行拆分得到尺寸小于等于4*4的多个目标子输入数据。

对尺寸大于4*4的第一子输入数据的拆分原则为:子卷积核与拆分后得到的多个小于等于4*4的目标子输入数据的卷积结果,与子卷积核与拆分前的大于4*4的第一子输入数据的卷积结果相同,具体拆分方式可以包括多种,本公开对此不做具体限定。

仍以上述图4为例,根据图4所示的每个子卷积核唯一对应的第一子输入数据,确定每个子卷积核对应的尺寸小于等于4*4的一个或多个目标子输入数据。图5示出本公开一实施例的基于图4所示每个子卷积核对应的第一子输入数据得到的每个子卷积核对应的尺寸小于等于4*4的多个目标子输入数据的示意图。

如图4所示,3*3子卷积核对应的第一子输入数据的尺寸为6*6,大于,4*4,对6*6第一子输入数据进行拆分,得到图5所示的3*3子卷积核对应的4个4*4目标子输入数据:6*6第一子输入数据中第1-4行、第1-4列中的元素构成的4*4目标子输入数据、6*6第一子输入数据中第1-4行、第3-6列中的元素构成的4*4目标子输入数据、6*6第一子输入数据中第3-6行、第1-4列中的元素构成的4*4目标子输入数据,以及6*6第一子输入数据中第3-6行、第3-6列中的元素构成的4*4目标子输入数据。

如图4所示,3*2子卷积核对应的第一子输入数据的尺寸为6*5,大于4*4,对6*5第一子输入数据进行拆分,得到图5所示的3*2子卷积核对应的4个目标子输入数据:6*5第一子输入数据中第1-4行、第1-3列中的元素构成的4*3目标子输入数据、6*5第一子输入数据中第1-4行、第3-5列中的元素构成的4*3目标子输入数据、6*5第一子输入数据中第3-6行、第1-3列中的元素构成的4*3目标子输入数据,以及6*5第一子输入数据中第3-6行、第3-5列中的元素构成的4*3目标子输入数据。

如图4所示,2*3子卷积核对应的第一子输入数据的尺寸为5*6,大于4*4,对5*6第一子输入数据进行拆分,得到图5所示的2*3子卷积核对应的4个目标子输入数据:5*6第一子输入数据中第1-3行、第1-4列中的元素构成的3*4目标子输入数据、5*6第一子输入数据中第1-3行、第3-6列中的元素构成的3*4目标子输入数据、5*6第一子输入数据中第3-5行、第1-4列中的元素构成的3*4目标子输入数据,以及5*6第一子输入数据中第3-5行、第3-6列中的元素构成的3*4目标子输入数据。

如图4所示,2*2子卷积核对应的第一子输入数据的尺寸为5*5,大于4*4,对5*5第一子输入数据进行拆分,得到图5所示的2*2子卷积核对应的4个目标子输入数据:5*5第一子输入数据中第1-3行、第1-3列中的元素构成的3*3目标子输入数据、5*5第一子输入数据中第1-3行、第3-5列中的元素构成的3*3目标子输入数据、5*5第一子输入数据中第3-5行、第1-3列中的元素构成的3*3目标子输入数据,以及5*5第一子输入数据中第3-5行、第3-5列中的元素构成的3*3目标子输入数据。

图5仅示出了对尺寸大于4*4的第一子输入数据拆分为尺寸小于等于4*4的多个目标子输入数据的一种拆分示例,并不构成对拆分方式的限定,只要满足上述对尺寸大于4*4的第一子输入数据的拆分原则,还可以有其它拆分方式,本公开对此不做具体限定。

将卷积核拆分为尺寸小于等于3*3的多个子卷积核,以及将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据之后:针对任一子卷积核,将该子卷积核与对应的一个或多个目标子输入数据执行winograd卷积操作,得到该子卷积核对应的卷积结果;进而对多个子卷积核对应的卷积结果执行求和操作,得到卷积核与输入数据的卷积结果。

下面详细描述通过移位和求和运算实现尺寸小于等于3*3的子卷积核和对应的尺寸小于等于4*4的目标子输入数据的winograd卷积操作。

在一种可能的实现方式中,针对任一子卷积核,将子卷积核与对应的目标子输入数据执行winograd卷积操作,得到子卷积核对应的卷积结果,包括:将目标子输入数据的winograd正变换拆解为求和运算,进行计算得到目标子输入数据的winograd正变换结果;将子卷积核的winograd正变换拆解为求和运算,进行计算得到子卷积核的winograd正变换结果;执行目标子输入数据的winograd正变换结果与子卷积核的winograd正变换结果的对位乘操作,得到对位乘结果;将对位乘结果的winograd逆变换拆解为求和运算,进行计算得到子卷积核对应的卷积结果。

在一种可能的实现方式中,将目标子输入数据的winograd正变换拆解为求和运算,进行计算得到目标子输入数据的winograd正变换结果,包括:将目标子输入数据拆解为多个第一子张量,对多个第一子张量进行winograd正变换并求和得到目标子输入数据的winograd正变换结果;其中,多个第一子张量的个数与目标子输入数据中非0元素的个数相同,多个第一子张量中的每个第一子张量中有一个元素与目标子输入数据中的对应位置的元素相同、其它元素均为0。

例如,4*4目标子输入数据d

当目标子输入数据d

每个第一子张量中有一个元素与目标子输入数据中的对应位置的元素相同、其他元素均为0是指:以第一子张量d

需要说明的是,以上拆解方式仅仅是本公开的一些示例,不以任何方式限制本公开,例如,当目标子输入数据中具有值为0的元素时,拆解得到的第一子张量的数量与目标子数据数据中非0元素的个数相同,即,拆解得到的第一子张量的数量少于目标子输入数据中的元素个数。

在一种可能的实现方式中,对多个第一子张量进行winograd正变换并求和得到目标子输入数据的winograd正变换结果,包括:获取第一子张量对应的第一元子张量的winograd正变换结果;其中,第一子张量对应的第一元子张量为:在第一元子张量中第一位置的元素的值为1,其中,第一位置在第一元子张量中所处的位置与第一子张量中的非0元素所处的位置相同;将第一子张量中的非0元素值作为系数乘以对应的第一元子张量的winograd正变换结果,得到第一子张量的winograd正变换结果;将多个第一子张量的winograd正变换结果相加得到目标子输入数据的winograd正变换结果。

以上述第一子张量d

在一种可能的实现方式中,第一子张量对应的第一元子张量的winograd正变换结果是通过以下过程预先得到的:对于每一个第一子张量,将该第一子张量对应的第一元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第一元子张量的winograd正变换结果。

对于不同尺寸的目标子输入数据,其对应的正变换左乘矩阵和正变换右乘矩阵也是确定的。例如,对于尺寸为4*4的目标子输入数据,其对应的正变换左乘矩阵为

因此,可以预先计算出第一元子张量的winograd正变换结果。例如,以上述第一子张量d

例如,以上述第一子张量d

由于拆分得到的目标子输入数据的尺寸小于等于4*4,根据上述不同尺寸的目标子输入数据对应的正变换左乘矩阵和正变换右乘矩阵可知,当目标子输入数据的尺寸小于等于4*4时,其对应的正变换左乘矩阵和正变换右乘矩阵中的元素值为0、±1,第一元子张量的元素值为0、1,第一元子张量的winograd正变换结果中的元素为0、±1。因此,可以将目标子输入数据的矩阵乘操作拆解为加法操作。

计算第一元子张量的winograd正变换结果的过程涉及较多的乘法运算,通过本公开的方式,可以预先计算好各种尺寸的第一元子张量的winograd正变换结果进行保存,使得在实际的运算过程中可以直接获取,而不需要重复运算,从而缩短计算时间、节约计算资源。

在获得第一子张量对应的第一元子张量的winograd正变换结果后,可以将第一子张量的非0元素值乘以对应的第一元子张量的winograd正变换结果,就可以得到第一子张量的winograd正变换结果。

例如,以上述第一子张量d

通过以上过程计算得到所有第一子张量的winograd正变换结果,将多个第一子张量的winograd正变换结果相加,即可得到目标子输入数据的winograd正变换结果。

在一种可能的实现方式中,将子卷积核的winograd正变换拆解为求和运算,进行计算得到子卷积核的winograd正变换结果,包括:将子卷积核拆解为多个第二子张量,对多个第二子张量进行winograd正变换并求和得到子卷积核的winograd正变换结果;其中,多个第二子张量的个数与子卷积核中非0元素的个数相同,多个第二子张量中的每个第二子张量中有一个元素与子卷积核中的对应位置的元素相同、其它元素均为0。

例如,3*3子卷积核g

当子卷积核g

每个第二子张量中有一个元素与子卷积核中的对应位置的元素相同、其它元素均为0是指:以第二子张量g

需要说明的是,以上拆解方式仅仅是本公开的一些示例,不以任何方式限制本公开,例如,当子卷积核中具有值为0的元素时,拆解得到的第二子张量的数量与子卷积核中非0元素的个数相同,即,拆解得到的第二子张量的数量少于子卷积核中的元素个数。

在一种可能的实现方式中,对多个第二子张量进行winograd正变换并求和得到子卷积的winograd正变换结果,包括:获取第二子张量对应的第二元子张量的winograd正变换结果;其中,第二子张量对应的第二元子张量为:在第二元子张量中第二位置的元素的值为1,其中,第二位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;将第二子张量中的非0元素值作为系数乘以对应的第二元子张量的winograd正变换结果,得到第二子张量的winograd正变换结果;将多个第二子张量的winograd正变换结果相加得到子卷积核的winograd正变换结果。

以上述第二子张量g

在一种可能的实现方式中,第二子张量对应的第二元子张量的winograd正变换结果是通过以下过程预先得到的:对于每一个第二子张量,将该第二子张量对应的第二元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第二元子张量的winograd正变换结果。

对于不同尺寸的子卷积核,其对应的正变换左乘矩阵和正变换右乘矩阵也是确定的。例如,对于尺寸为3*3的子卷积核,其对应的正变换左乘矩阵为

因此,可以预先计算出第二元子张量的winograd正变换结果。例如,以上述第二子张量g

由于拆分得到的子卷积核的尺寸小于等于3*3,根据上述不同尺寸的子卷积核对应的正变换左乘矩阵和正变换右乘矩阵可知,当子卷积核的尺寸小于等于3*3时,其对应的正变换左乘矩阵和正变换右乘矩阵中的元素值为0、±1,第二元子张量的元素值为0、1,第二元子张量的winograd正变换结果中的元素为0、±1。因此,可以将子卷积核的矩阵乘操作拆解为加法操作。

计算第二元子张量的winograd正变换结果的过程涉及较多的乘法运算,通过本公开的方式,可以预先计算好各种尺寸的第二元子张量的winograd正变换结果进行保存,使得在实际的运算过程中可以直接获取,而不需要重复运算,从而缩短计算时间、节约计算资源。

在获得第二子张量对应的第二元子张量的winograd正变换结果后,可以将第二子张量的非0元素值乘以对应的第二元子张量的winograd正变换结果,就可以得到第二子张量的winograd正变换结果。

例如,以上述第二子张量g

通过以上过程计算得到所有第二子张量的winograd正变换结果,将多个第二子张量的winograd正变换结果相加,即可得到子卷积核的winograd正变换结果。

执行目标子输入数据的winograd正变换结果与子卷积核的winograd正变换结果的对位乘操作,得到对位乘结果。其中,其中,对位乘可以是指对两个张量对应位置的数据相乘得到的数据作为对位乘结果中相应位置的值。

例如,目标子输入数据d

子卷积核g

那么对位乘结果G

在一种可能的实现方式中,将对位乘结果的winograd逆变换拆解为求和运算,进行计算得到子卷积核对应的卷积结果,包括:将对位乘结果拆解为多个第三子张量,对多个第三子张量进行winograd逆变换并求和,得到子卷积核对应的卷积结果;其中,多个第三子张量的个数与对位乘结果中非0元素的个数相同,多个第三子张量中的每个第三子张量中有一个元素与对位乘结果中的对应位置的元素相同、其它元素均为0。

以上述对位乘结果C

在一种可能的实现方式中,对多个第三子张量进行winograd逆变换并求和,得到子卷积核对应的卷积结果,包括:获取第三子张量对应的第三元子张量的winograd逆变换结果;其中,第三子张量对应的第三元子张量为:在第三元子张量中第三位置的元素的值为1,其中,第三位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;将第三子张量中的非0元素值作为系数乘以对应的第三元子张量的winograd逆变换结果,得到第三子张量的winograd逆变换结果;将多个第三子张量的winograd逆变换结果相加,得到子卷积核对应的卷积结果。

第三元子张量对应的第三元子张量的确定方式与上述第一元子张量的确定方式相同,这里不再赘述。

在一种可能的实现方式中,第三元子张量的winograd逆变换结果是通过以下过程预先得到的:对于每一个第三子张量,将该第三子张量对应的第三元子张量左边乘以逆变换左乘矩阵、右边乘以逆变换右乘矩阵得到第三元子张量的winograd逆变换结果。

对于不同尺寸的对位乘结果,其对应的逆变换左乘矩阵和逆变换右乘矩阵也是确定的,因此,可以预先计算出第三元子张量的winograd逆变换结果。

以上述对位乘结果C

由于拆分得到的目标子输入数据的尺寸小于等于4*4,拆分得到的子卷积核的尺寸小于等于3*3,使得目标子输入数据的winograd正变换结果与子卷积核的winograd正变换结果的对位乘结果的尺寸小于等于4*4,由于对位乘结果的尺寸小于等于4*4时,其对应的逆变换左乘矩阵和逆变换右乘矩阵中的元素值为0、±1/2、±1,第三元子张量的元素值为0、1,第三元子张量的winograd正变换结果中的元素为0、±1。因此,可以将对位乘结果的矩阵乘操作拆解为移位(针对于分数)和加法操作,具体拆解过程与上述对目标子输入数据的winograd正变换拆解为加法操作,以及上述对子卷积核的winograd正变换拆解为加法操作类似,这里不再赘述。

针对上述拆解求和过程,进行计算得到子卷积核与对应的目标子输入数据的卷积结果,进而得到每个子卷积核与唯一对应的第一子输入数据的卷积结果,将每个子卷积核与唯一对应的第一子输入数据的卷积结果进行求和,可以得到卷积核与输入数据的卷积结果。

通过将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核,以及根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,每个子卷积核对应一个或多个目标子输入数据,进而针对任一子卷积核,将该子卷积核与对应的目标子输入数据执行winograd卷积操作,得到该子卷积核对应的卷积结果,使得对多个子卷积核对应的卷积结果执行求和操作,得到卷积核与输入数据的卷积结果。将卷积核拆分为尺寸小于等于3*3以及将输入数据拆分为尺寸小于等于4*4,由于尺寸小于等于3*3的卷积核以及尺寸小于等于4*4的输入数据对应的变换矩阵中没有小数,使得winograd卷积操作时无需进行乘法运算,只需通过移位和求和运算即可得到卷积结果,从而可以减小计算量、节约计算时间、减少能耗。

图6示出本公开一实施例的数据处理装置的结构示意图。如图6所示,装置600包括:

卷积核拆分模块601,用于将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核;

输入数据拆分模块602,用于根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据;

卷积模块603,用于针对任一子卷积核,将子卷积核与对应的目标子输入数据执行winograd卷积操作,得到子卷积核对应的卷积结果;

求和模块604,用于对多个子卷积核对应的卷积结果执行求和操作,得到卷积核与输入数据的卷积结果。

在一种可能的实现方式中,卷积核拆分模块601具体用于:

将卷积核划分为尺寸小于等于3*3、且互相不重合的多个部分,每一部分确定为一个子卷积核。

在一种可能的实现方式中,输入数据拆分模块602包括:

第一拆分子模块,用于根据多个子卷积核在卷积核中的位置分布,将输入数据拆分为多个第一子输入数据,其中,任一子卷积核存在唯一对应的第一子输入数据;

第二拆分子模块,用于针对任一子卷积核,若子卷积核对应的第一子输入数据的尺寸大于4*4,将尺寸大于4*4的第一子输入数据拆分为尺寸小于等于4*4的多个第二子输入数据;

确定子模块,用于将尺寸小于等于4*4的多个第二子输入数据确定为子卷积核对应的目标子输入数据。

在一种可能的实现方式中,确定子模块,还用于针对任一子卷积核,若子卷积核对应的第一子输入数据的尺寸小于等于4*4,将第一子输入数据确定为子卷积核对应的目标子输入数据。

在一种可能的实现方式中,针对任一子卷积核,子卷积核与对应的第一子输入数据的对应关系为:

子卷积核中的第一个元素在卷积核中的位置,与对应的第一子输入数据中的第一个元素在输入数据中的位置相同;

第一子输入数据由卷积核遍历输入数据中所有元素时子卷积核能够遍历到的元素共同构成。

在一种可能的实现方式中,卷积模块603包括:

第一拆解子模块,用于将目标子输入数据的winograd正变换拆解为求和运算,进行计算得到目标子输入数据的winograd正变换结果;

第二拆解子模块,用于将子卷积核的winograd正变换拆解为求和运算,进行计算得到子卷积核的winograd正变换结果;

对位乘子模块,用于执行目标子输入数据的winograd正变换结果与子卷积核的winograd正变换结果的对位乘操作,得到对位乘结果;

求和子模块,用于将对位乘结果的winograd逆变换拆解为求和运算,进行计算得到子卷积核对应的卷积结果。

在一种可能的实现方式中,第一拆解子模块,包括:

第一拆解单元,用于将目标子输入数据拆解为多个第一子张量,对多个第一子张量进行winograd正变换并求和得到目标子输入数据的winograd正变换结果;

其中,多个第一子张量的个数与目标子输入数据中非0元素的个数相同,多个第一子张量中的每个第一子张量中有一个元素与目标子输入数据中的对应位置的元素相同、其它元素均为0。

在一种可能的实现方式中,第一拆解单元具体用于:

获取第一子张量对应的第一元子张量的winograd正变换结果;其中,第一子张量对应的第一元子张量为:在第一元子张量中第一位置的元素的值为1,其中,第一位置在第一元子张量中所处的位置与第一子张量中的非0元素所处的位置相同;

将第一子张量中的非0元素值作为系数乘以对应的第一元子张量的winograd正变换结果,得到第一子张量的winograd正变换结果;

将多个第一子张量的winograd正变换结果相加得到目标子输入数据的winograd正变换结果。

在一种可能的实现方式中,装置600还包括:

第一预处理模块,用于通过以下过程预先得到第一子张量对应的第一元子张量的winograd正变换结果:

对于每一个第一子张量,将该第一子张量对应的第一元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第一元子张量的winograd正变换结果。

在一种可能的实现方式中,第二拆子解模块,包括:

第二拆解单元,用于将子卷积核拆解为多个第二子张量,对多个第二子张量进行winograd正变换并求和得到子卷积核的winograd正变换结果;

其中,多个第二子张量的个数与子卷积核中非0元素的个数相同,多个第二子张量中的每个第二子张量中有一个元素与子卷积核中的对应位置的元素相同、其它元素均为0。

在一种可能的实现方式中,第二拆解单元具体用于:

获取第二子张量对应的第二元子张量的winograd正变换结果;其中,第二子张量对应的第二元子张量为:在第二元子张量中第二位置的元素的值为1,其中,第二位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第二子张量中的非0元素值作为系数乘以对应的第二元子张量的winograd正变换结果,得到第二子张量的winograd正变换结果;

将多个第二子张量的winograd正变换结果相加得到子卷积核的winograd正变换结果。

在一种可能的实现方式中,装置600还包括:

第二预处理模块,用于通过以下过程预先得到第二子张量对应的第二元子张量的winograd正变换结果:

对于每一个第二子张量,将该第二子张量对应的第二元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第二元子张量的winograd正变换结果。

在一种可能的实现方式中,求和子模块,包括:

第三拆解单元,用于将对位乘结果拆解为多个第三子张量,对多个第三子张量进行winograd逆变换并求和,得到子卷积核对应的卷积结果;

其中,多个第三子张量的个数与对位乘结果中非0元素的个数相同,多个第三子张量中的每个第三子张量中有一个元素与对位乘结果中的对应位置的元素相同、其它元素均为0。

在一种可能的实现方式中,第三拆解单元具体用于:

获取第三子张量对应的第三元子张量的winograd逆变换结果;其中,第三子张量对应的第三元子张量为:在第三元子张量中第三位置的元素的值为1,其中,第三位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第三子张量中的非0元素值作为系数乘以对应的第三元子张量的winograd逆变换结果,得到第三子张量的winograd逆变换结果;

将多个第三子张量的winograd逆变换结果相加,得到子卷积核对应的卷积结果。

在一种可能的实现方式中,装置600还包括:

第三预处理模块,用于通过以下过程预先得到第三元子张量的winograd逆变换结果:

对于每一个第三子张量,将该第三子张量对应的第三元子张量左边乘以逆变换左乘矩阵、右边乘以逆变换右乘矩阵得到第三元子张量的winograd逆变换结果。

本公开提供的数据处理装置60能够实现图2所示方法实施例中的各个步骤,并实现相同的技术效果,为避免重复,这里不再赘述。

应该理解,上述的装置实施例仅是示意性的,本公开的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。

另外,若无特别说明,在本公开各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。

所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(ResistiveRandom Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。

所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

在一种可能的实现方式中,还公开了一种人工智能芯片,其包括了上述数据处理装置。

在一种可能的实现方式中,还公开了一种板卡,其包括存储器件、接口装置和控制器件以及人工智能芯片;其中,人工智能芯片与存储器件、控制器件以及接口装置分别连接;存储器件,用于存储数据;接口装置,用于实现人工智能芯片与外部设备之间的数据传输;控制器件,用于对人工智能芯片的状态进行监控。

图7示出本公开一实施例的板卡的结构框图。如图7所示,板卡除了包括人工智能芯片71以外,还可以包括其它的配套部件,该配套部件包括但不限于:存储器件72、接口装置73和控制器件74;

存储器件72与人工智能芯片71通过总线连接,用于存储数据。存储器件72可以包括多组存储单元721。每一组存储单元721与人工智能芯片72通过总线连接。可以理解,每一组存储单元721可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。

DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,存储器件72可以包括4组存储单元721。每一组存储单元721可以包括多个DDR4颗粒(芯片)。在一个实施例中,人工智能芯片71内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。可以理解,当每一组存储单元721中采用DDR4-3200颗粒时,数据传输的理论带宽可达到25600MB/s。

在一个实施例中,每一组存储单元721包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在人工智能芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。

所述接口装置与所述人工智能芯片电连接。所述接口装置用于实现所述人工智能芯片71与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,接口装置73可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。优选的,当采用PCIE 3.0X 16接口传输时,理论带宽可达到16000MB/s。在另一个实施例中,接口装置73还可以是其它的接口,本公开并不限制上述其它的接口的具体表现形式,接口单元721能够实现转接功能即可。另外,人工智能芯片71的计算结果仍由接口装置73传送回外部设备(例如服务器)。

控制器件74与人工智能芯片71电连接。控制器件74用于对人工智能芯片71的状态进行监控。具体的,人工智能芯片71与控制器件74可以通过SPI接口电连接。控制器件74可以包括单片机(Micro Controller Unit,MCU)。如人工智能芯片71可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,人工智能芯片71可以处于多负载和轻负载等不同的工作状态。通过控制装置74可以实现对人工智能芯片71中多个处理芯片、多个处理和或多个处理电路的工作状态的调控。

在一种可能的实现方式中,公开了一种电子设备,其包括了上述人工智能芯片。电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。交通工具包括飞机、轮船和/或车辆;家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;医疗设备包括核磁共振仪、B超仪和/或心电图仪。

本公开实施例还提出一种计算机可读存储介质,其上存储有计算机程序指令,计算机程序指令被处理器执行时实现上述方法。计算机可读存储介质可以是非易失性计算机可读存储介质。

本公开实施例还提出一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为调用存储器存储的指令,以执行上述方法。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

依据以下条款可更好地理解前述内容:

条款A1,一种数据处理方法,包括:

将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核;

根据所述多个子卷积核在所述卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据;

针对任一子卷积核,将所述子卷积核与对应的目标子输入数据执行winograd卷积操作,得到所述子卷积核对应的卷积结果;

对所述多个子卷积核对应的卷积结果执行求和操作,得到所述卷积核与所述输入数据的卷积结果。

条款A2,根据条款A1所述的方法,所述将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核,包括:

将所述卷积核划分为尺寸小于等于3*3、且互相不重合的多个部分,每一部分确定为一个子卷积核。

条款A3,根据条款A1所述的方法,所述根据所述多个子卷积核在所述卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,包括:

根据所述多个子卷积核在所述卷积核中的位置分布,将所述输入数据拆分为多个第一子输入数据,其中,任一子卷积核存在唯一对应的第一子输入数据;

针对任一子卷积核,若所述子卷积核对应的第一子输入数据的尺寸大于4*4,将尺寸大于4*4的所述第一子输入数据拆分为尺寸小于等于4*4的多个第二子输入数据;

将尺寸小于等于4*4的所述多个第二子输入数据确定为所述子卷积核对应的目标子输入数据。

条款A4,根据条款A3所述的方法,所述方法还包括:

针对任一子卷积核,若所述子卷积核对应的第一子输入数据的尺寸小于等于4*4,将所述第一子输入数据确定为所述子卷积核对应的目标子输入数据。

条款A5,根据条款A3所述的方法,针对任一子卷积核,所述子卷积核与对应的第一子输入数据的对应关系为:

所述子卷积核中的第一个元素在所述卷积核中的位置,与对应的所述第一子输入数据中的第一个元素在所述输入数据中的位置相同;

所述第一子输入数据由所述卷积核遍历所述输入数据中所有元素时所述子卷积核能够遍历到的元素共同构成。

条款A6,根据条款A1-A5任一项所述的方法,所述针对任一子卷积核,将所述子卷积核与对应的目标子输入数据执行winograd卷积操作,得到所述子卷积核对应的卷积结果,包括:

将所述目标子输入数据的winograd正变换拆解为求和运算,进行计算得到所述目标子输入数据的winograd正变换结果;

将所述子卷积核的winograd正变换拆解为求和运算,进行计算得到所述子卷积核的winograd正变换结果;

执行所述目标子输入数据的winograd正变换结果与所述子卷积核的winograd正变换结果的对位乘操作,得到对位乘结果;

将所述对位乘结果的winograd逆变换拆解为求和运算,进行计算得到所述子卷积核对应的卷积结果。

条款A7,根据条款A6所述的方法,所述将所述目标子输入数据的winograd正变换拆解为求和运算,进行计算得到所述目标子输入数据的winograd正变换结果,包括:

将所述目标子输入数据拆解为多个第一子张量,对所述多个第一子张量进行winograd正变换并求和得到所述目标子输入数据的winograd正变换结果;

其中,所述多个第一子张量的个数与所述目标子输入数据中非0元素的个数相同,所述多个第一子张量中的每个第一子张量中有一个元素与所述目标子输入数据中的对应位置的元素相同、其它元素均为0。

条款A8,根据条款A7所述的方法,所述对所述多个第一子张量进行winograd正变换并求和得到所述目标子输入数据的winograd正变换结果,包括:

获取第一子张量对应的第一元子张量的winograd正变换结果;其中,第一子张量对应的第一元子张量为:在第一元子张量中第一位置的元素的值为1,其中,第一位置在第一元子张量中所处的位置与第一子张量中的非0元素所处的位置相同;

将第一子张量中的非0元素值作为系数乘以对应的第一元子张量的winograd正变换结果,得到第一子张量的winograd正变换结果;

将多个第一子张量的winograd正变换结果相加得到所述目标子输入数据的winograd正变换结果。

条款A9,根据条款A8所述的方法,第一子张量对应的第一元子张量的winograd正变换结果是通过以下过程预先得到的:

对于每一个第一子张量,将该第一子张量对应的第一元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第一元子张量的winograd正变换结果。

条款A10,根据条款A6所述的方法,所述将所述子卷积核的winograd正变换拆解为求和运算,进行计算得到所述子卷积核的winograd正变换结果,包括:

将所述子卷积核拆解为多个第二子张量,对所述多个第二子张量进行winograd正变换并求和得到所述子卷积核的winograd正变换结果;

其中,所述多个第二子张量的个数与所述子卷积核中非0元素的个数相同,所述多个第二子张量中的每个第二子张量中有一个元素与所述子卷积核中的对应位置的元素相同、其它元素均为0。

条款A11,根据条款A10所述的方法,所述对所述多个第二子张量进行winograd正变换并求和得到所述子卷积核的winograd正变换结果,包括:

获取第二子张量对应的第二元子张量的winograd正变换结果;其中,第二子张量对应的第二元子张量为:在第二元子张量中第二位置的元素的值为1,其中,第二位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第二子张量中的非0元素值作为系数乘以对应的第二元子张量的winograd正变换结果,得到第二子张量的winograd正变换结果;

将多个第二子张量的winograd正变换结果相加得到所述子卷积核的winograd正变换结果。

条款A12,根据条款A11所述的方法,第二子张量对应的第二元子张量的winograd正变换结果是通过以下过程预先得到的:

对于每一个第二子张量,将该第二子张量对应的第二元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第二元子张量的winograd正变换结果。

条款A13,根据条款A6所述的方法,所述将所述对位乘结果的winograd逆变换拆解为求和运算,进行计算得到所述子卷积核对应的卷积结果,包括:

将所述对位乘结果拆解为多个第三子张量,对所述多个第三子张量进行winograd逆变换并求和,得到所述子卷积核对应的卷积结果;

其中,所述多个第三子张量的个数与所述对位乘结果中非0元素的个数相同,所述多个第三子张量中的每个第三子张量中有一个元素与所述对位乘结果中的对应位置的元素相同、其它元素均为0。

条款A14,根据条款A13所述的方法,所述对所述多个第三子张量进行winograd逆变换并求和,得到所述子卷积核对应的卷积结果,包括:

获取第三子张量对应的第三元子张量的winograd逆变换结果;其中,第三子张量对应的第三元子张量为:在第三元子张量中第三位置的元素的值为1,其中,第三位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第三子张量中的非0元素值作为系数乘以对应的第三元子张量的winograd逆变换结果,得到第三子张量的winograd逆变换结果;

将多个第三子张量的winograd逆变换结果相加,得到所述子卷积核对应的卷积结果。

条款A15,根据条款A14所述的运算装置,第三元子张量的winograd逆变换结果是通过以下过程预先得到的:

对于每一个第三子张量,将该第三子张量对应的第三元子张量左边乘以逆变换左乘矩阵、右边乘以逆变换右乘矩阵得到第三元子张量的winograd逆变换结果。

条款A16,一种数据处理装置,包括:

卷积核拆分模块,用于将尺寸大于3*3的卷积核拆分为尺寸小于等于3*3的多个子卷积核;

输入数据拆分模块,用于根据所述多个子卷积核在所述卷积核中的位置分布,将输入数据拆分为尺寸小于等于4*4的多个目标子输入数据,其中,每个子卷积核对应一个或多个目标子输入数据;

卷积模块,用于针对任一子卷积核,将所述子卷积核与对应的目标子输入数据执行winograd卷积操作,得到所述子卷积核对应的卷积结果;

求和模块,用于对所述多个子卷积核对应的卷积结果执行求和操作,得到所述卷积核与所述输入数据的卷积结果。

条款A17,根据条款A16所述的装置,所述卷积核拆分模块具体用于:

将所述卷积核划分为尺寸小于等于3*3、且互相不重合的多个部分,每一部分确定为一个子卷积核。

条款A18,根据条款A15所述的装置,所述输入数据拆分模块包括:

第一拆分子模块,用于根据所述多个子卷积核在所述卷积核中的位置分布,将所述输入数据拆分为多个第一子输入数据,其中,任一子卷积核存在唯一对应的第一子输入数据;

第二拆分子模块,用于针对任一子卷积核,若所述子卷积核对应的第一子输入数据的尺寸大于4*4,将尺寸大于4*4的所述第一子输入数据拆分为尺寸小于等于4*4的多个第二子输入数据;

确定子模块,用于将尺寸小于等于4*4的所述多个第二子输入数据确定为所述子卷积核对应的目标子输入数据。

条款A19,根据条款A18所述的装置,所述确定子模块,还用于针对任一子卷积核,若所述子卷积核对应的第一子输入数据的尺寸小于等于4*4,将所述第一子输入数据确定为所述子卷积核对应的目标子输入数据。

条款A20,根据条款A18所述的装置,针对任一子卷积核,所述子卷积核与对应的第一子输入数据的对应关系为:

所述子卷积核中的第一个元素在所述卷积核中的位置,与对应的所述第一子输入数据中的第一个元素在所述输入数据中的位置相同;

所述第一子输入数据由所述卷积核遍历所述输入数据中所有元素时所述子卷积核能够遍历到的元素共同构成。

条款A21,根据条款A16-A20任一项所述的装置,所述卷积模块包括:

第一拆解子模块,用于将所述目标子输入数据的winograd正变换拆解为求和运算,进行计算得到所述目标子输入数据的winograd正变换结果;

第二拆解子模块,用于将所述子卷积核的winograd正变换拆解为求和运算,进行计算得到所述子卷积核的winograd正变换结果;

对位乘子模块,用于执行所述目标子输入数据的winograd正变换结果与所述子卷积核的winograd正变换结果的对位乘操作,得到对位乘结果;

求和子模块,用于将所述对位乘结果的winograd逆变换拆解为求和运算,进行计算得到所述子卷积核对应的卷积结果。

条款A22,根据条款A21所述的装置,所述第一拆解子模块,包括:

第一拆解单元,用于将所述目标子输入数据拆解为多个第一子张量,对所述多个第一子张量进行winograd正变换并求和得到所述目标子输入数据的winograd正变换结果;

其中,所述多个第一子张量的个数与所述目标子输入数据中非0元素的个数相同,所述多个第一子张量中的每个第一子张量中有一个元素与所述目标子输入数据中的对应位置的元素相同、其它元素均为0。

条款A23,根据条款A22所述的装置,所述第一拆解单元具体用于:

获取第一子张量对应的第一元子张量的winograd正变换结果;其中,第一子张量对应的第一元子张量为:在第一元子张量中第一位置的元素的值为1,其中,第一位置在第一元子张量中所处的位置与第一子张量中的非0元素所处的位置相同;

将第一子张量中的非0元素值作为系数乘以对应的第一元子张量的winograd正变换结果,得到第一子张量的winograd正变换结果;

将多个第一子张量的winograd正变换结果相加得到所述目标子输入数据的winograd正变换结果。

条款A24,根据条款A23所述的装置,所述装置还包括:

第一预处理模块,用于通过以下过程预先得到第一子张量对应的第一元子张量的winograd正变换结果:

对于每一个第一子张量,将该第一子张量对应的第一元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第一元子张量的winograd正变换结果。

条款A25,根据条款A21所述的装置,所述第二拆子解模块,包括:

第二拆解单元,用于将所述子卷积核拆解为多个第二子张量,对所述多个第二子张量进行winograd正变换并求和得到所述子卷积核的winograd正变换结果;

其中,所述多个第二子张量的个数与所述子卷积核中非0元素的个数相同,所述多个第二子张量中的每个第二子张量中有一个元素与所述子卷积核中的对应位置的元素相同、其它元素均为0。

条款A26,根据条款A25所述的装置,所述第二拆解单元具体用于:

获取第二子张量对应的第二元子张量的winograd正变换结果;其中,第二子张量对应的第二元子张量为:在第二元子张量中第二位置的元素的值为1,其中,第二位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第二子张量中的非0元素值作为系数乘以对应的第二元子张量的winograd正变换结果,得到第二子张量的winograd正变换结果;

将多个第二子张量的winograd正变换结果相加得到所述子卷积核的winograd正变换结果。

条款A27,根据条款A26所述的装置,所述装置还包括:

第二预处理模块,用于通过以下过程预先得到第二子张量对应的第二元子张量的winograd正变换结果:

对于每一个第二子张量,将该第二子张量对应的第二元子张量左边乘以正变换左乘矩阵、右边乘以正变换右乘矩阵得到第二元子张量的winograd正变换结果。

条款A28,根据条款A21所述的装置,所述求和子模块,包括:

第三拆解单元,用于将所述对位乘结果拆解为多个第三子张量,对所述多个第三子张量进行winograd逆变换并求和,得到所述子卷积核对应的卷积结果;

其中,所述多个第三子张量的个数与所述对位乘结果中非0元素的个数相同,所述多个第三子张量中的每个第三子张量中有一个元素与所述对位乘结果中的对应位置的元素相同、其它元素均为0。

条款A29,根据条款A28所述的装置,所述第三拆解单元具体用于:

获取第三子张量对应的第三元子张量的winograd逆变换结果;其中,第三子张量对应的第三元子张量为:在第三元子张量中第三位置的元素的值为1,其中,第三位置在第二元子张量中所处的位置与第二子张量中的非0元素所处的位置相同;

将第三子张量中的非0元素值作为系数乘以对应的第三元子张量的winograd逆变换结果,得到第三子张量的winograd逆变换结果;

将多个第三子张量的winograd逆变换结果相加,得到所述子卷积核对应的卷积结果。

条款A30,根据条款A29所述的装置,所述装置还包括:

第三预处理模块,用于通过以下过程预先得到第三元子张量的winograd逆变换结果:

对于每一个第三子张量,将该第三子张量对应的第三元子张量左边乘以逆变换左乘矩阵、右边乘以逆变换右乘矩阵得到第三元子张量的winograd逆变换结果。

条款A31,一种人工智能芯片,所述芯片包括条款A16-A30任一项所述的数据处理装置。

条款A32,一种电子设备,所述电子设备包括条款A31所述的人工智能芯片。

条款A33,一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为调用所述存储器存储的指令,以执行条款A1-A15任一项所述的数据处理方法。

条款A34,一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现条款A1-A15任一项所述的数据处理方法。

相关技术
  • 数据处理方法、装置及相关产品
  • 数据处理方法、装置及相关产品
技术分类

06120112722371