神经网络中的卷积计算方法和电子设备与流程

文档序号:14037592阅读:237来源:国知局
神经网络中的卷积计算方法和电子设备与流程

本申请涉及神经网络技术领域,且更具体地,涉及一种神经网络中的卷积计算方法和电子设备。



背景技术:

基于卷积神经网络的深度学习技术能够以较高的准确率进行图像识别和检测、语音识别等,因此被广泛地应用于安全监控、辅助驾驶、智能陪伴机器人、智能医疗等领域。

由于卷积神经网络中的运算量通常很大,减少神经网络的参数量和计算量成为现在研究的一个热点方向。移动网络(mobilenet)就是最新提出的一种特殊的卷积神经网络,其通过将传统的三维卷积操作分解成逐层卷积(depthwise)和逐点卷积(pointwise)两个卷积操作,达到减小计算量的目的,但是计算精度却和传统的卷积相差很少。



技术实现要素:

关于mobilenet的现有实现方案,无论是基于通用处理器(cpu),专用图形处理器(gpu),还是专用处理芯片,都需要先计算完逐层卷积操作的输出结果,然后再将它们作为逐点卷积操作的输入数据,再进行计算。

这样做的缺点是,当输入输出数据量比较大时,需要较大的片内随机存储器(sram)缓存中间结果。然而,片内sram大小是固定的,如果遇到片内sram大小不足以缓存中间结果的情况,就需要将逐层卷积操作拆分为多次计算,并将每次计算结果写入到片外存储器(ddr)中,直到将逐层卷积操作的计算结果全部计算完成并写入片外存储器(ddr)后,再分批将这些结果从ddr中读出,进行逐点卷积计算。显然,这将给有限的数据传输带宽带来极大的负担,并且导致系统功耗增加。

为了解决上述技术问题,提出了本申请。本申请的实施例提供了一种神经网络中的卷积计算方法和电子设备,其可以减小用于存储中间结果的存储空间。

根据本申请的一个方面,提供了一种神经网络中的卷积计算方法,包括:根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值;以及重复上述操作,以得到所有点在所有逐点卷积输出通道上的输出特征值。

在一个实施例中,根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值包括:根据输入特征图和逐层卷积核进行逐层卷积计算,以得到第一预定数目p个点在所有逐层卷积输出通道上的中间特征值;以及根据所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

在一个实施例中,根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值包括:根据所述输入特征图和所述逐层卷积核进行逐层卷积计算,以得到第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值;根据所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和;分别将所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和与所述第一预定数目p个点的前次累加计算结果进行累加计算,以生成所述第一预定数目p个点的本次累加计算结果;以及重复上述操作,根据所述第一预定数目p个点在下第二预定数目m个逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,并相应地执行后续操作,直到所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值都完成逐点卷积计算和累加计算为止,所述第一预定数目p个点的最终累加计算结果为所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

根据本申请的另一方面,提供了一种电子设备,包括:处理器;以及存储器,在所述存储器中存储有计算机程序指令,所述计算机程序指令在被所述处理器运行时使得所述处理器执行上述的神经网络中的卷积计算方法。

根据本申请的另一方面,提供了一种计算机程序产品,包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述的神经网络中的卷积计算方法。

根据本申请的另一方面,提供了一种计算机可读写存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述的神经网络中的卷积计算方法。

与现有技术相比,采用根据本申请实施例的神经网络中的卷积计算方法和电子设备,可以根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值;以及重复上述操作,以得到所有点在所有逐点卷积输出通道上的输出特征值。因此,可以减小用于存储中间结果的存储空间,从而实现更加高效的卷积神经网络。

附图说明

通过结合附图对本申请实施例进行更详细的描述,本申请的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。在附图中,相同的参考标号通常代表相同部件或步骤。

图1图示了传统卷积神经网络中的卷积核的示意图。

图2a图示了mobilenet中逐层卷积操作的卷积核的示意图

图2b图示了mobilenet中逐点卷积操作的卷积核的示意图。

图3图示了根据本申请实施例的卷积计算方法的流程图。

图4图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。

图5图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤的流程图。

图6图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤的原理图。

图7图示了根据本申请第一实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。

图8图示了根据本申请第一实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的原理图。

图9图示了根据本申请实施例的逐层卷积计算的原理图。

图10图示了根据本申请实施例的逐点卷积计算的原理图。

图11图示了根据本申请第二实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。

图12图示了根据本申请第二实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的原理图。

图13图示了根据本申请第三实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。

图14图示了根据本申请第三实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和的步骤的原理图。

图15图示了根据本申请实施例的电子设备的框图。

具体实施方式

下面,将参考附图详细地描述根据本申请的示例实施例。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。

申请概述

卷积神经网络通常可以包含多个卷积层。在每个卷积层中,使用该层的卷积核对该层的输入特征图(也称为输入特征数据或输入特征值)执行该层的卷积运算,以获得该层的输出特征图(也称为输出特征数据或输出特征值)。在卷积神经网络的各层中,输入特征图可以具有一定的宽度和高度,并且可以具有一定的通道数(也称为深度)。各个卷积核可以具有相同(或不同)的宽度和高度,其小于(或等于)输入特征图的宽度和高度,并且可以具有相同的通道数,其等于输入特征图的通道数。

作为一种轻量级的神经网络,mobilenet采用了深度可拆分卷积(depthwiseseparableconvolutions)的思想,在计算卷积(例如,3*3卷积核或更大尺寸)的时候并不对通道进行融合,而是采用逐层(或称为逐通道channel-wise)和1*1逐点(pointwise)的方法进行分解卷积,从而在速度、模型大小上进行了优化,并保持计算精度基本不变。

下面,结合图1到图2b来描述传统卷积神经网络的卷积计算过程与mobilenet的卷积计算过程之间的对比。

图1图示了传统卷积神经网络中的卷积核的示意图,而图2a图示了mobilenet中逐层卷积操作的卷积核的示意图,图2b图示了mobilenet中逐点卷积操作的卷积核的示意图。

如图1所示,假设传统卷积神经网络中的卷积核大小为r行s列,共有m个通道(channel),n个这样的卷积核,那么与输入特征图进行计算后输出一个点的计算量为r*s*m*n。假设输入特征图大小为x行y列,共有m个通道,那么整个卷积计算的计算量为r*s*m*n*x*y。用公式表示,某个输出点(x,y,n)的值为:

图2a所示的逐层(depthwise)卷积和图2b所示的逐点(pointwise)卷积的级联是与图1中传统卷积操作对应的mobilenet卷积操作。

图2a中的逐层卷积可以看成将传统卷积中的1个卷积核的m个通道拆分成m个逐层卷积核,每个逐层卷积核大小为r行s列,只有1个通道。这m个逐层卷积核分别与输入特征图的m个通道做卷积,但不累加,得到m个通道的输出结果。整个卷积计算的计算量为r*s*m*1*x*y。用公式表示,某个输出点(x,y,m)的值为:

图2b中的逐点卷积与传统的卷积操作完全一样,只不过卷积核的大小为1行1列,共有m个通道,n个这样的卷积核。这n个逐层卷积核分别与输入特征图做卷积,得到n个通道的输出结果。整个卷积计算的计算量为1*1*m*n*x*y。用公式表示,某个输出点(x,y,n)的值为:

可以看出,mobilenet卷积操作将传统卷积的计算量从r*s*m*n*x*y降低为r*s*m*x*y+m*n*x*y,显著地减小了卷积操作的计算量。因此,可以看出在r*s为3*3的情况下,其计算量是等效的传统卷积的九分之一到八分之一。

目前,mobilenet的现有实现方案都需要先计算逐层卷积操作的中间输出结果,将它们不断存储到片内sram中,直到全部计算完毕,再从片内sram中读取它们并作为逐点卷积操作的输入数据,进行计算。由于有大量的逐层卷积中间输出结果要存储在芯片内部随机存储器中,就需要大量的片内存储器,从而造成芯片面积和成本增加,或者如果将中间结果存储到片外随机存储器中,则将给有限的数据传输带宽带来更大负担,并且增加系统功耗。

针对该技术问题,考虑到mobilenet网络特殊的卷积结构——逐层卷积(depthwise)紧接逐点卷积(pointwise),本申请提出一种神经网络中的卷积计算方法、装置、电子设备、计算机程序产品和计算机可读存储介质,其可以根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值,并且重复上述操作,以得到所有点在所有逐点卷积输出通道上的输出特征值。因此,可以减小用于存储逐层卷积中间输出结果的存储空间,从而实现更加高效的卷积神经网络。

本领域技术人员可以理解,根据本申请实施例的卷积计算方法不但可以应用于mobilenet卷积神经网络,还可以应用于其他类型的卷积神经网络,只要其包括逐层卷积紧接逐点卷积这样的卷积计算过程即可,因此,本申请实施例并不意在对卷积神经网络的类型进行任何限制。

在介绍了本申请的基本原理之后,下面将以mobilenet为例,参考附图来具体介绍本申请的各种非限制性实施例。

示例性方法

图3图示了根据本申请实施例的卷积计算方法的流程图。

如图3所示,根据本申请实施例的卷积计算方法可以包括:

在步骤s110中,根据输入特征图、逐层卷积核、和逐点卷积核进行逐层卷积计算和逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

可以根据存储器中的可用空间、逐层卷积计算单元的数目、和所述输入特征图的宽高维度和输入通道数维度中的至少一个来确定所述第一预定数目p。

例如,该存储器可以是片内随机存储器(sram),以实现较快的存取速度,并避免占用数据传输带宽。然而,本申请不限于此。例如,该存储器诸如片外存储器(ddr)之类的其他存储器。该存储器中的可用空间可以用于缓存逐层卷积操作的中间输出结果。

例如,在当前的卷积层的宽度和高度较大(即,点数较多)、通道数较小(即,深度很浅)(例如,当前层处于整个卷积神经网络的开始几层)时,可以将第一预定数目p设置为较大的值。相反地,在当前的卷积层的宽度和高度较小(即,点数较少)、通道数较大(即,深度很深)(例如,当前层处于整个卷积神经网络的后续几层)时,可以将p设置为较小的值。

假设逐层卷积有m个通道(或称为有m个逐层卷积核),存储器中的可用空间需要缓存逐层卷积操作的中间输出结果,即需要缓存p*m个中间特征值。当该特征值是未经量化的数据时,可用空间的容量c应大于等于p*m*32个比特(bit),当该特征值是经8比特量化的数据时,可用空间的容量c大于等于p*m*8个比特。因此,从另一个角度可以看出,在可用空间的容量c固定的情况下,如果不采用量化,则第一预定数目p可以取c/(m*32);如果采用量化,则第一预定数目p可以取c/(m*8)。

此外,第一预定数目p还可以受限于逐层卷积计算单元(例如,乘加单元mac)的数目,其可以是乘加单元的约数。

在步骤s120中,重复上述操作(即,步骤s110),以得到所有点在所有逐点卷积输出通道上的输出特征值。

例如,再次执行步骤s110,计算下第一预定数目p个点在所有逐点卷积输出通道上的输出特征值,并且不断重复步骤s110,直到得到所有点在所有逐点卷积输出通道上的输出特征值为止。

如果在最后一次计算的过程中,剩余的点数不足以产生p个点的输出特征值,则可以通过填充(例如,填充0)方式来实现。替换地,也可以通过减少工作的卷积计算单元等其他方式来实现。

根据现有实现方案,先计算逐层卷积操作的全部中间输出结果并进行存储。假设作为逐层卷积操作的中间输出结果,在高度和宽度维度共有h行w列。在本申请的实施例中,根据mobilenet中逐层卷积紧接逐点卷积的特点,不是等待h*w个中间输出点全部计算完之后再计算逐点卷积操作,而是在仅计算p(p小于h*w,优选地远小于h*w,当然p也可以等于h*w)个点的逐层卷积结果后,马上进行逐点卷积操作,从而将逐层卷积操作输出的中间结果所需的存储空间减小到原先的p/(h*w),显著减小了用于存储逐层卷积中间输出结果的存储空间。假设逐层卷积操作的中间输出数据量为h*w*m,那么在本申请的实施例中,只需要片内存储资源有p*m(可以远小于h*w*m)大小,就可以避免由于片内存储空间不足而将逐层卷积结果分批写到片外存储器、直到全部逐层卷积操作输出的中间结果都计算完毕、再分批读入进行逐点卷积计算的复杂过程。根据统计,在片内存储资源不足以存下一整层卷积输出结果,但可以存下一整层结果的p/(h*w)情况下,本发明将mobilenet网络的数据传输带宽减少50%左右。

下面,将在各个实施例中详细描述根据本申请实施例的对输入特征图执行逐层卷积计算和逐点卷积计算来得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s110。

需要说明的是,尽管以各个实施例分别进行描述,但是在可能的情况下,各个实施例也可以全部或部分地组合在一起使用。

第一实施例

在本申请的第一实施例中,为了得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值,可以(1)执行逐层卷积操作,以得到第一预定数目p个点在所有逐层卷积输出通道上的中间特征值;(2)根据该中间特征值进行逐点卷积操作,以得到p个点在一个或多个逐点卷积输出通道上的输出特征值;(3)重复上述操作(2),以得到p个点在所有逐点卷积输出通道上的输出特征值。

图4图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。

如图4所示,根据本申请第一实施例,计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s110可以包括:

在步骤s210中,根据输入特征图和逐层卷积核进行逐层卷积计算,以得到第一预定数目p个点在所有逐层卷积输出通道上的中间特征值。

在当前卷积层中,获取输入特征图和逐层卷积核,进行逐层卷积计算。假设输入特征图大小为x行y列,共有m个通道。相应地,逐层卷积核有m个,每个逐层卷积核大小为r行s列,只有1个通道。在进行逐层卷积计算时,输入特征图的第一个通道与第一个逐层卷积核进行卷积操作,以得到中间特征图的第一个通道,输入特征图的第二个通道与第二个逐层卷积核进行卷积操作,以得到中间特征图的第二个通道,以此类推,从而得到包括中间特征值的中间特征图,中间特征图大小为h行w列,共有m个通道。当逐层卷积计算的步长为1、填充(padding)为1时,h=r并且w=s。

在第一实施例中,与现有技术不同,不是直接将所有的h*w个点在所有的m个逐层卷积输出通道上的中间特征值全部计算完,而是仅计算其中p个点在所有m个通道上的中间特征值。

在步骤s220中,根据所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

获取逐点卷积核,对p个点在所有m个通道上的中间特征值进行逐点卷积计算,以得到p个点在所有逐点卷积输出通道上的输出特征值。

如上所述,中间特征图大小为h行w列,共有m个通道。相应地,逐点卷积核有n个,每个逐点卷积核大小为1行1列,有m个通道。在进行逐点卷积计算时,中间特征图的所有通道与第一个逐点卷积核的所有通道进行卷积操作,以得到输出特征图的第一个通道,中间特征图的所有通道与第二个逐点卷积核进行卷积操作,以得到输出特征图的第二个通道,以此类推,从而得到包括输出特征值的输出特征图,输出特征图大小为e行f列,共有n个通道。当逐点卷积计算的步长为1时,e=h并且f=w。

首先,将结合图5和图6,描述对输入特征图执行逐层卷积计算、以得到第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤s210。

图5图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤的流程图。图6图示了根据本申请第一实施例的计算第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤的原理图。

如图5所示,计算第一预定数目p个点在所有逐层卷积输出通道上的中间特征值的步骤s210可以包括:

在步骤s211中,根据所述输入特征图和所述逐层卷积核进行逐层卷积计算,以得到所述第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值。

例如,所述第二预定数目m可以是根据逐层卷积计算单元的数目和所述第一预定数目p来确定的。例如,基于计算效率考虑,希望使得硬件电路中的逐层卷积计算单元满负荷工作。在此情况下,第二预定数目m*第一预定数目p=逐层卷积计算单元的数目mac。

假设有512个用于逐层卷积计算的乘加单元,那么例如,可以每次同时计算32个点(p=32)、16个通道(m=16)的逐层卷积计算。如上所述,也可以出于其他考虑来选择不同的p和m的值。例如,在当前的卷积层的宽度和高度较大、通道数较小时,可以将p设置为更大的值,例如,64、128等,相应地,将m设置为更小的值,例如,8、4等。相反地,在当前的卷积层的宽度和高度较小、通道数较大时,可以将p设置为更小的值,例如,16、8等,相应地,将m设置为更大的值,例如,32、64等。

例如,如图6所示,可以先根据输入特征图(1)和逐层卷积核(1)计算中间特征图(1)。在图6中,输入特征图(1)是输入特征点的集合,其具有p个点、m个输入通道,逐层卷积核(1)是m个逐层卷积核的集合。

在一个示例中,该步骤s211可以包括:

子步骤1:从所述输入特征图中读取第一预定数目p组点在第二预定数目m个输入通道上的输入特征值。

例如,可以以逐层卷积核中的权重值的宽高(如图6中逐层卷积核(1)中的阴影所示,即r*s)为一组点的宽高(如图6中输入特征图(1)中的阴影所示)、以所述逐层卷积计算的步长为两组点之间的读取步长,从所述输入特征图(如图6中的输入特征图所示)中读取所述第一预定数目p组点在所述第二预定数目m个输入通道上的输入特征值。

取决于读取步长,p组点中每相邻两组点之间可能具有重叠部分。

例如,在第一次执行时,可以从输入特征图中读取前p组点在前m个输入通道上的输入特征值(如图6中输入特征图(1)中所示的输入特征值)。

子步骤2:与所述第一预定数目p组点在所述第二预定数目m个输入通道上的输入特征值对应地,读取对应的第二预定数目m个逐层卷积核中的权重值。

例如,在第一次执行时,可以从逐层卷积核中(如图6中的m个逐层卷积核所示)中读取前m个逐层卷积核中的权重值(如图6中逐层卷积核(1)中所示的权重值)。

子步骤3:分别对所述第一预定数目p组点在所述第二预定数目m个输入通道上的输入特征值与对应的第二预定数目m个逐层卷积核中的权重值进行逐层卷积计算,以得到与所述第一预定数目p组点分别对应的所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值。

例如,可以根据输入特征图(1)和逐层卷积核(1)计算中间特征图(1)。

例如,在子步骤3中,可以针对所述第一预定数目p组点中的每组点,执行以下操作:(1)分别对该组点中的一个点在所述第二预定数目m个输入通道上的输入特征值与对应的第二预定数目m个逐层卷积核中的相应一个权重值进行乘法计算,以得到该组点的本次乘法计算结果;(2)分别将该组点的本次乘法计算结果与该组点的前次乘法计算结果进行累加计算,所述前次乘法计算结果是分别对该组点中的上一个点在所述第二预定数目m个输入通道上的输入特征值与对应的第二预定数目m个逐层卷积核中的相应上一个权重值进行乘法计算所得到的;以及(3)重复上述操作(1)和(2),分别对该组点中的下一个点在所述第二预定数目m个输入通道上的输入特征值与对应的第二预定数目m个逐层卷积核中的相应下一个权重值进行乘法计算并相应地执行后续操作,直到该组点中的所有点在所述第二预定数目m个输入通道上的输入特征值都完成乘法计算和累加计算为止,该组点的最终的累加计算结果为与该组点对应的一个点(如图6中中间特征图(1)中的阴影所示)在所述第二预定数目m个逐层卷积输出通道上的中间特征值。

在对该组点中的第一个点进行乘法计算之后,由于该组点的前次乘法计算结果不存在或者说为0,所以无需执行累加或者说累加计算结果即为乘法计算结果本身。

如图6所示,一组点中共有r*s个点,即在子步骤(3)中,针对一组点要经过r*s次乘法计算和相应的累加计算。

通过上述计算,可以得到所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值(如图6中中间特征图(1)中所示的中间特征值)。

例如,可以在步骤s211之后,在存储器中存储所述第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值。换言之,在得到所述第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值之后,在存储器的可用空间中存储每个中间特征值。

根据当前的卷积层的设计参数,在得到各个中间特征值之后、存储它们之前,还可以对每个中间特征值执行以下各项中的至少一个:激活操作和量化操作。

神经网络中如果不加入激活函数,其一定程度可以看成线性表达,最后的表达能力不好,如果加入一些非线性的激活函数,整个网络中就引入了非线性部分,增加了网络的表达能力。目前比较流行的激活函数主要包括sigmoid、tanh、relu、softmax等。

此外,还可以对计算数据引入量化和反量化的操作。例如,可以通过移位或者乘除法将高精度输出数据压缩为低精度输出数据,从而减少各个数据在存储器中占用的存储空间,充分提高存取速度。

例如,未经量化的高精度数据可以为32比特,而量化后的低精度数据可以8比特,从而节省4倍的存储空间。

例如,可以先执行可选的激活操作,然后再执行可选的量化操作。

在步骤s212中,重复上述操作(即,步骤s211),根据所述输入特征图和所述逐层卷积核进行逐层卷积计算,以得到所述第一预定数目p个点在下第二预定数目m个逐层卷积输出通道上的中间特征值,并相应地执行后续操作,直到得到所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值为止。

例如,接下来,如图6所示,可以根据输入特征图(2)和逐层卷积核(2)计算中间特征图(2),以此类推,根据输入特征图(z)和逐层卷积核(z)计算中间特征图(z)。例如,如果在最后一次计算的过程中,剩余的通道数和逐层卷积核个数不足以读取m个通道的输入特征值和m个逐层卷积核中的权重值,则可以通过填充(例如,填充0)方式来实现。替换地,也可以通过减少工作的逐层卷积计算单元等其他方式来实现。

最后,中间特征图(1)到中间特征图(z)的组合,也就是包括作为逐层卷积操作中间输出结果的中间特征值的完整中间特征图,中间特征图大小为p个点,共有m个通道,如图6中的中间特征图所示。

接下来,将结合图7和图8,描述对中间特征图执行逐点卷积计算、以得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s220。

图7图示了根据本申请第一实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。图8图示了根据本申请第一实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的原理图。

如图7所示,根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s220可以包括:

在步骤s221中,分别根据所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值和第四预定数目n个逐点卷积核中所有逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的输出特征值。

例如,第四预定数目n小于等于逐点卷积核的总数n。此外,第四预定数目n还可以受限于逐点卷积计算单元(例如,乘加单元mac)的数目,其可以是乘加单元的约数。

例如,如图8所示,可以先根据中间特征图和逐点卷积核(1)计算输出特征图(1)。在图8中,逐点卷积核(1)是n个逐点卷积核的集合。

在一个示例中,该步骤s221可以包括:

子步骤1:从所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值(如图8中的中间特征图所示)中,读取所述第一预定数目p个点在第三预定数目m’个逐层卷积输出通道上的中间特征值(如图8中中间特征图(1)中所示的中间特征值)。

例如,所述第三预定数目m’和所述第四预定数目n是根据逐点卷积计算单元的数目和所述第一预定数目p来确定的。例如,基于计算效率考虑,希望使得硬件电路中的逐点卷积计算单元满负荷工作。在此情况下,第三预定数目m’*第四预定数目n*第一预定数目p*=逐点卷积计算单元的数目mac’。

例如,出于不同的硬件设计,逐点卷积计算单元的数目mac’可以等于或不等于逐层卷积计算单元的数目mac。此外,第三预定数目m’可以小于等于第二预定数目m。

假设同样有512个逐点卷积计算的乘加单元,那么例如,可以每次同时计算32个点(p=32)、4个通道(m’=4)、4个卷积核(n=4)的逐点卷积计算。如上所述,也可以出于其他考虑来选择不同的m和n的值。例如,在当前的卷积核的个数较多、通道数较小时,在p=32不变的情况下,可以将n设置为更大的值,例如,8、16等,相应地,将m’设置为更小的值,例如,2、1等。相反地,在当前的卷积核的个数较少、通道数较大时,在p=32不变的情况下,可以将n设置为更小的值,例如,2、1等,相应地,将m’设置为更小的值,例如,8、16等。

例如,在第一次执行时,可以从逐层卷积计算得到的中间特征图中读取p个点在前m’个通道上的中间特征值,如图8中中间特征图(1)中所示。

需要说明的是,在子步骤中的读取操作中,也可以读取第五预定数目p’个点在第三预定数目m’个逐层卷积输出通道上的中间特征值。例如,第五预定数目p’小于等于第一预定数目p。

子步骤2:与所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值对应地,读取所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值。

例如,在第一次执行时,可以从n个逐点卷积核中的前n个逐点卷积核(如图8中的逐点卷积核(1)所示)中读取前m’个逐点卷积通道上的权重值(如图8中逐点卷积核(1)中的逐点卷积核(11)所示的权重值)。

子步骤3:分别对所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值与所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和。

例如,可以根据中间特征图(1)和逐点卷积核(11)计算本次逐点卷积部分和(1)(如图8中的输出特征图(11)所示)。

例如,在子步骤3中,可以针对所述第一预定数目p个点中的每个点,执行以下操作:(1)分别对该点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值与所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行乘法计算,以得到第四预定数目n组结果,每组结果包括第三预定数目m’个乘法计算结果;以及(2)分别对第四预定数目n组结果中每组结果中的所述第三预定数目m’个乘法计算结果进行相加,以得到该点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和。

如图8所示,对于中间特征图(1)中p个点中的每个点,将每个点的m’个中间特征值与逐点卷积核(11)中第一个卷积核中的m’个权重值分别进行乘法计算,并且将m’个乘法计算结果进行累加,从而得到输出特征图(11)中p个点在第一个通道的本次逐点卷积部分和。对逐点卷积核(11)中每个卷积核都执行上述操作,以得到输出特征图(11)中p个点在前n个通道的本次逐点卷积部分和。

子步骤4:分别将所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和与所述第一预定数目p个点的前次累加计算结果进行累加计算,以生成所述第一预定数目p个点的本次累加计算结果。

在得到输出特征图(11)中p个点在前n个通道的本次逐点卷积部分和之后,由于该p个点的前次累加计算结果不存在或者说为0,所以无需执行累加或者说累加计算结果即为乘法计算结果本身。

例如,可以在子步骤4之后,在存储器中存储所述第一预定数目p个点的本次累加计算结果,以覆盖所述第一预定数目p个点的前次累加计算结果。

子步骤5:重复上述操作(即,子步骤1-4),读取所述第一预定数目p个点在下第三预定数目m’个逐层卷积输出通道上的中间特征值,读取所述第四预定数目n个逐点卷积核中对应的下第三预定数目m’个逐点卷积通道上的权重值,并相应地执行后续操作,直到所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值都完成逐点卷积计算和累加计算为止,所述第一预定数目p个点的最终累加计算结果为所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的输出特征值。

例如,接下来,如图8所示,可以根据中间特征图(2)和逐点卷积核(12)计算输出特征图(12),并且将输出特征图(12)与输出特征图(11)进行累加计算,以此类推,根据中间特征图(z’)和逐点卷积核(1z’)计算输出特征图(1z’),并且将输出特征图(1z’)与输出特征图(1(z’-1))进行累加计算。例如,如果在最后一次计算的过程中,剩余的通道数不足以读取m’个通道的中间特征值和m’个通道的逐点卷积权重值,则可以通过填充(例如,填充0)方式来实现。替换地,也可以通过减少工作的逐点卷积计算单元等其他方式来实现。

最后,将输出特征图(1z’)与输出特征图(1(z’-1))的累加结果作为p个点在n个逐点卷积输出通道上的输出特征值,如图8中的输出特征图(1)所示,输出特征图(1)大小为p个点,共有n个通道。

例如,当在存储器中存储所述第一预定数目p个点的最终累加计算结果作为所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的输出特征值之前,对每个输出特征值执行以下各项中的至少一个:激活操作和量化操作。

在步骤s222中,重复上述操作(即,步骤s221),分别根据所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值和下第四预定数目n个逐点卷积核中所有逐点卷积通道上的权重值进行逐点卷积计算,直到得到所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值为止。

例如,接下来,如图8所示,可以根据中间特征图和逐点卷积核(2)计算输出特征图(2),以此类推,根据中间特征图和逐点卷积核(g)计算输出特征图(g)。例如,如果在最后一次计算的过程中,剩余的逐点卷积核个数不足以读取n个逐点卷积核中的权重值,则也可以通过填充(例如,填充0)方式来实现。替换地,也可以通过减少工作的逐点卷积计算单元等其他方式来实现。

最后,输出特征图(1)到输出特征图(g)的组合,也就是包括作为逐点卷积操作最终输出结果的输出特征值的完整输出特征图,如图8中的输出特征图所示,输出特征图大小为p个点,共有n个通道。

如上所述,该输出特征图可以经过可选的激活和量化操作。

下面,将在一个具体示例中说明根据本申请第一实施例的卷积计算方法。

例如,如图6和图8所示,假设逐层卷积的宽高维度为s*r、通道数(或在将通道数认为是1时也可看做个数)为m,逐层卷积的宽高维度为1*1、通道数为m、个数为n,输入特征图的宽高维度为x*y,中间特征图的宽高维度为w*h,输出特征图的宽高维度为e*f,该卷积计算方法可以包括以下步骤:

1、对于逐层卷积(depthwise),先计算p(p<=h*w)个点、m(m<=m)个通道的乘累加结果,这里的累加是在卷积核的长和宽方向上进行累加,如图6中的r和s,这里共用到p*m个乘累加(mac)单元,得到p*m个乘累加结果。

图9图示了根据本申请实施例的逐层卷积计算的原理图。

如图9所示,假设有512个乘加单元(mac),每次同时计算32个点(上述中p=32)、16个通道(上述中m=16,即通道变量c取0到15)。假设卷积核大小为3*3,那么经过9次乘累加(mult和accu)后(逐层卷积核的高度和宽度变量r和s分别从0变到2,输入特征图的宽度变量x从0~31变到2~33、高度变量y从0变到2),将得到32个点、16个通道的输出值。假设共有128个通道,则经过(128/16)*9=72次计算,将得到32个点、128个通道的输出数据。

2、对上述第1步结果进行可选的激活操作,激活操作指用一个非线性函数对数值进行重映射,激活函数包括但不限于:relu函数、sigmoid函数、反正切(tan)函数等。

3、对上述第2步结果进行可选的量化操作。量化操作是指将高精度的乘累加结果(通常是32bit)通过移位或者乘除法得到低精度(通常是8bit)。

4、将上述第3步结果存储于寄存器或者片内sram中。

5、通过次循环,将p个点的m个通道的逐层卷积结果计算完,得到p*m个值,这p*m个值可以是经过激活函数和量化的操作的,也可以是不经过激活函数和量化操作的。由于一层完整的输出结果的点数远大于p,假设共有h*w个点,因此这里用到的存储空间仅为计算完整一层逐层操作结果的p/(h*w)。

6、对上述第5步的结果,直接进行逐点卷积(pointwise)计算。具体的过程是:

a)、从寄存器或者片内sram中读取p个点、m个通道的逐层卷积计算结果,计算p个点、m个通道的乘累加结果,这里的累加是在通道方向的累加,得到p个点、1个输出通道的逐点卷积部分和(第1到m个输入通道的部分和)。

b)、通过次循环,将p个点的逐点卷积结果计算完,得到p个点的最终乘累加结果。

c)、对上述结果进行可选的激活操作。激活操作指用一个非线性函数对数值进行重映射,激活函数包括但不限于:relu函数、sigmoid函数、反正切(tan)函数等。

d)、对上述结果进行可选的量化操作。量化操作是指将高精度的乘累加结果(通常是32bit)通过移位或者乘除法得到低精度(通常是8bit),将结果存储于寄存器或者片内sram或片外ddr中。

e)、假设逐点卷积共有n个卷积核,通过n次上述a)、b)、c)、d)操作的循环,完成输出p个点的n个通道的计算结果。

图10图示了根据本申请实施例的逐点卷积计算的原理图。

如图10所示,pointwise卷积的卷积核大小是1*1,同样假设有512个乘加单元(这512个乘加单元和depthwise计算过程的乘加单元可以是同样的乘加单元,也可以是不同的),每次计算32个点(上述中p=32)、16个通道(上述中m=16,即通道变量c取0到15)、1个卷积核(kernel,核变量k=0)的卷积,得到32个点、1个输出通道的部分和数据。假设一共有128个通道,那么经过128/16=8次计算(通道变量c从0~15变到112~127),得到32个点、1个输出通道的累加和数据。又假设有256个卷积核,那么经过256*(128/16)=2048次计算,得到32个点、256个输出通道的累加和数据。即,得到32个点的输出特征值。

7、重复上述第1-6步的操作,继续计算接下来的p个点,直到得到完整的输出特征图为止。

第二实施例

在本申请的第二实施例中,为了得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值,可以(1)执行逐层卷积操作,以得到第一预定数目p个点在所有逐层卷积输出通道上的中间特征值;(2)根据该中间特征值进行逐点卷积操作,以得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和;(3)将本次逐点卷积部分和与前次累加计算结果进行累加,以生成本次累加计算结果;(4)重复上述操作(2)和(3),以得到p个点在所有逐点卷积输出通道上的输出特征值。

即,第二实施例与第一实施例中的执行逐层卷积操作(步骤s210)相同,执行逐点卷积操作(步骤s220)不同。因此,下面,将重点描述两者不同之处。

图11图示了根据本申请第二实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。图12图示了根据本申请第二实施例的根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的原理图。

如图11所示,根据中间特征值和逐点卷积核计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s220可以包括:

在步骤s223中,分别根据所述第一预定数目p个点在第三预定数目m’个逐层卷积输出通道上的中间特征值和所有逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和。

例如,第三预定数目m’小于等于第二预定数目m。此外,第三预定数目m’还可以受限于逐点卷积计算单元(例如,乘加单元mac)的数目,其可以是乘加单元的约数。

在一个示例中,该步骤s223可以包括:

子步骤1:分别根据所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值和第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和。

例如,在子步骤1中,可以执行以下操作:

(1)从所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值中,读取所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值。

例如,在第一次执行时,可以从逐层卷积计算得到的中间特征图中读取p个点在前m’个通道上的中间特征值,如图12中中间特征图(1)中所示。

(2)与所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值对应地,读取所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值。

例如,在第一次执行时,可以从n个逐点卷积核中的前n个逐点卷积核(如图12中的逐点卷积核(1)所示)中读取前m’个逐点卷积通道上的权重值(如图12中逐点卷积核(1)中的逐点卷积核(11)所示的权重值)。

(3)分别对所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值与所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和。

例如,可以根据中间特征图(1)和逐点卷积核(11)计算本次逐点卷积部分和(11)(如图12中的输出特征图(11)所示)。

本步骤与第一实施例中步骤s221的子步骤3相同,因而省略其详细描述。

子步骤2:重复上述操作,分别根据所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值和下第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述下第四预定数目n个逐点卷积核对应的下第四预定数目n个逐点卷积输出通道上的本次逐点卷积部分和,直到得到所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和为止。

例如,接下来,如图12所示,可以根据中间特征图(1)和逐点卷积核(21)计算本次逐点卷积部分和(21)(如图12中的输出特征图(21)所示),以此类推,根据中间特征图(1)和逐点卷积核(g1)计算本次逐点卷积部分和(g1)(如图12中的输出特征图(g1)所示)。

最后,本次逐点卷积部分和(11)到本次逐点卷积部分和(g1)的组合,也就是p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(1),其大小为p个点,共有n个通道。

在步骤s224中,分别将所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和与所述第一预定数目p个点的前次累加计算结果进行累加计算,以生成所述第一预定数目p个点的本次累加计算结果。

在得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(1)之后,由于前次累加计算结果不存在或者说为0,所以无需执行累加或者说本次逐点卷积部分和(1)即为本次累加计算结果。

在步骤s224之后,在存储器中存储所述本次累加计算结果,以覆盖所述第一预定数目p个点的前次累加计算结果。

在步骤s225中,重复上述操作(即,步骤s223和步骤s224),分别根据所述第一预定数目p个点在下第三预定数目m’个逐层卷积输出通道上的中间特征值和所有逐点卷积核中对应的下第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,并相应地执行后续操作,直到所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值都完成逐点卷积计算和累加计算为止,所述第一预定数目p个点的最终累加计算结果为所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

例如,接下来,如图12所示,可以根据中间特征图(2)和逐点卷积核(12)计算本次逐点卷积部分和(12),根据中间特征图(2)和逐点卷积核(22)计算本次逐点卷积部分和(22),以此类推,根据中间特征图(2)和逐点卷积核(g2)计算本次逐点卷积部分和(g2)。

将本次逐点卷积部分和(12)到本次逐点卷积部分和(g2)组合到一起,以得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(2),其大小为p个点,共有n个通道。

在得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(2)之后,将本次逐点卷积部分和(2)与前次累加计算结果(即,本次逐点卷积部分和(1))进行累加。

以此类推,将本次逐点卷积部分和(1z’)到本次逐点卷积部分和(gz’)组合到一起,以得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(z’),其大小为p个点,共有n个通道。

在得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(z’)之后,将本次逐点卷积部分和(z’)与前次累加计算结果(即,本次逐点卷积部分和(1)到本次逐点卷积部分和(z’-1)之和)进行累加,从而得到包括作为逐点卷积操作最终输出结果的输出特征值的输出特征图,如图8中的输出特征图所示,输出特征图大小为p个点,共有n个通道。

当在存储器中存储所述第一预定数目p个点的最终累加计算结果作为所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值之前,对每个输出特征值执行以下各项中的至少一个:激活操作和量化操作。

第三实施例

在本申请的第三实施例中,为了得到第一预定数目p个点在所有逐点卷积输出通道上的输出特征值,可以(1)执行逐层卷积操作,以得到第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值;(2)根据该中间特征值进行逐点卷积操作,以得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和;(3)将本次逐点卷积部分和与前次累加计算结果进行累加,以生成本次累加计算结果;(4)重复上述操作(1)到(3),以得到p个点在所有逐点卷积输出通道上的输出特征值。

图13图示了根据本申请第三实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤的流程图。图14图示了根据本申请第三实施例的计算第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和(i,1≤i≤z,)的步骤的原理图。

如图13所示,根据本申请第三实施例,计算第一预定数目p个点在所有逐点卷积输出通道上的输出特征值的步骤s110可以包括:

在步骤s310中,根据所述输入特征图和所述逐层卷积核进行逐层卷积计算,以得到第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值。

例如,所述第二预定数目m可以是根据逐层卷积计算单元的数目和所述第一预定数目p来确定的。

在一个示例中,该步骤s310可以包括:

子步骤1:从所述输入特征图中读取第一预定数目p组点在第二预定数目m个输入通道上的输入特征值。

子步骤2:与所述第一预定数目p组点在所述第二预定数目m个输入通道上的输入特征值对应地,读取对应的第二预定数目m个逐层卷积核中的权重值。

子步骤3:分别对所述第一预定数目p组点在所述第二预定数目m个输入通道上的输入特征值与对应的第二预定数目m个逐层卷积核中的权重值进行逐层卷积计算,以得到与所述第一预定数目p组点分别对应的所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值。

该步骤s310中的子步骤1-3与第一实施例中步骤s211的子步骤1-3相同,因而省略其详细描述。

例如,在第一次执行时,首先,可以从输入特征图中读取前p组点在前m个输入通道上的输入特征值(如图14中输入特征图(i=1)中所示的输入特征值)。然后,可以从逐层卷积核中读取前m个逐层卷积核中的权重值(如图14中逐层卷积核(i=1)中所示的权重值)。最后,可以根据输入特征图(1)和逐层卷积核(1)计算中间特征图(i=1)。

例如,可以在子步骤3之后,在存储器中存储所述第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值。换言之,在得到所述第一预定数目p个点在第二预定数目m个逐层卷积输出通道上的中间特征值之后,在存储器的可用空间中存储每个中间特征值。

此外,根据当前的卷积层的设计参数,在得到各个中间特征值之后、存储它们之前,还可以对每个中间特征值执行以下各项中的至少一个:激活操作和量化操作。

在步骤s320中,根据所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,以得到第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和。

在一个示例中,该步骤s320可以包括:

子步骤1:分别根据所述第一预定数目p个点在第三预定数目m’个逐层卷积输出通道上的中间特征值和所有逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积子部分和。

例如,在子步骤1中,可以执行以下操作:

(1)分别根据所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值和第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积子部分和。

例如,所述第三预定数目m’和所述第四预定数目n可以是根据逐点卷积计算单元的数目和所述第一预定数目p来确定的。

例如,操作(1)可以包括:(1-1)从所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值中,读取所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值;(1-2)与所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值对应地,读取所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值;以及(1-3)分别对所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值与所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积子部分和。

具体地,在(1-3)中,可以针对所述第一预定数目p个点中的每个点,执行以下操作:分别对该点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值与所述第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行乘法计算,以得到第四预定数目n组结果,每组结果包括第三预定数目m’个乘法计算结果;以及分别对第四预定数目n组结果中每组结果中的所述第三预定数目m’个乘法计算结果进行相加,以得到该点在与所述第四预定数目n个逐点卷积核对应的第四预定数目n个逐点卷积输出通道上的本次逐点卷积子部分和。

(2)重复上述操作,分别根据所述第一预定数目p个点在所述第三预定数目m’个逐层卷积输出通道上的中间特征值和下第四预定数目n个逐点卷积核中对应的第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,以得到所述第一预定数目p个点在与所述下第四预定数目n个逐点卷积核对应的下第四预定数目n个逐点卷积输出通道上的本次逐点卷积子部分和,直到得到所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积子部分和为止。

子步骤2:分别将所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积子部分和与所述第一预定数目p个点的前次累加计算子结果进行累加计算,以生成所述第一预定数目p个点的本次累加计算子结果。

例如,可以在生成所述第一预定数目p个点的本次累加计算子结果之后,在存储器中存储所述本次累加计算子结果,以覆盖所述第一预定数目p个点的前次累加计算子结果。

子步骤3:重复上述操作,分别根据所述第一预定数目p个点在下第三预定数目m’个逐层卷积输出通道上的中间特征值和所有逐点卷积核中对应的下第三预定数目m’个逐点卷积通道上的权重值进行逐点卷积计算,并相应地执行后续操作,直到所述第一预定数目p个点在所述第二预定数目m个逐层卷积输出通道上的中间特征值都完成逐点卷积计算和累加计算为止,所述第一预定数目p个点的最终累加计算子结果为所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和。

该步骤s320中的子步骤1-3与第二实施例中步骤s220的步骤s223-s225基本相似,因而省略其详细描述。

例如,在第一次执行时,首先,可以从逐层卷积计算得到的中间特征图中读取p个点在前m’个逐层卷积输出通道上的中间特征值。然后,可以从n个逐点卷积核中的前n个逐点卷积核中读取前m’个逐点卷积通道上的权重值。接下来,可以根据两者计算前n个逐点卷积输出通道上的本次逐点卷积子部分和。然后,计算后n逐点卷积输出通道上的本次逐点卷积子部分和,直到得到n个逐点卷积输出通道上的本次逐点卷积子部分和为止。接下来,对子部分和进行累加,并且读取p个点在后m’个通道上的中间特征值,并重复上述操作,以得到p个点在所有逐点卷积输出通道上的本次逐点卷积部分和。

需要说明的是,尽管这里描述的是先在逐点卷积核的个数维度(n)上进行迭代、然后在通道数维度(m)上进行迭代,但是,本申请的实施例不限于此。例如,也可以先在通道数维度(m)上进行迭代,然后在逐点卷积核的个数维度(n)上进行迭代。

在一个简单情况下,如果m’=m,则在第一次执行时,首先,可以读取p个点在前m个通道上的中间特征值,如图14中的中间特征图(i=1)所示。然后,可以读取n个逐点卷积核中的前m个逐点卷积通道上的权重值,如图14中的逐点卷积核(i=1)所示。接下来,可以根据两者计算本次逐点卷积部分和,如图14中的输出特征图(i=1)所示。

在步骤s330中,分别将所述第一预定数目p个点在所有逐点卷积输出通道上的本次逐点卷积部分和与所述第一预定数目p个点的前次累加计算结果进行累加计算,以生成所述第一预定数目p个点的本次累加计算结果。

例如,在生成所述第一预定数目p个点的本次累加计算结果之后,在存储器中存储所述本次累加计算结果,以覆盖所述第一预定数目p个点的前次累加计算结果。

在步骤s340中,重复上述操作,根据所述第一预定数目p个点在下第二预定数目m个逐层卷积输出通道上的中间特征值和逐点卷积核进行逐点卷积计算,并相应地执行后续操作,直到所述第一预定数目p个点在所有逐层卷积输出通道上的中间特征值都完成逐点卷积计算和累加计算为止,所述第一预定数目p个点的最终累加计算结果为所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值。

例如,接下来,可以根据输入特征图(i=2)和逐层卷积核(i=2)计算中间特征图(i=2),然后,可以根据中间特征图(i=2)和逐点卷积核(i=2)计算本次逐点卷积部分和,如图14中的输出特征图(i=2)所示,接下来,将输出特征图(i=2)与前次累加计算结果(即,图14中的输出特征图(i=1))进行累加以生成本次累加计算结果。以此类推,可以根据输入特征图(i=z)和逐层卷积核(i=z)计算中间特征图(i=z),然后,可以根据中间特征图(i=z)和逐点卷积核(i=z)计算本次逐点卷积部分和,如图14中的输出特征图(i=z)所示,接下来,将输出特征图(i=z)与与前次累加计算结果(即,本次逐点卷积部分和(1)到本次逐点卷积部分和(z’-1)之和)进行累加,从而得到包括作为逐点卷积操作最终输出结果的输出特征值的输出特征图,如图8中的输出特征图所示,输出特征图大小为p个点,共有n个通道。

当在存储器中存储所述第一预定数目p个点的最终累加计算结果作为所述第一预定数目p个点在所有逐点卷积输出通道上的输出特征值之前,对每个输出特征值执行以下各项中的至少一个:激活操作和量化操作。

下面,将在一个具体示例中说明根据本申请第一实施例的卷积计算方法。

例如,如图14所示,假设逐层卷积的宽高维度为s*r、通道数(或在将通道数认为是1时也可看做个数)为m,逐层卷积的宽高维度为1*1、通道数为m、个数为n,输入特征图的宽高维度为x*y,中间特征图的宽高维度为w*h,输出特征图的宽高维度为e*f,该卷积计算方法可以包括以下步骤:

1、对于逐层卷积(depthwise),先计算p(p<=h*w)个点、m(m<=m)个通道的乘累加结果,这里的累加是在卷积核的长和宽方向上进行累加,如图14中的r和s,这里共用到p*m个乘累加(mac)单元,得到p*m个乘累加结果。

如图9所示,假设有512个乘加单元(mac),每次同时计算32个点(上述中p=32)、16个通道(上述中m=16,即通道变量c取0到15)。假设卷积核大小为3*3,那么经过9次乘累加(mult和accu)后(逐层卷积核的高度和宽度变量r和s分别从0变到2,输入特征图的宽度变量x从0~31变到2~33、高度变量y从0变到2),将得到32个点、16个通道的输出值。

2、对上述第1步结果进行可选的激活操作,激活操作指用一个非线性函数对数值进行重映射,激活函数包括但不限于:relu函数、sigmoid函数、反正切(tan)函数等。

3、对上述第2步结果进行可选的量化操作。量化操作是指将高精度的乘累加结果(通常是32bit)通过移位或者乘除法得到低精度(通常是8bit)。

4、将上述第3步结果存储于寄存器或者片内sram中。

5、对上述第4步的结果,直接进行逐点卷积(pointwise)计算。从寄存器或者片内sram中读取p个点、m个通道的逐层卷积计算结果,计算p个点、m个通道的乘累加结果,这里的累加是在通道方向的累加,得到p个点、1个输出通道的逐点卷积部分和(第1到m个输入通道的部分和)。

6、将上述第5步结果存储在寄存器或者片内sram中。

7、假设逐点卷积共有n个卷积核,通过n次第5-6步操作的循环,完成p个点、n个输出通道的逐点卷积部分和(第1到m个输入通道的部分和)的计算和存储。这p个输出点的n个输出通道的部分和结果存储于寄存器或者片内sram中。

如图10所示,pointwise卷积的卷积核大小是1*1,同样假设有512个乘加单元(这512个乘加单元和depthwise计算过程的乘加单元可以是同样的乘加单元,也可以是不同的),每次计算32个点(上述中p=32)、16个通道(上述中m=16,即通道变量c取0到15)、1个卷积核(kernel,核变量k=0)的卷积,得到32个点、1个输出通道的部分和数据。假设有256个卷积核,那么经过256*(128/16)=2048次计算,得到32个点256个输出通道的部分和数据。

8、重复第1-7步操作,继续计算得到这p个点、接下来的m个输出通道的部分和(第m+1到第2m个输入通道的部分和),将这些部分和与之前存储的部分和结果进行累加,再将累加结果存储于寄存器或者片内sram中。通过次循环,得到这p个输出点n个输出通道的逐点卷积最终累加结果。

9、对上述第8步结果进行可选的激活操作,激活操作指用一个非线性函数对数值进行重映射,激活函数包括但不限于:relu函数、sigmoid函数、反正切(tan)函数等。

10、对上述第9步结果进行可选的量化操作。量化操作是指将高精度的乘累加结果(通常是32bit)通过移位或者乘除法得到低精度(通常是8bit);

11、重复上述第1-10步的操作,继续计算接下来的p个点,直到得到完整的输出特征图为止。

对比第一实施例的具体示例和第三实施例的具体示例可以看出,假设逐层卷积有m个通道(或在将通道数认为是1时也可看做个数),逐点卷积有n个卷积核,则前者方案需要缓存p*m个逐层卷积结果数据,通常这p*m个数据是经过量化后的(8bit),那么需要p*m*8个bit的缓存空间。后者方案需要缓存p*n个部分和数据,通常这p*n个数据是高精度未经量化的(32bit),则需要p*n*32个bit的存储空间。可见在对逐层卷积结果进行量化、而对部分和结果不进行量化的典型情况下,如果m>4n,则后者方案更加节省存储空间,否则前者方案更节省存储空间。

因此,在本申请的实施例中,该神经网络中的卷积计算方法还可以包括:比较逐层卷积核的通道数(或个数)m与逐点卷积核的个数n;响应于m>4n,则执行根据本申请第一实施例的卷积计算方法,以计算输出特征值,否则选择执行根据本申请第三实施例的卷积计算方法,以计算输出特征值。

示例性电子设备

下面,参考图15来描述根据本申请实施例的电子设备。

图15图示了根据本申请实施例的电子设备的框图。

如图15所示,电子设备10包括一个或多个处理器11和存储器12。

处理器11可以是具有数据处理能力和/或指令执行能力的任何形式的处理单元,并且可以控制电子设备10中的其他组件以执行期望的功能。

存储器12可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读写存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读写存储介质上可以存储一个或多个计算机程序指令,处理器11可以运行所述程序指令,以实现上文所述的本申请的各个实施例的神经网络中的卷积计算方法以及/或者其他期望的功能。

在一个示例中,电子设备10还可以包括:输入装置13和输出装置14,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。

例如,该输入装置13可以包括例如键盘、鼠标、以及通信网络及其所连接的远程输入设备等等。

例如,该输出设备14可以包括例如显示器、打印机、以及通信网络及其所连接的远程输出设备等等。

当然,为了简化,图15中仅示出了该电子设备10中与本申请有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。应当注意,图15所示的电子设备10的组件和结构只是示例性的,而非限制性的,根据需要,电子设备10也可以具有其他组件和结构。

示例性计算机程序产品和计算机可读写存储介质

除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的用于神经网络的复合运算方法中的步骤。

所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。

此外,本申请的实施例还可以是计算机可读写存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的用于神经网络的复合运算方法中的步骤。

所述计算机可读写存储介质可以采用一个或多个可读写介质的任意组合。可读写介质可以是可读写信号介质或者可读写存储介质。可读写存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读写存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。

本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。

提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

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