对神经网络数据进行预处理和后处理的方法和装置与流程

文档序号:16037679发布日期:2018-11-24 10:12阅读:644来源:国知局

本公开总体上涉及神经网络的技术领域,并且具体地涉及对神经网络数据进行预处理和后处理的方法和装置。

背景技术

处理器在访问物理存储器中的数据时通常采用高速缓存机制。为了确保数据的一致性,在读取数据之前往往将清空高速缓冲存储器中的相应区域;而在访问某个数据时,按照高速缓冲存储器的缓存行(cacheline)的长度将连续物理地址上的数据读入到高速缓冲存储器中。

然而,由神经网络(例如,卷积神经网络)输出的数据通常包括在多个通道上的数据,并且虽然输出数据在实际的物理存储器中在整体上可能分配有一块连续的存储空间,但是每个通道上的数据在该存储空间中可能不是连续存放的,使得在针对神经网络的输出数据执行的数据后处理的过程中,处理器(例如,后处理器)为了单次的计算而读取的数据往往跨越缓存行的地址对齐边界,并且因此需要加载至少两个缓存行的数据,从而造成带宽和时间上的额外开销。

另外,用于神经网络运算的专用硬件加速器通常设计有很多对齐的通道,使得输出数据往往包括很多用于数据对齐的无效数据,并导致更大的带宽开销。



技术实现要素:

根据本公开的一方面,提供了一种对神经网络数据进行预处理的方法。该方法包括:根据要对神经网络的指定层的各个输出通道上的数据执行的数据后处理,确定指定层的输出通道集合序列,输出通道集合序列中的每个输出通道集合包括指定层的一个或多个输出通道;以及根据输出通道集合序列和指定层的设计参数,生成指定层的运算参数序列,运算参数序列中的每个运算参数包括设计参数的与输出通道集合序列中相应的输出通道集合相对应的一个或多个核。

在一个实施例中,确定输出通道集合序列可以包括:确定数据后处理的处理流程中的一个或多个程序块,每个程序块包括与指定层的至少一个输出通道相关联的单入单出的指令序列;确定程序块序列;以及根据程序块序列,确定输出通道集合序列。在一个实施例中,确定程序块序列可以包括:根据数据后处理的处理流程,确定以每个程序块为顶点的顶点活动网;以及基于顶点活动网对程序块进行拓扑排序。在一个实施例中,分别与每个程序块相关联的每个输出通道的集合分别对应于输出通道集合序列中的一个输出通道集合。

在一个实施例中,该方法还可以包括:调整输出通道集合序列,使得调整后的输出通道集合序列中的每个输出通道集合的数据量小于或等于在数据后处理中使用的高速缓冲存储器的单个缓存行的容量。

在不同的实施例中,调整输出通道集合序列可以包括下列中的一个或多个操作:拆分输出通道集合序列中的输出通道集合;合并输出通道集合序列中的相邻的输出通道集合;删除输出通道集合序列中的输出通道集合,所删除的输出通道集合是输出通道集合序列中的另一个输出通道集合的子集,其中,所删除的输出通道集合与在输出通道集合序列中作为所删除的输出通道集合的超集的另一个通道集合可以是相邻的;删除输出通道集合序列中的第一输出通道集合中的一个或多个输出通道,所删除的一个或多个输出通道包括在输出通道集合序列中与第一输出通道集合相邻的第二输出通道集合中;从输出通道集合序列中相邻的第一输出通道集合和第二输出通道集合中删除一个或多个相同的输出通道,然后将所删除的一个或多个相同的输出通道作为新的输出通道集合插入到输出通道集合序列中。

根据本公开的另一方面,还提供了一种计算机可读存储介质,在其上存储的程序指在被执行时执行上述对神经网络数据进行预处理的方法。

根据本公开的另一方面,还提供了一种对神经网络数据进行预处理的装置。该装置可以包括:一个或多个处理器,被配置为至少执行上述对神经网络数据进行预处理的方法。

根据本公开的另一方面,还提供了一种对神经网络数据进行预处理的装置。该装置包括:数据后处理分析器,被配置为根据要对神经网络的指定层的各个输出通道上的数据执行的数据后处理,确定指定层的输出通道集合序列,输出通道集合序列中的每个输出通道集合包括指定层的一个或多个输出通道;以及参数转化器,被配置为根据输出通道集合序列和指定层的设计参数,生成指定层的运算参数序列,运算参数序列中的每个运算参数包括设计参数的与输出通道集合序列中相应的输出通道集合相对应的一个或多个核。

在一个实施例中,数据后处理分析器还可以被配置为调整输出通道集合序列,使得调整后的输出通道集合序列中的每个输出通道集合的数据量小于或等于在数据后处理中使用的高速缓冲存储器的单个缓存行的容量。

根据本公开的另一方面,还提供了一种对神经网络数据进行后处理的方法。该方法可以包括:确定神经网络的指定层的第一输出特征数据中的至少一个第一数据点,第一输出特征数据是通过分别使用上述对神经网络数据进行预处理的方法生成的运算参数序列中的每个运算参数对指定层的输入特征数据执行指定层的运算而获得的指定层的输出特征数据中的一个;将第一输出特征数据中在至少一个第一数据点处的各个输出通道上的数据以按照高速缓冲存储器的缓存行对齐的方式读取到高速缓冲存储器中;以及针对至少一个第一数据点的数据执行数据后处理。

在一个实施例中,至少一个第一数据点中的每个第一数据点的置信度大于或等于第一输出特征数据中任何其他数据点的置信度。在一个实施例中,至少一个第一数据点中的第一数据点的数量可以小于或等于4个。

在一个实施例中,对神经网络数据进行后处理的方法还可以包括:根据至少一个第一数据点在第一输出特征数据中的位置,确定指定层的第二输出特征数据中的对应位置处的至少一个第二数据点,第二输出特征数据是指定层的输出特征数据中的另一个;将第二输出特征数据中在至少一个第二数据点处的各个输出通道上的数据以按照缓存行对齐的方式读取到高速缓冲存储器中;以及针对至少一个第二数据点的数据继续执行数据后处理。在一个实施例中,该方法还可以包括:在将数据读取到高速缓冲存储器中之前,清除高速缓冲存储器中的数据。

根据本公开的另一方面,还提供了一种计算机可读存储介质,在其上存储的程序指令在被执行时执行上述对神经网络数据进行后处理的方法。

根据本公开的另一方面,还提供了一种对神经网络数据进行后处理的装置。该装置可以包括:一个或多个处理器,被配置为至少执行上述对神经网络数据进行后处理的方法。

根据本公开的另一方面,还提供了一种对神经网络数据进行后处理的装置。该装置可以包括:数据过滤器,被配置为至少确定神经网络的指定层的第一输出特征数据中的至少一个第一数据点,第一输出特征数据是通过分别使用上述对神经网络数据进行预处理的方法生成的运算参数序列中的每个运算参数对指定层的输入特征数据执行指定层的运算而获得的指定层的输出特征数据中的一个;数据存取控制器,被配置为至少将第一输出特征数据中在至少一个第一数据点处的各个输出通道上的数据以按照高速缓冲存储器的缓存行对齐的方式读取到高速缓冲存储器中;以及处理器,被配置为至少针对至少一个第一数据点的数据执行数据后处理。

在一个实施例中,数据过滤器还可以被配置为根据至少一个第一数据点在第一输出特征数据中的位置,确定指定层的第二输出特征数据中的对应位置处的至少一个第二数据点,第二输出特征数据是指定层的输出特征数据中的另一个;数据存取控制器还可以被配置为将第二输出特征数据中在至少一个第二数据点处的各个输出通道上的数据以按照缓存行对齐的方式读取到高速缓冲存储器中;并且处理器还可以被配置为针对至少一个第二数据点的数据继续执行数据后处理。

通过根据本公开的实施例的对神经网络数据进行预处理和后处理的方法和装置,至少用于数据后处理的处理器能够在数据后处理过程中高效地访问有效数据,并且能够从总体上显著地提升处理性能并节约带宽消耗。

附图说明

图1示出根据本公开的实施例的神经网络的输出特征数据的示例。

图2示出根据本公开的实施例的神经网络的经填充的输出特征数据的示例。

图3示出根据本公开的实施例的神经网络的输出特征数据的存储方式的示例。

图4示出根据本公开的实施例的对神经网络数据进行预处理的示例方法的流程图。

图5示出根据本公开的实施例的数据后处理的处理程序及相应的处理流程的流程图的示例。

图6示出根据本公开的实施例的数据后处理的顶点活动网的示例。

图7示出根据本公开的实施例的调整输出通道集合序列的示例。

图8示出根据本公开的实施例的调整输出通道集合序列的示例。

图9示出根据本公开的实施例的指定层的原始设计参数的示例。

图10示出根据本公开的实施例的指定层的运算参数序列的示例。

图11示出根据本公开的实施例的所生成的输出特征数据的存储方式的示例。

图12示出根据本公开的实施例的对神经网络数据进行后处理的示例方法的流程图。

图13示出根据本公开的实施例的对神经网络数据进行后处理的示例。

图14示出根据本公开的实施例的处理神经网络数据的系统的示例。

具体实施方式

在本文中,将以卷积神经网络为例来描述根据本公开的实施例的方法和装置。然而,根据本公开的实施例的方法和装置还可以应用于具有级联或多层结构且输出数据可能包括多个通道的任何其他类型的人工神经网络或深度学习模型或机器学习模型,而不局限于卷积神经网络。

卷积神经网络输出的特征数据或特征图可以与多个通道相关联,每个通道上的数据可以表征提供给卷积神经网络的输入特征数据(例如,图像、视频、音频、文本等)在某个方面的特征,例如边界、纹理等。

如图1所示,由卷积神经网络的某一层(例如,输出层)输出的特征数据或特征图可以表示为具有一定高度、宽度和深度(对应于各个通道)的长方体。

在图1的示例中,输出特征数据的高度、宽度和深度(或通道数量)分别为5(高度坐标分别为h0~h4)、5(宽度坐标分别为w0~w4)和5(深度坐标或通道索引分别为c0~c4)的特征数据或特征图,其中,每个小立方体分别表示构成该特征数据的一个数据点或数据位。相应地,特征数据中的每个数据点或数据位可以与一个三维坐标或索引相关联,用于标识或表示该数据点或数据位在特征数据的长方体中的高度、宽度和深度(或所在的通道)。例如,图1的示例中的阴影处的数据点的相应坐标可以是(h1,w0,c0)。

出于硬件成本、计算效率等各方面的考虑,用于神经网络运算的专用硬件加速器通常设计有很多对齐的通道。在所计算出的或将计算出的特征数据在高度、宽度和通道数量中的一个或多个方面不满足预期的对齐要求的情况下,输出特征数据可以在高度、宽度和通道数量中的一个或多个维度上被填充以使经填充的输出特征数据能够满足预期的对齐要求。

如图2所示,例如根据用于执行卷积神经网络中的运算的硬件设计,图1的示例中的输出数据可以被填充为高度、宽度和深度分别为5(高度坐标分别为h0~h4)、8(宽度坐标分别为w0~w7)和8(深度坐标或通道索引分别为c0~c7),其中,w5~w7表示用于使通道对齐的填充位的宽度坐标,c5~c7表示用于使通道对齐的填充位的深度坐标或通道索引,填充的部分对应于图2中用粗线包围的部分。

在图1和图2的示例中,填充后的输出特征数据包括5*8*8=320个数据点,而其中的有效数据点只有5*5*5=125个,有效数据的比率约为125/320≈40%。这意味着,例如,在针对该输出特征数据执行的数据后处理的过程中,读取与高度坐标h0相关联的所有数据点的数据将浪费大约60%的带宽。

另外,虽然输出特征数据在实际的物理存储器中在整体上可能分配有一块连续的存储空间,但是输出特征数据中的每个通道上的数据在该存储空间中可能不是连续存放的。例如,对于图2的示例中的输出特征数据,其在实际的物理存储器中的存储形式可能如图3所示,其中,正面为阴影的小立方体对应于经填充的输出特征数据中的填充的数据点。

在图3的示例中,假设用于数据后处理的高速缓冲存储器的缓存行的长度为16并且数据按照4个字节(即,32个比特)对齐,则图3的示例中的与c0和h0相关联的所有数据跨越缓存行的地址对齐边界。在数据后处理中,在需要读取和处理与c0和h0相关联的所有数据的情况下,处理器需要将四条数据(即,图3中第一行至第四行的数据)读取到四个缓存行中,而不是仅将两条数据(即,图3中的第一行和第三行的数据)读取到两个缓存行中,由此至少带来带宽和时间方面的额外开销。

图4示出根据本公开的实施例的对神经网络数据进行预处理的方法。通过在执行神经网络中的运算之前,对神经网络中的需要将输出特征数据输出到神经网络外部的某个层的数据执行该数据预处理方法,使该层能够生成并输出具有期望的优化结构和次序的一个或多个特征数据,来代替原本的一个输出特征数据,并且在针对神经网络的输出结果的数据后处理中使用这些具有优化结构和次序的特征数据,从而提高带宽利用率,减小或消除额外的时间开销,并在整体上提高数据后处理的性能。

如图4所示,根据本公开的实施例的对神经网络数据进行预处理的方法可以包括步骤s110和步骤s120。在步骤s110中,可以根据要对神经网络的指定层的各个输出通道上的数据执行的数据后处理,确定指定层的输出通道集合序列,其中,输出通道集合序列中的每个输出通道集合可以包括指定层的一个或多个输出通道。然后,在步骤s120中,可以根据指定层的设计参数和在步骤s110中获得的输出通道集合序列,生成指定层的运算参数序列,其中,运算参数序列中的每个运算参数包括设计参数的与输出通道集合序列中相应的输出通道集合相对应的一个或多个核。

根据不同的实施例,根据本公开的实施例的对神经网络数据进行预处理的方法中所涉及的指定层可以是神经网络的输出层,也可以是神经网络中需要将相应的输出特征数据输出到神经网络外部并执行相应的数据后处理的任何隐藏层或中间层,甚至在需要将输入层的输出特征数据输出到神经网络外部并执行相应的数据后处理的情况下也可以是神经网络的输入层。如果神经网络中的多个层的相应的输出特征数据均需要输出到神经网络外部并执行相应的数据后处理,则可以分别针对这些层中的每一层的数据执行根据本公开的实施例的数据预处理方法。

在步骤s110中,可以根据不同的原则、以不同的方式来确定指定层的输出通道的输出通道集合序列。例如,可以由神经网络的设计人员根据指定层的各个输出通道在相应的数据后处理中的依赖关系、处理的先后次序、与神经网络的任务背景(例如,边界标注、对象识别等)的相关程度等对指定层的各个输出通道进行分组,然后对所获得的各个分组进行排序,其中,每个分组可以被称为输出通道集合,并且两个输出通道集合可以具有交集,即,某个输出通道可以被复制并同时分配到两个分组中,或者可以同时与两个分组相关联。

例如,假设神经网络要执行的任务是在图3的示例中的存储的输出特征数据来检测输入图像中的人,并且根据神经网络的设计和/或神经网络的任务事先确定输出通道c1和c2是与该任务有关的关键通道(例如,根据通道c1和c2上的数据能够以更高的准确率确定作为检测对象的人在输入图像中的对应区域),输出通道c0的数据在该检测任务中用于辅助检测,而其他输出通道上的数据对于该检测任务作用不大,则可以初步地确定出包括三个输出通道集合的输出通道集合序列{{c1,c2},{c0},{c3,c4}}。因为数据后处理通常不涉及对用于使通道对齐的填充通道的处理,所以在确定输出通道集合序列时可以不必考虑填充通道c5至c7。

在另外的示例中,假设根据神经网络的设计和/或神经网络的任务事先确定输出通道c0是关键通道,而其他输出通道上的数据作用不大或者无用,则可以初步地确定至少包括输出通道集合{c0}的输出通道集合序列。根据不同的实施例,可以将其他所有的通道作为输出通道集合序列中的另一个输出通道集合并,也可以不考虑这些通道,使得输出通道集合序列只包括输出通道集合{c0}。

在一个实施例中,在步骤s110中,可以根据与神经网络的指定层的输出数据相关联的数据后处理的处理流程来确定指定层的输出通道集合序列。

图5中的垂直虚线的左侧示出在神经网络的设计阶段已经确定的要针对图1至图3中的示例中的输出特征数据执行的数据后处理的示例程序。例如,可以通过任何适当的代码分析技术来分析数据后处理的程序代码,以确定数据后处理的处理流程中的一个或多个程序块,其中,每个程序块可以包括与指定层的至少一个输出通道相关联的单入单出的指令序列。

例如,包含指令“proc1(c1,c2)”和“con1(c0)”的指令序列具有单个输入或单个执行条件(即,指令“proc1(c1,c2)”的输入)和单个输出(即,“con1(c0)”的输出)。因此,可以将该指令序列作为根据本公开的实施例的一个程序块b1。

指令“proc2(c1,c3,c4)”的执行条件为“con1(c0)”的输出结果为“真”,而“proc3(c0,c1,c2,c3,c4)”的执行条件为“con1(c0)”的输出结果为“假”,并且指令“proc2(c1,c3,c4)”和“proc3(c0,c1,c2,c3,c4)”具有不同的输出,换句话说,指令“proc2(c1,c3,c4)”和“proc3(c0,c1,c2,c3,c4)”处于不同的处理分支上,并且不可能同时执行。相应地,包括指令“proc2(c1,c3,c4)”和“proc3(c0,c1,c2,c3,c4)”的指令序列具有两个输入和两个输出。因此,指令“proc2(c1,c3,c4)”和“proc3(c0,c1,c2,c3,c4)”分别包括在两个程序块b2和b3中,而不能包括在一个程序块中。类似地,还可以进一步地确定出另外的程序块b4和b5。

然后,可以确定所获得的程序块的序列。

在一个实施例中,可以先确定出数据后处理的处理流程图。例如,对于图5中的垂直虚线的左侧所示的程序指令,根据本公开的实施例的数据后处理的处理流程图可以如图5中的垂直虚线的右侧所示,其中,“nop”表示与指定层的输出通道无关的指令序列或者具有多个输入和/或多个输出的指令序列(例如,与流程/分支控制相关的程序关键词或指令序列)。

然后,可以根据所获得的处理流程图,例如通过剪裁和调整,确定以每个程序块为顶点的顶点活动网。在一个实施例中,可以从例如如如图5中的垂直虚线的右侧所示的处理流程图中去掉所有的连接两个“nop”块的箭头或连线,然后使用连线替换所有的“nop”块,从而获得例如如图6中的箭头a的左侧所示的顶点活动网。

在另外的实施例中,可以采用任何适当的程序分析技术或编译技术直接从程序代码生成根据本公开的实施例的顶点活动图。

在与数据后处理的处理流程相关联的顶点活动网中,每个顶点分别对应于先前确定的每个程序块,顶点之间的有向箭头(即,顶点活动网的边)可以代表程序块之间的优先关系,即,箭头的起点处的程序块的执行结果可以作为该箭头的终点处的程序块的执行的先决条件,或者箭头的起点处的程序块先于该箭头的终点处的程序块而被执行。

然后,可以对顶点活动网中的各个顶点进行例如拓扑排序。

根据本公开的实施例的顶点活动网中的每个顶点(即,程序块)与神经网络的指定层的一个或多个输出通道相关联。例如,在图6的示例中,顶点b1与通道c0、c1和c2相关联,顶点b5与通道c0、c2和c3相关联。于是,每个顶点可以使用相关联的输出通道集合来替换。例如,可以输出通道集合s1={c0,c1,c2}来作为顶点替换b1,使用出通道集合s2={c1,c1,c4}来作为顶点替换b2,以此类推。由此,根据所获得的程序块序列,可以确定对应的输出通道集合序列。根据不同的实施例,输出通道集合序列中的每个输出通道集合可以是有序集合,也可以是无序集合。

在另外的实施例中,也可以先根据以程序块为顶点的顶点活动图生成以输出通道集合为顶点的有向无环图,然后对有向无环图中的各个顶点进行例如拓扑排序,从而获得输出通道集合序列。

在上述的实施例中,可以采用拓扑排序对以程序块为顶点的顶点活动图或以输出通道集合为顶点的有向无环图中的各个顶点进行排序。例如,可以通过迭代地执行以下步骤来获得程序块序列或输出通道集合序列:如果存在入度为0(即,没有任何前驱节点,或者说,不作为任何箭头的终点)的顶点,则输出该顶点,并且删除该顶点以及以该顶点为起点的所有箭头(即,该顶点的出边)。

应当意识到,上述拓扑排序的结果可能根据所采用的顶点遍历原则不同而不同。例如,对于图6中的示例,通过拓扑排序获得的输出通道集合序列可能是s1->s2->s3->s4->s5或者s1->s3->s2->s4->s5。

在另外的实施例中,也可以通过其他的排序方式来获得输出通道集合序列。例如,在一个实施例中,可以采用深度优先的排序方式来获得程序块序列或输出通道集合序列。例如,对于图6中的示例,采用深度优先的排序方式获得的输出通道集合序列可能是s1->s2->s4->s5->s3或者s1->s3->s4>s5->s2。

在另外的实施例中,还可以根据例如顶点活动图或有向无环图中的每个顶点对应的输出通道集合与神经网络的任务的相关性等,对图中的每个顶点和/或边设置相应的权重,然后根据权重或者结合权重对图中的各个顶点进行排序。例如,如果通过分析而预测程序块b2被执行的可能性高于程序块b3,则可以分配给程序块b2的权重可以高于程序块b3,使得例如在拓扑排序的结果中,具有更高权重的程序块b2可以位于程序块b3之前,从而获得输出通道集合序列s1->s2->s3->s4->s5。

根据数据后处理中所使用的高速缓冲存储器的缓存行的容量或长度,可能需要调整所获得的输出通道集合序列,使得调整后的输出通道集合序列中的每个输出通道集合的数据量小于或等于在高速缓冲存储器的单个缓存行的容量。

根据不同的实施例,调整输出通道集合序列的方式可以包括但不限于下列中的一个或多个:

-将输出通道集合序列中的某个输出通道集合拆分成至少两个部分;

-合并输出通道集合序列中的相邻的两个或多个输出通道集合;

-删除输出通道集合序列中的某个输出通道集合,删除的输出通道集合是输出通道集合序列中的另一个输出通道集合(例如,与删除的输出通道集合相邻的另一个输出通道集合)的子集;

-删除输出通道集合序列中的某个输出通道集合中的一个或多个输出通道,所删除的一个或多个输出通道包括在与删除的输出通道集合相邻的另一个输出通道集合(例如,与删除的输出通道集合相邻的另一个输出通道集合)中;以及

-从输出通道集合序列中相邻的一个输出通道集合和另一个输出通道集合中删除一个或多个相同的输出通道,并且将所删除的一个或多个相同的输出通道作为新的输出通道集合插入到输出通道集合序列中,例如,插入到前述的一个输出通道集合或另一个输出通道集合之前或之后。

可以迭代地调整输出通道集合序列,并且每次迭代中可以仅针对作为前一次调整的结果的输出通道集合序列中的一个或多个输出通道集合,直至调整后的输出通道集合序列中的每个输出通道集合的数据量小于或等于在高速缓冲存储器的单个缓存行的容量为止。

另外,可以建立诸如马尔科夫决策过程模型等决策模型,并根据所建立的决策模型来选择调整方式和调整方式的执行次序,以便进一步减少数据的存取次数和提供高速缓冲存储器的利用率。

例如,假设单个缓存行的容量为16个比特,特征数据中的每个数据点的数据占用4个比特,则对于图6的示例中的输出通道集合s3中的数据量(4*5=20)大于单个缓存行的容量,因此需要调整输出通道集合序列。

对于图6的示例,假设所获得的初始输出通道集合序列为s1->s2->s3->s4->s5,其中,s1和s2之间存在交集,s1、s2、s4和s5均是s3的子集,s4是s5的子集,则根据所采用的调整方式以及调整方式的执行次序,可以获得不同的调整后的输出通道集合序列。

例如,如图7所示,可以先从s3中删除同样包含在s4中的c2和c3,并获得s3’={c0,c1,c4},然后删除作为s5的子集的s4,由此获得调整后的输出通道集合序列s1->s2->s3’->s5。然后,根据需要,可以继续采用其他调整方式对输出通道集合序列s1->s2->s3’->s5进行进一步的调整。

在另外的示例中,如图8所示,可以先将s3拆分成两个部分s31={c0,c1,c2,c3}和s32={c4},然后删除作为s5的子集的s4以及作为s31的子集的s5,由此获得调整后的输出通道集合序列s1->s2->s31->s32。然后,根据需要,可以继续采用其他调整方式对输出通道集合序列s1->s2->s31->s32进行进一步的调整。

在获得指定层的输出通道集合序列之后,如图4所示的方法可以继续到步骤s120。

对于卷积神经网络,为了在指定层获得在指定的输出通道上的输出特征数据,指定层的原始的设计参数需要至少包括与指定层的输出通道一一对应的一个或多个核。例如,如图9所示,为了获得图1的示例中的输出特征数据,指定层的设计参数可以包括五个核k0至k4,其中,使用核k0对指定层的输入特征数据inf执行指定层的运算(例如卷积运算)conv获得输出特征数据在输出通道c0上的数据(对应于图9中被标记为c0的一排数据块),类似地,k1至k4分别对应于输出特征数据的输出通道c1至c4。为了简洁,在图9中未示出针对输出特征数据的填充。

在步骤s120中,可以根据指定层的原始的设计参数和在步骤s110中获得的输出通道集合序列,生成指定层的运算参数序列。

例如,假设在步骤s110中,根据数据后处理(还可能结合神经网络的设计和/或任务等方面),确定与图1的示例相关联的指定层的输出通道集全序列为{{c0},{c1,c2,c3,c4}},则对于图9的示例中的包括核k0至k4的设计参数,可以根据输出通道集全序列{{c0},{c1,c2,c3,c4}},相应地确定核集合序列或运算参数序列{{k0},{k1,k2,k3,k4}}。

在通过步骤s120确定出指定层的运算参数序列之后,图4所示的根据本公开的实施例的对神经网络数据进行预处理的方法可以结束。

在之后的指定层的实际运算中,原本设计的、例如如图9所示的使用一个运算参数(包括k1至k4五个核)并获得一个输出特征数据的运算转换成例如图10所示的、分别使用两个运算参数(一个对应于运算参数序列{{k0},{k1,k2,k3,k4}}中的{k0},另一个对应于运算参数序列{{k0},{k1,k2,k3,k4}}中的{k1,k2,k3,k4})并获得两个输出特征数据outf1和outf2。另外,关于outf1,图10还示出了为了使通道对齐而填充(例如,通过硬件自动填充)的通道c5至c7。为了简洁,在图10中未示出针对输出特征数据在宽度上的填充。

在实际的物理存储器中,可以分别针对输出特征数据outf1和outf2分配两块连续的存储空间,并且在每个存储空间中的存储情况可以例如如图11所示。对比图3所示的存储方式,如图11所示的存储方式的存储效率更高;并且在数据后处理中,处理器将数据读取到高速缓冲存储器所需的处理时间更少,总线带宽的利用率更高,能够显著地提高数据后处理的性能。

根据一个实施例,对于通过使用根据图4所示的示例方法获得的运算参数序列中的运算参数对指定层的输入特征数据执行指定层的运算而获得的输出特征数据,可以使用如图12所示的示例方法对其进行后处理。

如图12所示,根据本公开的实施例的对神经网络数据进行后处理的示例方法可以包括步骤s210、s220和s230。

在步骤s210中,可以确定该输出特征数据中的至少一个数据点,其中,所确定的至少一个数据点中的每个数据点的置信度可以大于或等于该输出特征数据中的任何其他数据点的置信度。例如,对于小型的神经网络,在步骤s210中所选择的这样的数据点的数量可以小于或等于4个。另外,所选择的这样的数据点的数量也可以大于或等于某个数量,例如,2个。在其他规模的神经网络中,这样的数据点的数量也可以具有其他任何适当的范围,例如,3个以下,5个以下,6个以下,甚至是仅一个数点或者全部的数据点。

然后,可以在步骤s220中,将该输出特征数据在确定的至少一个数据点处的各个输出通道上的数据以按照高速缓冲存储器的缓存行对齐的方式读取到高速缓冲存储器中。

然后,可以在步骤s230中,针对该输出特征数据在确定的至少一个数据点处的各个输出通道上的数据执行预定的数据后处理。

在另一个实施例中,可以先按照缓存行对齐的方式读取该输出特征数据中的部分数据。然后,在确定所读取的这一部分数据满足计算要求的情况下,根据置信度保留预定数量的数据点处的数据。然后,针对所读取的这一部分数据(例如,该部分数据中在保留的数据点处的数据)执行预定的数据后处理。然后,在尚未处理完该输出特征数据下,可以重复前述步骤,以针对该输出特征数据中的另一个(例如,下一个)部分数据执行处理。

然后,如果使用运算参数序列中的运算参数在指定层生成了多个输出特征数据,则在针对前一个输出特征数据执行完步骤s210至s230中的操作之后,可以根据所确定的至少一个数据点在前一个输出特征数据中的位置,确定下一个输出特征数据中的对应位置处的至少一个数据点,然后将下一个输出特征数据中在所确定的数据点处的各个输出通道上的数据以按照缓存行对齐的方式读取到高速缓冲存储器中,并针对所读取的数据继续执行预定的数据后处理。

例如,如图13所示,如果在针对前一个输出特征数据outf1执行数据后处理的过程中,确定两个数据点(h1,w1)和(h3,w3),则针对输出特征数据outf1的数据后处理可以针对(h1,w1,c0)和(h3,w3,c0)执行,相应读取的数据可以包括(h1,w1,c0)、(h1,w1,c5)、(h1,w1,c6)、(h1,w1,c7)、(h3,w3,c0)、(h3,w3,c5)、(h3,w3,c6)和(h3,w3,c7)。

随后,在针对下一个输出特征数据outf2执行数据后处理时,可以根据针对输出特征数据outf1确定的两个数据点(h1,w1)和(h3,w3),确定在输出特征数据outf2中的两个数据点(h1,w1)和(h3,w3)。然后,可以按照缓存行对齐的方式读取(h1,w1,c1)、(h1,w1,c2)、(h1,w1,c3)、(h1,w1,c4)、(h3,w3,c1)、(h3,w3,c2)、(h3,w3,c3)和(h3,w3,c4),并针对所读取的这些数据执行预定的数据后处理。

结合图5的示例,图12所示的示例方法中的步骤s210和s220可以显著地减少计算数量。例如,对于图13的示例,循环次数可以从原本的5*5=25次减少到4次,从而能够显著地提升处理性能。从这个角度来看,图12所示的示例方法中的步骤s210和s220实际上可以被视为在执行数据后处理之前的另一预处理操作。

另外,在将数据读取到高速缓冲存储器中之前,可以清除高速缓冲存储器中的数据,以确保数据的一致性。

图14示出根据本公开的实施例的处理神经网络数据的系统的示例。该系统可以包括对神经网络数据进行预处理的装置pre、用于执行神经网络运算的装置aic(例如,专用的人工智能芯片或者诸如通用计算机和手机这样的具有相应运算能力的通用计算装置)、用于存储装置aic的输出结果的存储器mem以及对神经网络数据进行后处理的装置post。在另外的实施例中,该系统还可以包括另外的装置或系统,用于基于装置post的输出结果执行相应的处理,例如执行识别或检测任务等。

根据一个实施例,装置pre可以至少包括例如通过总线连接的数据后处理分析器ana和参数转化器tra。根据不同的实施例,装置pre可以作为神经网络的编译器或者作为神经网络的编译器的一部分。

数据后处理分析器ana可以包括一个或多个处理器,并且可以被配置为分析要对神经网络的指定层的各个输出通道上的数据执行的数据后处理cod,并根据数据后处理cod来确定指定层的输出通道集合序列。

参数转化器tra也可以包括一个或多个处理器,并且可以被配置为根据来自数据后处理分析器ana的输出通道集合序列和指定层的设计参数,来生成指定层的运算参数序列。

另外,数据后处理分析器ana还可以被配置为调整所生成的初始输出通道集合序列,使得调整后的输出通道集合序列中的每个输出通道集合的数据量小于或等于在装置post中使用的高速缓冲存储器cach的单个缓存行的容量。

根据另一个实施例,装置pre可以至少包括一个或多个处理器。所包括的一个或多个处理器可以被配置为至少执行根据本公开的实施例的对神经网络数据进行预处理的方法(例如,如图4所示的方法)。

根据本公开的实施例,装置aic可以被设计为支持根据装置pre的输出来调整指定层的运算参数,并且能够支持在指定层输出多个输出特征数据。

根据一个实施例,装置post可以至少包括例如通过总线连接的数据过滤器flt、数据存取控制器mac、处理器proc。在图14的示例中,装置post的内部还包括高速缓冲存储器cach。在另外的实施例中,装置post可以作为用于执行神经网络的任务的装置或系统的一部分,或者与装置aic合并,或者作为装置aic的一部分。相应地,高速缓冲存储器cach也可以是在装置post外部,并且例如能够被装置post、装置aic等共用。

数据过滤器flt可以包括一个或多个处理器,或者作为处理器proc的一部分,并且可以被配置为至少确定神经网络的指定层的一个输出特征数据中的至少一个数据点。如前文所述,可以根据各个数据点的置信度来选择或确定至少一个数据点。

数据存取控制器mac可以被配置为至少将输出特征数据中在至少一个数据点处的各个输出通道上的数据以按照高速缓冲存储器cach的缓存行对齐的方式读取到高速缓冲存储器cach中。

处理器proc可以是通用或专用的处理器,并且可以被配置为至少针对读取到cach中的至少一个数据点的数据执行数据后处理cod。

数据过滤器flt、数据存取控制器mac和处理器proc可以被配置为支持针对神经网络的指定层的多个输出特征数据顺序地或者并行地执行前述相应的处理。

根据另一个实施例,装置post可以至少包括一个或多个处理器。所包括的一个或多个处理器可以被配置为至少执行根据本公开的实施例的对神经网络数据进行后处理的方法(例如,如图12所示的方法)。

根据不同的实施例,装置pre、aic、mem和post之间可以通过总线、网络、数据线等不同的线路、以有线或无线的方式连接或耦接到一起。

图14中的连线的箭头可以表示系统中的指令和/或数据的主要流向,但是根据本公开的实施例的系统以及装置pre、aic和post中的任何一个或多个不局限于图14所示的指令和/或数据的流向。另外,图14中的ana与cod之间以及proc与cod之间的连线表示ana和proc需要取得数据后处理cod的程序文本、代码指令、流程图、中间指令等,而不代表ana与cod之间以及proc与cod之间必然存在相应的物理连接。

在另外的实施例中,装置pre、aic和post中的任何一个还可以包括用于临时或永久性地保存数据的存储器。存储器可以包括各种形式的计算机可读写存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪速存储器等。

在一个实施例中,可以独立于装置pre、aic和post中的任何一个而提供一个计算机可读存储介质,在其上存储有程序指令,该程序指令在被执行时执行上述对神经网络数据进行预处理的方法,例如,如图4所示的方法;并且可以提供另一个计算机可读存储介质,在其上存储有程序指令,该程序指令在被执行时执行上述对神经网络数据进行后处理的方法,例如,如图12所示的方法。在另外的实施例中,也可以在独立于装置pre、aic和post中的任何一个的同一个计算机可读存储介质上同时存储对神经网络数据进行预处理的方法和对神经网络数据进行后处理的方法。根据不同的实施例,这样的计算机可读写存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合,例如可以包括只读存储器(rom)、硬盘、闪速存储器等。在一个实施例中,上述的计算机可读存储介质可以是非临时性或临时性的计算机可读的或计算机可读写的存储介质。

在一个实施例中,装置pre、装置aic和装置post中的每一个可以分别配置和提供。例如,如前文所述,装置pre可以作为神经网络的编译器的一部分,装置post可以作为特定于任务的处理芯片的一部分或者与装置aic一起作为智能芯片的一部分。

已经描述了本公开的一些实施例,但是这些实施例仅作为示例而呈现,而不打算限制本公开的范围。实际上,在本文中所描述的方法和装置可以采用多种其他形式来实施。另外,可以在不脱离本公开的范围的情况下,在本文中所描述的方法和装置的形式上做出各种省略、替换和改变。

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