一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据处理方法、微控制器系统和计算机程序产品与流程

2022-02-20 13:33:10 来源:中国专利 TAG:


1.本说明书涉及存储器分配方法,并且具体地涉及人工神经网络(简称ann)电路中的系统和存储器分配方法。
2.一个或多个实施例涉及包括本地存储器电路块并且适于实现该ann处理的处理电路装置,例如微控制器单元(简称mcu)。
3.一个或多个实施例可以应用于硬件加速器,例如以加速人工神经网络电路中的处理。


背景技术:

4.人工神经网络(ann)电路包括被配置为处理大型数据集的计算框架。
5.如本文中所讨论的,用语“数据集”或“数据数组”主要是指具有数组数据结构(简称数组)的数字化数据(例如,数字图像),该数组数据结构包括由至少一个数组索引或键以本身已知的方式标识的元素(值或变量)的集合。线性数组(也称为一维数组)是常见类型的数据结构,其中输入大小可以是指该线性数组的长度。
6.ann处理一般包括两个阶段:
7.训练阶段,其中ann通过考虑示例来自适应地“学习”以执行任务(称为训练数据集),通常无需利用任何任务特定规则来进行编程;以及
8.推理阶段,其中经训练的ann可以用于对一般输入数据进行广泛预测。
9.例如,考虑到基于图像中所表示的对象的长度和高度来对图像表示狗还是猫进行分类。训练集可以包括数千个[身高,体重,猫/狗]数组,诸如[五十,六,猫]。人工神经网络可以利用这些数据并且基于身高和体重来“学习”猫与狗之间的复杂边界。然后,给定未分类数据输入,机器学习算法确定它是狗还是猫以及分类的置信水平。
[0010]
可以针对不同领域的应用来适当地训练各种ann模型,例如,ann可以用来学习句子中的字模式或关键字识别,以防止如预测性维护中的工具故障,用于如人类活动识别中的(例如,惯性传感器)信号处理,用于图像中的图像处理和分类对象,以及也用于很多其他基于学习的任务。
[0011]
一般而言,ann可以被布置在多个“层”中并且不同类型的数据处理操作可以在不同ann层处被执行。
[0012]
该数据处理操作的执行速度可能在很大程度上取决于软件代码如何映射到所采用的计算和存储器资源上。
[0013]
将合适的算子(或函数)应用于要处理的数据、可以在ann层处被执行的数据处理操作(或函数)的类型可以包括应用池化和/或卷积算子。
[0014]
池化算子可以应用于数据,以便计算对所提供的输入数据的区域的“组合”操作。
[0015]
具体地,将池化应用于数组包括在给定“(池化)窗口”或“(池化)区域”内处理数据,该给定“(池化)窗口”或“(池化)区域”根据某前进步幅(例如,每次滑动遍历的距离)在输入的区(area)/区域(region)上被渐进地移动/滑动,其中根据在滑动窗口内收集的数据
来计算单个输出值。
[0016]
存在很多类型的池化层或算子,例如已知的有:
[0017]
将“最大池化”(简称最大池)算子应用于输入数组可以产生输出数组,该输出数组的元素通过在每个阶段处检测窗口内的最大值来获取,该窗口在每个阶段有序地在数组上滑动;以及
[0018]
将“平均池化”(简称avg-pool)算子应用于输入数组可以产生数组,该数组的元素通过在每个阶段处计算窗口内的数组值的平均来获取,该窗口在每个阶段有序地在数组上滑动。
[0019]
可以自定义池化层,使其本身已知的参数变化,例如:
[0020]
池化窗口大小/形状,例如(c);
[0021]
填补大小,例如(p);以及
[0022]
步幅大小,例如(s)。
[0023]
如所提及的,步幅是在输出值计算中间的池化窗口的“行进距离”(在数组索引方面)的长度。
[0024]
填补大小与在应用池化时数组“边缘”计算可以如何被处理有关:例如,如果输入数组是偶数长度的线性数组,例如8,并且池化窗口具有大小(c)=3和步幅(s)=3,则在将窗口移动到最后的数据块时,数组的“末尾”处存在问题,因为存在索引“丢失”。为了避免这种情况,填补大小(p)=1可以增加输出的高度和宽度,利用空值来填补过量空间,确保池化窗口应用于完整输入。
[0025]
将计算机编程以执行池化操作可以涉及分配用于托管临时数据的存储器空间,也称为缓冲器大小。
[0026]
改进池化操作的存储器占用和计算速度是针对人工神经网络、特别是针对cnn硬件加速器电路的重要品质因数。


技术实现要素:

[0027]
在实施例中,一种方法包括:将池化算子应用于输入的数据数组,该池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:根据池化参数的集合,计算输出缓冲器的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数组包括:根据池化参数,将池化窗口的输入数组的元素与输出缓冲器的输出元素相关联;以及针对输出缓冲器的每个输出元素,对与该输出元素相关联的相应的输入元素进行组合。在实施例中,该进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。
[0028]
在实施例中,一种微控制器系统包括:存储器;以及耦合到存储器的处理电路装置,其中处理电路装置在操作中将池化算子应用于数据的输入数组,该池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:将存储器的部分分配给输出缓冲器,输出缓冲器具有为池化参数的集合的函数的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数组包括:根据池化参数,将池化窗
口的输入数组的元素与输出缓冲器的输出元素相关联;以及针对输出缓冲器的每个输出元素,对与该输出元素相关联的相应的输入元素进行组合。在实施例中,进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。
[0029]
在实施例中,一种非暂时性计算机可读存储介质,其存储内容配置计算系统以实现方法,该方法包括:将池化算子应用于数据的输入数组,该池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:根据池化参数的集合,计算输出缓冲器的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数组包括:根据池化参数,将输入数组的元素与输出缓冲器的输出元素相关联;以及针对输出缓冲器的每个输出元素,对与该输出元素相关联的相应的输入元素进行组合。在实施例中,进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。
附图说明
[0030]
现在将参考附图仅通过非限制性示例的方式描述一个或多个实施例,在附图中:
[0031]
图1和图2是人工神经网络处理的示例图;
[0032]
图3是根据一个或多个实施例的微控制器电路的图;
[0033]
图4a包括部分a)、b)和c),包括第一池化方法中涉及的信号的图;
[0034]
图4b包括部分a)、b)和c),包括第二池化方法中涉及的信号的图;
[0035]
图4c包括部分a)、b)、c),包括与缓冲器加载错误相关的图;
[0036]
图5包括部分a)、b)、c)、d)、e),包括根据一个或多个实施例的原理的图;
[0037]
图6是根据本公开的数据处理方法的图;
[0038]
图7至图9包括根据一个或多个实施例的原理的示例图;
[0039]
图10是二维输入数组的示例图;
[0040]
图11是根据一个或多个实施例的原理的示例图;
[0041]
图12是根据本公开的方法的一个或多个实施例的(例如,如被应用在二维图像上的)示例图;
[0042]
图13是根据本公开的方法的一个或多个实施例的示例图;
[0043]
图14是根据一个或多个实施例的原理的图;以及
[0044]
图15和图16是根据一个或多个实施例的原理的示例图。
具体实施方式
[0045]
在后续描述中,说明了一个或多个具体细节,旨在提供对本说明书的实施例的示例的深入理解。这些实施例可以在没有一个或多个具体细节的情况下获取,或者通过其他方法、组件、材料等获取。在其他情况下,没有详细说明或描述已知的结构、材料或操作,以免使实施例的某些方面不清楚。
[0046]
在本说明书的框架中对“实施例”或“一个实施例”的引用旨在指示关于该实施例而描述的特定配置、结构或特性被包括在至少一个实施例中。因此,在本说明书的一个或多个位置可能出现的诸如“在实施例中”或“在一个实施例中”等短语不一定指代同一实施例。
[0047]
此外,在一个或多个实施例中,特定配置、结构或特性可以以任何适当的方式组合。
[0048]
本文中使用的附图标记仅为了方便起见,而不限定保护范围或实施例的范围。
[0049]
附图为简化形式且未按精确比例绘制。为了简单起见,可以相对于附图使用方向(向上/向下等)或运动(向前/向后等)术语。
[0050]
术语“耦合”和类似术语不一定表示直接和立即连接,还包括通过中间元件或设备进行的连接。
[0051]
此外,在下文中,实现(经由hw和/或sw)神经网络的电路(即,人工神经网络(ann)电路)可以被简称为“神经网络”以避免使即时描述过度麻烦。
[0052]
如上所述,ann处理100可以包括对输入数组执行的多个数据处理操作。
[0053]
该数据处理操作可以使用至少一个处理电路(例如,微控制器电路单元)以自动方式来执行。
[0054]
图1图示了人工神经网络(简称为ann)100的可能图,包括:
[0055]
输入层102,其具有第一输入节点110和第二输入节点120,输入层102被配置为接收输入数组xin,例如x=(xin(1)xin(2))=(长度,高度);以及
[0056]
输出层104,其具有第一输出节点130和第二输出节点140,输出层104被配置为向用户电路提供至少一个输出数组xout,例如输出xout=(xout(1),xout(2))=(猫,狗)。
[0057]
ann处理节点110、120、130、140可以包括处理单元,例如多层感知器处理中的“感知器”、和/或循环神经网络处理中的单元或多层单元等。
[0058]
在下文中,为了简单起见,主要关于感知器类型的处理单元来讨论一个或多个实施例,否则应当理解,这种类型的ann处理单元纯粹是示例性的,而决不是限制性的。
[0059]
ann处理节点/单元110、120、130、140可以被配置为使用权重w1、w2、w3、w4和活动g1、g2、g3、g4的相应集合来处理接收到的数据,这些集合可以被存储在用来执行ann处理的处理电路的存储器电路部分中。
[0060]
在一个或多个实施例中,ann处理100还可以包括所谓的“隐藏层”,其中感知器耦合到网络中的其他神经元并且因此不能从输入和输出层直接访问,这表明,与在一个层中相比,处理可以利用更高数目和更复杂架构的感知器来发生,例如以便处理二维图像。
[0061]
层102、104的单元110、120、130、140可以耦合到下游层的每个单元的输入节点(其可以被称为“完全连接的前馈”拓扑)并且可选地耦合到偏置输入节点。
[0062]
在一个或多个实施例中,ann处理框架100可以被建模作为有向无环图(简称为dag)。
[0063]
为了简单起见,在关于图2的下文中讨论包括六个连续节点的dag模型,否则应当理解,这样的节点数量和这样的dag拓扑纯粹是示例性的,而决不是限制性的。一个或多个实施例可以涉及ann处理框架100,该ann处理框架100可以被建模作为具有不同数目的节点和不同拓扑的dag。
[0064]
在图2所示例的一个或多个实施例中,有向无环图(dag)可以包括数据处理节点t1、l1、t2、l2、t3的集合,其中数据处理节点t1、l1、t2、l2、t3的集合中的节点可以属于以下两组节点中的任一:
[0065]“层”节点l1、l2(在图1中使用圆圈来表示)的第一集合,其包括人工神经网络100
的数据处理算子;以及
[0066]“张量”节点t1、t2、t3(在图1中使用方块来表示)的第二集合,其指示神经网络处理框架100中的存储器访问或记忆阶段。
[0067]
具体地:
[0068]
第一组层节点l1、l2中的任何节点包括至少一个数据处理算子,该至少一个数据处理算子被配置为应用于ann处理100的任何(处理和/或多)层(单元)102、104中的数据;以及
[0069]
第二组节点t1、t2、t3中的任何节点包括至少一个数据存储操作,该至少一个数据存储操作链接到人工神经网络的相应的数据处理阶段l1、l2,以便加载感知器权重w1、w2、w3、w4和/或活动g3、g4,并且存储所链接的神经网络层节点l1、l2的输出。
[0070]
如所提及的,在感知器节点110、120、130、140的所考虑的(非限制性的)示例中,相应的ann层102、104中的ann感知器110、120、130、140的权重w1、w2、w3、w4和/或活动g1、g2、g3、g4可以被存储在处理电路的存储器电路部分中。
[0071]
图3是图示适于实现ann 100的一个或多个部分的示例性的例如计算机处理系统10的示例图。
[0072]
这样的系统10可以包括微控制器处理电路,例如通用微控制器处理电路。在一个或多个实施例中,微控制器(简称为mcu)10可以包括处理核心或电路装置12和存储器电路部分14、16的集合。mcu 10还可以包括:
[0073]
电路部分或接口18,其被配置为以本身已知的方式将mcu耦合到其他处理单元或致动设备(例如,被称为外围设备);以及在处理单元和存储器之间的联网部件,以(例如,经由数据总线(为了简单起见,图3中未示出))在处理单元与存储器之间交换数据;这样的联网部件可以包括使用多种总线架构中的任何一种的若干类型的公知总线结构中的任何一种,例如工业标准架构(isa)总线、微通道架构(mca)总线、增强型isa(eisa)总线、视频电子标准协会(vesa)本地总线和外围组件互连(pci)。
[0074]
连接到系统总线的各种组件包括但不限于可扩展的非易失性存储器(例如,基于磁盘的数据存储)、视频/图形适配器、被配置为连接到一个或多个输入设备(诸如键盘)的用户输入接口(i/f)控制器、被配置为连接到一个或多个外部外围设备(诸如打印机)的外围接口控制器、以及可以经由网络耦合到一个或多个设备(诸如数据存储、运行一个或多个远程应用的远程计算机)的网络接口控制器,该网络可以包括互联网云、局域网(lan)、广域网(wan)、存储区网络(san)。
[0075]
处理核心或电路装置12可以包括一个或多个通用cpu核心以及可选的一个或多个专用核心(例如,dsp核心、浮点、gpu和神经网络优化核心),其中一个或多个通用核心执行通用操作码,而专用核心执行特定于其目的的功能。
[0076]
存储器电路块14、16的集合可以包括高速缓存寄存器、动态随机存取存储器(dram)或扩展数据输出(edo)存储器、或其他类型的存储器,诸如rom、静态ram、闪存和非易失性静态随机存取存储器(nvsram)、磁泡存储器等。
[0077]
系统10可以经由到一个或多个远程计算机的连接在联网环境中操作。远程计算机可以包括个人计算机(pc)、服务器、路由器、网络pc、对等设备或其他公共网络节点,并且通常包括前面所讨论的元件中的很多或所有元件。
[0078]
注意,其他数字计算机系统配置也可以被采用以实现本公开的系统和方法,并且到特定系统配置能够实现本公开的系统和方法的程度。
[0079]
在一个或多个实施例中,存储器电路部分14、16的集合可以包括被配置为以第一存储器访问速度向用户电路提供数据的第一存储器电路部分14(例如,ram型存储器)和被配置为以不同于第一存储器访问速度的第二存储器访问速度向用户电路提供数据的第二存储器电路部分16(例如,闪存型存储器)。
[0080]
在一个或多个实施例中,第一存储器部分14可以包括多个寄存器或缓冲器,例如:
[0081]
第一缓冲器子集140,其被配置为存储专用数据部分,例如用于ann的输入数据集;
[0082]
第二缓冲器子集142,其被配置为存储ann处理代码部分;以及
[0083]
第三缓冲器子集144,其被配置为存储相应的ann处理层102、104的ann感知器节点110、120、130、140的活动g1、g2、g3、g4,其中活动是层的输出。
[0084]
在一个或多个实施例中,第二存储器部分16可以包括另外的多个寄存器或缓冲器160,该另外的多个寄存器或缓冲器160可以被配置为存储相应的ann处理层102、104的ann感知器节点110、120、130、140的权重值w1、w2、w3、w4。
[0085]
在一个或多个实施例中,活动可以在执行数据处理的同时即时计算。
[0086]
为了加速ann操作的执行和mcu系统10的性能,缓冲器可以在ann 100的运行时间之前被预先分配,例如,在待处理的数据被提供给ann输入层节点之前。
[0087]
申请人于2019年7月22日提交的意大利专利申请号102019000012609讨论了一种计算机实现的存储器分配方法,该方法可以适用于一个或多个实施例中以提高mcu系统10在将ann处理100应用于输入数组xin时的性能。
[0088]
这样的计算机实现的方法可以包括:
[0089]
为人工神经网络电路100提供数据处理电路装置,该数据处理电路装置包括存储器电路装置中的数据缓冲器t1、t2、t3;
[0090]
将存储器电路装置中的数据缓冲器t1、t2、t3耦合到人工神经网络电路100中的相应的处理层l1、l2,并且获取人工神经网络100的层的有序访问序列;
[0091]
根据人工神经网络100的层的有序访问序列,产生(虚拟)存储器分配计划表,存储器分配计划表a包括用于存储器分配和解除分配操作的指令的集合,该存储器分配和解除分配操作适用于耦合到人工神经网络电路100的处理层的存储器电路装置14、16中的数据缓冲器t1、t2、t3;以及
[0092]
根据存储器分配计划表来计算用于人工神经网络电路100的(物理)存储器配置数据结构,物理(或虚拟)存储器配置数据集包括用于人工神经网络电路100的物理存储器位置的大小和地址。
[0093]
在一个或多个实施例中,作为例如移除中间缓冲器的结果,合并两层算子可以提供进一步的存储器节省。
[0094]
如所提及的,本文中所讨论的是应用人工神经网络处理100的(进一步)改进的方法,特别是在使用mcu电路10时,以便简化处理并且减少存储器访问时间。
[0095]
为了简单起见,参考示例性情况来讨论根据一个或多个实施例的原理,其中:
[0096]
输入数组xin,例如具有给定长度大小l的线性输入数组,例如l=9;为了简单起见,所考虑的输入数组xin被保持为包括酉向量,表示其元素都是酉值的向量,例如xin=
[a,b,c,d,e,f,g,h,i]=[1,1,1,1,1,1,1,1,1];
[0097]
输入数组xin使用池化处理算子pf来处理,pf具有给定池化窗口pw,池化窗口pw具有池化窗口大小c和池化步幅大小s,例如,c(pf)=6,s(pf)=6;
[0098]
至少一个缓冲器被关联到池化算子pf并且被配置为存储池化算子的输入和/或输出,如下所讨论的;
[0099]
输出信号xout提供在对大小等于池化窗口pw的输入数据的部分进行计算时的池化算子的值,池化算子是“求和”池化算子,pf的输出是池化窗口内的所有元素的总和(例如,平均池化算子可以通过将总和池化算子输出除以输入长度值l来获取);以及
[0100]
读取/写入/求和数据的操作可以经由临时信号ck(例如,物理时钟信号或循环/周期索引)来同步,并且在一个周期处加载的数据在后续离散周期处以本身已知的方式是可用的,其中这样的周期可以被指示作为“历元”。
[0101]
在将池化应用于输入数组xin的第一“朴素”方法中,如图4a所示,可以使用具有(例如一个存储器单元的)所分配的最小缓冲器空间的第一缓冲器b1(1)来执行池化。然而,如下面讨论的,这种解决方案在ram存储器大小和计算延迟方面可能涉及高计算成本。
[0102]
池化的第一“朴素”实现可以设想,只要池化窗口内的所有输入值可用于累加,就计算池化输出值。
[0103]
如图4a所示,应用第一“朴素”实现的池化算子pf可以包括:
[0104]
如图4a的部分a)所示,将池化窗口应用于后续窗口pw1、pw2、pw3、pw4中的输入数据xin,其中每个窗口与后续窗口以等于步幅大小的索引元素距离(例如,一个元素的距离)分开;
[0105]
相应的数据窗口被“扫描”并且每个窗口中包括的每个值被累加在存储器b1(1)中,其可能存储的时间值如图4a的部分b)所示;以及
[0106]
在每个累加周期结束时提供输出信号xout,如图4a的部分c)中。
[0107]
如图4a所示,利用第一“朴素”方法,需要等于池化窗口大小c的时钟周期数来提供池化算子pf的单个输出值。池化算子pf的总输出值需要一定数目的时钟周期来输出。这样的时钟周期的数目可以是池化窗口大小与因子的乘积,该因子取决于后续池化窗口pw1、pw2、pw3、pw4之间的重叠量。例如,在所考虑的示例中,应用池化算子pf的总计算延迟是4*c=24个时钟周期。
[0108]
如图4b所示的应用池化算子的第二方法(可以被指示作为“条带化池化实现”sf)可以包括分配临时缓冲器b2,临时缓冲器b2具有等于图像/数组的宽度的大小(在示例性一维情况下,考虑其等于池化窗口pw的大小c,(例如,size(b2)=c),缓冲器b2被配置为在池化窗口pw1、pw2、pw3、pw4内存储数据)。这样的条带缓冲器b2可以用作临时缓冲器来存储输入数据xin的池化窗口pw的行/列。
[0109]
如图4b所示,应用条带化池化实现的条带化池化算子sf可以包括:
[0110]
如图4b的部分a)所示,将池化窗口应用于后续窗口pw1、pw2、pw3、pw4中的输入数据xin,其中每个窗口与后续窗口以等于步幅大小s的索引元素距离(例如,一个元素的距离)分开;
[0111]
相应的数据窗口被“扫描”,第一窗口pw1中包括的值被循序地加载到条带临时缓冲器b2的后续索引存储器部分b2(i)中,如图5的部分b)所示,其示出了存储在条带临时缓
冲器b2的一个第i存储器部分b2(i)中的值的可能时间图;以及
[0112]
每当属于相应的池化窗口pw1、pw2、pw3、pw4的所有数据被加载并且可用于在后续缓冲器单元b1中累加时,就提供输出信号xout,以在每个累加周期结束时计算池化算子,如图4b的部分c)所示。
[0113]
在一个或多个实施例中,在与池大小值成线性比例的时间处,例如在时间c 3处,输出值xout可用于进一步处理。
[0114]
在一个或多个实施例中,条带被视为行的循环缓冲器以避免复制。
[0115]
这种条带化实现可能受到限制,因为并非所有池算子参数值都可以适当地被使用,从而可以采用池化算子参数值的整定。在输入数据的部分条带可能被留下以存储在条带缓冲器b2、b2

中时,当池化图像数据处于在图像的“边缘”时可能会出现问题。
[0116]
如图4b所示,利用该第二“条带化”方法,需要等于池化窗口大小c的时钟周期的数目来提供池化算子pf的第一输出值。池化算子pf的总输出值需要时钟周期的总数目来输出,该时钟周期的总数目与输入与步幅大小的比率成比例。例如,在所考虑的示例中,应用池化算子pf的总计算时延为c 3=9个时钟周期,这有助于降低计算成本。
[0117]
实质上,在时间c和时间c 1之间,条带缓冲器b2中的至少一个元素被替换。具体地,元素a被替换为元素g。类似地,在时间c 1和时间c 2之间,元素b被替换为条带缓冲器b2中的元素h。因此,元素c被替换为条带缓冲器b2中的元素i。
[0118]
因此,在朴素实现至少存在使用输入的重复评估的缺点的同时,条带化实现至少存在针对输入值使用临时存储的缺点。
[0119]
条带化实现的其他缺点可以是:
[0120]
使用一定量的临时存储器(例如,ram)来托管与输入的宽度成比例的临时缓冲器b2;以及
[0121]
在部分池化区的情况下,即,在池化窗口大小和输入数据大小之间不是倍数的情况下(具有可选的非零填补),条带的状态取决于池化区的步幅、填补和大小,导致要处理若干“特殊”情况,导致“容易故障”实现。
[0122]
图4c中示出了涉及条带缓冲器中的部分池化区场景的配置的一些示例,其中示例性条带缓冲器b2'被视为行的循环缓冲器以避免复制。
[0123]
如所提及的,在应用池化数据处理中可能出现问题,例如当在图像的边缘处执行应用时处理图像数据时,其中可能留下数据的部分条带。
[0124]
如图4c的部分a)所示,在第一示例性情况下,输入大小和步幅大小可能缺少共同的被除数/倍数。例如,这种情况可以是以下情况:
[0125]
输入大小l可以具有第一输入值,例如,l=8;
[0126]
池大小可以具有第一池大小值,例如,c=3;以及
[0127]
步幅大小可以具有第一步幅大小,例如,s=3。
[0128]
在图4c的部分a)所示的第一示例中,在将(条带化)池化处理sf(具有池大小3和步幅大小3)应用于输入数据xin(具有输入大小8)时要计算的最后的池化区域被部分填充有数据,因为输入数据大小与池大小的比率不是整数,例如,8mod3=2。在这样的示例性场景中,步幅缓冲器b2将仅部分存储“有效”数据,并且在应用池化sf、pf时,在将输出值xout计算作为有效值与无效值的总和时可能会出现问题。
[0129]
如图4c的部分b)所示,在第二示例性情况下,步幅大小可以小于池大小;例如,这种情况可以是以下情况:
[0130]
输入大小l可以具有第二输入值,例如,l=6;
[0131]
池大小可以具有相同的池大小值,例如,c=3;以及
[0132]
步幅大小可以具有第二步幅大小,例如,s=2。
[0133]
在图4c的部分b)所示的这样的第二示例中,当执行将池化sf、pf应用于第一池化区域时,步幅缓冲器b2'可以具有部分填充区域,该部分填充区域包括无效值,该无效值可以位于步幅缓冲器b2

的任何部分中,例如,到步幅缓冲器b2

的第一元素b2

(1),例如,b2

(1)等于先前写入的值或明显错误的值,诸如b2

(1)=nan。
[0134]
如图4c的部分c)所示,在第三示例性情况下,步幅大小可以远小于池大小;例如,这种情况可以是以下情况:
[0135]
输入大小l可以具有第二输入值,例如,l=7;
[0136]
池大小可以具有相同的池大小值,例如,c=5;以及
[0137]
步幅大小可以具有第二步幅大小,例如,s=3。
[0138]
在图4c的部分b)所示的这样的第二示例中,最后的池化区域可以在中间开始被填充并且可以环绕在缓冲器中,但是缓冲器b2'的中间元素b2'(j)仍然可以包括由于部分填充而引起的无效数据。
[0139]
条带化池化sf可以使用特定软件代码部分来使用特定代码以处理这些“特殊情况”中的每个,提供具有昂贵维护成本的计算机程序产品。
[0140]
总之,前面所讨论的存储器分配方法存在以下中任一的缺点:
[0141]
当池化区域重叠时重复计算,增加了时延并且效率低下;或者
[0142]
使用条带(包含若干行的缓冲器)来高速缓存结果,存在根据缓冲器内容来管理不同边缘情况的问题。
[0143]
一个或多个实施例可以基于以下观察:当可以在输入数据元素xin和输出数据元素xout之间建立关系时可以改进池化操作,找到受给定输入值元素影响的输出元素,促进获取对输入数据xin和“活动”输出元素(例如,输出数组索引或坐标)而不是活动输入元素(例如,输入数组索引或坐标)的条带的单个访问。
[0144]
一个或多个实施例可以包括提供输出缓冲器b3,输出缓冲器b3具有大小do,该大小do可以根据池化算子vf的参数c、s来“离线”或“先验地”计算。因此,如所提及的,池化算子vf仅计算推断输出区域中的值。
[0145]
在一个或多个实施例中,输出缓冲器大小do可以以从不同选项中可选择的方式计算,例如经由执行包括处理池化参数的输出形状推断处理。
[0146]
例如,这样的可选择的不同选项可以包括:
[0147]
第一输出缓冲器大小d
of
,其可以通过执行某种“地板策略(floor strategy)”来计算,其可以表示为:
[0148][0149]
其中
[0150]
c:池化窗口大小,
[0151]
s:步幅大小,
[0152]
p
left
=左边缘上的填补大小,
[0153]
p
right
=右边缘上的填补大小,以及
[0154]di
=输入数组长度大小。
[0155]
第二输出缓冲器大小d
oc
,其可以使用某种“天花板近似(ceiling approximation)”来计算,其可以特别适合于非零填补大小并且可以表示为:
[0156][0157]
第三输出缓冲器大小d
op
,其可以在不考虑填补并且填补大小为零时计算,其可以表示为:
[0158][0159]
具体地,发明人已经观察到,由多个(重叠)池化区域共享的值与每个池化区域的值组合。
[0160]
任何第j输入元素xin(j)有助于计算某些第i输出元素xout(i)的值。受落入池化窗口内的输入“影响”的第i元素xout(i)的这样的索引可以在操作池化之前计算(因为它们的值是池化区域)并且输入值在每个计算周期中被“重用”或“折叠”。
[0161]
这种解决方案有助于减少输入加载操作,例如最多只访问一次,提供流式处理模式。
[0162]
如图5所示,应用这种执行条带化池化实现的“反向”池化算子vf的方法50可以包括:
[0163]
如图5的部分a)所示,将池化窗口pw应用于后续窗口pw1、pw2、pw3、pw4中的输入数据xin,其中每个窗口与后续窗口以等于步幅大小s的索引-元素距离(例如,一个元素的距离)分开;
[0164]
相应的数据窗口被“扫描”,其中第一窗口pw1中包括的值被同时累加在条带临时缓冲器b3的后续索引存储器部分b3(i)中,如图5的部分b)至e)所示,其示出了存储在被配置为存储四个元素b3(1)、b3(2)、b3(3)、b3(4)的输出缓冲器b3中的值的可能的时间图;以及
[0165]
每当属于相应的池化窗口pw1、pw2、pw3、pw4的数据已经在输出缓冲器b3中被累加,例如在可选的终结之后完全被累加时,提供输出信号xout(i),在发生数据加载的同时计算池化算子,如图5的部分b)至e)所示以及如以下所讨论的。
[0166]
具体地,在图5的部分b)至e)所示的所考虑的示例中,例如:
[0167]
在第一时钟周期期间,第一池化窗口pw1内的输入数据xin的第一元素的第一值a可以被加载到输出缓冲器b3的第一元素b3(1);
[0168]
在后续的第二时钟周期中,第一池化窗口pw1内的输入数据xin的第二元素b可以被累加在第一元素b3(1)中,即,被加到存储在第一元素b3(1)中的第一值a,并且被加载到输出缓冲器b3的第二元素b3(2);
[0169]
在后续的第三时钟周期中,第一池化窗口pw1内的输入数据xin的第三元素c可以同时被累加在第一元素b3(1)中,被累加在第二元素b3(2)中,并且被加载到输出缓冲器b3
的第三元素b3(3);
[0170]
在后续的第四时钟周期中,第一池化窗口pw1内的输入数据xin的第四元素d可以同时被累加到第一元素b3(1)、第二元素b3(2)和第三元素b3(3)中,同时被加载到输出缓冲器b3的第四元素b3(4);
[0171]
在后续的第五时钟周期中,第一池化窗口pw1内的输入数据xin的第五元素e可以同时被累加到输出缓冲器b3的第一元素b3(1)、第二元素b3(2)、第三元素b3(3)和第四元素b3(4);以及
[0172]
最后,在第六时钟周期中,第一池化窗口pw1内的输入数据xin的第六元素f可以同时被累加到输出缓冲器b3的第一元素b3(1)、第二元素b3(2)、第三元素b3(3))和第四元素b3(4),第一元素b3(1)被配置为将累加结果作为输出值xout(1)提供给用户电路。
[0173]
如图5的部分c)所示,在第七时钟周期中,作为在输出缓冲器b3(2)的第二元素中正完成的第二池化窗口内的数据累加的结果,第二输出值xout(2)可以被提供。
[0174]
如图5的部分d)所示,在第八时钟周期中,作为在输出缓冲器b3(3)的第三元素中正完成的第二池化窗口内的数据累加的结果,第三输出值xout(3)可以被提供。
[0175]
如图5的部分e)所示,在第九时钟周期中,作为在输出缓冲器b3(4)的第四元素中正完成的第二池化窗口内的数据累加的结果,第四输出值xout(4)可以被提供。
[0176]
应注意,前面所讨论的示例纯粹是示例性的,而决不是限制性的。如所提及的,所使用的数值仅仅是为了简单起见,否则应理解,在一个或多个实施例中可以使用任何池窗口大小、步幅大小和输入/输出大小。
[0177]
如所提及的,通常池化算子与加法算子共享组合属性,因为它们是可交换的并且具有吸收元素:如果元素与吸收元素组合,则该元素不会改变。
[0178]
在图6所示的一个或多个实施例中,执行池化处理vf的方法50可以包括:
[0179]
提供输入数据xin,该输入数据xin包括具有输入大小的至少一个数组xin;
[0180]
提供池化算子pf,该池化算子pf具有吸收元素值oi和池化参数c、s、p的集合,该池化参数的集合包括池化窗口大小、池化步幅大小和池化填补大小,例如从已知池化算子中选择的池化算子,诸如最大池化、平均池化和线性池化;
[0181]
根据所述池化参数c、s、p的集合计算500输出缓冲器b3的缓冲器大小d
oc
、d
of
、d
op
,例如,作为执行输出形状推断处理的结果,如前面所讨论的;
[0182]
配置和初始化502至少一个输出缓冲器b3,该至少一个输出缓冲器b3具有经计算的缓冲器大小d
oc
、d
of
、d
op
的,输出缓冲器b3具有作为到经计算的缓冲器大小的函数的多个缓冲器元素b3(1)、b3(2)、b3(3)、b3(4);以及
[0183]
初始化502输出缓冲器b3的缓冲器元素b3(1)、b3(2)、b3(3)、b3(4)以具有所选择的池化算子pf的吸收元素oi的值。
[0184]
例如:
[0185]
当“最大”池化算子pf被采用在执行反向池化vf中时,吸收元素可以具有相应的值,例如,oi=-∞,并且可以不执行归一化;以及
[0186]
当“平均”池化算子pf被采用在执行反向池化vf中时,吸收元素可以具有相应的值,例如,oi=0,并且归一化可以包括将输出xout除以填补窗口的输入大小。
[0187]
在一个或多个实施例中,方法50还可以包括:
[0188]
执行池化区域选择504,其可以包括根据池化参数c、s确定影响输出元素x
out
(j)的输入元素x
in
(i)。
[0189]
在一个或多个实施例中,执行区域选择504可以包括计算范围极限值,例如包括起始索引x
start
和终止索引x
end
,其中为了开始和结束第j输出元素索引xo的计算,其中开始和结束元素使用以下表达式来确定:
[0190][0191][0192]
其中xi是输入数组xin的第i元素的索引。
[0193]
在一个或多个实施例中,方法50还可以包括:
[0194]
针对相应的池化窗口pw,应用输出缓冲器b3的相应元素b3(1)、b3(2)、b3(3)、b3(4)与影响它的所有输入的线性组合506;
[0195]
针对输入数组xin的所有元素,迭代执行池化区域选择504,并且重复对输出元素与输入元素进行组合506;
[0196]
可选地508,应用归一化算子g;以及
[0197]
将存储在输出缓冲器b3中的输出结果xout提供510给用户电路。
[0198]
初始化输出的一个或多个实施例有助于将(现有)输出值与输入组合。在应用具有“大”填补大小的池化处理的情况下,例如当填补大小大于窗口大小p》c时,这种操作可以证明是特别有利的。在这种情况下,如所提及的,一些输出值不依赖于输入,并且可以不被使用。
[0199]
在如图9所示的这种场景中,方法50有助于避免在加载落在填补边界处的空区间中的值上浪费计算资源。例如,如果检测到空区间,则可以减少池化处理时间,有助于提高效率。
[0200]
最终的可选归一化有助于提供一种灵活的方法,该方法针对可以在不同应用中使用的任何池化函数可调节。
[0201]
图7至图9包括为执行区域选择504的基础的原理的示例图,根据在反向池化vf中所使用的池化算子pf的池化参数c、s来确定影响输出元素xout(j)的输入元素xin(i)。
[0202]
第j输出索引xo的计算可以包括依次通过输入数组xin的所有经索引的元素并且选择在经计算的区间的范围极限内具有索引的元素,并且执行输入值与其当前输出值的(线性)组合。
[0203]
这样的操作可以表示为:
[0204]
out(xo)=f(in(xi),
°
out(xo))
[0205]
在图7的部分a)所示的第一示例性场景中,池化参数可以没有填补,例如,p=0,并且步幅大小等于池化窗口大小,例如,s=c。结果,应用池化处理pf可以包括对落在非重叠池化区域pw1、pw2内的输入数组xin的元素计算所选择的池化函数(最大值、平均值等)。这样的区间可以表示为:
[0206]
xi∈[xo·
s,
°
(xo 1)
·
s-1]
[0207]
结果,所选择504的池化区域pw1、pw2可以彼此相邻。索引xi处的第i输入元素仅对第j输出元素索引的索引元素值有贡献。例如,该索引可以表示为:其中xi是输入元素索引/坐标,以及xo是输出元素索引/坐标。
[0208]
如图7的部分b)所示,在这样的示例性场景中,在输入大小为di=l=6的假定中,执行反向池化vf可以包括提供502具有相应输出缓冲器大小的输出缓冲器b3,该相应的输出缓冲器大小可以被计算为:
[0209]
在图8的部分a)所示的第二示例性场景中,池化参数可以不同于关于图7的部分a)、b)所讨论的那些,因为步幅大小可以小于池化窗口大小,例如,s《c。结果,应用池化处理pf可以包括重叠区域ow。因此,索引xi处的第i输入元素对索引xo处的第j输出元素的值有贡献,表示为:
[0210]
换言之,输出通过“池大小”元素来“回顾”以找到对它有贡献的输入,但它仅通过针对每个输出的“步幅”元素来前进,如图8的部分b)所示。
[0211]
在图9的部分a)所示的第三示例性场景中,池化参数可以不同于关于图7和图8的部分a)、b)所讨论的那些,因为步幅大小可以大于池化窗口大小,例如,s》c。结果,应用池化处理pf可以包括空区域ew。因此,索引xi处的第i输入元素对索引xo(被表示为:)处的第j输出元素的值有贡献,尽管有时区间可以为空,导致存在“断开连接的”区域。例如,如果则索引xi处的第i输入元素对索引xo处的输出没有贡献。
[0212]
在更一般的情况下,包括非零填补大小,例如,p≠0,左填补p
left
可以对索引xi处的第i输入元素的移位有贡献,而右填补p
right
可以由输出大小确定504来隐式解释,如前面所讨论的。在这样的场景中,区间可以被限制在起始索引(例如,x
start
=0)和结束索引(例如,x
end
=(size-1))。
[0213]
如所提及的,虽然主要关于具有线性数组形状的输入数组进行讨论,但是一个或多个实施例可以适合于处理其他种类的输入数据,例如二维图像数组。
[0214]
图10是二维输入数组s
in
的示例图,该二维输入数组s
in
的元素或像素可以被处理为具有笛卡尔坐标xin、yin的元素矩阵并且其元素可以被指示为xi、yi。因此,反向池化处理vf可以应用于水平和垂直平面中的元素,导致相应的输出值索引xo、yo。
[0215]
图11是为一个或多个实施例的基础的原理的另一示例图,其中可以应用二维反向池化算子vf'来处理输入数组x
in
、y
in
,其中移动池化窗口pw'不同数据可以影响输出sout中的相应的输出值。
[0216]
在图11所示的一个或多个实施例中,作为对图像s
in
应用反向池化处理vf'的结果,输出二维数组sout可以被获取。
[0217]
图12是执行二维反向池化vf'的方法50'的操作示例,包括:
[0218]
提供输入数组s
in
,该输入数组s
in
至少包括具有第一输入大小lx的第一(例如,水
平)坐标数组xin和具有第二输入大小ly的第二(例如,垂直)坐标数组yin;
[0219]
提供池化算子pf,该池化算子pf具有吸收元素值oi和池化参数c、s、p的集合,该池化参数的集合包括池化窗口大小、池化步幅大小和池化填补大小,例如从已知池化算子(诸如最大池化、平均池化和线性池化)中选择的池化算子;以及
[0220]
根据所述池化参数c、s、p的集合来计算500'输出缓冲器b3的缓冲器大小d
oc
、d
of
、d
op
的集合,例如作为执行输出形状推断处理的结果,如前面所讨论的;具体地,针对二维图像,计算缓冲器大小可以包括计算第一缓冲器水平大小和第二缓冲器垂直大小,缓冲器可表示为列向和行向元素的矩阵。
[0221]
在一个或多个实施例中,方法50'还可以包括:
[0222]
提供502具有经计算的缓冲器大小d
oc
、d
of
、d
op
的至少一个输出缓冲器b3,输出缓冲器b3具有作为到经计算的缓冲器大小的函数的多个缓冲器元素b3(i,j);
[0223]
初始化502输出缓冲器b3的缓冲器元素b3(i,j)以具有所选择的池化算子pf的吸收元素oi的值;以及
[0224]
执行池化区域选择504',其可以包括根据池化参数c、s来确定影响输出缓冲器元素b3(i,j)的输入元素索引xin(i)、yin(i)。
[0225]
在一个或多个实施例中,执行区域选择504'可以包括计算范围极限值,即,起始索引x
start
、y
start
的集合和终止索引x
end
、y
end
的集合,被配置为触发索引xo处的第j输出元素值的计算的开始和结束,其中开始和结束索引使用以下表达式来确定:
[0226][0227][0228]
其中xi是第一输入数组xin的第i索引/坐标元素,xi是第二输入数组yin的第i索引/坐标元素。
[0229]
在一个或多个实施例中,方法50还可以包括:
[0230]
针对相应的池化窗口pw,应用输出缓冲器b3的相应元素b3(1)、b3(2)、b3(3)、b3(4)与影响它的所有输入的(线性)组合506

;具体地,这样的组合可以表示为:o(x,y)=f(o(x,y),i(xi,yi));
[0231]
针对输入数组xin的所有元素迭代执行池化区域选择504

,并且重复对506

输出元素与输入元素进行组合;
[0232]
可选地508,应用归一化算子g;以及
[0233]
将存储在输出缓冲器b3中的结果提供510给用户电路。
[0234]
在图13所示的一个或多个实施例中,可以以“流式”模式来应用反向池化处理vf,其中反向池化处理vf可以如在“先到先得”处理逻辑中被“即时”应用于数据。
[0235]
例如,如图13所示,数据可以打包成如下结构:
[0236]
第一“前”行s
l
可以被加到输入的一个第一端,例如底端,并且可以用来存储所选择的池化算子pf的初始化值;
[0237]
第二“前”行su可以被加到与第一端相对的第二端,例如顶端,并且用来存储例如在可选的归一化之后可以被获取的最终(归一化)值;以及
[0238]
输出数组sout的值可以被夹在数据结构的第一端与第二端之间。
[0239]
使用这样的数据结构,可以获取流式数组s0,有助于池化算子的连续计算。
[0240]
例如,一旦对底行s
l
执行初始化,可以在中间行上计算池化,该计算使用如前面讨论的针对输出缓冲器b3的大小,该大小可以使用池区间来推断。在所考虑的示例中,可以使用顶行su来执行和存储可选的最终归一化。
[0241]
因此,一个或多个实施例可以有助于获取烧制前行为(burning front behavior),其中输入sin从顶部到底部被逐进地消耗。
[0242]
在一个或多个实施例中,进一步的附加/可选操作(例如,非线性、量化)可以与归一化步骤合并,提高效率。
[0243]
在一个或多个实施例中,归一化值可以被存储在第二输出缓冲器或条带中以处理流水线操作,例如后续卷积层,有助于节省存储器。
[0244]
在一个或多个实施例中,范围极限值可以包括将条带s
l
的索引/坐标值初始化为值k,例如,x=k。
[0245]
例如,在一个或多个实施例中,虽然x满足给定条件,例如x《s,但它可以是递增的并且经计算的区间极限值x
start
、x
end
(参见例如图10)。例如,这样的区间极限值可以有利地被计算为其中对输出有贡献的值仅在将xi递增s次之后才可以改变值。
[0246]
一个或多个实施例可以有助于使用递增、比较和复位阶段的快速实现。
[0247]
针对在[x
start
,x
end
]中的每个值,可以生成其存储器访问位置索引和经计算的输出,通过再次递增值来迭代计算,直到设置条件被满足。
[0248]
一个或多个实施例可以涉及对应硬件实现,其中:
[0249]
检查x满足给定条件(例如,x《s)的操作可以包括提供被配置为存储阈值的寄存器并且在x的值和所存储的阈值之间执行(快速)比较;
[0250]
迭代计算可以包括提供简单的寄存器复位;以及
[0251]
存储器访问可以通过dma组件将坐标转换为存储器地址来解决。
[0252]
有利地,一个或多个实施例可以呈现与使用朴素方法而发现的存储器消耗足迹相当的存储器消耗,特别是当使用如图13所示的流水线处理时,其中输出被即时更新。
[0253]
一个或多个实施例可以具有与条带化方法相当的效率,特别是当步幅大小s小于池大小c时。
[0254]
下面的表i总结了指示应用如本文中所讨论的计算机实现的方法可以提供的有利性能的实验结果。具体地,使用以下参数来执行实验:
[0255]
零填补大小,p=0;
[0256]
固定的池化窗口大小c=5;
[0257]
变化的步幅大小s=5或s=2;以及
[0258]
输入图像s
in
具有大小lx=25和ly=25。
[0259]
在所考虑的实验中,池化是在conv2d层之后使用3
×
3滤波器、8个输入和8个输出通道和填补=1来执行。
[0260]
如表i所示,使用如本文中所示的方法相对于朴素池化pf可以降低复杂度,并且相
对于条带化池化sf可以降低存储器消耗。
[0261]
表i:实验总结
[0262]
步幅 没有合并朴素条带反向改进s=5macc3606253606253606253606250% 存储器5200200120020083%s=2macc364225243782536422536422585% 存储器635213522352135243%
[0263]
一个或多个实施例可以适用于也被用来改进执行卷积运算。
[0264]
应用卷积算子cf可以被看作为应用加权形式的池化。
[0265]
具体地,没有部分池化区域的平均池化是卷积,其中权重都具有与窗口大小值成反比的相同值,例如,权重w0=w1=w2=1/c。
[0266]
例如,具有步幅=1的转置卷积可以等效于卷积,其中它通过利用过滤器对输入进行加权并且将其累加在输出中来实现。
[0267]
在一个或多个实施例中,使用方法50来应用如图14所示的卷积算子cf可以包括将输入值xi乘以相应的(滤波器)权重系数ω2、ω1、ω0。
[0268]
如本文中所示的,应用卷积算子cf可以包括:
[0269]
使用可以如以下所表示的相对输出索引xr(例如,以相反的顺序)来访问权重系数ω2、ω1、ω0:
[0270]
xr=x
o-x
start
[0271]
其中
[0272]
xo是第j输出元素的索引,以及
[0273]
x
start
是所考虑的输入元素的索引。
[0274]
如果索引xo处的第j输出元素在有效输出索引的区间之外,则可以丢弃经计算的相对输出索引xr。
[0275]
在步幅大小s》1的情况下,相对输出索引可以表示为:
[0276]
xr=s
·
(x
o-x
start
) xomods在一个或多个实施例中,可以使用多个相对输出索引,例如第一相对输出索引xr和第二相对输出索引yr可以被计算并且用来访问对应的(二维)滤波器系数。
[0277]
例如,如图15和16所示,应用与池化窗口大小c=3相对应的具有权重ω2、ω1、ω0的滤波器w(例如,w=(ω0,ω1,ω2)=(1,2,3))的卷积,滤波器w将与输入向量x
in
(例如,x
in
=(x
in
[0],x
in
[1],x
in
[2],x
in
[3],x
in
[4]=(1,1,-1,-1,1))卷积,卷积应用涉及步幅大小s=1。
[0278]
如图15和图16所示,对xin、w执行卷积可能导致输出向量具有三个值,例如,xout=(w
·
x
in
[0∶2],w
·
x
in
[1∶3],w
·
x
in
[2∶4]=(x
out
(0),x
out
(1),x
out
(2))=(0,-4,0)。
[0279]
例如,如图15所示:
[0280]
第一输入值x
in
(0)影响具有索引x
out
(0)的输出,其中第一输入值乘以第一权重值ω0;
[0281]
第二输入值x
in
(1)影响x
out
(0)、x
out
(1),其中第二输入值x
in
(1)在乘以第二权重值ω1时对第一输出值x
out
(0)有贡献,并且在与第一权重ω0相乘时对第二输出值x
out
(1)有贡
献;
[0282]
第三输入值x
in
(2)影响输出元素x
out
(2)、x
out
(1)、x
out
(0),具有对已经计算出的第一输出和第二输出的贡献,因此x
out
(0)现在具有最终值并且可以由缓冲器输出;
[0283]
第四输入x
in
(3)可以影响索引x
out
(1)、x
out
(2)、x
out
(3),但输出具有大小c=3,因此只有x
out
(1)、x
out
(2)受到影响,而x
out
(3)被丢弃;只对x
out
(1)和x
out
(2)分别存在贡献,因此x
out
(1)具有最终值;以及
[0284]
第五输入x
in
(4)仅影响x
out
(2),给出针对x
out
(2)的最终输出值。
[0285]
在一个或多个实施例中,滤波器系数w中的阶数的反转可以有助于加速计算,因为要访问的更低输出索引是最早的索引,并且因此针对该索引,经滤波的输出的计算被完成得更快。
[0286]
如图16所示的,应用这种执行条带化池化实现的“反向”卷积算子cf的方法50可以包括:
[0287]
如图16的部分a)所示,将卷积窗口cw应用于后续窗口cw1、cw2、cw3中的输入数据xin,其中每个窗口与后续窗口以等于步幅大小s的索引-元素距离(例如,距离s=1)分开;
[0288]
相应的数据窗口被“扫描”,其中第一窗口cw1中包括的值被同时累加在临时缓冲器b4的后续经索引的存储器部分b4(i)中,如图16的部分b)至d)所示,其示出了存储在被配置为存储四个元素b4(1)、b4(2)、b4(3)的输出缓冲器b3中的值的可能的时间图;以及
[0289]
每当属于相应的卷积窗口cw1、cw2、cw3、cw4的数据已经在输出缓冲器b4中被累加,例如在可选的终结之后被完全累加时,提供输出信号xout(i),在发生数据加载的同时计算池化算子,如图16的部分b)至d)所示以及如以下所讨论的。
[0290]
具体地,在图16的部分b)至d)所示的所考虑的示例中,例如:
[0291]
在第一时钟周期期间,第一窗口cw1内的输入数据xin的第一元素的第一值xin(0)可以通过乘以第一权重w0被加载到输出缓冲器b4的第一元素b4(1)。
[0292]
在后续的第二时钟周期中,第一窗口cw1内的输入数据xin的第二元素xin(1)可以通过以w2进行加权来被累加在第一元素b4(1)中,即,被加到存储在第一元素b4(1)中的第一值xin(0)w0,并且通过以w1进行加权被加载到输出缓冲器b4的第二元素b4(2);
[0293]
在后续的第三时钟周期中,第一窗口cw1内的输入数据xin的第三元素xin(2)可以同时通过以w2进行加权被累加在第一元素b4(1)中、通过以w1进行加权被累加在第二元素b4(2)中,并且通过以w0进行加权被加载到输出缓冲器b4的第三元素b4(3);
[0294]
在后续的第四时钟周期中,第一窗口cw1内的输入数据xin的第四元素xin(3)可以同时通过以w1进行加权被累加到第二b4(2)中并且通过以w0进行加权被累加到输出缓冲器b4的第三元素b4(3)中;以及
[0295]
在后续的第五时钟周期中,第一窗口cw1内的输入数据xin的第五元素xin(4)可以通过以w2进行加权被累加到输出缓冲器b4的第三元素b4(3)。
[0296]
如图16的部分a)、b)和c)所示,提供卷积的结果可以使用可能减少的时钟周期。
[0297]
再次注意,前面所讨论的示例纯粹是示例性的,而决不是限制性的。如所提及的,所使用的数值仅仅是为了简单起见,否则应当理解,在一个或多个实施例中可以使用任何池化窗口大小、步幅大小和输入/输出大小。
[0298]
如本文中所示,一种计算机实现的方法(例如,50)包括:
[0299]
提供输入数组(例如,sin;xin),该输入数组具有数组大小并且包括具有相应元素索引的有序索引元素(ordered indexed elements)的集合;
[0300]
提供以下中的至少一项:池化算子(例如,pf),该池化算子具有吸收元素值和池化参数(例如,c,s)的集合,该池化参数的集合包括池化窗口大小(例如,c)、池化步幅大小(例如,s)和池化填补大小(例如,p
left
、p
right
)中的至少一个,池化算子(例如,pf、vf;vf

)从池化算子的集合中被选择;以及
[0301]
通过以下将所述池化算子应用于所述输入数组:
[0302]
执行输出形状推断处理,包括根据所述池化参数的集合来计算(例如,500)输出缓冲器(例如,b3)的输出缓冲器大小;
[0303]
提供(例如,502;502

)至少一个输出缓冲器(例如,b3),该至少一个输出缓冲器具有等于经计算的输出缓冲器大小的缓冲器大小,并且向输出缓冲器的缓冲器元素(例如,b3(1),b3(2)、b3(3)、b3(4))分配初始值,初始值等于所选择的池化算子(例如,pf)的所述吸收元素;
[0304]
执行池化区域选择(例如,504),包括根据池化参数来确定影响输出缓冲器(例如,b3,xout)的输出元素的输入数组(例如,xin)的输入元素;
[0305]
针对相应的池化窗口(例如,pw),计算输出缓冲器(例如,b3)的相应元素与影响它的输入元素的组合(例如,506);
[0306]
针对输入数组的所有元素,迭代执行池化区域选择(例如,504)并且计算线性组合(例如,506);以及
[0307]
将存储在输出缓冲器中的经计算的输出结果(例如,xout)提供(例如,510)给用户电路。
[0308]
如本文中所示,所述池化算子的集合包括以下中的至少一项:
[0309]
最大池化算子,其具有趋向于数字表示区间的最小底端的吸收元素;以及
[0310]
平均池化算子,其具有吸收元素oi=0和等于输入数组大小的归一化因子。
[0311]
如本文中所示,该方法包括对存储在输出缓冲器中的所述结果应用(例如,508)归一化算子(例如,g)。
[0312]
如本文中所示,执行区域选择(例如,504)包括计算包括起始索引和终止索引的范围极限值,起始索引和终止索引被配置为开始和结束输出元素值的计算,其中起始索引x
start
和结束索引x
end
表示为:
[0313][0314][0315]
其中xi是输入数组的第i索引。
[0316]
如本文中所示,执行输出形状推断处理包括根据所述池化参数的集合来计算(例如,500)输出缓冲器的输出缓冲器大小,其中所述计算在以下中的至少一项中是可选择的:
[0317]
第一输出缓冲器大小d
of
,其表示为:
[0318][0319]
第二输出缓冲器大小d
oc
,其表示为:
[0320][0321]
第三输出缓冲器大小d
op
,其表示为:
[0322][0323]
如本文中所示,提供池化算子包括:
[0324]
对所述输入数组应用人工神经网络处理,人工神经网络包括池化或卷积数据处理层中的至少一项。
[0325]
如本文中所示,一种微控制器系统包括:
[0326]
存储器电路块,包括被配置为被分配或解除分配给主数据缓冲器的存储器部分;以及
[0327]
至少一个处理电路,耦合到所述存储器电路块并且被配置为执行计算机实现的方法的操作。
[0328]
如本文中所示,一种计算机程序产品包括软件代码部分,该软件代码部分当在至少一个处理电路中被执行时将这样的至少一个处理电路配置为执行计算机实现的方法(例如,50)的操作。
[0329]
应另外理解,在伴随本说明书的附图所示的各种个体实现选项不一定旨在被采用在附图所示的相同组合中。因此,一个或多个实施例可以个体地和/或以相对于附图所示的组合的不同组合来采用这些(否则非强制性的)选项。
[0330]
在不损害根本原理的情况下,在不脱离保护范围的情况下,细节和实施例可以关于仅以示例的方式而描述的内容来变化,甚至显著变化。保护范围由所附权利要求定义。
[0331]
下面示例性参考附图总结了各个示例实施例。在实施例中,一种计算机实现的方法(50)包括:提供输入数组(sin;xin),该输入数组具有数组大小并且包括具有相应元素索引的有序索引元素的集合;提供以下中的至少一项:池化算子(pf),该池化算子具有吸收元素值和池化参数(c,s)的集合,该池化算子包括池化窗口大小(c)、池化步幅大小(s)和池化填补大小(p
left
,p
right
)中的至少一个,池化算子(pf,vf;vf

)从池化算子的集合中被选择;通过以下将所述池化算子(pf,vf;vf')应用于所述输入数组(sin;xin):执行输出形状推理处理,包括根据所述池化参数(c,s)的集合来计算(500)输出缓冲器(b3)的输出缓冲器大小;提供(502;502

)至少一个输出缓冲器(b3),该至少一个输出缓冲器具有等于经计算的输出缓冲器大小的缓冲器大小,并且为输出缓冲器(b3)的缓冲器元素(b3(1),b3(2),b3(3),b3(4))分配初始值,初始值等于所选择的池化算子(pf)的所述吸收元素;执行池化区域选择(504),包括根据池化参数(c,s)来确定输入数组(xin)的哪些输入元素影响输出缓冲器(b3,xout)的哪些输出元素;针对相应的池化窗口(pw),计算输出缓冲器(b3)的相应元素与影响它的输入元素的组合(506);针对输入数组(xin)的所有元素,迭代执行池化区域选择(504)并且计算线性组合(506);以及将存储在输出缓冲器(b3)中的经计算的输出结果
(xout)提供(510)给用户电路。
[0332]
在实施例中,池化算子的集合包括以下中的至少一项:最大池化算子,其具有趋向于数值表示区间的最小底端的吸收元素;以及平均池化算子,其具有吸收元素oi=0和等于输入数组大小的归一化因子。在实施例中,方法包括对存储在输出缓冲器(b3)中的所述结果(xout)应用(508)归一化算子(g)。在实施例中,执行区域选择(504)包括计算包括起始索引和终止索引的范围极限值,起始索引和终止索引被配置为开始和结束输出索引值的计算,其中起始索引x
start
和结束索引x
end
表示为:
[0333][0334][0335]
其中xi是输入数组(xin,sin)的第i索引。
[0336]
在实施例中,执行输出形状推断处理包括根据所述池化参数(c,s)的集合来计算(500)输出缓冲器(b3)的输出缓冲器大小,其中所述计算(500)在以下中的至少一项中是可选择的:
[0337]
第一输出缓冲器大小d
of
,其表示为:
[0338][0339]
第二输出缓冲器大小d
oc
,其表示为:
[0340][0341]
或者,在填补大小为零时的第三输出缓冲器大小d
op
,其表示为:
[0342][0343]
在实施例中,提供池化算子包括:对所述输入数组应用人工神经网络处理,人工神经网络包括池化数据处理层和/或卷积数据处理层中的至少一项。
[0344]
在实施例中,一种微控制器系统包括:存储器电路块,包括被配置为被分配或解除分配给主数据缓冲器的存储器部分;以及至少一个处理电路,耦合到所述存储器电路块并且被配置为执行根据本文中所公开的方法中的任何方法的计算机实现的方法的操作。在实施例中,一种计算机程序产品包括软件代码部分,该软件代码部分当在至少一个处理电路中被执行时将这样的至少一个处理电路配置为执行本文中所公开的方法中的任何方法的计算机实现的方法(50)的操作。
[0345]
在实施例中,一种方法包括:将池化算子应用于数据的输入数组,池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:根据池化参数的集合,计算输出缓冲器的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数组包括:根据池化参数,将池化窗口的输入数组的元素与输出缓冲器的
输出元素相关联;以及针对输出缓冲器的每个输出元素,对与输出元素相关联的相应的输入元素进行组合。在实施例中,进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。在实施例中,进行组合包括将权重应用于输入元素。
[0346]
在实施例中,输入数组具有数组大小和具有相应元素索引的有序索引元素的集合。在实施例中,池化算子从池化算子的集合中被选择,并且池化算子的集合包括以下中的至少一项:最大池化算子,具有趋向于数字表示区间的最小底端的吸收元素;以及平均池化算子,具有零的吸收元素和等于输入数组大小的归一化因子。在实施例中,池化参数的集合包括池化窗口大小、池化步幅大小和池化填补大小中的至少一项。在实施例中,方法包括将归一化算子应用于数据的输出数组。
[0347]
在实施例中,将输入数组的元素相关联包括计算包括池化窗口的起始索引和终止索引的范围极限值。在实施例中,起始索引x
start
和终止索引x
end
根据以下来确定:
[0348][0349][0350]
其中xi是输入数组的第i索引,p是池化填补大小,c是池化窗口大小,以及s是步幅大小。在实施例中,根据所述池化参数的集合来计算输出缓冲器的大小包括:
[0351]
根据下式选择第一输出缓冲器大小d
of

[0352][0353]
根据下式选择第二输出缓冲器大小d
oc

[0354]
或者
[0355]
在填补大小为零时根据下式选择第三输出缓冲器大小d
op

[0356][0357]
其中c是池化窗口大小,s是步幅大小,p
left
是左边缘上的填补大小,p
right
是右边缘上的填补大小,di是输入数组长度-大小。在实施例中,方法包括:将人工神经网络处理应用于所述输入数组,池化算子被应用在池化数据处理层或卷积数据处理层中。
[0358]
在实施例中,一种微控制器系统包括:存储器;以及耦合到存储器的处理电路装置,其中处理电路装置在操作中将池化算子应用于数据的输入数组,池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:将存储器的部分分配给输出缓冲器,输出缓冲器具有为池化参数的集合的函数的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数组包括:根据池化参数,将池化窗口的输入数组的元素与输出缓冲器的输出元素相关联;以及针对输出缓冲器的每个输出元
素,对与输出元素相关联的相应的输入元素进行组合。在实施例中,进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。在实施例中,进行组合包括将权重应用于输入元素。
[0359]
在实施例中,微控制器系统包括接口,被配置为将微控制器系统耦合到其他处理单元或致动设备。在实施例中,微控制器系统包括总线系统,耦合处理电路装置和存储器以在处理电路装置与存储器之间交换数据。在实施例中,输入数组具有数组大小和具有相应元素索引的有序索引元素的集合。在实施例中,池化算子从池化算子的集合中被选择,并且池化算子的集合包括以下中的至少一项:最大池化算子,具有趋向于数字表示区间的最小底端的吸收元素;以及平均池化算子,具有零的吸收元素和等于输入数组大小的归一化因子。在实施例中,微控制器系统包括池化参数的集合,该池化参数的集合包括池化窗口大小、池化步幅大小和池化填补大小中的至少一项。在实施例中,微控制器系统包括将归一化算子应用于数据的输出数组。
[0360]
在实施例中,将输入数组的元素相关联包括计算包括池化窗口的起始索引和终止索引的范围极限值。在实施例中,起始索引x
start
和终止索引x
end
根据以下来确定:
[0361][0362][0363]
其中xi是输入数组的第i索引,p是池化填补大小,c是池化窗口大小,以及s是步幅大小。在实施例中,根据池化参数的集合来计算输出缓冲器的大小包括:
[0364]
根据下式选择第一输出缓冲器大小d
of

[0365][0366]
根据下式选择第二输出缓冲器大小d
oc

[0367]
或者
[0368]
在填补大小为零时根据下式选择第三输出缓冲器大小d
op

[0369][0370]
其中c是池化窗口大小,s是步幅大小,p
left
是左边缘上的填补大小,p
right
是右边缘上的填补大小,di是输入数组长度-大小。
[0371]
在实施例中,一种非暂时性计算机可读存储介质的存储内容配置计算系统以实现方法,该方法包括:将池化算子应用于数据的输入数组,池化算子具有吸收元素值和池化参数的集合,将池化算子应用于数据的输入数组包括:根据池化参数的集合,计算输出缓冲器的大小;将输出缓冲器的元素初始化为池化算子的吸收元素的值;以及生成存储在输出缓冲器中的数据的输出数组,针对与相应的池化窗口相关联的多次迭代,生成数据的输出数
组包括:根据池化参数,将输入数组的元素与输出缓冲器的输出元素相关联;以及针对输出缓冲器的每个输出元素,对与输出元素相关联的相应的输入元素进行组合。在实施例中,进行组合包括:确定输出缓冲器的相应元素与输入元素的组合,该输入元素与输出元素相关联。在实施例中,进行组合包括将权重应用于输入元素。在实施例中,输入数组包括数组大小和具有相应元素索引的有序索引元素的集合。在实施例中,池化算子从池化算子的集合被选择,并且池化算子的集合包括以下中的至少一项:最大池化算子,具有趋向于数字表示区间的最小底端的吸收元素;以及平均池化算子,具有吸收元素和等于输入数组大小的归一化因子。在实施例中,池化参数的集合包括池化窗口大小、池化步幅大小和池化填补大小中的至少一项。在实施例中,内容包括在由计算系统执行时使计算系统执行方法的指令。
[0372]
可以组合上述各种实施例以提供另外的实施例。如果需要采用各种专利、申请和出版物的概念来提供另外的实施例,则可以修改实施例的各方面。
[0373]
根据以上详细描述,可以对实施例进行这些和其他改变。一般而言,在以下权利要求中,所使用的术语不应当被解释为将权利要求限于说明书和权利要求中公开的特定实施例,而应当被解释为包括所有可能的实施例以及这样的权利要求有权享有的等效物的全部范围。因此,权利要求不受本公开的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献