卷积计算方法及装置与流程

文档序号:16857140发布日期:2019-02-12 23:27阅读:710来源:国知局
卷积计算方法及装置与流程

本申请涉及卷积神经网络领域,特别涉及一种卷积计算方法及装置。



背景技术:

卷积神经网络可以用来实现图像处理等功能,比如:图像物体检测、图像物体分类等。在卷积神经网络中,采用卷积核对输入信号进行卷积运算,能够提取到图像的卷积特征。通常,卷积神经网络包括多个级联的卷积层。

由于卷积神经网络运算量非常大,尤其在卷积层中的运算量尤为密集。为了降低卷积层的运算量,相关技术中利用傅里叶变换运算的高效性来对卷积运算进行加速。具体的,对n个卷积核矩阵和1个输入矩阵分别进行傅里叶变换,将傅里叶变换后的每个卷积核频域矩阵分别与傅里叶变换后的输入矩阵相乘,得到n个相乘结果;对n个相乘结果进行累加,然后对累加结果进行傅里叶逆变换,最终得到卷积层的输出矩阵。

由于卷积神经网络在训练阶段包括前向预测过程和后向误差传播过程,在前向预测过程中计算出预测结果,在后向误差传播过程中根据预测结果与正确结果之间的误差对卷积核矩阵中的矩阵元素进行修正,从而训练得到更优的卷积核矩阵。由于卷积核矩阵会在后向误差传播过程中不断调整,因此在对卷积层的每次前向运算中,都需要对n个卷积核矩阵和1个输入矩阵分别进行傅里叶变换。由于移动终端中卷积核的尺寸越来越小,卷积运算时的运算次数相应变多,导致上述方式对于卷积运算的运算效率没有明显提高,不能满足在移动终端中对卷积运算的实时性要求。



技术实现要素:

为了解决现有技术由于卷积核的尺寸越来越小,卷积运算时的运算次数相应变多,通过傅里叶变换对卷积运算的运算加速没有明显效果,不能满足在移动终端中对卷积运算的实时性要求的技术问题,本发明实施例提供了一种卷积计算方法及装置。所述技术方案如下:

第一方面,提供了一种卷积计算方法,该方法应用于运行有卷积神经网络的处理器和/或集成电路芯片asic中,所述方法包括:应用程序内包括卷积神经网络,卷积神经网络包括h层卷积层和应用层,应用程序通过卷积神经网络获取应用程序的应用数据,通过卷积神经网络中的第t个卷积层获取第t个卷积层的输入矩阵,该输入矩阵是应用数据或该输入矩阵是由位于第t个卷积层之前的其它卷积层对应用程序进行特征提取后得到的输出矩阵,通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵,通过第t个卷积层获取预先存储的卷积核频域矩阵,将卷积核频域矩阵与输入矩阵相乘得到频域乘积矩阵,频域乘积矩阵是对输入矩阵提取到的特征在频域的矩阵表示,第t个卷积层对频域乘积矩阵进行傅里叶逆变换得到第t个卷积层的输出矩阵,输出矩阵是对输入矩阵提取到的特征在时域的矩阵表示,将第h个卷积层的输出矩阵作为应用数据的特征,应用程序通过应用层对应用数据的特征进行应用处理,h为正整数,t为正整数,1≤t≤h。其中,应用程序中的卷积神经网络是预先训练好的,卷积核频域矩阵是对卷积核矩阵进行傅里叶变换得到的,卷积核矩阵是预先根据样本应用数据进行训练后得到的矩阵,卷积核矩阵是用于对输入矩阵进行特征提取的矩阵。

由于将卷积神经网络应用到移动终端后,通常卷积神经网络不进行训练或不进行在线实时训练,因此移动终端上的卷积神经网络只需要实现前向预测,而不需要实现后向误差传播,此时卷积核矩阵在一段时间内会保持不变,因此可以将卷积核矩阵预先进行傅里叶变换并存储在移动终端中,在移动终端上的应用程序通过卷积神经网络的第t个卷积层获取到第t个卷积层的输入矩阵时,只需要通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵,然后将预先存储的卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵,对频域乘积矩阵进行傅里叶逆变换,即可得到第t个卷积层的输出矩阵。由于输入矩阵和卷积核均通过傅里叶变换来对卷积运算加速,并且卷积核矩阵是预先经过傅里叶变换后存储的,在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而解决了在对卷积层的每次运算中,都需要对输入矩阵和卷积核矩阵分别进行傅里叶变换,导致卷积运算时的运算次数较多,卷积运算效率较低,不能满足在移动终端中对卷积运算的实时性要求的问题,达到了减少在接收到输入矩阵时卷积层的运算量,提高卷积运算效率的效果。

另外,相比目前的卷积算法,本申请的卷积运算量预计下降50%以上,降低了深度学习软件在移动终端上推广的门槛。

在第一方面的第一种可能的实施方式中,在获取预先存储的卷积核频域矩阵之前,即对卷积核矩阵的预先处理过程包括:通过第t个卷积层对卷积核矩阵进行倒序处理,将倒序处理得到的第一矩阵填充为预定尺寸的第二矩阵,然后对第二矩阵进行傅里叶变换,得到卷积核频域矩阵,对变换得到的卷积核频域矩阵进行存储,其中,倒序处理是指对卷积核矩阵中的矩阵元素按照反向的顺序进行排列的处理,卷积核矩阵中的矩阵元素即卷积层的卷积系数,第二矩阵的预定尺寸与傅里叶变换时的缓存尺寸相同。

通过将卷积层对应的卷积核矩阵预先进行傅里叶变换并存储,使得卷积层在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而降低接收到输入矩阵时的运算量,提高卷积运算效率。

另外,由于卷积神经网络中的卷积系数是常规卷积系数的反序,因此对卷积核矩阵中的矩阵元素进行倒序处理,使得对卷积核矩阵能够正常运算。

另外,由于需要对卷积核矩阵进行傅里叶变换,因此将倒序处理得到的第一矩阵填充为傅里叶变换时的缓存尺寸相同,从而利用傅里叶变换对卷积运算进行加速。

结合第一方面或者第一方面的第一种可能的实施方式,在第二种可能的实施方式中,在对输入矩阵进行傅里叶变换得到频域输入矩阵时,通过第t个卷积层对输入矩阵进行划分,得到m*n个子输入矩阵,m、n为正整数,每个子输入矩阵的尺寸与卷积核矩阵的尺寸和傅里叶变换时的缓存尺寸相关,任意两个子输入矩阵没有交集,对于划分得到的每个子输入矩阵,通过第t个卷积层将子输入矩阵填充为预定尺寸的第三矩阵,预定尺寸与傅里叶变换时的缓存尺寸相同,然后对填充得到的第三矩阵进行傅里叶变换得到子频域输入矩阵,将卷积核频域矩阵与频域输入矩阵相乘的过程可以转换为将卷积核频域矩阵与每个子频域输入矩阵相乘,得到子频域乘积矩阵,然后对频域乘积矩阵进行傅里叶逆变换得到输出矩阵的过程可以转换为将每个子频域乘积矩阵进行傅里叶逆变换,得到子输出矩阵,之后对根据每个子输入矩阵计算得到的子输出矩阵进行叠加,得到的矩阵即第t个卷积层的输出矩阵,其中,对子输出矩阵进行叠加的顺序与对应的子输入矩阵划分的顺序相关。

通过将输入矩阵划分为体积较小的子输入矩阵,从而可以降低对输入矩阵进行卷积运算的运算量,并且可以同时对多个子输入矩阵进行卷积运算,从而缩短卷积运算的运算时间,提高卷积运算效率。

结合第一方面、第一方面的第一种可能的实施方式或者第一方面的第二种可能的实施方式,在第三种可能的实施方式中,第t个卷积层对应的卷积核矩阵不止一个,则对于每个子频域输入矩阵,通过第t个卷积层将卷积核频域矩阵与子频域输入矩阵相乘得到子频域乘积矩阵,包括:通过第t个卷积层将每个卷积核矩阵进行傅里叶变换得到卷积核频域矩阵,对于每个子频域输入矩阵,将每个卷积核频域矩阵与子频域输入矩阵分别相乘,得到与该卷积核频域矩阵对应的乘积矩阵,然后将根据各个卷积核频域矩阵得到的乘积矩阵进行点对点相加,得到与子频域输入矩阵对应的子频域乘积矩阵。

在第t个卷积层对应多个卷积核矩阵的情况下,通过将根据各个卷积核矩阵和划分的子输入矩阵计算得到的乘积矩阵进行点对点相加,使得计算得到的子频域乘积矩阵能够包含通过各个卷积核矩阵提取到的卷积特征,进而使得最终得到的第t个卷积层的输出矩阵能够反映各个卷积核矩阵提取到的卷积特征。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式或者第一方面的第三种可能的实施方式,在第四种可能的实施方式中,在将输入矩阵划分为m*n个子输入矩阵时,首先需要确定子输入矩阵的尺寸,假设傅里叶变换时的缓存尺寸为a*b,卷积核矩阵的尺寸为a*b,则子输入矩阵的尺寸为(a-a+1)*(b-b+1),其中,a、b、a、b均为正整数,通过第t个卷积层按照确定出的子输入矩阵的尺寸将输入矩阵按照从上往下的顺序依次划分为m个行区域,按照从左往右的顺序依次划分为n个列区域,m、n为正整数,其中,每个行区域包含a-a+1行矩阵元素,每个列区域包含包含b-b+1列矩阵元素,然后将第i个行区域与第j个列区域的交集部分确定为子输入矩阵,i、j为正整数,1≤i≤m,1≤j≤n,另外,当第m个行区域中包含的行数小于a-a+1时,将第m个行区域填充为a-a+1行,当第n个列区域中包含的列数小于b-b+1时,将第n个列区域填充为b-b+1列。

通过根据傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸确定子输入矩阵的尺寸,将输入矩阵按照确定出的子输入矩阵的尺寸划分为各个子输入矩阵,使得子输入矩阵按照傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸进行傅里叶变换。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式、第一方面的第三种可能的实施方式或者第一方面的第四种可能的实施方式,在第五种可能的实施方式中,在m*n个子输出矩阵按照预定方式进行叠加,得到第t个卷积层的输出矩阵时,通过第t个卷积层根据卷积核矩阵的尺寸确定出叠加的行数和叠加的列数,假设卷积核矩阵的尺寸为a*b,则确定出的行数为a-1,确定出的列数为b-1,在第i行子输出矩阵中,通过第t个卷积层将第j个子输出矩阵的后b-1列矩阵元素与第j+1个子输出矩阵的前b-1列矩阵元素进行叠加,i、j为正整数,1≤i<m,1≤j<n,在第j列子输出矩阵中,通过第t个卷积层将第i个子输出矩阵的后a-1行矩阵元素与第i+1个子输出矩阵的前a-1行矩阵元素进行叠加,在所有子输出矩阵叠加完成后得到的矩阵确定为第t个卷积层的输出矩阵。

通过对根据各个子输入矩阵计算得到的子输出矩阵进行叠加,即根据各个子输入矩阵进行基于傅里叶变换的卷积运算得到的结果进行叠加,使得叠加得到的输出矩阵与对输入矩阵进行卷积运算的结果相同,从而能够得到正确的第t个卷积层的输出矩阵。

结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式、第一方面的第三种可能的实施方式、第一方面的第四种可能的实施方式或者第一方面的第五种可能的实施方式,在第六种可能的实施方式中,应用程序包括图像应用程序,应用数据包括图像帧,应用处理包括图像处理,图像处理包括人脸识别、物体识别、场景识别、物体抠图、图像切割和图像分类中的至少一种。

第二方面,提供了一种卷积计算装置,该卷积计算装置包括至少一个单元,各个单元分别用于实现上述第一方面的卷积计算方法中对应的步骤。

第三方面,提供了一种终端,该终端包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或该指令集由处理器加载并执行以实现第一方面所述的卷积计算方法。

第四方面,提供了一种终端,该终端包括处理器、存储器和集成电路芯片asic,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或该指令集由处理器加载并执行以实现如第一方面的第一种可能的实施方式所述的卷积计算方法,该至少一条指令、该至少一段程序、该代码集或该指令集由asic加载并执行以实现如第一方面以及第一方面的第二种可能的实施方式至第六种可能的实施方式中任一所述的卷积计算方法。

第五方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或该指令集由处理器加载并执行以实现如第一方面所述的卷积计算方法。

附图说明

图1是本申请一个实施例提供的卷积神经网络的结构示意图;

图2是本申请一个实施例提供的卷积计算方法的方法流程图;

图3是本申请另一个实施例提供的卷积计算方法的方法流程图;

图4是本申请再一个实施例提供的卷积计算方法的方法流程图;

图5是本申请一个实施例提供的输入矩阵的拆分示意图;

图6是本申请一个实施例提供的将子输出矩阵进行叠加的示意图;

图7是本申请一个实施例提供的对一维矩阵元素进行卷积的示意图;

图8是本申请一个实施例提供的多个卷积核对应的卷积计算过程的示意图;

图9是本申请一个实施例提供的终端的处理器中的卷积计算过程的示意图;

图10是本申请一个实施例提供的asic中的卷积计算过程的示意图;

图11是本申请一个实施例提供的卷积计算装置的结构方框图;

图12是本申请一个实施例提供的终端的结构方框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

卷积神经网络是一种通过卷积核从输入图像中提取特征的神经网络,卷积核又被称为滤波器或特征监测器。结合参考图1,其示例性地示出了卷积神经网络的结构示意图。如图1所示,典型的卷积神经网络100包括卷积层110、池化层120和分类层130。

以卷积神经网络100的输入为图像举例,当输入图像140输入到卷积神经网络100时,卷积层110用于从输入图像140中提取图像特征。卷积层110通过卷积核111在输入图像140上滑动滤波后得到对应的卷积特征(又称为特征图),通常一个卷积层110包含多个卷积核111,对于相同的输入图像140,通过不同卷积核111提取到的特征图不同,使用的卷积核111越多,提取到的特征图越多。

其中,输入图像140可以看做是多个像素值构成的矩阵,卷积核111也可以看做是一个卷积核矩阵,卷积核矩阵的尺寸通常远小于输入图像140的尺寸,卷积核矩阵中的参数可以是通过训练得到的或者预定义的,通过卷积核111得到的特征图即卷积层110的输出。

池化层120用于降低特征图的维度,池化的方式包括最大化、平均化、加和等。池化通常是定义一个预定大小的池化窗口(比如:2*2的池化窗口),然后对位于池化窗口内的特征图进行池化处理,以最大化为例,假设特征图位于2*2的池化窗口中的值分别为[1,1,5,6],则池化处理后得到的值为6,通过池化处理将四维的数据降低为一维的数据。

分类层130用于对池化层120输出的特征图进行分类。分类层130使用的权重系数是预先训练得到的,将池化层120得到的特征图输入到分类层130后,分类层130输出各个标签的概率,标签用于表示输入图像140所属的类别,所有标签的概率之和为1,概率最高的标签被确定为输入图像140的类别。示例性的,如图1所示,输入图像140输入到卷积神经网络100中后,最终输出三个标签的概率,分别是:人(0.8)、猫(0.1)、狗(0.1),则对输入图像140的识别结果为人。

需要说明的是,在实际应用中,卷积神经网络中可能包括多个卷积层,卷积神经网络的每个卷积层的输入可以为l个输入图像(输入实数矩阵)的组合,输出可以为l′个特征图(输出实数矩阵)的组合,对应的,该卷积层有l*l′卷积核矩阵。为了便于说明,假设输入图像和特征图的尺寸均为n*n,卷积核矩阵的尺寸为n*n,l、l′和n为正整数。可选的,输入图像或特征图对应的矩阵的行数和列数相同或不同,卷积核矩阵的行数和列数相同或不同,输入图像与特征图由于特征抽取的原因尺寸也可能不同。第l′个特征图由l个输入图像和对应的卷积核进行卷积后求和得到:

其中,yl′表示第l′个特征图,fl表示第l个输入图像,hl,l′表示与第l个输入图像和第l′个特征图对应的卷积核矩阵。

上述卷积运算可以通过傅里叶变换和傅里叶逆变换实现,以快速傅里叶变换(英文:fastfouriertransformation,简称:fft)和快速傅里叶逆变换(英文:inversefastfouriertransform,简称:ifft)为例,由于因此,其中,符号ο表示像素级的点对点相乘。

本申请各个实施例提供的卷积计算方法应用在移动终端上安装的应用程序中,卷积神经网络是应用程序中的程序模块,应用程序在获取到应用数据之后,将应用数据转换为对应的输入矩阵,然后通过卷积神经网络对输入矩阵进行特征提取,然后卷积神经网络中的应用层将提取到的应用数据的特征进行应用处理。可选的,应用层包括池化层、分类层、回归分析层中的至少一种。示例性的,图1中的应用层为池化层和分类层。

可选的,当应用程序是图像应用程序时,应用数据是图像帧。示例性的,对于图像应用程序中卷积神经网络100的处理过程请参见图1,输入矩阵中的矩阵元素表示图像信号中的像素值。

可选的,应用程序为音频处理程序,则应用数据为音频信号。

示例性的,当应用数据为音频信号时,应用程序对音频信号进行采样得到数字信号,根据数字信号生成对应的输入矩阵。

可选的,应用程序为棋类应用程序,则应用数据为棋局信号。

示例性的,输入矩阵与棋盘的尺寸对应,输入矩阵中每个矩阵元素代表棋盘上该位置的落子情况。以围棋为例,黑子表示为1,白子表示为2,空白表示为0,则每个矩阵元素的取值为0或1或2。

需要说明的是,图1中卷积神经网络100最终实现的功能是对输入图像进行分类,在实际应用中,卷积神经网络100在通过卷积层110提取到输入矩阵的特征后,还可以根据提取到的特征进行图像分割或回归分析等,也就是说,应用处理包括图像处理,图像处理包括:人脸识别、物体识别、场景识别、物体抠图、图像切割和图像分类中的至少一种。

在将卷积神经网络应用到移动终端时,卷积核通常已经是训练完毕或预定好的,卷积核的尺寸会很小且数量会很多。由于移动终端的计算能力有限且对实时性要求较高,为了提高卷积运算的实时性,本申请提供有如下实施例:

图2是本申请一个实施例提供的卷积计算方法的方法流程图,该方法应用于运行有卷积神经网络的处理器和/或集成电路芯片(英文:applicationspecificintegratedcircuit,简称:asic)中,可选的,移动终端内包括处理器或包括处理器和集成电路芯片。如图2所示,该卷积计算方法可以包括:

201,通过卷积神经网络获取应用程序的应用数据,卷积神经网络包括h个卷积层和应用层,h为正整数。

应用程序安装在移动终端上,卷积神经网络是应用程序中的程序模块。

卷积层用于对输入到卷积神经网络中的应用数据提取卷积特征,可选的,不同的卷积层提取到的卷积特征不同。

应用层用于对卷积层提取到的应用数据的特征进行应用处理。可选的,应用层包括池化层、分类层、回归分析层中的至少一种。

202,通过卷积神经网络中的第t个卷积层获取第t个卷积层的输入矩阵,输入矩阵是应用数据或由位于第t个卷积层之前的其他卷积层对应用数据进行特征提取后得到的输出矩阵,t为正整数,1≤t≤h。

当t=1时,输入矩阵是应用数据。以应用程序是图像应用程序为例,应用数据是图像帧,对于每一个图像帧,可以表示为多行多列像素值所构成的矩阵,像素值的取值范围通常在0至255。换句话说,输入矩阵中的每个矩阵元素,都对应图像帧中的一个像素点的像素值。

当t>1时,输入矩阵是由位于第t个卷积层之前的其它卷积层对应用数据进行特征提取后得到的输出矩阵。可选的,其它卷积层可能是第t个卷积层的前一层卷积层,也可能是第t个卷积层之前间隔的一层卷积层,还可能是第t个卷积层之前的几层卷积层。

203,通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵。

第t个卷积层接收到输入矩阵后,应用程序通过第t个卷积层从输入矩阵中提取卷积特征。

为了对卷积运算加速,输入矩阵首先进行傅里叶变换转换为频域输入矩阵。

可选的,傅里叶变换为fft。

204,通过第t个卷积层获取预先存储的卷积核频域矩阵,卷积核频域矩阵是对卷积核矩阵进行傅里叶变换得到的,卷积核矩阵是预先根据样本应用数据进行训练后得到的矩阵,卷积核矩阵是用于对输入矩阵进行特征提取的矩阵。

由于卷积核矩阵中的矩阵元素在一段时间内是不会变化的,因此卷积核矩阵可以预先进行傅里叶变换后存储在本地,当需要使用卷积核提取输入图像的卷积特征时,可以从本地获取预先存储的卷积核频域矩阵,从而减少对输入图像提取卷积特征时的运算量,提高卷积运算的效率。

205,通过第t个卷积层将卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵,频域乘积矩阵是对输入矩阵提取到的特征在频域的矩阵表示。

将傅里叶变换后得到的卷积核频域矩阵与频域输入矩阵相乘,得到的频域乘积矩阵是指对通过卷积核从输入图像中提取到的卷积特征进行傅里叶变换的结果。

206,通过第t个卷积层对频域乘积矩阵进行傅里叶逆变换得到第t个卷积层的输出矩阵,输出矩阵是对输入矩阵提取到的特征在时域的矩阵表示。

对频域乘积矩阵进行傅里叶逆变换可以得到通过卷积核从输入图像中提取到的卷积特征,卷积特征又称特征图,可以表示为矩阵,该矩阵即卷积层的输出矩阵。

207,将第h个卷积层的输出矩阵作为应用数据的特征,通过卷积神经网络的应用层对应用数据的特征进行应用处理。

在卷积神经网络的h个卷积层提取完卷积特征后,应用程序通过卷积神经网络将提取到的卷积特征输入到应用层,通过应用层对卷积层提取的卷积特征进行应用处理。

可选的,应用层为池化层,用于降低提取的卷积特征的维度。

可选的,应用层为分类层,用于根据提取的卷积特征对应用数据进行分类。

可选的,应用层为回归分析层,用于根据提取的卷积特征对应用数据进行回归分析。

综上所述,本申请实施例提供的卷积计算方法,由于将卷积神经网络应用到移动终端后,通常卷积神经网络不进行训练或不进行在线实时训练,因此移动终端上的卷积神经网络只需要实现前向预测,而不需要实现后向误差传播,此时卷积核矩阵在一段时间内会保持不变,因此可以将卷积核矩阵预先进行傅里叶变换并存储在移动终端中,在移动终端上的应用程序通过卷积神经网络的第t个卷积层获取到第t个卷积层的输入矩阵时,只需要通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵,然后将预先存储的卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵,对频域乘积矩阵进行傅里叶逆变换,即可得到第t个卷积层的输出矩阵。由于输入矩阵和卷积核均通过傅里叶变换来对卷积运算加速,并且卷积核矩阵是预先经过傅里叶变换后存储的,在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而解决了在对卷积层的每次运算中,都需要对输入矩阵和卷积核矩阵分别进行傅里叶变换,导致卷积运算时的运算次数较多,卷积运算效率较低,不能满足在移动终端中对卷积运算的实时性要求的问题,达到了减少在接收到输入矩阵时卷积层的运算量,提高卷积运算效率的效果。

另外,相比目前的卷积算法,本申请的卷积运算量预计下降50%以上,降低了深度学习软件在移动终端上推广的门槛。

图3是本申请另一个实施例提供的卷积计算方法的方法流程图,该方法应用于运行有卷积神经网络的处理器和/或asic中,可选的,移动终端内包括处理器或包括处理器和集成电路芯片。如图3所示,该卷积计算方法可以包括:

301,通过第t个卷积层对卷积核矩阵进行倒序处理得到第一矩阵,倒序处理是对卷积核矩阵中的矩阵元素按照反向的顺序进行排列的处理。

卷积神经网络的模型文件存储在终端的存储器中或asic的片内或片外的存储单元中,模型文件指卷积核。

可选的,终端为智能手机、平板电脑、膝上型便携计算机或台式计算机等。

原始的卷积神经网络的模型文件为空间域的卷积核矩阵,卷积核矩阵在存储之前,需要根据卷积核的尺寸和输入图像的尺寸选择合适的傅里叶变换时的缓存尺寸,然后将卷积核矩阵转换到频域后存储。

为了便于说明,假设输入图像的尺寸为n*n,卷积核矩阵的尺寸为n*n,通常所说的卷积公式为:f(u)表示输入矩阵中的第u个矩阵元素,h(i-u)表示卷积核矩阵中的第i-u个矩阵元素,而卷积神经网络中的卷积层的运算公式为:h(u)表示卷积核矩阵中的第u个矩阵元素,由于卷积神经网络中使用的卷积系数是常规卷积系数的倒序,卷积系数即卷积核矩阵中的矩阵元素,因此,卷积核矩阵在存储时,首先需要对卷积核矩阵进行倒序处理。

举例说明,假设卷积核矩阵为:

则倒序处理后的第一矩阵为:

302,通过第t个卷积层将第一矩阵填充为预定尺寸的第二矩阵,预定尺寸与傅里叶变换时的缓存尺寸相同。

假设输入图像的尺寸为n*n,卷积核的尺寸为n*n,傅里叶变换时的缓存尺寸为i*i,需要满足i≥n+n-1,其中,i为整数,n远大于n,比如:n=112,n=3。

由于卷积核的尺寸为n*n,因此第一矩阵的尺寸为n*n,在对第一矩阵进行傅里叶变换之前,需要将第一矩阵的尺寸填充为i*i。

可选的,填充方式为填0。

303,通过第t个卷积层对第二矩阵进行傅里叶变换,得到卷积核频域矩阵,存储卷积核频域矩阵。

填充后的第二矩阵进行傅里叶变换后的矩阵的尺寸与傅里叶变换时的缓存尺寸相同。

将傅里叶变换后的卷积核频域矩阵存储至终端的存储器或asic的存储单元中。

需要说明的是,步骤301至步骤303可以是移动终端上的应用程序在安装时对卷积核矩阵的预处理过程,应用程序安装完成后卷积核频域矩阵被存储至本地;也可以是提供应用程序的服务器对卷积核矩阵进行预处理的过程,移动终端从服务器获取应用程序的数据时,将卷积核频域矩阵下载至本地。

304,通过卷积神经网络获取应用程序的应用数据,卷积神经网络包括h个卷积层和应用层,h为正整数。

应用程序安装在移动终端上,卷积神经网络是应用程序中的程序模块。

卷积层用于对输入到卷积神经网络中的应用数据提取卷积特征,可选的,不同的卷积层提取到的卷积特征不同。

应用层用于对卷积层提取到的应用数据的特征进行应用处理。可选的,应用层包括池化层、分类层、回归分析层中的至少一种。

可选的,若应用程序是图像应用程序,则应用数据是图像帧,输入矩阵中每个矩阵元素表示图像信号中的像素值。

可选的,若应用程序是音频处理程序,则应用数据是音频信号,输入矩阵中每个矩阵元素表示根据音频信号进行采样得到的数字信号的取值。

可选的,若应用程序是棋类应用程序,则应用数据是棋局信号,输入矩阵与棋盘的尺寸相同,输入矩阵中每个矩阵元素表示棋盘上对应位置的落子情况。

305,通过卷积神经网络中的第t个卷积层获取第t个卷积层的输入矩阵,输入矩阵是应用数据或由位于第t个卷积层之前的其它卷积层对应用数据进行特征提取后得到的输出矩阵,t为正整数,1≤t≤h。

当t=1时,输入矩阵是应用数据。以应用程序是图像应用程序为例,应用数据是图像帧,对于每一个图像帧,可以表示为多行多列像素值所构成的矩阵,像素值的取值范围通常在0至255。换句话说,输入矩阵中的每个矩阵元素,都对应图像帧中的一个像素点的像素值。

当t>1时,输入矩阵是由位于第t个卷积层之前的其它卷积层对应用数据进行特征提取后得到的输出矩阵。可选的,其它卷积层可能是第t个卷积层的前一层卷积层,也可能是第t个卷积层之前间隔的一层卷积层,还可能是第t个卷积层之前的几层卷积层。

可选的,当应用程序为图像应用程序时,应用数据是图像帧,输入矩阵是指输入到卷积神经网络中的输入图像(图像帧)转换成的实数矩阵。对于任何图像,都可以表示为像素值的矩阵,像素值的取值范围在0至255。

卷积神经网络接收到输入矩阵后,通过卷积层从输入矩阵中提取卷积特征。可选的,卷积神经网络包括多个卷积层时,不同的卷积层提取到的卷积特征不同。

306,通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵。

为了对卷积运算加速,输入矩阵首先进行傅里叶变换转换为频域输入矩阵。

可选的,傅里叶变换为fft。

由于输入图像的尺寸(比如:n*n)远大于卷积核矩阵的尺寸(比如:n*n),而傅里叶变换时的缓存尺寸为i*i,傅里叶变换时的缓存尺寸需要满足i≥n+n-1,因此,傅里叶变换时的缓存尺寸受输入图像的尺寸影响较大,若将卷积核矩阵填充为i*i来计算卷积核频域矩阵,则卷积核频域矩阵的数据量远大于卷积核的原始数据量,导致存储的卷积神经网络的卷积核的频域数据(卷积核频域矩阵)的数据量变大,从而增加了终端的存储器或asic的存储单元的存储资源,且处理器或asic在获取卷积核频域矩阵时,对内存带宽的需求大大增加,极大增加了系统功耗。

在实际应用中,傅里叶变换是的缓存尺寸不宜过大,通常选择i=8,16,32,64。为了解决卷积核的数据量过大的问题,可以将输入图像拆分为数据量较小的若干个小图像,对小图像进行傅里叶变换,可以使得卷积核频域矩阵的尺寸也缩小。关于拆分输入图像的内容,请参见图4中对应步骤的描述。

可选的,步骤306可以被替换成图4所示的步骤:

306a,通过第t个卷积层将输入矩阵划分为m*n个子输入矩阵,每个子输入矩阵的尺寸与卷积核矩阵的尺寸和傅里叶变换时的缓存尺寸相关,任意两个子输入矩阵没有交集,m、n为正整数。

输入矩阵对应输入图像,子输入矩阵对应拆分得到的小图像。每个子输入矩阵的尺寸相同。

可选的,步骤306a可以包括:

s1,通过第t个卷积层根据傅里叶变换时的缓存尺寸a*b和卷积核矩阵的尺寸a*b,计算子输入矩阵的尺寸(a-a+1)*(b-b+1),a、b、a、b为正整数。

可选的,傅里叶变换时的缓存尺寸a*b是预设的,可以由技术人员根据经验选择,并且,a>a,b>b。比如:卷积核矩阵的尺寸为3*3,傅里叶变换时的缓存尺寸为8*8。

可选的,a与b的取值相同或不同,a与b的取值相同或不同。

s2,通过第t个卷积层将输入矩阵按照从上往下的顺序依次划分为m个行区域,每个行区域包含a-a+1行矩阵元素,m为正整数。

在确定子输入矩阵的尺寸之后,按照确定出的尺寸将输入矩阵依次进行划分。

可选的,当第m个行区域中包含的行数小于a-a+1时,将第m个行区域填充为a-a+1行。

在实际应用中,输入矩阵的行数不一定是子输入矩阵的行数的整数倍,因此划分到最后的一个行区域包含的行数可能达不到子输入矩阵要求的行数,这种情况下,可以将最后一个行区域填充为与子输入矩阵要求的行数相同。

可选的,填充的方式为填0。

s3,通过第t个卷积层将输入矩阵按照从左往右的顺序依次划分为n个列区域,每个列区域包含b-b+1列矩阵元素,n为正整数。

可选的,当第n个列区域中包含的列数小于b-b+1时,将第n个列区域填充为b-b+1列。

在实际应用中,输入矩阵的列数不一定是子输入矩阵的列数的整数倍,因此划分到最后的一个列区域包含的列数可能达不到子输入矩阵要求的列数,这种情况下,可以将最后一个列区域填充为与子输入矩阵要求的列数相同。

可选的,填充的方式为填0。

s4,通过第t个卷积层将第i个行区域与第j个列区域的交集部分确定为子输入矩阵,i、j为正整数,1≤i≤m,1≤j≤n。

306b,对于每个子输入矩阵,通过第t个卷积层将子输入矩阵填充为预定尺寸的第三矩阵,预定尺寸与傅里叶变换时的缓存尺寸相同。

对每个子输入矩阵进行傅里叶变换之前,也需要按照预先确定的傅里叶变换时的缓存尺寸对子输入矩阵进行填充。可选的,填充的方式为填0。

306c,通过第t个卷积层对第三矩阵进行傅里叶变换,得到子频域输入矩阵。

第三矩阵的尺寸与傅里叶变换时的缓存尺寸相同,由于输入图像(输入矩阵)被拆分为小图像(子输入矩阵),子输入矩阵的尺寸由傅里叶变换时的缓存尺寸和卷积核矩阵的尺寸决定,因此,傅里叶变换时的缓存尺寸可以预设为合适大小的尺寸,卷积核频域矩阵的尺寸与傅里叶变换时的缓存尺寸相同,避免占用终端的存储器或asic的存储单元中过多的存储资源,同时降低了卷积神经网络运行时处理器对内存带宽的读取需求。

结合参见图5,其示例性地示出了输入矩阵的拆分示意图。假设傅里叶变换时的缓存尺寸为8*8,如图5所示,卷积核的尺寸为3*3,则每个子输入矩阵的尺寸为(8-3+1)*(8-3+1),即6*6。示例性的,卷积核子输入矩阵20=则将卷积核与子输入矩阵进行卷积运算后得到的子输出矩阵

其中,c11=b33*a11,

c12=b32*a11+b33*a12,

c13=b31*a11+b32*a12+b13*a13,

c14=b31*a12+b32*a13+b33*a14,

c15=b31*a13+b32*a14+b33*a15,

c16=b31*a14+b32*a15+b33*a16,

c17=b31*a15+b32*a16,

c18=b31*a16,

c21=b23*a11+b33*a21,

c22=b22*a11+b23*a12+b32*a21+b33*a22,

c23=b21*a11+b22*a12+b23*a13+b31*a21+b32*a22+b33*a23,

c24=b21*a12+b22*a13+b23*a14+b31*a22+b32*a23+b33*a24,

c25=b21*a13+b22*a14+b23*a15+b31*a23+b32*a24+b33*a25,

c26=b21*a14+b22*a15+b23*a16+b31*a24+b32*a25+b33*a26,

c27=b21*a15+b22*a16+b31*a25+b32*a26,

c28=b21*a16+b31*a26,

c31=b13*a11+b23*a21+b33*a31,

c32=b12*a11+b22*a21+b32*a31+b13*a12+b23*a22+b33*a32,

c33=b11*a11+b12*a12+b13*a13+b21*a21+b22*a22+b23*a23+b31*a31+b32*a32+b33*a33,

c34=b11*a12+b12*a13+b13*a14+b21*a22+b22*a23+b23*a24+b31*a32+b32*a33+b33*a34,

c35=b11*a13+b12*a14+b13*a15+b21*a23+b22*a24+b23*a25+b31*a33+b32*a34+b33*a35,

c36=b11*a14+b12*a15+b13*a16+b21*a24+b22*a25+b23*a26+b31*a34+b32*a35+b33*a36,

c37=b11*a15+b12*a16+b21*a25+b22*a26+b31*a35+b32*a36,

c38=b11*a16+b21*a26+b31*a36,

c41=b13*a21+b23*a31+b33*a41,

c42=b12*a21+b22*a31+b32*a41+b13*a22+b23*a32+b33*a42,

c43=b11*a21+b12*a22+b13*a23+b21*a31+b22*a32+b23*a33+b31*a41+b32*a42+b33*a43,

c44=b11*a22+b12*a23+b13*a24+b21*a32+b22*a33+b23*a34+b31*a42+b32*a43+b33*a44,

c45=b11*a23+b12*a24+b13*a25+b21*a33+b22*a34+b23*a35+b31*a43+b32*a44+b33*a45,

c46=b11*a24+b12*a25+b13*a26+b21*a34+b22*a35+b23*a36+b31*a44+b32*a45+b33*a46,

c47=b11*a25+b12*a26+b21*a35+b22*a36+b31*a45+b32*a46,

c48=b11*a26+b21*a36+b31*a46,

c51=b13*a31+b23*a41+b33*a51,

c52=b12*a31+b22*a41+b32*a51+b13*a32+b23*a42+b33*a52,

c53=b11*a31+b12*a32+b13*a33+b21*a41+b22*a42+b23*a43+b31*a51+b32*a52+b33*a53,

c54=b11*a32+b12*a33+b13*a34+b21*a42+b22*a43+b23*a44+b31*a52+b32*a53+b33*a54,

c55=b11*a33+b12*a34+b13*a35+b21*a43+b22*a44+b23*a45+b31*a53+b32*a54+b33*a55,

c56=b11*a34+b12*a35+b13*a36+b21*a44+b22*a45+b23*a46+b31*a54+b32*a55+b33*a56,

c57=b11*a35+b12*a36+b21*a45+b22*a46+b31*a55+b32*a56,

c58=b11*a36+b21*a46+b31*a56,

c61=b13*a41+b23*a51+b33*a61,

c62=b12*a41+b22*a51+b32*a61+b13*a42+b23*a52+b33*a62,

c63=b11*a41+b12*a42+b13*a43+b21*a51+b22*a52+b23*a53+b31*a61+b32*a62+b33*a63,

c64=b11*a42+b12*a43+b13*a44+b21*a52+b22*a53+b23*a54+b31*a62+b32*a63+b33*a64,

c65=b11*a43+b12*a44+b13*a45+b21*a53+b22*a54+b23*a55+b31*a63+b32*a64+b33*a65,

c66=b11*a44+b12*a45+b13*a46+b21*a54+b22*a55+b23*a56+b31*a64+b32*a65+b33*a66,

c67=b11*a45+b12*a46+b21*a55+b22*a56+b31*a65+b32*a66,

c68=b11*a46+b21*a56+b31*a66,

c71=b13*a51+b23*a61,

c72=b12*a51+b22*a61+b13*a52+b23*a62,

c73=b11*a51+b12*a52+b13*a53+b21*a61+b22*a62+b23*a63,

c74=b11*a52+b12*a53+b13*a54+b21*a62+b22*a63+b23*a64,

c75=b11*a53+b12*a54+b13*a55+b21*a63+b22*a64+b23*a65,

c76=b11*a54+b12*a55+b13*a56+b21*a64+b22*a65+b23*a66,

c77=b11*a55+b12*a56+b21*a65+b22*a66,

c78=b11*a56+b21*a66,

c81=b13*a61,

c82=b12*a61+b13*a62,

c83=b11*a61+b12*a62+b13*a63,

c84=b11*a62+b12*a63+b13*a64,

c85=b11*a63+b12*a64+b13*a65,

c86=b11*a64+b12*a65+b13*a66,

c87=b11*a65+b12*a66,

c88=b11*a66。

307,通过第t个卷积层获取预先存储的卷积核频域矩阵。

卷积核频域矩阵是对卷积核矩阵进行倒序处理和填充后通过傅里叶变换得到的。

卷积核矩阵是预先根据样本应用数据进行训练后得到的矩阵,卷积核矩阵是用于对输入矩阵进行特征提取的矩阵。

样本应用数据是应用处理结果已知(比如:已知分类结果)的应用数据,卷积神经网络在训练时,样本应用数据作为卷积神经网络的输入,通过卷积神经网络的卷积层对样本应用数据提取卷积特征,然后通过卷积神经网络的应用层对提取的卷积特征进行应用处理,得到预测的应用处理结果。通过比较预测的应用处理结果与已知的应用处理结果之间的误差,利用误差反向传播算法对卷积神经网络中的参数进行调整(包括对卷积核矩阵中的矩阵元素进行调整),样本应用数据再次输入到调整后的卷积神经网络中,重复执行上述步骤,直到预测的应用处理结果与已知的应用处理结果之间的误差等于0或小于预定阈值时,将最后调整得到的卷积核矩阵作为训练好的卷积核矩阵,存储训练好的卷积核矩阵。

需要说明的是,卷积核频域矩阵可以由提供应用程序的服务器预先训练好,然后应用到上线使用的应用程序中。可选的,在应用程序的使用过程中,服务器可以对应用程序中的卷积神经网络的参数进行修改,应用程序在更新后使用参数修改后的卷积神经网络。

由于移动终端的应用程序中的卷积神经网络是训练好的,卷积核矩阵中的矩阵元素在一段时间内是不会变化的,因此卷积核矩阵可以预先进行傅里叶变换后存储在本地,当需要使用卷积核提取输入图像的卷积特征时,可以从本地获取预先存储的卷积核频域矩阵,从而减少对输入图像提取卷积特征时的运算量,提高卷积运算的效率。

308,通过第t个卷积层将卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵。

频域乘积矩阵是对输入矩阵提取到的特征在频域的矩阵表示。

将傅里叶变换后得到的卷积核频域矩阵与频域输入矩阵相乘,得到的频域乘积矩阵是指对通过卷积核从输入矩阵中提取到的卷积特征进行傅里叶变换的结果。

可选的,对应步骤306a至步骤306c,步骤308可以被替换成图4所示的步骤308a:

308a,通过第t个卷积层将卷积核频域矩阵与子频域输入矩阵相乘,得到子频域乘积矩阵。

将傅里叶变换后得到的卷积核频域矩阵与子频域输入矩阵相乘,得到的子频域乘积矩阵是指对通过卷积核从子输入矩阵中提取到的卷积特征进行傅里叶变换的结果。

可选的,当卷积核矩阵的数量为s(s为正整数,s>1)时,步骤308a可以包括:

s5,对于每个子频域输入矩阵,通过第t个卷积层将第k个卷积核频域矩阵与子频域输入矩阵相乘,得到第k个乘积矩阵,第k个卷积核频域矩阵是对第k个卷积核矩阵进行傅里叶变换得到的,k为正整数,1≤k≤s。

在实际应用中,卷积层对应的卷积核矩阵的数量可能不止一个,对于每个卷积核,都经过倒序处理,填充为傅里叶变换时的缓存尺寸后,通过傅里叶变换得到卷积核频域矩阵后存储在终端的存储器或asic的存储单元中。

s6,通过第t个卷积层将s个乘积矩阵进行点对点相加,得到与子频域输入矩阵对应的子频域乘积矩阵。

当存在多个卷积核时,每个卷积核提取的卷积特征不同,通过将各个乘积矩阵进行点对点相加,可以得到从该子输入矩阵提取到的所有卷积特征的傅里叶变换后的矩阵,该矩阵即子频域乘积矩阵。

309,通过第t个卷积层对频域乘积矩阵进行傅里叶逆变换得到第t个卷积层的输出矩阵。

输出矩阵是对输入矩阵提取到的特征在时域的矩阵表示。

可选的,对应步骤306a至步骤306c以及步骤308a,步骤309可以被替换成图4所示的步骤:

309a,通过第t个卷积层对子频域乘积矩阵进行傅里叶逆变换,得到子输出矩阵。

子输出矩阵是指卷积层从对应的子输入矩阵中提取到的卷积特征。

309b,通过第t个卷积层对m*n个子输出矩阵按照预定方式进行叠加,得到第t个卷积层的输出矩阵。

由于输入矩阵是拆分成子输入矩阵后分别提取卷积特征的,因此需要对根据各个子输入矩阵提取到的卷积特征(子输出矩阵)进行叠加,获取到与输入矩阵对应的卷积特征(输出矩阵)。

可选的,步骤309b可以包括:

s7,通过第t个卷积层根据卷积核矩阵的尺寸a*b确定出叠加的行数a-1和叠加的列数b-1,a、b为正整数。

s8,在第i行子输出矩阵中,通过第t个卷积层将第j个子输出矩阵的后b-1列矩阵元素与第j+1个子输出矩阵的前b-1列矩阵元素进行叠加,i、j为正整数,1≤i<m,1≤j<n。

叠加是指将第j个子输出矩阵的后b-1列矩阵元素与第j+1个子输出矩阵的前b-1列矩阵元素重叠后进行点对点相加。

s9,在第j列子输出矩阵中,通过第t个卷积层将第i个子输出矩阵的后a-1行矩阵元素与第i+1个子输出矩阵的前a-1行矩阵元素进行叠加。

叠加是指将第i个子输出矩阵的后a-1行矩阵元素与第i+1个子输出矩阵的前a-1行矩阵元素重叠后进行点对点相加。

s10,通过第t个卷积层将m*n个子输出矩阵叠加完成后得到的矩阵确定为第t个卷积层的输出矩阵。

结合参考图6,其示例性地示出了将子输出矩阵进行叠加的示意图。子输出矩阵21对应第i行第j列的子输出矩阵,子输出矩阵22对应第i行第j+1列的子输出矩阵,子输出矩阵23对应第i+1行第j列的子输出矩阵,子输出矩阵24对应第i+1行第j+1列的子输出矩阵。其中,子输出矩阵21、子输出矩阵22、子输出矩阵23、子输出矩阵24均包含(a-a+1)*(b-b+1)个矩阵元素。在将子输出矩阵21与子输出矩阵22叠加时,将子输出矩阵21的后b-1列矩阵元素与子输出矩阵22的前b-1列矩阵元素重叠后点对点相加;在将子输出矩阵23与子输出矩阵24叠加时,将子输出矩阵23的后b-1列矩阵元素与子输出矩阵24的前b-1列矩阵元素重叠后点对点相加;在将子输出矩阵21与子输出矩阵23叠加时,将子输出矩阵21的后a-1行矩阵元素与子输出矩阵23的前a-1行矩阵元素重叠后点对点相加;在将子输出矩阵22与子输出矩阵24叠加时,将子输出矩阵22的后a-1行矩阵元素与子输出矩阵24的前a-1行矩阵元素重叠后点对点相加。

在将输入矩阵划分为子输入矩阵后,不仅降低卷积核与每个子输入矩阵之间卷积运算的运算量,针对同一个输入矩阵,该输入矩阵的各个子输入矩阵可以并行运算,从而提高对输入矩阵的卷积特征提取效率。

310,将第h个卷积层的输出矩阵作为应用数据的特征,通过卷积神经网络的应用层对应用数据的特征进行应用处理。

可选的,当应用程序为图像应用程序时,应用数据为图像帧,应用处理为图像处理。

可选的,图像处理包括:人脸识别、物体识别、场景识别、物体抠图、图像切割和图像分类中的至少一种。

本申请实施例中主要针对二维的输入矩阵进行说明,在实际应用中,对于一维数据输入,本申请实施例中的方案也适用。结合参考图7,卷积核11=[b1,b2,b3],输入矩阵25=[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12],然后将输入矩阵25拆分为子输入矩阵26=[a1,a2a,a4,a5,a6]和子输入矩阵27=[a7,a8,a9,a10,a11,a12],将卷积核11与子输入矩阵26进行卷积运算后得到子输出矩阵31=[b3a1,b3a2+b2a1,b3a3+b2a2+b1a1,b3a4+b2a3+b1a2,b3a5+b2a4+b1a3,b3a6+b2a5+b1a4,b2a6+b1a5,b1a6],将卷积核11余子输入矩阵27进行卷积运算后得到子输出矩阵32=[b3a7,b3a8+b2a7,b3a9+b2a8+b1a7,b3a10+b2a9+b1a8,b3a11+b2a10+b1a9,b3a12+b2a11+b1a10,b2a12+b1a11,b1a12],由于卷积核11的尺寸为3,因此将子输出矩阵31的后2个矩阵元素与子输出矩阵32的前2个矩阵元素重叠后相加得到输出矩阵33=[b3a1,b3a2+b2a1,b3a3+b2a2+b1a1,b3a4+b2a3+b1a2,b3a5+b2a4+b1a3,b3a6+b2a5+b1a4,b3a1+b2a6+b1a5,b3a2+b2a1+b1a6,b3a3+b2a2+b1a1,b3a4+b2a3+b1a2,b3a5+b2a4+b1a3,b3a6+b2a5+b1a4,b2a6+b1a5,b1a6]。

另外,当卷积层对应多个卷积核矩阵时,卷积计算过程请参见图8,首先执行401,输入矩阵分块,示例性的,将8*4的输入矩阵分成两个4*4的子输入矩阵,然后执行402,子输入矩阵分别进行ftt,示例性的,将4*4的子输入矩阵填充为6*6后进行fft,得到两个子输入频域矩阵,然后执行403,从存储器获取卷积核频域矩阵,示例性的,卷积核频域矩阵的尺寸为6*6,且存在两个卷积核频域矩阵,然后执行404,卷积核频域矩阵与子输入频域矩阵点对点相乘得到子频域乘积矩阵矩阵,示例性的,当存在2个子输入矩阵,2个卷积核时,得到的子频域乘积矩阵的个数为4,然后执行405,将通过同一个卷积核得到的子频域乘积矩阵进行点对点相加,示例性的,由于存在两个卷积核,通过点对点相加得到两个相加后的子频域乘积矩阵,然后执行406,对点对点相加后的子频域乘积矩阵进行ifft,示例性的,由于存在两个相加后的子频域乘积矩阵,通过ifft得到两个子输出矩阵,最后执行407,将子输出矩阵进行叠加,叠加得到的矩阵即输出矩阵。

由于本申请实施例中的卷积计算方法应用在终端的处理器或asic中,当该方法应用在终端的处理器中时,卷积计算的处理过程请参见图9,当该方法应用在asic中时,卷积计算的处理过程请参见图10。

如图9所示,该卷积计算方法涉及处理器41和存储器42之间的交互,存储器42中存储由卷积核频域矩阵43。卷积计算方法包括两部分:离线操作60和实时操作70。离线操作60包括61,获取fft缓存时的尺寸,62,计算卷积核频域矩阵,63,将卷积核频域矩阵存储到存储器42中;实时操作70包括71,处理器41从存储器42获取卷积核频域矩阵,72,处理器41根据fft缓存时的尺寸对输入矩阵分块,73,处理器41对子输入矩阵进行fft,74,处理器41将卷积核频域矩阵与子输入频域矩阵相乘,75,进行ifft,76,将ifft结果进行叠加,叠加后得到输出矩阵44,其中71与72可以同时执行。

如图10所示,该卷积计算方法涉及处理器41、存储器42、asic51和存储单元52,存储器42中存储有卷积核频域矩阵43,存储单元52中存储有卷积核频域矩阵43。卷积计算方法包括两部分:离线操作60和实时操作80。离线操作60包括61,获取fft缓存时的尺寸,62,计算卷积核频域矩阵,63,将卷积核频域矩阵存储到存储器42中;实时操作80包括81,asic51从存储单元52获取卷积核频域矩阵,82,asic51根据fft缓存时的尺寸对输入矩阵分块,83,asic51对子输入矩阵进行fft,84,asic51将卷积核频域矩阵与子输入频域矩阵相乘,85,进行ifft,86,将ifft结果进行叠加,叠加后得到输出矩阵44,其中81与82可以同时执行。

综上所述,本申请实施例提供的卷积计算方法,由于将卷积神经网络应用到移动终端后,通常卷积神经网络不进行训练或不进行在线实时训练,因此移动终端上的卷积神经网络只需要实现前向预测,而不需要实现后向误差传播,此时卷积核矩阵在一段时间内会保持不变,因此可以将卷积核矩阵预先进行傅里叶变换并存储在移动终端中,在移动终端上的应用程序通过卷积神经网络的第t个卷积层获取到第t个卷积层的输入矩阵时,只需要通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵,然后将预先存储的卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵,对频域乘积矩阵进行傅里叶逆变换,即可得到第t个卷积层的输出矩阵。由于输入矩阵和卷积核均通过傅里叶变换来对卷积运算加速,并且卷积核矩阵是预先经过傅里叶变换后存储的,在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而解决了在对卷积层的每次运算中,都需要对输入矩阵和卷积核矩阵分别进行傅里叶变换,导致卷积运算时的运算次数较多,卷积运算效率较低,不能满足在移动终端中对卷积运算的实时性要求的问题,达到了减少在接收到输入矩阵时卷积层的运算量,提高卷积运算效率的效果。

另外,相比目前的卷积算法,本申请的卷积运算量预计下降50%以上,降低了深度学习软件在移动终端上推广的门槛。

针对步骤301至步骤304,通过将卷积层对应的卷积核矩阵预先进行傅里叶变换并存储,使得卷积层在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而降低接收到输入矩阵时的运算量,提高卷积运算效率。

另外,由于卷积神经网络中的卷积系数是常规卷积系数的反序,因此对卷积核矩阵中的矩阵元素进行倒序处理,使得对卷积核矩阵能够正常运算。

另外,由于需要对卷积核矩阵进行傅里叶变换,因此将倒序处理得到的第一矩阵填充为傅里叶变换时的缓存尺寸相同,从而利用傅里叶变换对卷积运算进行加速。

针对步骤306a至步骤306c,通过将输入矩阵划分为体积较小的子输入矩阵,从而可以降低对输入矩阵进行卷积运算的运算量,并且可以同时对多个子输入矩阵进行卷积运算,从而缩短卷积运算的运算时间,提高卷积运算效率。

针对步骤s5至步骤s6,在第t个卷积层对应多个卷积核矩阵的情况下,通过将根据各个卷积核矩阵和划分的子输入矩阵计算得到的乘积矩阵进行点对点相加,使得计算得到的子频域乘积矩阵能够包含通过各个卷积核矩阵提取到的卷积特征,进而使得最终得到的第t个卷积层的输出矩阵能够反映各个卷积核矩阵提取到的卷积特征。

针对步骤s1至步骤s4,通过根据傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸确定子输入矩阵的尺寸,将输入矩阵按照确定出的子输入矩阵的尺寸划分为各个子输入矩阵,使得子输入矩阵按照傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸进行傅里叶变换。

针对步骤s7至步骤s10,通过对根据各个子输入矩阵计算得到的子输出矩阵进行叠加,即根据各个子输入矩阵进行基于傅里叶变换的卷积运算得到的结果进行叠加,使得叠加得到的输出矩阵与对输入矩阵进行卷积运算的结果相同,从而能够得到正确的第t个卷积层的输出矩阵。

图11是本申请一个实施例提供的卷积计算装置的结构方框图,该装置应用在移动终端上安装的具有卷积神经网络的应用程序中,该移动终端内包括处理器或包括处理器和集成电路芯片。如图11所示,该卷积计算装置可以包括:第一获取单元510、第二获取单元520、变换单元530、第三获取单元540、计算单元550、逆变换单元560和处理单元570。

第一获取单元510,用于实现上述步骤201、步骤304以及其他任意隐含或公开的与接收相关的功能。

第二获取单元520,用于实现上述步骤202、步骤305以及其他任意隐含或公开的与获取相关的功能。

变换单元530,用于实现上述步骤203、步骤306以及其他任意隐含或公开的与变换相关的功能。

第三获取单元540,用于实现上述步骤204、步骤307以及其他任意隐含或公开的与获取相关的功能。

计算单元550,用于实现上述步骤205、步骤301、步骤302、步骤303、步骤306a、步骤306b、步骤306c、步骤s1、步骤s2、步骤s3、步骤s4、步骤308、步骤308a、步骤s5、步骤s6、步骤309a、步骤309b、步骤s7、步骤s8、步骤s9、步骤s10以及其他任意隐含或公开的与计算相关的功能。

逆变换单元560,用于实现上述步骤206、步骤309以及其他任意隐含或公开的与逆变换相关的功能。

处理单元570,用于实现上述步骤207、步骤310以及其他任意隐含或公开的与处理相关的功能。

综上所述,本申请实施例提供的卷积计算装置,由于将卷积神经网络应用到移动终端后,通常卷积神经网络不进行训练或不进行在线实时训练,因此移动终端上的卷积神经网络只需要实现前向预测,而不需要实现后向误差传播,此时卷积核矩阵在一段时间内会保持不变,因此可以将卷积核矩阵预先进行傅里叶变换并存储在移动终端中,在移动终端上的应用程序通过卷积神经网络的第t个卷积层获取到第t个卷积层的输入矩阵时,只需要通过第t个卷积层对输入矩阵进行傅里叶变换得到频域输入矩阵,然后将预先存储的卷积核频域矩阵与频域输入矩阵相乘得到频域乘积矩阵,对频域乘积矩阵进行傅里叶逆变换,即可得到第t个卷积层的输出矩阵。由于输入矩阵和卷积核均通过傅里叶变换来对卷积运算加速,并且卷积核矩阵是预先经过傅里叶变换后存储的,在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而解决了在对卷积层的每次运算中,都需要对输入矩阵和卷积核矩阵分别进行傅里叶变换,导致卷积运算时的运算次数较多,卷积运算效率较低,不能满足在移动终端中对卷积运算的实时性要求的问题,达到了减少在接收到输入矩阵时卷积层的运算量,提高卷积运算效率的效果。

另外,相比目前的卷积算法,本申请的卷积运算量预计下降50%以上,降低了深度学习软件在移动终端上推广的门槛。

通过将卷积层对应的卷积核矩阵预先进行傅里叶变换并存储,使得卷积层在接收到输入矩阵时可以直接获取存储的卷积核频域矩阵,从而降低接收到输入矩阵时的运算量,提高卷积运算效率。

另外,由于卷积神经网络中的卷积系数是常规卷积系数的反序,因此对卷积核矩阵中的矩阵元素进行倒序处理,使得对卷积核矩阵能够正常运算。

另外,由于需要对卷积核矩阵进行傅里叶变换,因此将倒序处理得到的第一矩阵填充为傅里叶变换时的缓存尺寸相同,从而利用傅里叶变换对卷积运算进行加速。

通过将输入矩阵划分为体积较小的子输入矩阵,从而可以降低对输入矩阵进行卷积运算的运算量,并且可以同时对多个子输入矩阵进行卷积运算,从而缩短卷积运算的运算时间,提高卷积运算效率。

在第t个卷积层对应多个卷积核矩阵的情况下,通过将根据各个卷积核矩阵和划分的子输入矩阵计算得到的乘积矩阵进行点对点相加,使得计算得到的子频域乘积矩阵能够包含通过各个卷积核矩阵提取到的卷积特征,进而使得最终得到的第t个卷积层的输出矩阵能够反映各个卷积核矩阵提取到的卷积特征。

通过根据傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸确定子输入矩阵的尺寸,将输入矩阵按照确定出的子输入矩阵的尺寸划分为各个子输入矩阵,使得子输入矩阵按照傅里叶变换时的缓存尺寸与卷积核矩阵的尺寸进行傅里叶变换。

通过对根据各个子输入矩阵计算得到的子输出矩阵进行叠加,即根据各个子输入矩阵进行基于傅里叶变换的卷积运算得到的结果进行叠加,使得叠加得到的输出矩阵与对输入矩阵进行卷积运算的结果相同,从而能够得到正确的第t个卷积层的输出矩阵。

需要说明的是:上述实施例提供的卷积计算装置在计算卷积时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的处理器或asic的处理单元的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的卷积计算装置与卷积计算方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图12是本申请一个实施例提供的终端的结构方框图。本申请实施例中,终端可以为手机、平板电脑、电脑、膝上型便携计算机、台式计算机等。

如图11所示,终端600可以包括一个或多个如下组成部分:处理器610、存储器620、asic630、与asic630对应的存储单元640和总线650。

处理器610包括一个或者一个以上处理核心,存储器620通过总线650与处理器610相连,存储器620用于存储计算机程序指令和数据,处理器610执行存储器620中的计算机程序指令时实现图2、图3和图4所示方法实施例中的卷积计算方法的步骤或实现图2、图3和图4所述方法实施例中的卷积计算方法中有关对卷积核矩阵进行预先存储的步骤。

asic630包括一个或者一个以上处理核心,存储单元640通过总线650与asic630相连,存储单元640用于存储计算机程序指令和数据,asic630执行存储单元640中的计算机程序指令时实现图2、图3和图4所示方法实施例中的卷积计算方法中有关对输入矩阵进行实时处理的步骤。

其中,asic630和存储单元640为可选的,图2、图3和图4所述方法实施例中的卷积计算方法的全部步骤可以只由处理器610执行存储器620中的计算机程序指令来实现。

可选的,存储器620和存储单元640为同一存储设备。

可选的,存储器620或存储单元640可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(英文:staticrandomaccessmemory,简称:sram)、电可擦可编程只读存储器(英文:electricallyerasableprogrammableread-onlymemory,简称:eeprom)、可擦除可编程只读存储器(英文:erasableprogrammablereadonlymemory,简称:eprom)、可编程只读存储器(英文:programmablereadonlymemory,简称:prom)、只读存储器(英文:readonlymemory,简称:rom)、磁存储器、快闪存储器、磁盘或光盘。

上述结构示意仅为对终端600的示意性说明,终端600可以包括更多或更少的部件,比如终端600可以不包括发送器,或者,终端600还包括传感器、显示屏、电源等其它部件,本实施例不再赘述。

本申请实施例还提供一种计算机可读介质,其上存储有计算机程序指令,计算机程序指令被处理器610或asic630执行时实现图2、图3和图4所示方法实施例中的卷积计算方法的步骤。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1