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

执行神经网络运算的指令生成方法、图像处理方法及装置

文献发布时间:2023-06-19 10:24:22


执行神经网络运算的指令生成方法、图像处理方法及装置

技术领域

本公开涉及图像处理技术领域,尤其是一种执行神经网络运算的指令生成方法、图像处理方法及装置。

背景技术

实际场景中存在着这样一种神经网络,当把某一数量的图像帧提供给其之后,其能够输出相同数量的结果。在进行图像帧的输入之前,无法知道图像帧的数量的实际值,而只能知道图像帧的数量的最大可能值,因此,不管图像帧的数量的实际值是多少,目前一般是直接按照该最大可能值进行图像帧的运算处理,这样会造成计算资源的浪费。

发明内容

为了解决上述技术问题,提出了本公开。本公开的实施例提供了一种执行神经网络运算的指令生成方法、图像处理方法及装置。

根据本公开实施例的一个方面,提供了一种执行神经网络运算的指令生成方法,包括:

基于神经网络中的第一中间层组,确定至少一个中间层集合;所述第一中间层组与所述神经网络中的第一输入层组对应,且用于输入所述第一输入层组的图像帧的数量不固定;

分别确定所述至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量;

基于每一中间层集合的中间层编号信息和中间层数量,生成用于执行所述神经网络运算的指令。

根据本公开实施例的另一个方面,提供了一种图像处理方法,包括:

基于目标帧数量,以及根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,分别给每一中间层集合确定待执行的运算次数;所述第一中间层组与所述神经网络中的第一输入层组对应,用于输入所述第一输入层组的图像帧的数量不固定,且所确定的待执行的运算次数的总和与所述目标帧数量在数值上相等;

通过每一中间层集合,按照所确定的待执行的运算次数,对所述目标帧数量的图像帧执行上一方面提供的方法生成的用于神经网络运算的指令,以对所述目标帧数量的图像帧进行运算处理。

根据本公开实施例的再一个方面,提供了一种执行神经网络运算的指令生成装置,包括:

第一确定模块,用于基于神经网络中的第一中间层组,确定至少一个中间层集合;所述第一中间层组与所述神经网络中的第一输入层组对应,且用于输入所述第一输入层组的图像帧的数量不固定;

第二确定模块,用于分别确定所述第一确定模块确定出的所述至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量;

生成模块,用于基于所述第二确定模块确定出的每一中间层集合的中间层编号信息和中间层数量,生成用于执行所述神经网络运算的指令。

根据本公开实施例的又一个方面,提供了一种图像处理装置,包括:

确定模块,用于基于目标帧数量,以及根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,分别给每一中间层集合确定待执行的运算次数;所述第一中间层组与所述神经网络中的第一输入层组对应,用于输入所述第一输入层组的图像帧的数量不固定,且所确定的待执行的运算次数的总和与所述目标帧数量在数值上相等;

处理模块,用于通过每一中间层集合,按照所述确定模块确定出的待执行的运算次数,对所述目标帧数量的图像帧执行上一方面提供的装置生成的用于神经网络运算的指令,以对所述目标帧数量的图像帧进行运算处理。

根据本公开实施例的又一个方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述执行神经网络运算的指令生成方法,或者用于执行上述图像处理方法。

根据本公开实施例的又一个方面,提供了一种电子设备,所述电子设备包括:

处理器;

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

所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述执行神经网络运算的指令生成方法,或者实现上述图像处理方法。

基于本公开上述实施例提供的执行神经网络运算的指令生成方法、图像处理方法、装置、计算机可读存储介质及电子设备,可以基于神经网络中的第一中间层组,获得至少一个中间层集合,接下来,可以分别确定至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,并基于每一中间层集合的中间层编号信息和中间层数量,针对每一中间层集合,分别生成用于执行神经网络运算的指令,这样,利用生成的用于执行神经网络运算的指令,可以结合待处理的图像帧的数量,给每一中间层集合确定合理的待执行的运算次数,并据此进行运算处理,因此,本公开的实施例可以不按照图像帧的数量的最大可能值进行运算,而是按照图像帧的数量的实际值进行运算,这样能够在保证对图像帧的正常处理的前提下,有效地避免冗余计算,从而减少资源的浪费。

附图说明

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

图1-1是本公开的实施例所适用的神经网络的示意图之一。

图1-2是本公开的实施例所适用的神经网络的示意图之二。

图1-3是本公开的实施例所适用的神经网络的示意图之三。

图2是本公开一示例性实施例提供的执行神经网络运算的指令生成方法的流程示意图。

图3是本公开另一示例性实施例提供的执行神经网络运算的指令生成方法的流程示意图。

图4是本公开再一示例性实施例提供的执行神经网络运算的指令生成方法的流程示意图。

图5是本公开又一示例性实施例提供的执行神经网络运算的指令生成方法的流程示意图。

图6是本公开一示例性实施例中第一中间层组的拆分示意图。

图7是本公开一示例性实施例提供的图像处理方法的流程示意图。

图8是本公开另一示例性实施例提供的图像处理方法的流程示意图。

图9是本公开再一示例性实施例提供的图像处理方法的流程示意图。

图10是本公开一示例性实施例中的存储空间分配示意图。

图11是本公开一示例性实施例中重复指令的指令示意图。

图12是本公开一示例性实施例中重复指令的行为示意图。

图13是本公开一示例性实施例提供的执行神经网络运算的指令生成装置的结构示意图。

图14是本公开另一示例性实施例提供的执行神经网络运算的指令生成装置的结构示意图。

图15是本公开再一示例性实施例提供的执行神经网络运算的指令生成装置的结构示意图。

图16是本公开一示例性实施例提供的图像处理装置的结构示意图。

图17是本公开另一示例性实施例提供的图像处理装置的结构示意图。

图18是本公开一示例性实施例提供的电子设备的结构图。

具体实施方式

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

应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。

本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示必然逻辑顺序。“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。

还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。

另外,本公开中术语“和/或”,仅是一种描述关联对象的关联关系,表示可存在三种关系,例如,A和/或B可表示:单独存在A,同时存在A和B,单独存在B这三种情况。本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。

还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

本公开实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。

终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

实际场景中,存在着把某一数量的图像帧同时输入一个神经网络,以得到相同数量结果的过程,这个数量可以称为样本数量(batch)。在实现本公开的过程中,发明人发现,在编译阶段并不能知道barch的实际值,而只能知道batch的最大可能值,而编译阶段一般是按照batch的最大可能值进行计算的,如果batch的实际值小于batch的最大可能值,就会造成计算资源的浪费,如何避免计算资源的浪费对于本领域技术人员而言是一个亟待解决的问题。

本公开的实施例主要可以包括两个阶段,分别是编译阶段和运行阶段;其中,在编译阶段,可以执行本公开的实施例提供的执行神经网络运算的指令生成方法,以生成用于执行神经网络运算的指令;在运行阶段,可以基于编译阶段生成的指令,执行本公开的实施例提供的图像处理方法,以实现图像帧的运算处理,从而避免计算资源的浪费。

需要指出的是,本公开的实施例所适用的神经网络的架构可以如图1-1、图1-2以及图1-3所示的神经网络。

图1-1所示的神经网络共有i个输入组,j个输出组,每个输入组可以有若干个(例如0至N0个中的某一个数、0至N1个中的某一个数等)或者固定1个输入(每个输入可以为一图像帧),每个输出组可以有若干个输出(每个输出可以为神经网络对一图像帧进行运算处理后的结果),但是每个输出组必须与某一个输入组batch数量相等且输入输出一一对应,并且,此输出组中的输出与其它batch数量不固定为1的输入组中的输入没有关系。举例而言,输出0和输入0一一对应,也就是说,输入0的个数与输出0的个数相等(N0==P0),并且第a(0<=a<N0)个输入0决定了第a个输出0,不同的输入0之间互不干扰,其他输入(例如输入1、输入i-1)的值不影响输出0的值。

图1-2所示的神经网络共有2个输入组,2个输出组,输出0和输入0一一对应,输出1和输入1一一对应,并且,输入1的值不会影响到输出0的值,输入0的值不会影响到输出1的值,这样,对于若干个输入0,其中第一个输入0与第一个输出0对应,其它输入0的值不影响第一个输出0的值。

相比于图1-2所示的神经网络,图1-3所示的神经网络多了一个仅包括输入2的输入组,但是这个输入组的batch固定为1,神经网络所有输出的结果(即每个输出0的值和每个输出1的值)都会受到输入2的影响。

通过总结图1-1至图1-3所示的神经网络的特点可知,本公开的实施例所适用的神经网络需要满足如下条件:如果把每个batch>1的输入组中的输入染上一种颜色,之后相关联(包括直接关联或者间接关联)的中间层或者输出会染上同种颜色,那么神经网络的每个中间层和每个输入都有且只会染上一种颜色,相同颜色的batch数量保持相等,并且每个batch一一对应。

图2是本公开一示例性实施例提供的执行神经网络运算的指令生成方法的流程示意图。图2所示的方法包括步骤201、步骤202和步骤203,下面对各步骤分别进行说明。

步骤201,基于神经网络中的第一中间层组,确定至少一个中间层集合;第一中间层组与神经网络中的第一输入层组对应,且用于输入第一输入层组的图像帧的数量不固定。

假设步骤201中涉及的神经网络为图1-2所示的神经网络,则有:第一中间层组可以为图1-2中的若干个中间层0组成的中间层组,第一输入层组可以为用于输入图1-2中的若干个输入0的若干个输入层组成的输入层组,用于输入第一输入层组的图像帧的数量可以为小于或等于N0的任意正整数;或者,第一中间层组可以为图1-2中的若干个中间层1组成的中间层组,第一输入层组可以为用于输入图1-2中的若干个输入1的若干个输入层组成的输入层组,用于输入第一输入层组的图像帧的数量可以为小于或等于N1的任意正整数。

可选地,基于第一中间层组确定的中间层集合的数量可以为1个、2个、3个或者3个以上,每一中间层集合可以分别包括第一中间层组中的至少一个中间层,所有中间层集合中的中间层可以组成第一中间层组。

步骤202,分别确定至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量。

这里,第一中间层组中的每一中间层可以分别具有对应的编号,这样,基于第一中间层组中的每一中间层的编号,以及每一中间层集合中具体包括第一中间层集合中的哪些中间层,能够便捷可靠地确定本中间层集合的中间层编号信息。另外,可以通过对每一中间层集合包括的中间层的数量进行统计,得到本中间层集合的中间层数量。

步骤203,基于每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

这里,基于每一中间层集合的中间层编号信息和中间层数量,可以针对每一中间层集合,分别生成用于执行神经网络运算的指令,这样,在运行阶段,针对每一中间层集合,可以分别利用已生成的相应指令,进行图像帧的运算处理,以便实现基于图像帧的数量的实际值的运算处理(具体实现方式可参见下文中图7所示实施例相关的说明),从而避免计算资源的浪费。

在图2所示实施例的基础上,如图3所示,步骤203包括步骤2031、步骤2032和步骤2033。

步骤2031,基于第一输入层组的组标识,以及每一中间层集合的中间层编号信息和中间层数量,分别确定每一中间层集合对应的三元组。

这里,神经网络中的每一输入层组可以分别具有对应的组标识,每一输入层组的组标识可以预先进行记录和存储,以便后续获取第一输入层组的组标识,第一中间层组中的各中间层可以共享该组标识。可选地,组标识可以呈数字形式、罗马字母形式等,组标识具体可以用h进行表示。

在步骤2031中,针对任一中间层集合,可以由第一输入层组的组标识,以及该中间层集合的中间层编号信息和中间层数量三者组合形成该中间层集合对应的三元组,假设该中间层集合的中间层编号信息仅包括中间层起始编号且用m表示,该中间层集合的中间层数量用k表示,则该中间层集合对应的三元组可以表示为(h,m,k)。

步骤2032,分别给每一中间层集合对应的三元组分配寄存器。

这里,寄存器可以用r表示。可选地,三元组与寄存器之间可以为一一对应的关系;或者,三元组与寄存器之间可以不为一一对应的关系,例如,在两个三元组中的组标识、中间层编号信息、中间层数量均对应相同的情况下,这两个三元组可以共享同一个寄存器。

步骤2033,基于给每一中间层集合对应的三元组分配的寄存器,以及每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

这里,基于给每一中间层集合对应的三元组分配的寄存器,以及每一中间层集合的中间层编号信息和中间层数量,可以针对每一中间层集合,分别生成用于执行神经网络运算的指令,这样,在运行阶段,针对每一中间层集合,可以分别基于相应寄存器的运用,进行图像帧的运算,以便实现基于图像帧的数量的实际值的运算处理(具体实现方式可参见下文中图8所示实施例相关的说明),从而避免计算资源的浪费。

在图2所示实施例的基础上,如图4所示,步骤203包括步骤2034和步骤2035。

步骤2034,分别给每一中间层集合分配单个中间层的输入存储空间和输出存储空间。

这里,针对任一中间层集合,给其中的每个中间层分配的输入存储空间可以是相同的,给其中的每个中间层分配的输出存储空间也可以是相同的,分配好的单个中间层的输入存储空间可以表示为a,分配好的单个中间层的输出存储空间可以表示为b。

步骤2035,基于给每一中间层集合分配的单个中间层的输入存储空间和输出存储空间,以及每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

这里,基于给每一中间层集合分配的单个中间层的输入存储空间和输出存储空间,以及每一中间层集合的中间层编号信息和中间层数量,可以针对每一中间层集合,分别生成用于执行神经网络运算的指令,这样,在运行阶段,针对每一中间层集合,可以分别基于相应输入存储空间和输出存储空间,进行图像帧的运算,以保证运算处理的有序实施(具体实现方式可参见下文中图9所示实施例相关的说明)。

在图2所示实施例的基础上,如图5所示,步骤201包括步骤2011、步骤2012和步骤202。

步骤2011,确定神经网络中的第一中间层组是否满足预设拆分条件;在第一中间层组满足预设拆分条件的情况下,执行步骤2012;否则,执行步骤2013。

步骤2012,将第一中间层组拆分为多个中间层集合。

步骤2013,将第一中间层组作为一个中间层集合。

这里,可以基于第一中间层组中的中间层的总数量,确定第一中间层组是否满足预设拆分条件。可选地,如果第一中间层组中的中间层的总数量较大,则可以确定第一中间层组满足预设拆分条件,此时,可以将第一中间层组拆分为多个中间层集合,例如,如图6所示,如果第一中间层组中的中间层的总数量为7个,则可以将第一中间层组拆分为3个中间层集合,其中前两个中间层集分别包括第一中间层组中的2个中间层,最后一个中间层集合包括第一中间层组中的最后3个中间层。如果第一中间层组中的中间层的总数量不大,例如该总数量仅为2个,则可以确定第一中间层组不满足预设拆分条件,此时可以直接将第一中间层组确定为一个中间层集合。

当然,在确定第一中间层组是否满足预设拆分条件时,除了考虑第一中间层组中的中间层的总数量,还可以考虑程序运行效率等因素。

可见,本公开的实施例中,根据第一中间层组是否满足预设拆分条件,可以通过合适的方式来得到至少一个中间层集合。

图7是本公开一示例性实施例提供的图像处理方法的流程示意图。图7所示的方法包括步骤701和步骤702,下面对各步骤分别进行说明。

步骤701,基于目标帧数量,以及根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,分别给每一中间层集合确定待执行的运算次数;第一中间层组与神经网络中的第一输入层组对应,用于输入第一输入层组的图像帧的数量不固定,且所确定的待执行的运算次数的总和与目标帧数量在数值上相等。

需要说明的是,对第一中间层组和第一输入层组的介绍参照上文中步骤201相关的说明即可,在此不再赘述。

这里,目标帧数量可以为第一中间层组待处理的图像帧的数量,目标帧数量在数值上可以小于或等于第一中间层组包括的中间层的数量,例如,若第一中间层组为图1-2中的若干个中间层0组成的中间层组,目标帧数量可以小于或等于N0;若第一中间层组为图1-2中的若干个中间层1组成的中间层组,目标帧数量可以小于或等于N1。

在步骤701中,在基于目标帧数量,以及根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,分别给每一中间层集合确定待执行的运算次数时,需要保证所确定的运算次数的总和与目标帧数量在数值上相等,这样,所确定的运算次数的总和在数值上可能等于第一中间层组包括的中间层的数量,也可能小于第一中间层组包括的中间层的数量。可选地,在步骤701中,还可以保证针对任一中间层集合确定的待执行的运算次数在数值上小于或等于该中间层集合的中间层数量,以避免给该中间层集合确定的待执行的运算次数超过该中间层集合的运算能力。

步骤702,通过每一中间层集合,按照所确定的待执行的运算次数,对目标帧数量的图像帧执行用于神经网络运算的指令(这里的指令为上述图2所示实施例生成的用于神经网络运算的指令),以对目标帧数量的图像帧进行运算处理。

这里,对于每一中间层集合,由于通过执行步骤701已经确定出了相应的待执行的运算次数,那么,在对目标帧数量的图像帧执行用于神经网络运算的指令时,在每一中间层集合处执行的实际运算次数可以为相应的待执行的运算次数,这样,在对目标帧数量的图像帧数量进行运算处理时,实际执行的运算次数的总和将与目标帧数量在数值上相等,由此可以确定,本公开的实施例中并未按照图像帧的数量的最大可能值进行运算,而是按照图像帧的数量的实际值进行运算。

本公开的实施例中,可以基于神经网络中的第一中间层组,获得至少一个中间层集合,接下来,可以分别确定至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,并基于每一中间层集合的中间层编号信息和中间层数量,针对每一中间层集合,分别生成用于执行神经网络运算的指令,这样,利用生成的用于执行神经网络运算的指令,可以结合待处理的图像帧的数量,给每一中间层集合确定合理的待执行的运算次数,并据此进行运算处理,因此,本公开的实施例可以不按照图像帧的数量的最大可能值进行运算,而是按照图像帧的数量的实际值进行运算,这样能够在保证对图像帧的正常处理的前提下,有效地避免冗余计算,从而减少资源的浪费。

在图7所示实施例的基础上,如图8所示,步骤702包括步骤7021和步骤7022。

步骤7021,将给每一中间层集合对应的三元组分配的寄存器中的存储值设置为给本中间层集合确定的待执行的运算次数的数值。

这里,给每一中间层集合对应的三元组分配的寄存器均可以属于存储值动态可配置的寄存器,这样,通过存储值的动态配置,即可保证每一寄存器中的存储值被设置为给相应中间层集合确定的待执行的运算次数的数值。

步骤7022,通过每一中间层集合,按照给每一中间层集合对应的三元组分配的寄存器中设置后的存储值,对目标帧数量的图像帧执行用于神经网络运算的指令(这里的指令为上述图3所示实施例生成的用于神经网络运算的指令)。

在进行寄存器中的存储值的动态配置之后,在对目标帧数量的图像帧执行用于神经网络运算的指令时,在每一中间层集合处执行的实际运算次数在数值上可以为给相应三元组分配的寄存器中设置后的存储值,这样,在每一中间层集合处执行的实际运算次数实质上为相应的待执行的运算次数,从而实现基于图像帧的数量的实际值的运算处理,进而避免计算资源的浪费。

在图7所示实施例的基础上,如图9所示,步骤702包括步骤7023。

步骤7023,在通过每一中间层集合对目标帧数量的图像帧执行用于神经网络运算的指令(这里的指令为上述图4所示实施例生成的用于神经网络运算的指令)时,在一次运算处理完成后,按照给本中间层集合分配的单个中间层的输入存储空间和输出存储空间,进行输入存储地址和输出存储地址的偏移。

假设给某一中间层集合确定的待执行的运算次数为3次,则在该中间层集合处需要执行3次运算处理,若第一次运算处理时的输入存储地址为X1,第一次运算处理时的输入存储地址为X2,则在第一次运算处理结束后,可以将输入存储地址偏移a,将输出存储地址偏移b,这时,输入存储地址可以更新为X1+a,输出存储地址可以更新为X2+b,之后可以从X1+a这个输入存储地址获取用于第二次运算处理的图像帧,并将该图像帧经运算后的结果存储至X2+b这个输出存储地址;在第二次运算处理结束后,可以将输入存储地址再次偏移a,将输出存储地址再次偏移b,这时,输入存储地址可以更新为X1+2a,输出存储地址可以更新为X2+2b,之后可以从X1+2a这个输入存储地址获取用于第三次运算处理的图像帧,并将该图像帧经运算后的结果存储至X2+2b这个输出存储地址。

本公开的实施例,在进行实际的运算处理时,通过按照分配好的输入存储空间和输出存储空间,进行输入存储地址和输出存储地址的偏移,能够较好地保证各次运算处理的顺利有序实施。

在图7所示实施例的基础上,每一中间层集合中的中间层均按照预设编号规则进行编号;步骤701,包括:

基于目标帧数量,根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,以及与预设编号规则匹配的运算次数确定方式,分别给每一中间层集合确定待执行的运算次数。

这里,预设编号规则可以为:从0开始编号,按照等差数列进行编号,且公差为1;或者,预设编号规则可以为:从1开始编号,按照等差数列进行编号,且公差为2;或者,预设编号规则可以为:从0开始编号,按照等差数列进行编号,且公差为2。在预设编号规则已知的情况下,可以据此给每一中间层集合确定待执行的运算次数。

在一种具体实施方式中,每一中间层编号信息均包括中间层起始编号,预设编号规则为:从0开始编号,按照等差数列进行编号,且公差为1;

针对每一中间层集合,其中间层编号信息中的中间层起始编号用m表示,其中间层数量用k表示,且目标帧数量用t表示,则有:

在t小于或等于m的情况下,给本中间层集合确定的待执行的运算次数的数值为0;

在t大于或等于m与k的和值的情况下,给本中间层集合确定的待执行的运算次数的数值为k;

在t大于m且小于m和k的和值的情况下,给本中间层集合确定的待执行的运算次数的数值为t与m的差值。

在一个例子中,第一中间层组为图1-2中的若干个中间层0组成的中间层组,且中间层0数量具体为7,则按照预设编号规则,这7个中间层0的编号可以依次为0、1、2、3、4、5、6。假设第一中间层组被拆分为了图6所示的3个中间层集合,则第一个中间层集合的中间层起始编号m具体为0,第一个中间层集合的中间层数量k具体为2;第二个中间层集合的中间层起始编号m具体为2,第二个中间层集合的中间层数量k具体为2;第三个中间层集合的中间层起始编号m具体为4,第二个中间层集合的中间层数量k具体为3。

假设目标帧数量t为4,则第一个中间层集合满足t大于或等于m与k的和值,第二个中间层集合满足t大于或等于m与k的和值,第三个中间层集合满足t小于或等于m,因此,给第一个中间层集合确定的待执行的运算次数的数值为2,给第二个中间层集合确定的待执行的运算次数的数值为2,给第三个中间层集合确定的待执行的运算次数的数值为0。

假设目标帧数量t为6,则第一个中间层集合满足t大于或等于m与k的和值,第二个中间层集合满足t大于或等于m与k的和值,第三个中间层集合满足在t大于m且小于m和k的和值,因此,给第一个中间层集合确定的待执行的运算次数的数值为2,给第二个中间层集合确定的待执行的运算次数的数值为2,给第三个中间层集合确定的待执行的运算次数的数值为2。

这种实施方式中,通过采用与从0开始编号,按照等差数列进行编号,且公差为1这种特定的编号规则匹配的运算次数确定方式,能够保证给每一中间层集合确定的待执行的运算次数均不超过本中间层集合的运算能力,且所确定的待执行的运算次数的总和与目标帧数量在数值上正好相等,从而避免计算资源的浪费。

需要指出的是,在将从0开始编号,按照等差数列进行编号,且公差为1这种特定的编号规则之外的其它编号规则作为预设编号规则时,运算次数确定方式需要做出相应调整,只需保证基于运算次数确定方式确定出的待执行的运算次数的总和与目标帧数量在数值上相等即可。

本公开的实施例中,通过采用与预设编号规则匹配的运算次数确定方式来给每一中间层确定待执行的运算次数,能够较好地保证确定结果的合理可靠性,从而有效地避免计算资源的浪费。

在一个可选示例中,可以先判断神经网络是否属于本公开的实施例所适用的神经网络,具体判断方式参照“示例性系统”部分的说明即可,在此不再赘述。如果判断结果为是,则可以给神经网络中的每一输入层组确定相应的模型输入编号h(模型输入编号可以依次为0、1、2、3、4等,模型输入编号相当于上文中的组标识)。

接下来,所有中间层组(其可以包括上文中的第一中间层组)均按照图像帧的数量的最大可能值进行编译,为了保证程序运行效率,可以对中间层组进行拆分,具体地,如图10所示,可以将中间层组拆分为两半,硬件先算中间层组的前一半,然后算中间层组的后一半。根据拆分结果,还可以对每个输入/输出/中间层分配存储空间,每个输入样本所分配的空间大小相同,每个输出样本所分配的空间大小相同(这相当于上文中的给每一中间层集合分配单个中间层的输入存储空间和输出存储空间)。具体地,每个输入样本所分配的空间大小可以为a(其相当于上文中的输入存储空间),每个输出样本所分配的空间大小可以为b(其相当与上文中的输出存储空间),另外,还可以记录每一中间层集合的中间层数量k和样本起始序号m(其相当于上文中的中间层起始编号)。

之后,对于每一个中间层集合,可以确定一个唯一的三元组,三元组可以表示为(h,m,k),还可以给每一中间层集合对应的三元组分配寄存器r(其也可以称为重复指令寄存器),如果两个中间层集合的三元组相同,则可以共享同一重复指令寄存器。

再之后,可以根据每一中间层集合对应的(r,a,b)生成重复指令,重复指令具体可以如图11所示,还可以记录每个寄存器a所对应的(h,m,k)。如图11所示,每条重复指令后可以紧跟某种计算指令,重复指令和其后的计算指令可以组成用于神经网络运算的指令,并且,重复指令的行为会影响到后面那条计算指令的行为,如图12所示,重复指令的行为具体可以为:

(1)在执行重复指令时,读取重复指令中寄存器r中存储的值,记为q;其中,寄存器r中的a表示输入地址每次重复的偏移量,寄存器r中的b表示输出地址每次重复的偏移量;

(2)如果q<=0,则跳过重复指令后面的那条计算指令,执行重复指令后面的那条计算指令的下一条计算指令;

(3)如果q=1,则正常执行重复指令后面的那条计算指令1次;

(4)如果q>1,则重复执行重复指令后面的那条计算指令q次,每次计算结束后输入存储地址增加a,输出存储地址增加b。

编译阶段结束后,在运行阶段,可以获取每个输入实际的样本数量的值t(其相当于上文中的目标帧数量),再根据每个寄存器r所对应的(h,m,k)的值,设置寄存器r的存储值。具体地,对于每个寄存器r,可以拿到它所对应的输入h所对应的t,如果t<=m,那么设置寄存器r的值为0,如果t>=m+k,那么设置寄存器r的值为k,如果m<t<m+k,那么设置寄存器r的值为t-m。最后,在实际运算处理时,在每个中间层集合处实际执行的运算次数在数值上可以与相应寄存器r中设置的值相等,从而实现按照图像帧的实际数量进行运算处理,以减少资源的浪费。

本公开实施例提供的任一种执行神经网络运算的指令生成方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本公开实施例提供的任一种执行神经网络运算的指令生成方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本公开实施例提及的任一种执行神经网络运算的指令生成方法。下文不再赘述。

本公开实施例提供的任一种图像处理方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本公开实施例提供的任一种图像处理方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本公开实施例提及的任一种图像处理方法。下文不再赘述。

图13是本公开一示例性实施例提供的执行神经网络运算的指令生成装置的结构示意图。图13所示的装置包括第一确定模块131、第二确定模块132和生成模块133。

第一确定模块131,用于基于神经网络中的第一中间层组,确定至少一个中间层集合;第一中间层组与神经网络中的第一输入层组对应,且用于输入第一输入层组的图像帧的数量不固定;

第二确定模块132,用于分别确定第一确定模块131确定出的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量;

生成模块133,用于基于第二确定模块132确定出的每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

在一个可选示例中,如图14所示,生成模块133,包括:

第一确定子模块1331,用于基于第一输入层组的组标识,以及第二确定模块132确定出的每一中间层集合的中间层编号信息和中间层数量,分别确定每一中间层集合对应的三元组;

第一分配子模块1332,用于分别给第一确定子模块1331确定出的每一中间层集合对应的三元组分配寄存器;

第一生成子模块1333,用于基于第一分配子模块1332给每一中间层集合对应的三元组分配的寄存器,以及第二确定模块132确定出的每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

在一个可选示例中,如图15所示,生成模块133,包括:

第二分配子模块1334,用于分别给第一确定模块131确定出的每一中间层集合分配单个中间层的输入存储空间和输出存储空间;

第二生成子模块1335,用于基于第二分配子模块1334给每一中间层集合分配的单个中间层的输入存储空间和输出存储空间,以及第二确定模块132确定出的每一中间层集合的中间层编号信息和中间层数量,生成用于执行神经网络运算的指令。

在一个可选示例中,如图14、图15所示,第一确定模块131,包括:

第二确定子模块1311,用于确定神经网络中的第一中间层组是否满足预设拆分条件;

第三确定子模块1312,用于在第二确定子模块1311确定出第一中间层组满足预设拆分条件的情况下,将第一中间层组拆分为多个中间层集合;否则,将第一中间层组作为一个中间层集合。

图16是本公开一示例性实施例提供的图像处理装置的结构示意图。图16所示的装置包括确定模块161和处理模块162。

确定模块161,用于基于目标帧数量,以及根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,分别给每一中间层集合确定待执行的运算次数;第一中间层组与神经网络中的第一输入层组对应,用于输入第一输入层组的图像帧的数量不固定,且所确定的待执行的运算次数的总和与目标帧数量在数值上相等;

处理模块162,用于通过每一中间层集合,按照确定模块161所确定的待执行的运算次数,对目标帧数量的图像帧执行上述图13所示实施例生成的用于神经网络运算的指令,以对目标帧数量的图像帧进行运算处理。

在一个可选示例中,第一中间层组中的中间层按照预设编号规则进行编号;

确定模块161,具体用于:

基于目标帧数量,根据神经网络中的第一中间层组确定的至少一个中间层集合中的每一中间层集合的中间层编号信息和中间层数量,以及与预设编号规则匹配的运算次数确定方式,分别给每一中间层集合确定待执行的运算次数。

在一个可选示例中,每一中间层编号信息均包括中间层起始编号,预设编号规则为:从0开始编号,按照等差数列进行编号,且公差为1;

针对每一中间层集合,其中间层编号信息中的中间层起始编号用m表示,其中间层数量用k表示,且目标帧数量用t表示,则有:

在t小于或等于m的情况下,给本中间层集合确定的待执行的运算次数的数值为0;

在t大于或等于m与k的和值的情况下,给本中间层集合确定的待执行的运算次数的数值为k;

在t大于m且小于m和k的和值的情况下,给本中间层集合确定的待执行的运算次数的数值为t与m的差值。

在一个可选示例中,如图17所示,处理模块162,包括:

设置子模块1621,用于将给每一中间层集合对应的三元组分配的寄存器中的存储值设置为给本中间层集合确定的待执行的运算次数的数值;

处理子模块1622,用于通过每一中间层集合,按照设置子模块1621给每一中间层集合对应的三元组分配的寄存器中设置后的存储值,对目标帧数量的图像帧执行上述图14所示实施例生成的用于神经网络运算的指令。

在一个可选示例中,处理模块162,具体用于:

在通过每一中间层集合对目标帧数量的图像帧执行图15所示实施例生成的用于神经网络运算的指令时,在一次运算处理完成后,按照给本中间层集合分配的单个中间层的输入存储空间和输出存储空间,进行输入存储地址和输出存储地址的偏移。

下面,参考图18来描述根据本公开实施例的电子设备。该电子设备可以是第一设备和第二设备中的任一个或两者、或与它们独立的单机设备,该单机设备可以与第一设备和第二设备进行通信,以从它们接收所采集到的输入信号。

图18图示了根据本公开实施例的电子设备的框图。

如图18所示,电子设备180包括一个或多个处理器181和存储器182。

处理器181可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备180中的其他组件以执行期望的功能。

存储器182可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器181可以运行所述程序指令,以实现上文所述的本公开的各个实施例的执行神经网络运算的指令生成方法或者图像处理方法。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。

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

例如,在该电子设备是第一设备或第二设备时,该输入装置183可以是麦克风或麦克风阵列。在该电子设备是单机设备时,该输入装置183可以是通信网络连接器,用于从第一设备和第二设备接收所采集的输入信号。

此外,该输入装置183还可以包括例如键盘、鼠标等等。

该输出装置184可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置184可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。

当然,为了简化,图18中仅示出了该电子设备180中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备180还可以包括任何其他适当的组件。

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

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

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

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

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

本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。

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

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

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

相关技术
  • 执行神经网络运算的指令生成方法、图像处理方法及装置
  • 用于执行卷积神经网络运算的处理装置与处理方法
技术分类

06120112533783