首页> 中国专利> 用于加速操作的方法和加速器装置

用于加速操作的方法和加速器装置

摘要

本公开涉及由加速器装置访问和处理数据的方法。所述方法包括:检索要由所述加速器装置处理的输入数据的至少一部分;将所述输入数据分割为多个相邻输入块,所述输入块具有预定大小;将所述多个相邻输入块中的至少一个输入块存储在所述加速器装置的数据缓冲器中;通过将输入窗口定位于存储在所述数据缓冲器中的多个相邻输入块中的所述至少一个输入块的数据元素上方,访问存储在所述数据缓冲器中的数据元素,以生成多个输入区域,其中,所述输入窗口能够根据一组参数进行调整;以及顺序地处理所述多个输入区域中的至少一个输入区域,以由所述加速器装置至少部分地处理所述多个相邻输入块中的所述至少一个输入块。加速器装置和相应的系统被公开。

著录项

  • 公开/公告号CN112292694A

    专利类型发明专利

  • 公开/公告日2021-01-29

    原文格式PDF

  • 申请/专利权人 智动科技有限公司;

    申请/专利号CN201980041257.2

  • 发明设计人 G·纳吉;M·菲赫尔;I·H·魏曼;

    申请日2019-04-09

  • 分类号G06N3/04(20060101);G06N3/063(20060101);G06F12/0846(20060101);

  • 代理机构11415 北京博思佳知识产权代理有限公司;

  • 代理人艾佳

  • 地址 匈牙利布达佩斯

  • 入库时间 2023-06-19 09:41:38

说明书

技术领域

本发明涉及由加速器装置访问和处理数据的方法、加速器装置和系统。特别地,本发明可以涉及使用可调整输入窗口对相邻输入块进行操作的方法。

背景技术

由于计算技术的最新发展,大多数设备、机器或基础设施的操作完全依赖于基于计算机的各种输入数据处理和/或基于计算机的处理状态评估,以便生成适合于控制设备、机器或基础设施的信息。通常,这种处理和相应的决策制定需要大量复杂的计算任务或操作,但是,这些计算任务或操作通常属于相似的类型。虽然可以由诸如处理设备的CPU或核之类的通用处理单元执行所述任务或操作,各种用于加速此类任务或操作的专用硬件仍被提出。这种专用硬件通常称为加速器。

例如,已经提出了各种数学协处理器来加速数学运算,诸如对浮点数的运算等等。作为加速器的另一示例,已经提出了视频或图形加速器来加速图形或视频对象的处理和渲染。加速器通常包括专用于所需任务或操作以及相应的数据格式的专用硬件。

在图像处理、计算机视觉和人工智能的领域,已经提出了用于卷积操作的加速器。在许多人工智能方法中都需要卷积操作来对输入数据进行分析和分类以实现决策过程。由于这种处理通常响应于所拍摄的传感器数据而在相应设备上本地执行,因此卷积操作的实时处理已成为例如脸部识别、交通标志检测以及与监视、安全应用、自动驾驶等相关的其他任务中的关键问题。卷积神经网络(CNN)是应用在计算机视觉和人工智能中的使用卷积操作的一种技术示例。CNN将特征提取和分类组合在一个灵活的模型中,该模型可以通过更新处理参数来适应各种场景。

已经提出了几种CNN加速器,例如,由S.Chakradhar等人于2010年在ISCA中发表的“A Dynamically Configurable Coprocessor for Convolutional Neural Networks(用于卷积神经网络的动态可配置协处理器)”,以及C.Farabet等人于2011年在EmbeddedComputer Vision Workshop(嵌入式计算机视觉研讨会)中发表的“NeuFlow:A RuntimeReconfigurable Data Flow Processor for Vision(NeuFlow:面向视觉的运行时可重配置数据流处理器)”中提出的。这些CNN加速器将CNN的操作映射到专用硬件。但是,在大多数方法中,困难在于如何进行仲裁和路由以共享输入并将CNN的输出连接到其他资源。在各种应用场景中,加速器的处理效率可能因过多的数据传输和有限的带宽而大大降低,这可能会降低加速器的效率。M.Peemen等人于2013年在ICCD中发表的“Memory-centricAccelerator Design for Convolutional Neural Networks(用于卷积神经网络的以存储器为中心的加速器设计)”公开了一种用于卷积神经网络的以存储器为中心的加速器设计,该加速器具有可通过利用数据重用和存储器访问模式来解决带宽问题的存储器子系统。加速器经由快速单工链路(Fast Simplex Link)连接而耦接到外部存储器,所述连接被主机处理器用来使数据流入和流出加速器。

除带宽问题外,已知的加速器还受到输入数据的特定大小和排列的限制。US 9,665,799公开了一种CNN,其在每一周期计算权重核与底层数据的卷积。但是,如果使用其他大小的权重核,则可能无法充分利用计算资源,并且如果对输入数据进行二次采样,则计算效率可能会下降。在WO2017/003887A1中公开了加速器的另一种布置。此布置可能会因权重核重叠而需要存储冗余输入数据。

因此,本公开的至少一个目的在于定义一种由加速器装置访问和处理数据(诸如通过应用卷积操作)的方法,其可以灵活地适用于各种场景,有效地利用可用资源,并且处理与由加速器装置处理的输入和输出数据的交换有关的带宽问题。

发明内容

本发明由根据独立权利要求的方法、装置和系统限定。优选实施例在从属权利要求中限定。

在本公开的一方面,定义了由加速器装置访问和处理数据的方法,该方法包括:检索要由所述加速器装置处理的输入数据的至少一部分;将所述输入数据分割为多个相邻输入块,所述输入块具有预定大小;将所述多个相邻输入块中的至少一个输入块存储在所述加速器装置的数据缓冲器中;通过将输入窗口定位于存储在所述数据缓冲器中的所述多个相邻输入块中的所述至少一个输入块的数据元素上方,访问存储在所述数据缓冲器中的所述数据元素,以生成多个输入区域,其中,所述输入窗口能够根据一组参数进行调整;以及顺序地处理所述多个输入区域中的至少一个输入区域,以由所述加速器装置至少部分地处理所述多个相邻输入块中的所述至少一个输入块。

该方法可以被实现为加速器装置中的硬件、软件或两者的组合,例如,被配置为执行一个或多个方法步骤的硬件单元,该加速器装置具有:多个处理模块,每个所述处理模块被配置为处理输入数据;控制模块,被配置为控制所述多个处理模块中的每个处理模块的处理;和/或高速缓存模块,被配置为存储由所述多个处理模块中的至少一个处理模块处理后的数据的至少一部分。每个所述处理模块可以包括:处理核,被配置为通过使用多个处理元件执行操作来处理输入数据;输入控制单元,被配置为检索输入数据,例如,经由接口访问的外部数据和/或存储在高速缓存模块中的数据,并将检索到的输入数据提供给处理核。所述处理核可以包括存储输入块的数据缓冲器。每个处理模块还可以包括输出控制单元,该输出控制单元被配置为向接口和高速缓存模块提供由处理核处理后的数据。

该方法通过定义检索输入数据并使用可调整输入窗口来对个体输入块进行操作的结构,改善了加速器装置中对数据的访问和处理。这简化了加速器装置对存储在数据缓冲器中的输入数据的结构化检索和对检索到的输入数据的处理,使得用于实现处理元件的硬件可以简化为对连续输入区域的处理。

在一个实施例中,该方法还包括:依序将多个相邻输入块中的另一输入块存储在数据缓冲器中;以及使用输入窗口来访问多个相邻输入块中的另一输入块的数据。

根据一个实施例,所述一组参数包括步长值和膨胀值。应理解,步长值和膨胀值表示作为用于配置输入窗口以生成输入区域的参数的数值。

在优选实施例中,膨胀值定义输入窗口的两个连续位置之间的距离。

在另一实施例中,该方法还包括确定加速器装置的处理模式。优选地,在第一处理模式下,步长值定义由输入窗口采样的数据元素之间的间隔。根据另一优选实施例,在第二处理模式下,步长值定义由输入窗口的单个数据元素生成的数据元素的数量。可以以一维或多维、二维、三维或三个以上的维度来生成数据元素。例如,可以在包括水平维度和垂直维度的两个维度上生成数据元素。由输入窗口的单个数据元素生成的数据元素的数量可以取决于维度的数量和/或步长值(或步长值分量),可以为每个维度定义步长值。例如,在二维中,可以定义水平步长值(分量)s

在一个实施例中,所述一组参数还包括到存储在系数缓冲器中的系数矩阵的映射,其中,通过根据所述映射将所述系数矩阵中的至少一个元素应用于输入区域来处理输入区域。

根据一个实施例,该方法还包括:与生成输入区域并行地检索系数矩阵中的至少一个元素;以及使用至少一个处理元件将系数矩阵中的至少一个元素应用于输入区域。所述至少一个处理元件可以为加速器装置的处理模块的处理核的处理元件之一。然而,应理解,加速器装置中的多个处理元件也可以被不同地构造。例如,加速器装置和/或处理核可以包括多个处理元件。

在另一实施例中,至少一个处理元件实现逐元素乘积。

根据另一实施例,输入窗口根据映射和/或处理模式被定位在存储在数据缓冲器中的数据元素上方。

在另一实施例中,经由输入窗口访问数据元素在实现数据缓冲器的电路中是硬连线的。

在另一实施例中,数据缓冲器为二维数据缓冲器,并且多个输入区域中的每个输入区域表示二维区域。

优选地,加速器装置实现对输入数据的卷积操作。

在优选实施例中,输入数据包括传感器数据。优选地,传感器数据可以包括计算机视觉数据、图像数据和/或一个或多个设备的处理状态的监测数据中的一个或多个。

根据本公开的另一方面,定义了一种或多种机器可读介质,在其上存储有指令,所述指令在计算设备或(加速器)装置上执行时,将所述计算设备或装置配置为执行根据本公开的任一实施例的方法。

根据本公开的另一方面,定义了一种用于处理输入数据的加速器装置,所述加速器装置包括:接口,被配置为将所述装置耦接至互连;以及至少一个处理模块,被配置为处理输入数据,其中,所述加速器装置被配置为:根据本公开的一个或多个实施例的方法,经由所述接口检索至少一些输入数据,以及使用所述至少一个处理模块处理输入数据。应理解,所述加速器装置可以包括根据本公开的一个或多个实施例的(加速器)装置或系统的任何特征及其任意组合。

根据本公开的另一方面,定义了一种(加速器)装置,所述加速器装置包括:接口,被配置为将所述装置耦接到互连;多个处理模块,每个处理模块被配置为处理数据;控制模块,被配置为控制多个处理模块中的每个处理模块的处理;以及高速缓存模块,被配置为存储由多个处理模块中的至少一个处理模块处理后的数据的至少一部分,其中,每个处理模块进一步包括:处理核,被配置为使用多个处理元件执行操作来处理数据;输入控制单元,被配置为经由接口来检索数据和检索存储在高速缓存模块中的数据,并将所检索到的数据提供给处理核;以及输出控制单元,被配置为将由处理核处理后的数据提供给接口和高速缓存模块。

可以使用接口将该装置插入计算系统,该计算系统可以接收输入数据以供多个处理模块进行处理,并提供该装置的处理结果。该装置还包括高速缓存模块,该高速缓存模块存储部分结果数据以使多个处理模块能够经由高速缓存模块直接访问任何中间数据或结果。这可以减少输入数据到初始设置的任何传输和(最终)结果的交换。即使在处理期间需要数据,也可以减少经由接口的中间数据的过度通信。

高速缓存模块可以与多个处理模块一起提供在相同的模具(die)、电路上或在同一封装内,并且可以被布线或以其他方式耦接到多个处理模块,以使得能够经由高速缓存模块直接交换输出数据,作为下一个计算周期的输入数据。高速缓存模块可以被配置为存储器,以存储和/或缓存一个或多个处理模块的至少部分结果数据,其可以进一步用作用于处理(不同或相同的)一个或多个处理模块的输入。高速缓存模块可以是具有多个写入和读取端口的存储器,其可以连接到处理模块,以便为各处理模块提供低延迟的片上存储器。

该装置包括多个处理模块,其中,每个处理模块可以对输入数据执行所需操作,该输入数据可以经由接口来检索,或者可以直接从高速缓存模块中检索。这实现了用于各种任务或操作的装置的灵活配置。

每个处理模块包括具有多个处理元件的处理核,所述处理元件可以处理输入数据的多个数据值以生成对应的(中间)结果。每个处理模块还包括输入控制单元,该输入控制单元控制要由处理核处理的输入数据是经由接口检索还是从高速缓存模块检索。卷积操作结果的提供进一步由输出控制单元控制,该输出控制单元控制输出数据是经由接口提供(给外部存储)还是作为中间数据存储在高速缓存模块中,该中间数据进一步由多个处理模块中的至少一个处理模块用作后续输入。这使得装置的灵活配置能够加速用于各种任务和操作的操作,从而有效地利用可用资源并减少经由接口与外部主机通信的数据量。因此,每个处理元件可以在各个写入和读取接口上访问高速缓存模块,以获得对高速缓存模块的同时访问。

优选地,输入数据和/或输出数据可以包括神经网络的层数据。在一个实施例中,输入数据和/或输出数据可以包括图像数据,并且输入数据和/或输出数据的数据元素可以是各个图像的图片元素(像素)。

在优选实施例中,操作可以是卷积操作。因此,在整个本公开中,处理模块可以被表示为卷积模块,并且处理核可以被表示为卷积核,其可以被配置为通过使用多个处理元件执行卷积操作来处理数据。然而,应理解,本公开不限于仅加速卷积操作。在其他实施例中,处理核可以例如对输入数据执行关系操作。技术人员可以想到其他各种操作示例。

在优选实施例中,控制模块被配置为经由接口检索配置数据,并基于配置数据来设置多个处理模块中的至少一个处理模块。配置数据可以描述/包括输入数据的特征,包括维度、数据类型等。配置数据还可以描述/包括诸如卷积操作之类的操作的参数,其可以标识要处理的输入数据的数据、迭代的次数等。配置数据还可以描述高速缓存模块的利用率以存储中间数据和/或所得到的输出数据的特性,诸如大小、数据类型等及其任意组合。配置数据可以由主机发送,该主机可以设置用于执行所需操作的装置。在设置之后,装置可以经由接口接收初始输入数据,其中,控制模块可以触发多个处理模块以开始对初始和任何后续输入数据的处理。

在优选实施例中,控制模块还被配置为在多个处理模块之间调度命令。命令可以响应于输入数据的可用性而发起对各处理模块的处理,并且还可以将各处理模块配置为经由接口和/或从高速缓存模块检索输出数据和/或输入数据,和/或将输出数据和/或输入数据存储到高速缓存模块。

在一个实施例中,命令是响应于从多个处理模块的一个或多个输入控制单元和输出控制单元接收到的多个状态而调度的。状态可以作为状态标志或通过类似的技术被以信号发送。控制模块可以连接到多个处理模块的每个输入控制单元和输出控制单元,以接收可以指示输入数据的读取已经完成、结果已准备好、结果的提供完成中的一个或多个指示以及实现多个处理模块之间的命令仲裁的进一步处理状态。可以使用任何种类的编程逻辑或编程语言来定义命令。可以将命令定义为使用二进制字定义的二进制指令,该二进制字包括多个位(bit),例如64、128、256、512、1024位或更多位,优选为2的幂,从而可以将多个参数级联成单个字。然而,应当理解,可以使用更多或更少的位来定义字。例如,二进制指令可以包括512位的字。各处理模块的处理参数可以包括以下中的一个或多个:层操作类型和参数,例如区域大小、滤波器大小、步长、膨胀、卷积/反卷积/池化、调度依赖性列表等;输入平面位置,例如在外部存储器中或高速缓存模块中的位置、基地址、平面偏移等;以及输出平面位置,例如在外部存储器中或在高速缓存模块中的位置、基地址、平面偏移等;及其任意组合。

在另一实施例中,控制模块被配置为控制至少一个处理模块的至少一个输出控制单元以及一个或多个处理模块的一个或多个输入控制单元,以经由高速缓存模块将由至少一个处理模块处理后的数据馈送回一个或多个处理模块。至少一个处理模块可以提供一个或多个处理模块在后续(卷积或任何其他)操作中可能需要的结果。控制模块可将至少一个处理模块的至少一个输出控制单元配置为将任何结果存储在高速缓存模块中,并且可将一个或多个处理模块的一个或多个输入控制单元配置为从高速缓存模块读取输入数据。一旦至少一个处理模块的至少一个处理核完成卷积(或任何其他)操作,至少一个处理模块的至少一个输出控制单元就可以将结果存储在高速缓存模块中并且可以向控制模块发信号(通过相应的状态标志)通知结果可用。此后,控制模块可以触发一个或多个处理模块的一个或多个输入控制单元的操作,以使一个或多个输入控制单元直接从高速缓存模块中检索结果数据,作为由相应处理核执行的后续(卷积或任何其他)操作的输入数据。这可以实现操作的迭代处理,而无需经由接口进行输入数据或结果的任何交换,从而有效地减少了接口的使用。由于高速缓存模块由多个处理模块共享,因此多个处理模块中的每一个可以重新使用高速缓存的结果。高速缓存模块可以是片上存储器,其可以在读取和写入侧上具有多个端口。与接口相比,这可以获得更高的片上高速缓存模块的带宽。片上高速缓存模块可以有效地降低功耗,因为它不需要功率扩展边界I/O接口。

在另一实施例中,每个处理模块还包括系数控制单元,该系数控制单元被配置为经由接口检索系数数据。控制模块可以被配置为响应于从多个处理模块的一个或多个系数控制单元接收的多个状态来进一步调度命令。例如,系数控制单元可以发信号给控制模块通知已经读取系数数据。系数数据可以被提供给处理核,使得处理核可以基于输入数据和系数数据执行(卷积或任何其他)操作。

在优选实施例中,至少一个(或每个)处理核还包括数据缓冲器以及处理控制单元,该处理控制单元被配置为控制多个处理元件以处理存储在数据缓冲器中的输入数据。应当理解,在整个本公开中,如果由处理元件实现的操作是卷积操作,则处理控制单元也可以被称为卷积控制单元。数据缓冲器可以由输入控制单元控制,并且可以存储由输入控制单元检索的数据。处理控制单元可以驱动从数据缓冲器中检索输入数据。随后,处理控制单元可以发起由多个处理元件进行(卷积或任何其他)操作的处理,这些处理元件可以各自使用相应输入数据来计算操作的一部分。

在优选实施例中,至少一个(或每个)处理核还包括系数缓冲器,其中,处理控制单元被配置为控制多个处理元件使用存储在系数缓冲器中的系数数据来处理存储在数据缓冲器中的输入数据。系数缓冲器可以由系数控制单元控制,并且可以存储检索到的系数数据。处理控制单元可以驱动分别从系数缓冲器和数据缓冲器检索系数数据和输入数据,使得可以同时读取系数数据和输入数据。随后,处理控制单元可以发起多个处理元件对(卷积或任何其他)操作的处理,所述多个处理元件可以各自使用相应的输入数据和系数数据来计算操作的一部分。

根据优选实施例,系数数据包括应用于输入数据中的至少一些的权重系数和偏置值。

在一个实施例中,数据缓冲器为二维数据缓冲器,其被配置为将诸如至少一部分输入数据之类的数据存储为二维数组。因此,所存储的数据可以通过使用两个索引来访问,这可以简化对个体处理元件进行处理的输入数据元素的选择和检索。因为在大多数情况下,多个处理元件将对在连续的输入数据区域中的输入数据进行操作,所以数据缓冲器可以被加载有连续的输入数据区域,并且各处理元件可以根据输入数据的索引被提供有输入数据的相应数据元素。

在优选实施例中,如本公开的一个或多个实施例中所描述的,数据缓冲器中的数据可以使用输入窗口来访问。

在至少一个实施例中,处理核的至少一个处理元件被配置为执行乘法累加运算。乘法累加运算可以使用乘法累加电路(MAC)来实现。每个处理元件可以被提供为专用硬件或被配置为执行诸如乘法累加运算或关系操作之类的操作的可编程硬件。处理模块或其至少一部分可以被实现为定制硬件(包括ASIC),或者被实现为可重配置硬件(包括FPGA)。应当理解,可以以相同或相似的方式以硬件来实现所有处理元件,并且每个处理元件可以实现操作。但是,处理元件也可以不同地实现。例如,每个处理模块中的多个处理元件可以以任意组合的方式来实现不同的操作或者对于相同的操作可以不同地实现。

在另一实施例中,处理核的至少一个处理元件还包括结果存储,该结果存储被配置为缓存(乘法累加或任何其他)运算的结果。结果存储可以存储部分结果,并且可以由处理控制单元控制,以缓存针对受到个体处理元件执行的操作影响的相应位置处的相同输出的部分结果。提供乘法累加运算的处理元件可以被实现为具有实现结果存储的存储器的MAC单元以及具有乘法器、加法器和偏置多路复用器的MADD电路。在FPGA实现中,MADD电路可以完全或部分利用一个或多个专用DSP块。附加地或替代地,MADD电路可以完全由分布式逻辑来实现。实现结果存储的存储器可以是专用RAM或基于LUT的SRAM。

MAC单元的处理可以具有多个时钟周期的延迟。特别是,MADD电路的处理以及结果存储中的后续存储可能需要多个时钟周期。因此,在几个时钟周期之后,最近存储的部分结果可以是可用的(可访问或可检索的)。由于结果存储中最近修改的地址的延迟可用性,这可能会延迟处理。为了解决这个问题,结果存储可以缓存处理核的多个操作结果,并且处理核可以使用相同或不同的系数和/或参数针对不同的输入数据迭代地计算不同的结果。各个部分结果被存储在结果存储中。在定义了MAC单元的延迟的多个时钟周期过去之后,处理核可返回到对初始输入数据的处理,以基于初始数据的下一或相同的系数和/或参数来计算下一部分结果,其要求将部分结果存储在结果存储中。结果与结果存储中所需的部分结果一起累加。这种设计利用了硬件的延迟,并且无需处理元件的复杂硬件实现就可以实现流水线操作。

MAC单元的存储器不同于传统MAC,传统MAC使用寄存器来缓存结果以用于后续累加。根据本公开的实施例的结果存储相对于这种寄存器具有若干优点。由于在传统MAC中,加法器从单个寄存器接收输入,因此这可能会将累加限制到仅输入数据的一个区域。使用单个寄存器对输入数据实施顺序处理可能还需要读取更多数量的输入数据。通过在处理元件中提供可寻址结果存储,处理元件可以灵活地对输入数据的多个区域进行操作,并存储输入数据的各个区域的多个部分结果。

在另一实施例中,该装置被配置为经由接口检索输入数据,该输入数据表示神经网络的输入层的至少一部分。控制模块可以经由接口接收配置数据,该配置数据指示神经网络的布局和拓扑并指定要在神经网络的每一层上执行的(卷积或任何其他)操作。

在另一实施例中,至少一个处理模块处理神经网络的层的至少一部分,其中,存储在高速缓存中的数据表示神经网络的下一层的至少一部分。因此,该装置可以经由接口接收输入层的输入数据,并将生成的对输入层的卷积操作的结果的至少一部分存储在高速缓存模块中,该部分可以用作用于处理神经网络的下一层的输入数据。这减少了要经由接口交换的数据量。

优选地,神经网络为卷积神经网络(CNN)。

在特别优选的实施例中,该装置为卷积神经网络加速器。

应理解,该装置或该装置的各硬件单元可以被配置为执行根据本公开的一个或多个实施例的方法。

根据本公开的一方面,定义了一种包括处理主机、至少一个存储器和互连的系统,其中,该系统还包括根据本公开的任一实施例的装置。互连可以被配置为将处理主机、至少一个存储器和装置耦接,使得该装置可以经由互连从至少一个存储器检索输入数据。该装置可以是执行卷积操作的加速器。处理主机可以将诸如传感器或状态数据以及其他处理数据之类的所需数据加载到至少一个存储器,并且可以将该装置配置为执行所需(卷积或任何其他)操作。随后,主机可以将该装置配置为从至少一个存储器接收(或检索)输入数据,以便执行所需任务。完成后,该装置可以向处理主机以信号发送结果的可用性和/或可以将结果直接写回到至少一个存储器。

由于该装置实现了可以存储由各处理模块处理的至少一部分数据的高速缓存模块,该高速缓存模块可以由相同或其他处理模块访问以在下一次迭代中执行所需操作,因此减少了要经由互连在至少一个存储器和装置之间交换的数据数。通过为该装置提供多个处理模块,所述多个处理模块将被独立地配置为执行卷积操作并且可以经由互连从高速缓存模块和/或至少一个存储器进一步独立地检索数据和/或将数据存储到高速缓存模块和/或至少一个存储器,该装置可以灵活地适用于各种卷积任务和操作。

在优选实施例中,互连为系统总线。

应当理解,所述系统的部件可以被配置为执行根据本公开的一个或多个实施例的方法。此外,装置的实施例可以以任意组合结合到系统的实施例中。同样,根据本公开的一个实施例的系统的特征可以以任意组合结合到装置的至少一个实施例中。

根据本公开的另一方面,定义了一种操作根据本公开的一个或多个实施例的(加速器)装置的方法。

本公开的实施例和示例涉及各种模块、单元、核或元件。应当理解,模块、单元、核和/或元件可以被实现为专用硬件和/或被实现为由软件或固件配置的硬件,以便以任意组合的方式执行所需功能。例如,处理(或卷积)模块、处理(或卷积)核和/或处理(或卷积)元件的任意组合可以在基于FPGA或ASIC的硬件或任何其他定制和/或可编程硬件中实现。类似地,高速缓存模块、数据缓冲器、系数缓冲器和/或结果存储的任意组合可以被实现为存储器电路。如本公开的实施例中所描述的,每个硬件组件还可以由软件和/或固件配置为执行所需功能。控制模块、输入控制单元、输出控制单元和/或卷积控制单元的任意组合可以使用被配置为执行如本公开的实施例中所述的控制操作和/或信令的通用或专用处理硬件来实现。然而,即使本公开的实施例是基于硬件的,也应理解,这些配置仅是示例,并且本公开不限于以硬件和/或软件的特定实现。

附图说明

针对以下描述和附图,将更好地理解本公开的特定特征、方面和优点,其中:

图1示出了可以在本公开的实施例中使用的神经网络的示意图;

图2表示了可在可应用于本公开实施例的神经网络的层上执行的卷积操作;

图3示出了用于计算可应用于本公开实施例的神经网络的层中的单个元素的卷积操作;

图4描绘了根据本公开一个实施例的加速器装置;

图5示出了通过本公开一个或多个实施例处理的输入数据的输入块的结构;

图6示出了根据本公开一个或多个实施例的将输入平面区域划分成多个输入块;

图7示出了根据本公开一个或多个实施例的基于输入块计算输出数据;

图8示出了适用于本公开一个或多个实施例中的用于输入块的卷积操作的示意图。

图9示出了根据本公开一个或多个实施例的用于计算卷积操作的输入窗口的配置;

图10示出了根据本公开一个或多个实施例的用于计算卷积操作的输入窗口的配置的另一示例;

图11示出了根据本公开一个或多个实施例的用于计算卷积操作的输入窗口的配置和定位的一个示例;

图12示出了根据本公开一个或多个实施例的定位用于计算反卷积操作的输入窗口的示例;

图13A和图13B示出了根据本公开一个或多个实施例的用于计算反卷积操作的配置的另一示例;以及

图14示出了根据本公开一个实施例的方法的流程图。

具体实施方式

在下面描述中,参考了附图,所述附图通过图示的方式示出了各实施例。另外,下面将通过参考几个示例来描述各实施例。应当理解,在不脱离所要求保护的主题的范围的情况下,实施例可以包括设计和结构上的改变。

图1示出了神经网络的示意图。神经网络是众所周知的在人工智能、机器学习、数据挖掘和其他领域中使用的系统。神经网络可被训练用来对输入数据中的元素进行识别或分类或以其他方式表征。神经网络通常至少包括两个互连层,包括输入层101和输出层103,在图1中分别表示为“层0”和“层L-1”。神经网络还可以包括一个或多个隐藏层105,在图1中将其表示为“层1”至“层L-2”。每层101、105、103可以包括多个一维、二维或多维的数据元素或张量,其可以根据诸如卷积操作或关系操作之类的数学运算被处理,以确定神经网络的下一层的相应数据元素,所述下一层的相应数据元素也可以包括一维、二维或多维的数据元素或张量。神经网络的输入层和输出层的维数和结构,完全可以通过用于将神经网络的相邻层互连的数学运算来定义。

例如,神经网络的输入层101上的输入数据可以包括由摄像机拍摄的图像数据,该摄像机可以例如安装在车辆上或可穿戴设备中,可穿戴设备诸如智能眼镜、头戴式耳机、头戴式显示器或透视(see-through)显示器。神经网络可被训练用以辨识图像数据内的对象,例如脸部、交通标志、其他车辆等。可以在输出层103中提供与对象有关的相应分类和其他数据。

虽然图1示出了特定类型的神经网络,其可以例如用于对输入图像执行计算机视觉任务或算法,但是应该理解,本公开不限于神经网络、特定类型的神经网络或特定应用领域。

用于计算神经网络的下一层的值的数学运算可以表示为卷积操作,如图2所示。在图2中,将输入平面定义为输入平面张量201,包括多个大小均为IW×IH的二维输入平面。每个输入平面201-1、...、201-c可与构成权重张量203的一系列权重矩阵203-1、...、203-c中的一个权重矩阵进行卷积,其中每个权重矩阵对输出平面张量205中的一个输出平面205-1、…、205-n有贡献,输出平面张量205定义了神经网络的下一层的值,在经由激活函数f

输入平面201-1、...、201-c与相应权重矩阵的卷积结果进一步被单个偏置值偏置,单个偏置值可以形成偏置向量207,其包括用于各个输出平面205-1、...、205-n的偏置值。

通过利用激活函数f

总而言之,卷积操作可以定义为

其中,f

图3示出了用于计算可应用于本公开一个或多个实施例的输出平面张量的元素的卷积操作。由于图3所示的操作可以基于图2所示的元素,因此相同的附图标记被用于相同或相似的特征。

输入平面张量可以包括C个输入平面201-1、…、201-c。同样,输出平面张量可以包括输出平面205-1、…、205-n。用于各个输出平面205-1、...、205-n的一组权重矩阵301-1、...、301-n,可以是提取自从图2所示的一系列权重矩阵203-1、...、203-c,与从输入平面201-1、...、201-c的相应位置305处提取的数据值303逐个元素地相乘,并按输出平面205-1、...、205-n相加(点积),以按输出平面205-1、…、205-n提供位置307处的单个卷积数据结果。因此,位置305可以与输出平面205-1、…、205-n中的位置307相关。

输入值303和权重矩阵301-1、…、301-n分别用于进行卷积以计算单个值。该值进一步被偏置值309-1、…、309-n(可以由图2的偏置向量207定义)分别偏置。结果可以通过激活函数311-1、...、311-n来映射。每个输入平面201-1、...、201-c的输入数据对每个输出平面205-1、...、205-n中的输出值有贡献。所述贡献由各个权重矩阵301-1、…、301-n控制。权重矩阵的大小,在整个本公开中也可以称为卷积核,可以确定输入平面201-1、…、201-c中输入数据的输入区域的相应大小。

图4示出了根据本公开一个实施例的装置的示意图。装置401可以是用于卷积操作的加速器,该加速器可以支持神经网络的操作,例如,如图1、图2和图3所示。然而,应当理解,虽然加速器装置是针对神经网络的卷积操作进行描述的,但是该装置不仅仅限于一种特定场景,而可以加速涉及对输入数据执行大量(卷积或任何其他)操作的任何任务或场景。

装置401可以经由接口而耦接到互连403。例如,互连可以是系统总线或任何其他合适的连接或链路,以将装置401连接到外部存储器405和处理主机407。处理主机407可以控制装置401的操作,并且可以配置装置401以处理存储在存储器405中的输入数据,以便使用卷积操作来处理输入数据。装置401可以包括多个处理模块。在图4的实施例中,处理模块可以表示为卷积模块409,其均可以被配置为处理存储在存储器405中的输入数据。装置401可以配置有任何数量的卷积模块409,例如图4所示的E个卷积模块。这使得能够通过多个卷积模块409并行处理分开的多层的大量输入数据或输入部分。在整个本公开中,卷积模块409也可以被称为卷积引擎,并且这两个术语可以互换使用。

装置401还包括控制模块411,其可以控制每个卷积模块409和高速缓存模块413的处理。高速缓存模块413可以连接到每个卷积模块409,并且可以被配置为存储由一个或多个卷积模块409处理后的数据,并使每个卷积模块409能够检索所存储的数据作为输入数据,以供进一步处理。高速缓存模块413可以是片上存储器。由于在集成电路中,大部分功率消耗在外部硬件访问上,因此将结果保存在高速缓存模块413中可以减少功率消耗。此外,片上高速缓存模块413可以允许更高的数据交换率和更短的延迟周期。高速缓存模块413可以包括多个写入和读取端口,以提供具有低延迟的高速缓存数据。因此,高速缓存模块413应被理解为低能耗、低延迟的片上存储器,其不需要任何实现高速缓存策略的排序算法或其他逻辑。

卷积模块可以包括卷积核415、输入控制单元417和输出控制单元419。卷积核415可以通过使用多个处理元件418(例如,M个处理元件418)执行(卷积或任何其他)操作来处理任何输入数据。

输入控制单元417可以被配置为检索由卷积核415处理后的数据。特别地,输入控制单元417可以经由接口检索数据,诸如存储在存储器405中的数据或由处理主机407经由互连403提供的数据。输入控制单元还可被配置为检索存储在高速缓存模块413中的数据。因此,要由卷积核415处理的输入数据可以经由接口从外部检索到,或者可以对应于已经由任何卷积模块409先前处理过的数据。这减少了要经由接口传输的数据量,因此节省了互连403的带宽。通过在装置401内提供与每个卷积模块409互连的高速缓存模块,卷积模块409可以灵活地生成被反馈给其他(或同一)卷积模块的结果,而无需经由接口进行任何数据传输。因此,输出控制单元419可以被配置为经由接口和互连403将由卷积核415处理后的数据提供给存储器405和/或高速缓存模块413。输出控制单元419还可被配置为将由卷积核415处理后的数据通过接口和互连403直接地或经由存储器405地提供给处理主机407。例如,输出控制单元419可以将数据写入存储器405。之后,可以通知处理主机407可在存储器405中获得结果,并且处理主机407可以从存储器405检索结果。在一个示例中,处理主机407可具有可寻址空间,其可由输出控制单元419在写入结果期间寻址。

处理主机407可以通过将配置数据发送到控制模块411来配置装置401。配置数据可以包括利用任何合适的编程或描述语言,对使用数据结构定义、命令序列等进行的处理的任何定义。对装置401的每个指令可以被定义为将多个参数级联成单个二进制字、诸如长二进制字的比特字段。参数可以包括:(i)层操作类型(layer operation type)和参数,例如区域大小、滤波器大小、步长(stride)、膨胀(dilation)、卷积/反卷积/池化、调度依赖性列表等;(ii)输入平面位置(RAM/高速缓存)、基地址和平面偏移等;和/或(iii)输出平面位置(RAM/高速缓存)、基地址和平面偏移等、和/或指定装置的处理的任何其他参数,以及其任意组合。

控制模块411可以响应于由多个卷积模块409发信号通知的状态在多个卷积模块409之间调度命令。所述状态可以包括以下一个或多个:可由输入控制单元417经由链路421发信号通知的“输入读取完成”状态、由输出控制单元419经由链路423发信号通知的“结果准备好”状态或“结果写入完成”状态、由单个处理元件向控制模块411发信号通知的其他状态、以及其任意组合。在一个示例中,命令的调度可受控于经由链路423发信号通知给控制模块411的“结果写入完成”状态。“结果写入完成”状态可以是调度下一命令的条件,该下一命令需要先前命令对当前输入数据进行处理的结果。控制模块411可以经由(命令)链路425或装置401中可用的任何其他信令路径来控制每个卷积模块409的处理。

卷积模块409还可以包括系数控制单元427,其可以经由接口从处理主机407和/或存储器405检索系数数据。类似于输入控制单元417和输出控制单元419,系数控制单元427可以由控制模块411经由(命令)链路425来控制,并且可以将与系数数据的检索有关的各个状态提供给控制模块411和/或输入控制单元417,按任意组合,以实现对数据流的闭环控制,如下所述。然而,应当理解,系数控制单元427完全可以是可选的。而是,可以仅在需要处理系数数据的实施例中提供系数控制单元427。

为了发起操作,处理主机407可以将命令序列、系数集和输入层数据写入存储器405。这可以包括定义神经网络的指令和系数以及输入层(例如图1中所示的输入层101)的数据。处理主机407可以经由互连403向控制模块411发出开始触发。响应于开始触发,控制模块411可以从存储器405读取命令序列的至少一部分,并且可以将各个命令调度到卷积模块409。

如果必须在连续的输入层上迭代执行相同的命令序列,则经由存储器405提供命令会是有利的。在这种情况下,控制模块411可以被配置为在每次迭代之后从存储器405重新读取初始存储的命令序列。附加地或替代地,取决于控制模块411的内部存储容量,控制模块411可以被配置为从存储器405一次性读取命令序列,并且在每次开始触发之后再次使用该命令序列。因此,在每次完成时,处理主机407可能仅需要将下一输入层的数据写入存储器405并从存储器405读取输出层的结果。

将命令存储在存储器405中使得能够在装置401上执行诸如神经网络,而在执行期间不涉及处理主机407,除了初始将命令序列、系数集和输入层数据写入存储器405之外。随后,仅下一层(可以是神经网络的(后续)内部层、下一帧(next frame)的输入层或通常可以承载写入操作的下一输入层)的数据将被写入存储器405,并且将从存储器405中读取最终或中间的执行结果。在一个实施例中,可以通过DMA处理来完成向存储器405和/或从存储器405复制数据。

除多个处理元件418之外,卷积核415还可包括数据缓冲器431和卷积控制单元433。此外,在需要处理系数数据并且可以包括系数控制单元427的实施例中,每个(或至少一些)处理元件418可以包括系数缓冲器429。系数缓冲器429可以由系数控制单元427控制,并且可以存储随后的卷积操作所需的系数数据。数据缓冲器431可以由输入控制单元417控制,并且可以存储由多个处理元件418进行的后续卷积操作所需的数据。系数缓冲器429可以是被配置为存储相应的系数并将所述系数提供给多个处理元件418的存储器阵列。系数缓冲器429可以包括多个单独的链路,以向多个处理元件418中的每一个处理元件提供不同的系数数据,例如权重系数。

系数控制单元427可以从存储器405读取系数和偏置值。系数和偏置值可以以压缩的、可变格式存储在存储器405中,以便最小化存储器带宽。系数控制单元427可以被配置为解压缩系数和偏置值,并且以固定的最终格式将其转发到系数缓冲器429。

卷积控制单元433可以应用调度和控制方案以确保向每个处理元件418提供来自系数缓冲器429和数据缓冲器431的正确输入数据以执行操作。卷积控制单元433还可以监视处理元件418的处理,以避免在窗口位置或输入平面之间的处理停顿。调度和控制方案可以基于NCO。在该示例中,系数和数据选择模式可以由NCO生成。通常,NCO可以生成周期值(periodical value)。附加地或替代地,调度和控制方案可以是基于查找表(LUT)的机制,其中在查找表中定义系数和数据选择模式。查找表的内容可以与系数集一起定义。LUT可以用于选择各个系数集的系数值的位置或为各个系数集的系数值分配位置。可以组合使用系数集和LUT来将任意形状和稀疏度的矩阵定义为滤波器核。卷积控制单元433可以遍历(step over)LUT的元素,并且可以将这些元素用作从矩阵中选择系数的坐标,或者分配给系数集的系数值的坐标,以进行卷积。因此,系数集及其LUT可以彼此对应。系数控制单元427可以读取任何LUT以及系数集。查找表使得能够简单地定义各种处理参数,例如定义当系数矩阵在某些位置包含零值时将使用系数矩阵内的哪些系数位置。这使得能够为输入/输出平面对定义任意形状的系数矩阵。

数据缓冲器431可以被配置为二维数据缓冲器,其可以将由输入控制单元417检索到的输入数据存储为二维数组。因此,可以使用两个索引来访问数据缓冲器431中的数据。在优选实施例中,数据缓冲器431中的数据可以经由可调整输入窗口来检索,例如,如图14中所述。数据缓冲器431可以使多个处理元件418中的所有处理元件能够访问存储在数据缓冲器431中的输入数据。确定和检索在相应处理元件418上执行卷积操作所需的输入数据,可以通过在考虑来自系数缓冲器429的不同系数值的同时,调整输入窗口以对来自数据缓冲器431的相同输入数据进行采样来实现。

输入控制单元417可以向卷积核415馈送输入数据。例如,输入数据可以是输入像素。输入控制单元417可以确保将诸如像素的块(tile)之类的输入数据的块读入数据缓冲器431中。块的至少一部分可包括与一个或多个相邻的块或填充值(padding value)之间的重叠。

卷积操作可以由多个处理元件418中的每一个处理元件通过配置乘法累加电路(MAC)来实现,该乘法累加电路可以包括乘法器435、求和器(sum)437以及被配置为对结果进行缓存的结果存储439。多个处理元件418中的每个处理元件还可以包括多路复用器441以确定求和器437的输入,从而用偏置值对求和器进行初始化或将乘法器435的结果与结果存储439中存储的部分结果进行累加。

结果存储439可以被实现为可寻址存储器,例如可寻址SRAM。通过在处理元件418中提供可寻址结果存储439,处理元件418可灵活地对若干个输入数据区域进行操作,并将相应的针对输入数据区域的多个部分结果存储在可寻址结果存储439中。结果存储439可以具有R个大小为TW×TH的输出块的容量。因此,在每个处理元件418中,结果存储439可以缓存多达R个输出块,以便将卷积核415的计算能力扩展到单个输入平面序列的M×R个输出块。

可以将多个处理元件418的结果提供给卷积核415的几个后续处理元件,包括以下中的一个或多个:结果缩放和量化单元、串行器、结果重排序单元以及可被配置为执行特定任务以对多个处理元件418的结果进行后处理的其他处理单元。此外,处理的结果可以被提供给激活单元443,其可以实现激活函数并且将最终结果提供给输出控制单元419。例如,卷积的乘积累加可导致字长随着核大小和输入平面记数增加而增加,从而有效地增加了累加的乘积的字长。为了使得能够在处理元件418中以全精度进行运算,在结果缩放和量化单元中可以仅将最终结果按比例缩小并且量化回到输入字长。

装置401可用作卷积神经网络(CNN)的加速器。例如,经由互连403从存储器405检索到的输入数据可以表示CNN的输入层,并且每个卷积模块409可以处理CNN的一层的至少一部分。此外,存储在高速缓存模块413中的数据可以表示CNN的要由多个卷积模块409中的同一或另一卷积模块处理的下一层的至少一部分。

在初始化期间,处理主机407可以将输入层的输入平面张量和权重张量加载到存储器405中。例如,输入平面张量和权重张量可以对应于如图2所示的输入平面张量201和权重张量203。此外,处理主机407可以将命令序列加载到存储器405中。一旦输入平面张量、权重张量和命令序列被加载到存储器405中,处理主机407就可以经由控制模块411触发装置401的操作。控制模块411可以从存储器405检索命令序列,并且可以充当仲裁器以在多个卷积模块409之间调度命令序列中的命令。

在控制模块411调度命令以在多个卷积模块409之一中执行时,卷积模块409的相应输入控制单元417和系数控制单元427分别从存储器405检索到至少一部分输入平面的输入数据以及它们的权重张量。输入平面可以具有IW×IH的大小,并且可以被划分为多个块,并且卷积模块409可以检索到一个或多个块。

控制模块411将命令调度到多个卷积模块409中的一个或多个可以取决于先前命令的完成。每个卷积模块409可以包括输入控制单元417和输出控制单元419各自与控制模块411之间的连接,例如链路421、423。连接可以被配置为发送标志或类似信号,其可以包括例如命令标识、完成标志字段等以及其任意组合。这些标志可以包括来自输入控制单元417的命令完成标志。该命令完成标志可以指示可触发需要输入数据但不需要当前处理的结果的下一命令的调度条件。这些标志还可以包括来自输出控制单元419的命令完成标志。在任何卷积模块409处,该命令完成标志可以指示可触发需要当前处理的结果的下一命令的调度条件。

为了使能基于标志的调度,可以在依赖性列表中定义每个命令对先前命令和条件的依赖性,控制模块411可基于一个或多个卷积模块409(或其单元)提供的标志对依赖性进行检查。可以针对当前执行的命令周围的限定数量的命令进行依赖性检查,这可以限定用于依赖性检查的移动窗口。这可以将依赖性列表的条目的数量减少到固定的比特数。

当被调度时,命令可以从控制模块411被发送到期望的卷积模块409。命令可以是由多个比特字段组成的指令字。指令字可以被并行地提供给卷积模块409内部的每级(stage),例如,提供给缓冲器429、431和卷积控制单元433。一旦接收到,卷积模块409的多个级可以仅使用各自级进行处理所需的这些比特字段来单独地开始各自的执行。为了控制数据流,卷积模块409可以应用闭环控制方法来在卷积核415和/或处理元件418的处理开始时维持系数和数据可用性。控制模块411可以调度命令作为对卷积模块409的指令。这可以是单个指令字,其包括以下中的一个或多个:输入平面读取基地址、平面地址偏移量、平面计数、算术运算的类型和参数、系数读取基地址、输出平面写入基地址、平面偏移量等及其任何组合。卷积模块409的每级可以并行地接收指令,并且可以使用指令字的相关部分来单独地开始执行。

根据一个示例,用于数据流的闭环控制可以包括以下步骤中的一个或多个:

1.系数控制单元427可以连续地监视系数缓冲器429的填充水平或可用空间,并且如果系数缓冲器429有足够的可用空间,则可以经由接口读取下一输入平面的系数。当系数被读取时,系数控制单元427可以将完成标志发送到输入控制单元417。

2.输入控制单元417可以连续地监视数据缓冲器431的填充水平或可用空间。在从系数控制单元427接收到完成标志之后,输入控制单元417可以经由接口和/或从高速缓存模块413读取下一输入平面的数据,并且如果数据缓冲器431有足够的可用空间,则可以将数据写入数据缓冲器431。

3.卷积控制单元433可以连续地监视数据缓冲器431的填充水平,并且一旦所需数据出现在数据缓冲器431中就可以开始算术运算。这也可以由输入控制单元417使用相应标志发信号通知卷积控制单元433。在此阶段,由于系数控制单元427发送的完成标志是将数据读入数据缓冲器431的前提,因此所需系数存在于系数缓冲器429中。因此,在检查数据缓冲器431的填充水平之后,卷积控制单元433可以开始分别生成用于从系数缓冲器429和数据缓冲器431读取系数和数据的读取位置,以驱动一个或多个处理元件418。

4.在完成对当前输入数据的计算之后,卷积控制单元433可以将数据从数据缓冲器431清除(flush)以及将至少一部分关联系数从系数缓冲器429清除。在上面的步骤1和步骤2中,可以对可用空间进行监视,系数控制单元427和输入控制单元417可以继续读取其他系数和输入数据,以便根据步骤3触发下一处理。

相应地,卷积控制单元433可以控制算术运算,并且控制模块411可以控制装置401中的调度。系数缓冲器429和数据缓冲器431都可以被配置为存储几个系数集(例如,用于多个输入平面的系数)以及几个数据集(例如,多个数据块),以使得卷积核415能够在完成对当前输入平面的处理后,直接继续对下一输入平面的处理,而无需等待进一步检索到系数或数据。这可以平衡多个处理元件418的操作并提供连续的操作。闭环控制确保系数缓冲器429和数据缓冲器431的最佳填充。这增加了数据吞吐量,其仅受限于接口的硬件约束。

在本公开的一个或多个实施例中可定义数据流的闭环控制。然而,应当理解,可以在其他实施例中实现闭环控制的部分,并且在其他实施例中可以使用不同的数据流控制方法。特别地,数据流可以受控于其他组件和/或被控制为不同的顺序,并且本公开不限于数据流的特定类型的闭环控制。

图5示出了由多个诸如数据字的数据元素503组成的输入块501。数据元素503可以表示大小为PW×PH的二维区域。数据元素503可以由输入控制单元417从存储器405顺序地检索到,以便装入输入块501。如图5所示,输入块501可以由8×8数据元素的数组组成。然而,应当理解,可以选择不同大小的数据元素503或另一种的输入块501划分方式(partition),并且本公开不限于包括8×8数据字的输入块。

图6示出了将大小为IW×IH的输入平面划分为多个输入块,例如图5中的输入块501。如图6所示,每个输入块可以具有块起点(origin)601。再次参照图4,输入块501可以定义装置401的基本处理单位。通过按相应的块起点601将输入平面划分为多个输入块,装置401可以被灵活地调整为在输入平面上执行大小可变的卷积操作。装置401可以被配置为按一个顺序处理输入块区域。装置401可跨输入平面张量的输入平面顺序地读取相同块起点601处的输入块以执行卷积操作,其中,所得到的输出块可对应于跨输出平面张量的一个或多个输出平面上具有相同起点的输出块。因此,通过跨一个或多个输入平面地推进(proceed over)块起点601并从每个块起点601开始执行顺序计算,装置401可以处理输入平面张量。通过将输入平面张量切分成固定大小的输入块,加速器401的操作可以与输入平面张量中的输入平面的特定大小无关。输入平面张量被根据不同块起点601细分并按顺序步骤处理。

在一个或多个优选实施例中,输入数据可包括块数据以及块周围的附加数据,这对于在块的边缘上实现特定大小的权重核的卷积可能是需要的。例如,核大小为5×5可能需要在块的顶部和左侧(和/或底部和右侧)至少2个附加行。因此,除了1×1权重核之外,加速器可以根据权重核的所需重叠从相邻块读取数据。装置401可按相同起点从输入平面张量的一个或多个输入平面读取块序列以及相应权重核所需的周围数据,并可执行卷积操作以根据该块序列计算输出平面数据。为了执行卷积操作,每个输入块可以被细分为多个处理区域,所述处理区域随后由处理元件访问、采样和处理,如随后将就本公开的实施例讨论的那样。

即使本公开的实施例已经针对卷积操作进行了描述,但是应当理解,本公开不仅限于卷积操作。而是,处理元件418可以实现例如关系操作,其可以与卷积操作并行地执行或替代卷积操作而执行。例如,附加于或替代乘法器435和求和437,一个或多个处理元件418可在结果存储439与数据缓冲器431的输出之间包括可配置的比较器,以便实现最大池化,例如,包括可配置的窗口深度池化(depth-wise pooling)单元以执行层操作,其可能是例如某些类型的CNN所需要的。

在优选实施例中,可以减少结果存储439的容量,以针对根据单个输入平面计算出输出平面的操作使用相应的处理元件418,其中,可以根据每个输入平面计算出独立的一组输出平面。在该实施例中,结果存储439可以是单个寄存器级,其数据字容量为(sw*MW)×(sh*MH),并通过多路复用器441直接反馈到求和437,其中,如果要使用反卷积,则sw和sh分别为最大水平反卷积步长值和最大垂直反卷积步长值,否则为1。此外,如果卷积核415将仅用于根据单个输入平面计算单个输出平面,则M可以为1。这些操作可以称为平面(plane-wise)操作,包括例如平面卷积/反卷积以及平面池化。

本公开的实施例可以被配置为实现以下操作中的一个或多个:卷积(平面(plane-wise)或深度(in-depth)、反卷积(平面或深度)、最大池化(平面或深度)、平均池化(平面或深度)、完全连接层(通过将连接权重加载到数据缓冲器431并将每个输入平面数据值独立地加载到系数缓冲器429作为单独的1×1滤波器)、矩阵乘法和/或激活层(通过例如在激活单元443中实现激活LUT)。

应该理解的是,本公开不限于特定配置的神经网络。而是,本公开的一个或多个实施例可以用于实现各种配置的神经网络。

图7示出了根据本公开的一个实施例的装置对块序列的处理。该装置可以对应于如图4所示的装置401。此外,输入平面张量的块和输出平面张量的块可以根据图5和图6所示的块来配置。

图7示出了在线程(line)701、703、705中针对相同起点的相应输入块序列的计算。在线程701中,可以计算左上角起点707处的块序列,然后计算在相邻位置处的块序列,如线程703所示。该处理可以在线程705中的最后一个块起点709处结束。虽然在每一线程701、703、705中,权重矩阵集711的值和偏置值713可以保持相同,但在每一线程701、703、705中,输入块在输入和输出平面中的位置(或起点)可改变。在每个序列701、703、705对具有固定大小区域的输入块进行计算,使得处理能力独立于任何输入和输出平面(或张量)大小。

加速器装置401可以被配置为跨输入平面张量的一个或多个输入平面并行或顺序地读取相同起点处的输入块序列IT(c),以在相同块区域上执行卷积操作,如卷积等式715所表示的,以便产生输出块OT(n)。以后续的块起点重复序列,如线程703、705所示,以便完成整个输入平面张量与权重矩阵集711以及偏置值713的卷积。

参考图4的装置401,如果需要,输入控制单元417可以用重构输入块的至少一个区域和周围重叠的输入数据填充数据缓冲器431,并且使得能够基于每个时钟周期使用大小为DW×DH的可定位且可调整输入窗口来访问输入数据。

当输入控制单元417读取输入块IT(c)时,系数控制单元427可以读取偏置值B(n)以用于待计算的相应输出平面。作为读取偏置值B(n)的下一步骤或在读取偏置值B(n)之前,系数控制单元427可以按输入块IT(c)读取权重矩阵张量711W(n,c)中的所需矩阵集。

权重矩阵集711W(n,c)和偏置值713B(n)可被提供给系数缓冲器429,系数缓冲器429可提供对M个输出平面的参数的同时访问,每个输出平面的所述参数包含来自权重矩阵集711W(n,c)的权重矩阵的单个系数和来自偏置值713B(n)的偏置值。每次访问,M个单个权重矩阵系数可源自矩阵的相同位置。

因此,在每个输出平面单个权重系数的情况下,通过在M个处理元件418中对单个权重系数与DW×DH区域的输入数据进行逐元素相乘,同时计算M个输出块OT(n)上的DW×DH区域的部分结果。

再次参考图4,卷积核415的卷积控制单元433可以被配置为驱动系数缓冲器429和数据缓冲器431,以同时提供W(n,c)和输入块IT(c)的输入数据的大小为DW×DH的相应输入区域作为卷积等式715的乘法操作数,来作为多个处理元件418中每个处理元件内的乘法器435的输入。偏置向量B(n)713的偏置值可以在相应处理元件的第一计算周期由该处理元件418读取(并且由多路复用器441选择)以在计算存储于结果存储439中的部分结果期间被考虑,并在后续迭代中完成。因此,结果的累加可以由结果存储439实现。多路复用器441初始可以从偏置缩放和舍入元件中选择输入作为求和437的操作数。在随后的周期中,多路复用器441可以选择结果存储439的输出作为求和437的操作数,以实现累加。偏置缩放和舍入元件可以将偏移量,和经放大的偏置值一起,与结果的幅度范围成比例地,加到处理后的系数。由偏置缩放和舍入元件施加的值,例如,偏置值和偏置缩放值,可以在神经网络的定义中指定,诸如在命令字内部。这可减少因高字长累加结果的截断(truncation)而在量化值中引入不对称误差的影响。

仍然参考图4,卷积控制单元433可以触发与对数据缓冲器431和系数缓冲器429的读取对齐的对结果存储439的读取,以在实际正被计算乘积的位置处呈现同一输出平面的累加的部分结果,并同时作为求和437的输入。乘积与累加的部分结果的相加(求和437的输出)可以被写回到结果存储439作为进一步的累加的部分结果。

通过针对要在每个输出平面上应用的单个权重系数以DW×DH为基数读取输入块区域,卷积核415可以在每个时钟周期利用M个处理元件418计算输出平面的M个输出块OT(n)各自上的DW×DH区域的部分结果。卷积控制单元433可以遍历W(n,c)的所有权重矩阵系数,并且可以以相对于计算区域起点的与系数位置相对应的偏移量从数据缓冲器431读取以DW×DH为基数的输入数据,以并行地形成权重核在DW×DH输入数据位置上的全卷积操作。

在一个或多个实施例中,不同的卷积模块409可以并行地处理相邻块序列。例如,图7的线程701中的块序列可以由第一卷积模块计算,图7的线程703中的块序列可以由第二卷积模块计算,并且线程705中的块序列可以由装置401的另一卷积模块计算。在每个卷积模块409中,处理元件418可以从数据缓冲器431获得与相应块序列有关的相同数据。该配置可以表示卷积模块409在输入平面区域上的并行处理。

在一个或多个实施例中,装置401可以被配置为通过多个卷积模块409并行地计算输入平面张量的输入平面上的块起点处的块序列。该配置可以表示卷积模块409在输出平面上的并行处理。

在一个或多个实施例中,装置401可以被配置为向多个卷积模块409分配对块序列的计算,其中,不同的多个处理元件418可以并行地计算输入块的多个部分区域。这是通过卷积核415中相应的从数据缓冲器431到每个处理元件418的并行连接来实现的。该配置可以表示多个处理元件418在输入块区域上的并行处理。

根据上述一个实施例,装置401可以被配置为使得不同的卷积模块409可以并行地计算在不同起点处的不同块序列(如上所述,在输入平面区域上的并行处理)。根据另一实施例,不同的卷积模块409可以计算,在相同的块起点处(并且读取相同的块序列),R×M个不同的输出平面,以完成由神经网络层生成的整体输出平面计数(如上所述,在输出平面上的并行处理)。在又一实施例中,可以将数据缓冲器431的窗口大小DW×DH扩大到DW=w*MW,DH=h×MH,这可以实现w*h个处理元件418在扩大的DW×DH窗口上针对相同的R*M个输出平面的操作(如上所述,在输入块区域上的并行处理)。应当理解,在其他实施例中,可以以各种(并且不同)的方式和配置来使用多个卷积模块409和每个卷积模块409中的多个处理元件418,以实现对输入数据的并行处理。

返回到图4,卷积控制单元433可以扩展任何处理,以按顺序步骤累加针对每个输出块OT(n)上所需区域的输入块IT(c)的卷积结果。卷积控制单元433可以重复在每个输入块IT(c)内的每个所需计算区域起点(输入区域起点)处的卷积序列,以生成针对输出块OT(n)的相应区域的所需部分结果,如下面将就图8至图13所描述的。术语“计算区域起点”和“输入区域起点”可以在整个本公开中互换使用。卷积控制单元433还可以利用多个处理元件418的并行性,以M为一组重复处理元件418的卷积操作,以产生将存储在结果存储439中的输出平面的多达R*M个输出块。

如果对于每个处理元件418,结果存储439的容量对应于TW×TH×R个数据元素,则卷积核415可以存储R*M个输出块的累加数据。这可以将用于产生N个输出平面的输入平面序列读取的数量减小到N/M/R。

为了计算N个输出平面,控制单元411可以将卷积模块409的R*M个输出平面结果写入高速缓存模块413,并且将输入平面重新读入同一或另一卷积模块409以计算下一组的R*M个输出平面,直到完成要由神经网络的实际层生成的所有N个输出平面的计算为止。在完成输入平面的输入块IT(c)与相应权重张量的卷积之后,卷积控制单元433可以利用从数据缓冲器431和系数缓冲器429分别读取的输入平面的下一输入块IT(c)和相应的权重值继续,以生成针对神经网络的当前层的输入平面和权重张量的全卷积。

在每个周期中按输出平面使用权重矩阵中的单个权重系数,使得处理元件418的使用能够与任何权重矩阵的大小无关并且能够全扩展于任何权重矩阵的大小和形状,同时保持卷积操作的全部功能。

如果输出平面的数量N是处理元件的数量M的一部分,则数据缓冲器431的大小为DW×DH=(w*MW)×(h*MH)的扩大的输入窗口可以将多个处理元件418分组来计算针对同一输出平面的相邻的MW×MH个大小为DW×DH的输入区域部分,而不是每个处理元件418计算不同的输出平面。

仍然参考图4,可以通过在所有输入平面上从相同起点读取完整输入块序列、并利用权重矩阵执行卷积操作以计算输出平面的输出块,来完成由装置401进行的命令执行。针对输出平面的单个输出块的结果可以在最终的基于最后一个输入平面的权重系数的累加周期期间完成。

图8示出了与块序列有关的计算,包括按单个计算起点在输入块序列上的计算,如图7的线程701、703和705之一所示在单个计算起点。图8示出了输入块序列,其包括跨相应的输入平面的在相同块起点(诸如图6中的块起点601之一)处的多个输入块803-1、…、803-c。输入块803-1、...、803-c被根据跨每个输入块803-1、...、803-c分布的多个输入区域起点804细分为连续并且相邻的输入区域。如果需要,可以扩展输入区域以使得能够实现在输入区域的边界的处理。可通过将输入窗口807、809、811、813相对于输入区域起点804定位在输入块803-1、…、803-c的数据元素上方,对输入区域的数据元素进行采样。如图8所示,输入窗口807、809、811、813相对于输入区域起点801定位,输入区域起点801也可以表示为计算起点。定位可能会受到对滤波器核805的值的映射的影响。每个输入窗口807、809、811、813可用于对输入块803-1、…、803-c之一中的基础(可能扩展的)输入区域的数据值进行采样,从而得到输入区域集815-1、...、815-c,分别表示由相应输入窗口807、809、811、813采样的单个输入平面803-1、...、803-c的值。因此,输入窗口可以在每个周期的基础上移动到相应的位置,以分别捕获输入块803-1、…、803-c的基础数据元素。集815-1、…、815-c中基于周期捕获的数据可在处理项817-1、…、817-n中用作基于元素的乘积计算的第一操作数,这些处理项分别与跨对应输出平面的多个输出块821-1、…、821-n的相同位置处的相应输出区域819相关联。对由处理项817-1、...、817-n进行的基于元素的乘积计算的其他输入可以是根据滤波器核805中的位置为相应的输出块821-1、...、821-n选择的相应的权重系数。因此,滤波器核805可以对应于或可以被定义为指定相应的权重(或滤波器)系数的权重矩阵。

再次参考图4,集815-1、…、815-c的基于元素的乘积运算和后续的部分结果累加可以由卷积核415的处理元件418执行。对于每个输出块821-1、…、821-n,可以在结果存储439中累加部分结果。每个结果存储439可以使用沿R的实际输出平面的对应权重核,以连续的步骤为每个处理元件418累加多达R个输出块。

如图8所示,在一个实施例中,在将输入窗口807、809、811、813定位在第一输入平面的输入块803-1上并且计算对应的在结果存储439中累加的部分结果之后,处理可以继续以将输入窗口807、809、811、813定位在下一输入平面的输入块上,依此类推,直到最后一个输入平面的输入块803-c,其得到集815-c。因此,在每个输入块803-1、...、803-c上,输入窗口根据输入区域起点801处的滤波器核805遍历输入区域的所有位置以累加所有基于元素的乘积,从而生成针对每个输出块821-1、…、821-n的输出区域819的卷积结果。

在优选实施例中,可以对单个输入平面的输入块的所有计算起点执行计算,以便在改变到块序列的下一输入平面之前生成所有可能的输出平面的至少部分结果。此处理可以根据可使用计算窗口807、809、811、813并且可以迭代地执行的以下项目中的一个或多个来定义:

1.水平向右侧移至下一计算起点。如果到达输入块的有效区域的水平末端,则返回到最左侧位置。该处理可以继续进行项目1和/或可以并行地开始执行项目2的至少一个步骤。

2.移至存储在结果存储439的(R中)下一输出块。如果达到了输出块的最大数量,则返回到第一输出块。该处理可以继续进行项目2和/或可以并行地开始执行项目3的至少一个步骤。

3.垂直向下移至下一计算起点。如果到达输入块的有效区域的垂直末端,则返回到最上方的位置。该处理可以继续进行项目3和/或可以并行地开始执行项目4的至少一个步骤。

4.水平移至滤波器核中的下一权重系数。如果达到了滤波器核的水平末端,则返回到该核内部的第一水平位置。该处理可以继续进行项目4和/或可以并行地开始执行项目5的至少一个步骤。

5.垂直移至滤波器核中的下一权重系数。如果到达滤波器核的垂直末端,则返回到该核内部的第一垂直位置。该处理可以继续进行项目5和/或可以并行地开始执行项目6。

6.当跨当前输入平面的块区域(项目1和3)、输出块(项目2)和滤波器系数(项目4和5)迭代项目1至5时,取决于下一输入平面的可用性,可以中止项目1至5中一个或多个(或所有)的处理。从数据缓冲器431中清除先前的输入块。输入控制单元417以及系数控制单元427(如果适用的话)根据数据流控制将后续的输入(和系数)数据馈送到相应的缓冲器431、429,例如上述数据流的闭环控制。

在一个或多个实施例中,迭代顺序可以改变,尤其是如果结果存储439是具有(sw*MW)×(sh*MH)数据字的容量的寄存器阵列时,因为在更改为下一个计算起点之前,必须在计算起点处计算整个滤波器核的卷积。可以根据以下项目中的一个或多个来定义这一更改的迭代顺序:

1.水平移至滤波器核中的下一权重系数。如果到达了滤波器核的水平末端,则返回到该核内部的第一水平位置。该处理可以继续进行项目1和/或可以并行地开始执行项目2的至少一个步骤。

2.垂直移至滤波器核中的下一权重系数。如果到达了滤波器核的垂直末端,则返回到该核内部的第一垂直位置。该处理可以继续进行项目2和/或可以并行地开始执行项目3。

3.移至存储在结果存储439的(R中)下一输出块。如果达到了输出块的最大数量,则返回到第一输出块。该处理可以继续进行项目3和/或可以并行地开始执行项目4的至少一个步骤。

4.水平向右侧移至下一计算起点。如果到达输入块的有效区域的水平末端,则返回到最左侧位置。该处理可以继续进行项目4和/或可以并行地开始执行项目5的至少一个步骤。

5.垂直向下移至下一计算起点。如果到达输入块的有效区域的垂直末端,则返回到最上方的位置。该处理可以继续进行项目5和/或可以并行地开始执行项目6。

6.当跨当前输入平面的块区域(项目4和5)、输出块(项目3)和滤波器系数(项目1和2)迭代项目1至5时,取决于下一输入平面的可用性,可以中止一个或多个(或所有)项目1至5的处理。从数据缓冲器431中清除先前的输入块。输入控制单元417以及系数控制单元427(如果适用的话)根据数据流控制将后续的输入(和系数)数据馈送到相应的缓冲器431、429,例如上述数据流的闭环控制。

如果在上述一个或多个实施例的迭代过程中,当前输入块位于最后一个输入平面,并且当前权重系数在水平和垂直方向上都位于滤波器核的最后位置,则由每个处理元件418中求和437生成的当前结果可被输出到卷积核415的后续处理组件,例如结果缩放和量化单元、串行器单元、结果重排序单元和/或激活单元443,以及它们以任何顺序的任意组合。卷积核415可以在对最后一个输入平面块的迭代之后完成命令。此后,卷积核415可以调度和处理下一命令。

为了在卷积模块409中缓存一个或多个下一命令,卷积模块409的个体元件可以具有链接到(命令)链路425的内部存储,例如命令FIFO,以使控制单元411能够提前调度下一命令,其中,可以根据其依赖性列表以及由卷积模块409的组件发信号通知的当前标志或状态来调度下一命令。优选地,输入控制单元417可以经由链路421向控制模块411发信号“输入读取完成”标志,并且/或者输出控制单元419可以经由链路423向控制模块411发信号“结果写入完成”标志,以使控制模块411能够在卷积模块409的内部存储中保持最大数量的下一命令。偏置多路复用器823-1、…、823-n可在第一计算周期为输出块821-1、...、821-n选择相应的偏置值,对应的集815-1,以初始地将对应的偏置值的贡献与结果存储439中的部分结果相加。

再次参考图4,通过定位输入窗口来进行面向块和基于区域的卷积操作计算,使得能够经由相应的缓冲器429和431有效地检索到输入数据和系数数据。可以在一个处理元件(例如,图4的处理元件418)中顺序地执行针对所有输出块821-1、…、821-n的单个输出区域819的处理。然而,应理解,对一个或多个输出块821-1、…、821-n的输出区域819的计算可以被划分到两个或更多个(或所有)处理元件418上,使得可以在不同的处理元件418上计算一个或多个输出块821-1、…、821-n中的输出区域819。而且,输出块821-1、…、821-n可以由多个处理元件中的不同处理元件418并行地处理。因此,处理项817-1、…、817-n可以对应于不同处理元件418的不同乘法器435,并且多路复用器823-1、…、823-n可以对应于不同处理元件418的不同多路复用器441。在另一实施例中,处理元件还可以被配置为顺序地处理多个输出平面821-1、…、821-n的多个输出块,并将部分结果存储在结果存储439的相应的单独区域中。结果存储439可以被配置为存储多达R个输出块。如果配置了M个处理元件418,则输出块容量可以是M*R。每个处理元件418可以获得相同的DW×DH输入窗口数据,并且可以并行地计算M个不同输出块、顺序地计算R个不同输出块的结果,从而得到M*R个输出块。M和R可以在逻辑设计期间基于目标操作的要求进行配置。对于硬件资源,M可以确定并行处理元件418的数量,R可以确定每个处理元件418中结果存储439的物理容量。在另一实施例中,如上所述,如果DW×DH=(w*MW)×(h*MH),则w*h个处理元件418可以在相同的输出块上进行计算,其中,水平和垂直计算起点可以是常规配置中的w和h倍远。这使得沿着水平方向和垂直方向遍历输入块区域所需的步骤较少。因此,根据本公开的装置可以灵活地适应于输入数据的大小和所需的卷积操作。而且,根据本公开的实施例的装置可以灵活地配置有特定数量的处理元件和/或多个卷积模块,以满足计算任务的要求。

图8中所示的处理也可以表征为2×2核大小,单个字的水平和垂直步长,以及在利用重叠数据扩展的输入块上的单个计算区域起点处的膨胀卷积计算序列。可以根据输入窗口807、809、811、813的相应位置,按从二维数据缓冲器(诸如图4的数据缓冲器431)访问相应输入数据的位置从权重矩阵中选择系数数据。输入窗口相对于输入区域起点801的定位可以与根据滤波器核805在权重矩阵中的权重系数的位置对应,这可促使利用权重矩阵按相邻的输入数据位置并行地进行全卷积操作。通过在所有连续输入区域起点804处的连续计算序列来完成全块的卷积。

权重系数在权重矩阵中的位置以及输入窗口的大小、形式和定位相对于所得输出块的大小之间的关系,可以取决于要执行的卷积操作的类型。根据一个或多个实施例,卷积操作的类型可以包括卷积模式和反卷积模式(转置为卷积)。

输入窗口的形式、大小和定位及其与权重值和所计算的输出值的大小之间的关系,可以由包括步长值和膨胀值的一组参数来确定。

在卷积模式下,膨胀值可以确定两个连续的输入窗口位置之间的距离。当在输入区域上拟合时,该距离可以对应于权重矩阵中的系数之间的距离。膨胀值等于1可以定义权重矩阵系数被映射在相邻的数据元素上。膨胀值等于2可以定义权重矩阵系数被映射在输入区域的每第二个数据元素上。技术人员将理解,可以相应地定义膨胀值等于或大于3。

在卷积模式下,步长值可以确定由输入窗口在输入块上采样的数据元素之间的间隔。步长值可以通过设置在输入块上的输入区域中采样的相应数据元素之间的间隔来定义输入窗口的形状。如果步长值等于1,则输入窗口由相邻的数据元素形成。如果步长值等于2,则输入窗口包括输入块的每第二个数据元素。因此,步长值可以确定输入块与输出块的大小之间的比率。

步长值还可以用于确定结果存储439是否可存储一个以上输出区域的结果,因为对于等于或大于2的步长值,所得输出区域的大小将小于对应输入区域的大小。

在一个或多个实施例中,对应的诸如图4的数据缓冲器431之类的输入数据缓冲器,可以被配置为可以根据输入窗口对输入区域进行采样的二维数据缓冲器,该输入窗口可以至少使用步长值和膨胀值来调整。输入窗口可以定位在一个或多个输入区域起点处,例如图8的输入区域起点804,以提供对存储在数据缓冲器431中的输入数据的访问。这可以简化对所需输入数据的检索,因为不需要单独对数据元素进行寻址,而是可以根据参数化且可调整的输入窗口来检索数据元素。

仍然参考图8,关于2×2滤波器核,输入窗口及其定位可以由步长值1和膨胀值1定义。

图9示出了输入窗口901的配置的另一示例,关于可以选择权重矩阵中的权重系数的滤波器核907,输入窗口901可以位于输入块905的输入区域起点903处。关于2×2滤波器核907,输入窗口901可以由步长值2和膨胀值1来定义。输入窗口901定位在多个输入区域起点903中的起点908周围,从而得到输入窗口901、909、911和913,这些输入窗口是相对于权重矩阵中根据滤波器核907的相应权重系数处理的。通过输入窗口901、909、911和913采样的4×4输入区域的所有数据元素贡献于输出块917的同一输出区域915。

因此,图9中所示的配置可以表征为2×2滤波器核,两个字的水平和垂直步长,以及在利用重叠数据扩展的输入块905上的多个起点903中的单个计算区域起点908处的单个字膨胀卷积计算序列。

可以根据滤波器核907,按相应输入窗口901、909、911和913从数据缓冲器(诸如图4的数据缓冲器431)对输入数据进行采样的位置,来选择权重矩阵中的权重系数。在这种配置中,输入块905上的每第二个数据元素被检索到。输入窗口901、909、911和913相对于计算区域起点908的定位可以对应于权重系数在权重矩阵中的位置,这可导致利用权重矩阵按间隔两个字的位置并行地进行全卷积周期。如图9所示,结果表示在输出块917的相应输出区域起点921处的输出区域915中的相邻数据元素。可以通过在所有起点903处连续对输入窗口采样来完成全输入块905的卷积,这会得到输出块917中所有起点的结果。

图10示出了输入窗口的另一配置以及权重系数的映射,步长值为1,膨胀值为2,采用2×2滤波器核。这可以与2×2滤波器核大小、单个字的水平和垂直步长以及两个字的膨胀卷积计算序列相媲美。因此,权重矩阵从输入数据的相邻位置并行地延伸到每第二个数据元素。

图11示出了输入窗口的另一种配置,步长值为2,膨胀值为2,采用2×2滤波器核。这可以与2×2滤波器核大小、两个字的水平和垂直步长以及在利用重叠数据扩展的输入块上的单个计算区域起点处的膨胀卷积计算序列相媲美。

与关于图8、图9和图10讨论的配置相似,在与对应的输入窗口的位置相对应的位置处选择权重系数。在根据图11的配置中,输入窗口捕获输入块的从起点开始的每第二个数据元素,并且输入窗口相对于起点的位置与权重系数在权重矩阵中的位置乘以2相对应,这可以对应于与利用权重矩阵从间隔两个字的位置延伸到每第二个数据元素并行地进行的全卷积周期相当的计算序列。部分结果是相邻数据元素在输出块的相应输出区域起点处的结果。通过在所有输入计算起点处的连续计算序列产生针对输出块的所有输出区域起点的全部的部分结果来完成全块卷积。

在反卷积模式下,步长值可以确定在水平方向和垂直方向上每个输入平面数据元素要产生多少个输出平面数据元素。步长值可以确定输入块和输出块的大小之间的比值。如果步长值大于1,则仅一部分输入块被用于生成输出块,而单个输入块可以生成针对输出平面的多个输出块的部分结果。

优选地,对于每个输入平面,将数据元素在水平方向和垂直方向上都以等于步长值的间隔布置在输出平面的数据区域上,其中,可以为输入平面的每个数据元素复制权重矩阵,以用作每个输入数据元素对于输出平面的部分结果的权重系数。被映射到输出平面的数据元素的部分结果的数量,可以具有在水平和垂直方向上都等于步长值的周期的模式。

在反卷积模式下,卷积核(诸如图4的卷积核415)可以从数据缓冲器(诸如图4的数据缓冲器431)读取DW×DH相邻数据字,并产生针对输出块的以DW×DH为基数的输出区域的反卷积操作的部分结果,其中,数据元素之间的间隔等于输出区域上的步长值。部分结果是通过根据权重矩阵内在水平方向和垂直方向上的步长值进行权重系数选择步进(selection stepping)来生成的。

图12示出了用于反卷积序列的输入窗口在单个输入区域起点周围的定位,步长值为1,膨胀值为1,采用2×2滤波器核。可以根据滤波器核1203相对于输入块的多个输入区域起点1213中的输入区域起点1201来定位输入窗口。对于输入区域起点1201,这可以获得输入窗口1205、1207、1209和1211。

在反卷积期间,根据滤波器核1203从权重矩阵中选择权重系数可以与输入窗口1205、1207、1209和1211相对于输入区域起点1201的位置相反。

如图12所示的配置可以理解为2×2滤波器核,单个字的水平和垂直步长,以及在利用重叠数据扩展的输入块上的单个计算区域起点801处的膨胀反卷积计算序列。根据输入窗口1205、1207、1209和1211的位置从权重矩阵中选择系数。输入窗口1205、1207、1209、1211相对于输入区域起点1201的定位,可以与根据滤波器核1203在权重矩阵中的实际权重系数位置相反。这可以导致与利用权重矩阵在相邻位置处并行地进行的全反卷积周期相当的计算序列。通过在输入块的所有计算区域起点1213处的连续计算序列来完成块的全反卷积。

图13A和图13B示出了用于在多个输入区域起点1302中的单个输入区域起点1301周围的反卷积序列的输入窗口的另一配置以及输出块的结果,该输入窗口用于对输入块的数据元素进行采样,步长值为2,膨胀值为1,采用3×3滤波器核1303。图13A和图13B示出了输入窗口在输入块1305上的定位以及对应的输出块1307的结果。图13A和图13B所示的配置可以被理解为3×3滤波器核,两个字的水平和垂直步长,以及单个字的膨胀反卷积计算序列,以从利用重叠数据扩展的输入块1305上的单个计算区域起点1301周围的输入数据生成在多个输出区域起点1310中的输出区域起点1308的输出区域,其中,输出区域具有在水平方向和垂直方向上都要大几倍的步长。在多个输入区域起点1302中的每一个输入区域起点处的计算,可以生成在对应的输出区域起点1310处的结果。

输入窗口的定位可以获得输入窗口1309、1311、1313和1315。

如图13A的第一行所示,如由滤波器核1303的中心值映射的权重系数与输入窗口1309的组合,生成了针对输出块1307上输出区域1317的步长间隔位置的部分结果。贯穿本文所使用的术语步长间隔位置是指,区域上的根据步长值在水平方向和/或垂直方向上间隔开的位置。

输入窗口1311、1313、1315、1309和由滤波器核1303从权重矩阵中选择的相应权重系数可导致输出块1307上输出区域1319的步长间隔位置的部分结果,所述步长间隔位置与输出块1307上输出区域1317的位置具有单个字的位置偏移。

图13B示出了输入窗口1309和1313以及1309和1315的其他组合,其根据滤波器核1303而具有权重矩阵中的不同权重系数,被用于计算输出块1307的其他数据元素。

权重系数1321与输入窗口1315的组合和权重系数1323与输入窗口1309的组合定义了输出块1307上输出区域1325的步长间隔位置的部分结果,该步长间隔位置与输出块1307上输出区域1317的位置具有单个字的水平偏移并且匹配垂直位置。权重系数1327与输入窗口1313的组合和权重系数1329与输入窗口1309的组合定义了输出块1307上输出区域1331的步长间隔位置的部分结果,该步长间隔位置与输出块1307上输出区域1317的位置具有单个字的垂直偏移并且匹配水平位置。

如关于图13A和图13B详细描述的,输入窗口相对于输入区域起点1301的定位可以对应于权重系数在权重矩阵中的实际位置除以负步长值,在此示例中为-2。这可以获得与利用权重矩阵进行的全反卷积周期相当的计算序列,在此期间,由DW×DH输入窗口1309、1311、1313、1315获得的部分结果在水平方向和垂直方向上将值传播到每个步长间隔位置,通过每个周期改变位置偏移,有效地从大小为DW×DH的输入区域获得大小为(stride*DW)×(stride*DH)的生成区域。输出区域1317、1319、1325、1331对应的部分结果传播模式相对于输出区域起点1308的位置偏移可以与权重系数在权重矩阵中的实际位置相对应。

图13A和图13B的配置,使得可以通过针对输入窗口1309、1311、1313和1315的所有位置以及它们与权重矩阵中根据滤波器核1303的相应权重系数的组合,在所有输入区域起点1302处的连续计算序列来实现全块反卷积。

图14示出了根据本公开的一个实施例的用于通过加速器装置访问和处理数据层的方法的流程图。该方法可以在诸如图4所示的装置401之类的加速器装置上实现。

方法1400可以在项目1401中开始并且进行到项目1403,在项目1403中,检索要由加速器装置处理的输入数据的至少一部分。在项目1405中,所述输入数据可以被分割或划分为多个相邻输入块。输入块可以具有预定大小。随后,在项目1407中,多个相邻输入块中的至少一个输入块可以存储在加速器装置的数据缓冲器中。

在项目1409中,可以通过将输入窗口定位在存储在数据缓冲器中的数据元素上方来访问存储在数据缓冲器中的多个相邻输入块中的至少一个输入块的数据元素,以生成多个输入区域,其中,所述输入窗口可根据一组参数进行调整。该组参数可以包括步长值和膨胀值,其可以定义所述输入窗口的配置和所述输入窗口在输入区域上关于系数值的位置的定位及其对输出数据元素的贡献。已经关于图8至图13的实施例描述了输入窗口的配置的示例。

在项目1411中,可通过加速器装置顺序地处理多个输入区域中的至少一个输入区域,以至少部分地处理所述多个相邻输入块中的至少一个输入块。

方法1401可以重复以下操作:在项目1407中在数据缓冲器中存储所述多个相邻输入块中的另一个输入块,以及在项目1409中使用所述输入窗口来访问所述多个相邻输入块中的另一个输入块的数据。可以顺序或并行地重复此操作,直到完成对整个输入数据的计算为止。

方法1400可以在项目1413中结束。

本公开的实施例适用于各种技术领域,包括例如面部和物体检测的计算机视觉、交通监控和自动驾驶以及需要进行大量数学运算以提供实现计算机引导或自动决策制定来自动控制设备的信息的任何其他领域。然而,应当理解,本发明不限于输入数据和/或应用领域的特定配置,而是可以定义能够对传感器、状态或配置数据进行复杂计算以便导出适合于控制设备的信息的处理装置的技术方法步骤和技术设置。

尽管已经详细描述了一些实施例,但是应当理解,本公开的各方面可以采用许多形式。特别地,可以与所描述的示例不同地实践或实现所要求保护的主题,并且可以以任意组合来实践或实现所描述的特征和特性。本文所示的实施例旨在说明而非限制由权利要求书限定的本发明。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号