用于基于硬件的池化的系统和方法

文档序号:1047884 发布日期:2020-10-09 浏览:3次 >En<

阅读说明:本技术 用于基于硬件的池化的系统和方法 (System and method for hardware-based pooling ) 是由 P·J·班农 K·A·胡德 于 2018-12-12 设计创作,主要内容包括:本文描述了系统和方法,其利用新颖的基于硬件的池化架构来处理卷积引擎的输出,卷积引擎的输出表示卷积神经网络(CNN)中的卷积层的输出通道。池化系统将输出转换为一组阵列,并且根据池化操作将为一组阵列对准以生成池化结果。在某些实施例中,这通过使用对准器来实现,该对准器例如在多个算术循环上,将输出中的数据的阵列对准到行中,并且使行相对于彼此移位。池化器将池化操作应用于来自每行的数据的子集的组合,以生成池化结果。(Systems and methods are described herein that utilize a novel hardware-based pooling architecture to process the output of a convolution engine, which represents the output channels of convolution layers in a Convolutional Neural Network (CNN). The pooling system converts the output into a set of arrays and aligns the set of arrays according to a pooling operation to generate a pooled result. In some embodiments, this is achieved by using an aligner that aligns the array of data in the output into rows and shifts the rows relative to each other, e.g., over multiple arithmetic cycles. The pooling applies a pooling operation to a combination of the subsets of data from each row to generate a pooled result.)

用于基于硬件的池化的系统和方法

发明人:Peter Joseph Bannon;Kevin Altair Hurd

相关专利申请的交叉引用

本申请要求2018年01月04日提交、将Peter Joseph Bannon和Kevin Altair Hurd列为发明人、名称为“SYSTEMS AND METHODS FOR HARDWARE-BASED POOLING”的共同拥有的美国专利申请号15/862,369(案卷号20150-2167)的优先权。前述专利文件中的每个通过引用以其整体并入本文。

技术领域

本公开总体上涉及用于改进计算资源(诸如,计算能力和存储要求)的利用率的系统和方法。更具体地,本公开涉及用于在计算机视觉应用中改进算术处理的效率的系统和方法,该计算视觉应用使用卷积神经网络(CNN)架构来生成卷积和池化数据。

背景技术

基于神经网络的图像分类器在自动学习复杂特征以用于分类和对象识别中取得了显著的进步。例如,卷积神经网络(CNN)模型可以用于自动确定图像是否可以被分类为包括人或动物。当进行确定或预测时,CNN将多个分层网络层和子层应用于输入图像。CNN的一个特性是,每个网络层用作先前层的输出,其通常以第一卷积层开始,以一个或多个最终层结束,最终层例如是包括节点的全连接层,节点的激活值递送得分,该得分指示输入图像确实可以被分类为包括某个对象的可能性。

卷积层可以使用被称为核(kernel)或激活函数的若干过滤器,其将一组权重应用于图像的卷积窗口的像素。在训练阶段期间,权重已经由CNN学习,以生成与该窗口相关联的激活值。对于每个过滤器,针对每个像素,卷积层可以具有一个节点(即,神经元),该节点输出基于一组权重计算的激活值。用于卷积窗口的激活值标识特征或特性,诸如边缘,该边缘可以被用来标识在图像内其他位置处的特征。由于针对过滤器的所有节点可以共享相同的一组权重,因此重复使用权重是增加存储空间和计算时间两者的利用率的常规技术。

CNN的最重要类型的层之一是池化层,池化层是基本的独立构建块,其通常被放置在卷积层之后。当被应用于图像时,池化层允许网络确定特征图并且学***均池化的非线性函数,以在通过网络从一层向另一层前进时减少神经元的数目;由此,减少了计算的量并且进一步改进了计算性能。

池化通常涉及逐步地(stepwise)跨在前卷积层的输出的小的、非重叠区域(即,接收场)而滑动池化窗口(例如,宽度为多个像素并且高度为多个像素的二维正方形)。聚集该区域中的神经元的组的值提供针对在局部邻域中的每个组的单个输出值(例如,整数)。被分配给每个组的这些输出值被传递给后续层而不执行卷积,并且取决于在池化区域中使用的池化函数的类型(例如,平均或最大)。池化窗口的大小和位置取决于池化步幅(即,间隔或步长大小)和输出像素的位置。通常,最后一个池化层跟随有CNN架构的最终输出层(例如,具有soft-max非线性的全连接层),该最终输出层输出最终预测,例如,作为对每个特定分类的条件概率的估计。

尽管通过共享权重和改进算术逻辑单元利用率,在改进卷积层的性能上已经取得了很大的进步,但由于现有神经网络架构固有的限制,池化层已被忽视,池化层是类似地计算密集的。

因此,期望具有改进神经网络中的池化层的性能的系统和方法,来进一步提高可用的计算资源的利用端性能以降低总体计算成本。

具体实施方式

在下面的描述中,出于解释的目的,阐述了特定细节以便提供对本发明的理解。然而,对本领域技术人员明显的是,可以在没有这些细节的情况下实施本发明。此外,本领域的技术人员将认识到,下面描述的本发明的实施例可以按多种方式来实施,诸如,过程、装置、系统、设备或有形计算机可读介质上的方法。

图中所示的组件或模块是本发明的示例性实施例的说明,并且意在避免使本发明晦涩难懂。还应当理解,在整个讨论中,组件可以被描述为单独的功能单元,其可以包括子单元,但是本领域技术人员将认识到,各种组件或其一部分可以被划分为单独的组件或者可以被集成在一起,包括被集成在单个系统或组件中。应当注意,本文讨论的功能或操作可以被实施成组件。组件可以按软件、硬件或其组合来实施。

此外,附图内的组件或系统之间的连接不旨在限于直接连接。相反,这些组件之间的数据可以由中间组件修改、重新格式化或以其他方式改变。此外,可以使用更多或更少的连接。还应当注意,术语“耦合”、“连接”或“通信耦合”应当被理解为包括直接连接、通过一个或多个中间设备的间接连接以及无线连接。

说明书中对“一个实施例”、“优选实施例”、“实施例”或“多个实施例”的引用意指结合该实施例描述的特定特征、结构、特性或功能被包括在本发明的至少一个实施例中,并且可以在一个以上的实施例中。此外,上述短语在说明书中各个地方的出现不一定全部指代一个或多个相同的实施例。

某些术语在说明书中的各个地方的使用是为了说明,而不应当被解释为限制。服务、功能或资源不限于单个服务、功能或资源;对这些术语的使用可以指代相关服务、功能或资源的分组,它们可以是分布式的或是聚集的。此外,对存储器、数据库、信息库、数据存储、表、硬件等的使用在本文中可以用来指代一个或多个系统组件,信息可以被输入或以其他方式记录到该一个或多个系统组件中。

此外,应当注意:(1)某些步骤可以可选地执行;(2)步骤可以不限于本文阐述的特定顺序;(3)某些步骤可以按不同的顺序执行;(4)某些步骤可以同时进行。

图1是根据本公开的各种实施例的使用池化单元来执行池化操作的系统的示例性框图。系统100包括SRAM 102、数据/权重格式化器110、矩阵处理器120、后处理单元130、池化单元140、控制逻辑150。应当理解,系统100可以包括附加电路和子电路,诸如逻辑电路系统和/或控制电路系统、高速缓存、本地缓冲器、比较器、状态机、附加的后处理单元以及执行管理功能的辅助设备。

在实施例中,系统100中的任何组件可以由控制逻辑150部分或完全控制,例如,当系统100执行诸如卷积或其他数学计算的运算时,控制逻辑150可以监控系统100的状态和操作,并且计算从其取回数据的位置,该数据将在操作的后续步骤中被使用。类似地,控制逻辑150可以管理其他组件,例如,图1中未示出和/或系统100外部的组件。

在实施例中,SRAM 102例如在数据输入矩阵和权重输入矩阵104中存储输入图像数据并且使其可访问。本领域技术人员将认识到,可以使用其他类型的存储设备。

在实施例中,基于权重输入矩阵和数据输入矩阵104,数据/权重格式化器110产生用于矩阵处理器120的两个输出108(例如,每个输出96列宽),矩阵处理器120可以并行地处理非常大数目的矩阵元素,以高效地将数据映射到矩阵运算中。数据/权重格式化器110可以被实施成任意数目的在线格式化器,在线格式化器例如根据矩阵处理器120的特定硬件要求,将例如数据输入矩阵和权重输入矩阵104转换成合适的格式以用于由矩阵处理器120进一步处理。在实施例中,在使如此线性化或向量化的数据作为矩阵处理器120的输入108可用之前,格式化器110将二维或三维矩阵转换为可以由行或列表示的单个向量或字符串。结果,矩阵处理器120可以被高效地利用,来执行作为系统100中的卷积计算的一部分的矩阵乘法运算,以生成输出阵列122,输出阵列122然后可以被重新组装成例如图像。

使用本公开的实施例的神经网络模型可以包括池化网络,该池化网络使用最大池化层、平均池化层和其他神经网络层。在实施例中,池化网络之前或之后可以有(使用全连接层的处理模块,以及)激活层,该激活层使用已知函数,诸如非线性函数,例如,整流线性单元(ReLU)、逻辑Sigmoid函数等。

在实施例中,矩阵处理器120通过如下来执行卷积运算:将单独的过滤器(例如,权重)应用于输入图像数据,以检测输入图像内的小的特征。通过以不同顺序分析不同特征的序列,宏特征可以如此在输入图像中被标识。矩阵处理器120可以使用针对每个输入通道的不同的一组权重,因为每个输入通道可以包含不同的一组信息,并且每个权重矩阵可以被用来检测不同的特征。在实施例中,矩阵处理器120将矩形输入矩阵与矩形权重矩阵相乘以获得部分点积,然后可以将该些部分点积相加以生成累积的点积,即,整数,其表示输出图像中的输出像素。在实施例中,输出阵列122可以对应于已经被格式化器110处理过的两个矩阵108的点积。

在实施例中,矩阵处理器120可以执行卷积运算,通过将卷积运算转换为矩阵乘法(例如,96×96矩阵乘法),卷积运算将输入与过滤器卷积以生成输出122。矩阵处理器120可以包括诸如算术逻辑单元、寄存器、编码器的电路系统,并且可以被实施成具有任意数目的列和行,以跨数据和大的一组权重执行数学加速运算。这些大规模运算可以根据矩阵处理器120的特定硬件要求来定时,以例如通过减少系统100内的冗余操作并且通过实现硬件特定的逻辑来加速卷积运算。

在实施例中,矩阵处理器120输出122经线性化的向量或阵列,经线性化的向量或阵列表示输出通道,其可以被存储在后处理单元130内的存储中。在实施例中,池化单元140在矩阵处理器120的单个输出通道上操作,使得输出122或经后处理的输出124是一阵列,该阵列可能不能方便地映射到矩阵运算中。因此,在实施例中,输出阵列122可以被重新格式化为用于池化单元140的适当格式,以增加系统100的效率。

相反,采用对所存储的卷积执行向量运算的向量引擎的常规实施方式将导致对诸如矩阵处理器120的高效率的矩阵处理器的输出的相当复杂和效率低下的池化操作,这部分因为输出阵列122中的一些值可能相邻,而其他值可能不相邻。简而言之,跟随在由矩阵处理器120进行的卷积运算之后的池化算法将必须处理输出阵列122中的值的组合,这些值的组合未按照针对普通的池化方法方便的形状或格式来呈现。因此,在实施例中,输出阵列122被重新格式化,以便允许将改进的池化方法应用于高效率的矩阵处理器120。

为了实现这一点,在实施例中,响应于接收输出阵列122(例如,如由后处理单元130处理的),硬件池化单元140将所接收的数据重新格式化为网格格式,使得输出阵列122的一些元素可以在垂直方向上对准,而其他元素可以在水平方向上对准,以使得池化可以直接应用,而无需执行繁琐的、计算密集的中间步骤和数据存储操作。在实施例中,格式化器110可以将不同形状的输入矩阵数据重新格式化为适于矩阵处理器120的列和行。在实施例中,格式化可以动态地执行以适应对具有不同输入大小的矩阵的处理。

在实施例中,池化单元140将池化函数(例如,平均池化和最大池化)应用于经重新格式化的数据,以便生成和输出池化数据106,池化数据106然后可以写入并存储在SRAM102中,例如,作为特征图。将关于图2更详细地描述池化单元140的内部操作。

在实施例中,矩阵处理器120输出卷积数据的集合(例如,输出阵列122),同时累积和计算卷积数据的下一集合。类似地,池化单元140即时(on-the-fly)根据被移出矩阵处理器120的数据生成输出106,因此,当与基于软件的池化方法相比时,其覆盖了池化的成本并减少了计算时间,而基于软件的池化方法要求在通过池化层之前,卷积被存储在中间存储中。

在实施例中,后处理单元130例如经由输出触发器(未示出),从矩阵处理器120的底部行接收数据(例如,与输出通道相对应的点积结果)。后处理单元130可以将例如非线性ReLU函数应用于输出阵列122。

注意的是,在卷积层操作之前,填充(例如,零填充)可以在矩阵的边缘执行,以便获得预定的输出特征图大小。在实施例中,如果步幅被设置为大于1的值,则填充可以被启用。如果填充被启用,则控制逻辑150可以将某些列视为零,使得平均池化操作中的除数被调整为等于平均计算中所涉及的非零池化值之和。

图2是根据本公开的各种实施例的池化单元架构的示例性框图。池化单元200可以包括行对准器206、写入对准器204、池化阵列208、池化器210。在实施例中,池化器210可以包括可以执行池化操作的最大单元(未示出)、平均单元212,或任何其他单元,以生成输出230。在实施例中,平均单元212通过使用求和元件214及之后的除法和/或缩放单元216,来执行平均功能。

输入202可以对应于一组特征图。在实施例中,输入202构成已经根据高效率的矩阵处理器(例如,题目为“Accelerated Mathematical Engine”的US专利申请序列号15/710433所公开的矩阵处理器,该引用以其整体并入本文)的要求产生的输出通道。

在实施例中,响应于接收输入202,池化单元200将输入中的数据重新格式化为网格模式的等效物,常规池化方法可以对网格模式的等效物应用,例如,以将特征图的高度和宽度通过因子2来减小。在实施例中,池化单元200通过将输入202(例如,在行对准器206中)布置和存储在多行中来完成重新格式化,该多行具有与输入202相同的宽度,使得每行包括与矩阵中的一组邻域值相对应的数据的部分,池化操作可以被应用到该多行以获得池化结果。在实施例中,一旦行被对准,使得属于相同邻域的那些部分可以被提取,池化就可以例如由池化器210容易地执行。在实施例中,以该方式池化过的部分的组合表示卷积的整个池化输出通道的池化结果。

在实施例中,行对准器206以这样的方式存储输入202,使得输入202可以由池化器210访问和读取,作为要被池化的数据。换句话说,矩阵处理器的输出通道可以被重新格式化为可以由池化器210读取、容易地进行池化的格式,同时维持输入数据102的流。在实施例中,行对准器206由控制器(未示出)控制,以在将结果写到多个池化阵列208(例如,3个阵列,其包括要被池化的数据)之前,将进入的输入202移位。

在实施例中,池化器210标识行对准器206中的适当值以用于在特定池化计算中使用,并且从池化阵列208中提取多个值以计算池化结果。池化结果取决于所使用的池化函数的类型,并且可以是平均值、最大值或中间值(例如,总和),其可以被转换为合适的池化结果。在实施例中,除法和/或缩放单元216可以跟随平均单元212,并且可以被实施为生成输出230的乘法和移位电路。在实施例中,池化器210可以访问池化阵列208,以处理池化阵列208的包括多个要被池化的值的任何子部分。例如,池化器210可以池化对应于3×3池化窗口的9个值,以生成平均池化值。应当理解,取决于参数设定,池化窗口可以采用任何任意大小和形状。

在实施例中,输入202被读取,并且重新格式化例如使用用于对准成行数据的方法(关于图4进一步讨论),在n个算术循环(arithmetic cycle)的时段上应用,以在每个循环中生成池化结果230,例如,一次一行。在实施例中,一旦输出通道被读取(例如,作为输入202),下一个输出通道就可以被读取,并且重新格式化可以例如通过使用不同的一组存储器来应用,直到处理了由矩阵处理器提供的所有输出通道为止,不同的存储器将成行的数据存储在不同的池化器212中,并且结果230可以被输出。应当理解,输出通道的部分并且通常是不同输出通道的部分可以使用与图2和所附文本中描绘的那些不同的其他方法和其他电路配置而在不同的时间被处理。如本领域技术人员将理解的,可以使用附加的池化层来输出较高级别或改进的特征图。

在实施例中,池化单元200与用以生成输出122的矩阵处理器120一样快地计算池化结果。池化单元140可以应用例如n=2或n=3的步幅,以控制在计算之间滑动窗口跨越的元素的数量。本领域技术人员将理解,用于池化层的滑动机制以与卷积层中的机制类似的方式操作,例如使用2或3的共同核大小,其区别在于平均值或最大值在池化窗口中被选择。

在实施例中,池化单元200接收经处理的数据,并且对可能相对于彼此空间移位的一组阵列执行计算。在实施例中,池化结果124被状态机(未示出)拉或移位到输出阵列中,例如,每个时钟周期一个。在将数据发送到SRAM 102或某个其他后处理单元(未示出)之前,状态机可以对池化结果124执行附加操作。

应当理解,池化单元200还可以包括图2中未示出的组件和子电路,诸如,控制单元,该控制单元协调与池化单元200耦合的任意数目的组件的操作序列。例如,控制单元可以确定给定操作中涉及的数据点的数目和位置,而无需修改操作序列本身。

图3是用于使用图1中所示的池化系统的例示性过程的流程图。当来自卷积引擎的数据例如在池化单元处并且每n个循环被接收到时,过程300开始步骤302。在实施例中,数据以数据阵列的形式被接收,并且表示CNN中的卷积层的输出通道。

在步骤304处,阵列被转换为一组阵列,该一组阵列根据池化操作对准。在实施例中,在步骤306处,池化操作使用该一组阵列中的至少两个阵列以应用池化操作,以生成池化结果,例如,每个循环一个结果。

最后,在步骤308处,池化结果例如以每算术循环一行而被输出到存储器设备中。

图4是用于使用图2中所示的池化单元架构的例示性过程的流程图。当基于硬件的池化单元从卷积引擎接收到数据一组阵列时,过程400开始步骤402,每个数据阵列具有与彼此之间的预先定义的关系。

在步骤404处,使用基于硬件的池化单元,池化操作被应用于来自数据一组阵列中的至少两个阵列中的数据,以获得池化结果,例如,平均池化结果或最大池化结果。池化操作可以根据步幅值来应用。此外,该基于硬件的池化方法利用了输出通道与输入通道的1:1关系,这有利地消除了将卷积结果写入到中间存储器中的需求。

在步骤406处,池化结果例如被输出为每个循环一行数据点,每个数据点表示CNN的层中的神经元。

图5是图示用于使用图2中所示的池化单元架构来执行池化的过程的示例性框图。在实施例中,池化单元架构的矩阵处理器502将输出通道504输出。由于池化操作可以被视为具有固定权重的卷积,因此矩阵处理器可以被用来执行池化操作。但是,由于池化中通常只有单个输出通道,因此一次仅操作多输出通道矩阵处理器的一个输出通道相当不高效的任务,其不必要地占用了计算资源。因此,为了提高计算效率,在实施例中,输出通道504可以被写入到例如通过如图2中所示的行对准器对准的多个行506-510中,使得每行506-510在随后的循环中相对于另一行移位。在实施例中,图5中的行Y=0、Y=1和Y=2可以保持输出通道504,并且可以在相应的循环0至2中被写入和存储。

例如,在循环0中,输入202的至少第一部分(例如,左对准)被存储到行Y=0中。在接下来的循环(循环1)中,相同的部分被存储到行Y=1中,等等,使得花费三个读取循环来填充行506-510。一旦行506-510被填入,来自行506-510的数据可以被组合以执行池化计算。例如,来自行506-510中的每行的3个值可以被组合成9个值,该9个值生成池化值514作为结果。

注意,池化计算可以并行执行。例如,为了维持进入的输出通道504的流,池化计算的数目可以等于矩阵处理器502中的输出通道的总数目,使得对应于矩阵处理器502的整个宽度518的池化数据可以被输出,而不管核大小如何。

在实施例中,从一行到另一行的移位对应于跨矩阵卷积以生成池化结果时的池化窗口的移位。在实施例中,可归因于池化窗口的移位由循环的数目来限定,并且移位可以对应于具有如下值的步幅,该值由相同的循环数目来限定。简而言之,步幅决定了多长时间池化数据被输出。例如,对于2的步幅,池化值可以每隔一个循环输出,由此跳过输出之间的行(或列)。

在实施例中,为了创建存储三行的滑动窗口,其一次滑动一行,在第三循环512中,第一行506的值可以被重写,使得该循环使用三个行506-510的集合,并且基于池化参数输出池化计算结果。

应当理解,存储的行的数目与所支持的核的大小相对应,并且诸如窗口大小、步幅大小、所使用的池化的类型等参数可以与池化过程本身无关地被确定和控制。

本领域的技术人员将认识到,没有任何计算系统或编程语言对本发明的实践至关重要。本领域技术人员还将认识到,上述多个元件可以在物理和/或功能上分离成子模块或被组合在一起。

本领域技术人员将理解,前述示例和实施例是示例性的,并且不限制本公开的范围。意图是,在阅读说明书和研究附图之后,对本领域技术人员明显的对其的所有排列、增强、等同、组合和改进都被包括在本公开的真实精神和范围内。还应当注意,任何权利要求的要素可以被不同地布置,包括具有多个从属性、配置和组合。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于对概率分布进行建模的系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!