存在用于对像素进行分类的各种方法。一种类型的分类需要计算像素具有特定特征或属于特定类的统计概率。在一些分类系统中,像素数据被“走查”通过决策树的各决策节点,直到处理操作在叶节点处完结。用于对像素进行分类的输出与叶节点相关联。典型的决策树系统具有浅管线,并且在其对操作停滞、存储器争用和长等待时间事件的处理中是次优的。
概述
提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。此外,所要求保护的主题不限于解决在本公开的任一部分中所提及的任何或所有缺点的实现。
公开了涉及处理图像像素的各实施例。例如,一个公开的实施例提供一种用于对像素进行分类的系统,该系统包括:检索逻辑;像素存储分配,该像素存储分配包括多个像素槽,每一像素槽分别与一像素相关联,其中检索逻辑被配置成使得各像素按输入顺序被分配到像素槽中;管线化处理逻辑,该管线化处理逻辑被配置成针对这些像素中的每一者,输出与该像素相关联的分类信息;以及调度逻辑,该调度逻辑被配置成控制从像素槽到管线化处理逻辑的分派,其中调度逻辑和管线化处理逻辑被配置成协同行动以按输出顺序生成这些像素的分类信息,使得比较早像素更晚分配到其像素槽中的较晚像素被分配到其像素槽中,输出顺序与输入顺序不同于并独立于输入顺序,管线化处理逻辑使较晚像素的分类信息相比于较早像素的分类信息被更快地生成。
附图简述
图1示出根据本公开的一实现的示例性有向图结构。
图2示意性地示出根据本公开的一实现的用于对像素进行分类的示例性系统。
图3示出解说根据本公开的一实现的可用于对像素进行分类的示例性方法的流程图。
图4示意性地示出根据本公开的一实现的示例像素槽。
图5示意性地示出根据本公开的一实现的深度图。
图6示出根据本公开的一实现的像素分类系统。
图7示出根据本公开的一实现的计算系统的框图。
详细描述
该描述涉及用于使用管线化处理逻辑来使各像素走查通过有向图结构的新颖的系统和方法。有向图结构被遍历,以便生成这些像素的分类信息。分类信息可包括例如像素是否具有特定特征或属于特定类。在一些情况下,这是根据像素具有该特征或属于该类的概率来指定的。
在一些实施例中,有向图结构处理深度图以便对像素进行分类。检索逻辑将各像素分配到包括多个像素槽的像素存储分配中。像素槽存储关于像素的各种信息,例如与像素相关联的数据的地址、标识像素的XY屏幕坐标或其他索引、正被处理的图节点的标识、有向图处理操作的结果等等。各像素是按输入顺序被逐像素地分配到像素槽中的。例如,来自一扫描行的像素可被串行地一个接一个地放置到可用像素槽中。如以下将更详细描述的,当像素在飞行中通过有向图结构时,像素槽充当该像素的“主基地(home base)”。一旦像素被分类,其槽就被解除分配并且被释放以供由检索逻辑取得的另一输入像素使用。
调度逻辑在功能上被插入在像素槽和管线化处理逻辑之间。调度逻辑控制从像素槽到管线化处理逻辑的执行机制的操作分派。管线化处理逻辑用于使每一像素走查通过有向图结构。像素槽用作与像素相关联的信息的主基地/临时存储位置,并且随着管线化处理逻辑使得该像素向前前进通过该有向图结构,该信息可被改变、更新等。如本文中所使用的,“向前前进”描述像素朝向叶节点越来越深地走查通过有向图结构。如以下将更详细地讨论的,向前前进可断断续续地行进(例如可发生要花时间来解决的停滞或其他长等待时间事件),使得当各像素向下移动通过并更深入有向图结构时,在飞行中这些像素可越过(leapfrog)彼此。该用于无序、独立向前前进的能力可提供许多优点,并允许该系统最大地利用可用处理资源,减少等待时间和争用,并确保执行机制不会闲置。
调度逻辑和管线化处理逻辑彼此协同行动以实现对这些像素的机器级并行和无序处理。在一些示例中,这使得分类信息按输出顺序产生,该输出顺序不同于并独立于用于经分类的像素被分配到其相关联的像素槽中的输入顺序。在一个场景中,如以上所提到的,这可使得像素操作越过彼此,从而准许像素的无序分类输出。例如,“较晚”像素的分类信息相比于“较早”像素的分配信息可被更快地生成。“较早”和“较晚”指代这些像素被分配到其在像素存储分配中的相关联的像素槽中的次序。即,“较早”像素是先被分配到像素存储分配中的像素。更一般地,调度逻辑和管线化处理逻辑的具体配置可准许像素独立地向前前进通过有向图结构,而不管较晚像素是否最终在有向图结构的输出处越过较早像素。
在一个设置中,有向图结构处理要被分类的像素的深度信息(例如,系统的输入是深度图)。处于该设置的分类信息可指定该像素是否与由深度相机捕捉的场景中的特定对象相关联。在一些示例中,分类信息是经处理的像素属于特定类(例如,其对应于特定对象)的概率。具体地,本文中描述的创新可结合身体部位(例如在手跟踪应用中)实现以确定像素是否对应于手指、手腕、前臂等。
现转至附图,图1描绘了示例性有向图结构100。如所描绘的,有向图结构可包括多个决策树102。个体决策树的示例在图2中的102a处被示出。决策树102a包括决策节点104和叶节点106。每一决策节点处的操作的输出是关于要跟随哪个分支的二元左或右决策。相对于从其分叉出的节点,目标节点可被称为子节点。
叶节点输出被用来生成像素的最终分类信息的信息。在典型实现中,为像素遍历多个决策树,并且来自个体树的叶节点输出被用于计算最终分类输出。取像素是否对应于用户的腕部的示例上下文,每一叶节点输出可指定一百分比概率,并且从各个体树输出的概率被求平均以生成最终概率(例如,有90%的概率该像素对应于用户的腕部)。
根据本描述,可使用各种各样的有向图结构实现。在图1的特定示例中,有向图结构100包括多个决策树102。被研究的像素经由调度逻辑和管线化处理逻辑的操作被走查通过每一决策树102。对于经完全处理的像素(在一些情况下,像素将在早期退出该结构),最终分类信息是响应于该像素流经最终叶节点106a而被生成的。
有向图结构100可被实现为使各像素移动通过特定的预定义子结构(例如,决策树)序列。该附图中的树到树箭头指示这样的布置,在该布置中,在像素被走查通过给定树102后,该像素随后被发送到指定的后续下游树。在其他实现中,树到树的流动可以是动态的,使得例如一个树可取决于运行时条件动态地链接到不同的后续下游树。
同样,如所指示的,有向图结构可包括多个阶段,并且来自一个阶段的输出提供另一阶段的输入。多阶段布置可例如提供临时操作边界,在该临时操作边界期间,其他处理操作可在移动到下一阶段之前被执行。将领会,任何数目的树可按预定或动态顺序并在具有任何期望数目的树的一个或多个阶段中被实现。此外,有向树结构作为整体以及其子结构可以是循环或非循环的。此外,所描述的系统和方法也可结合具有两个以上分支的决策树来实现。
现在参考图2,该图示意性地描绘了用于对像素进行分类的示例性系统200。在其他元素中,系统200包括:一个或多个像素走查器202形式的检索逻辑;包括像素槽206a、206b和206c的像素存储分配204;管线化处理逻辑208;在功能上被插入在像素槽和管线化处理逻辑之间的调度逻辑210;以及,数据保持子系统212。虽然像素存储分配被示为不同于数据保持子系统,但其像素槽确实保持数据,使得像素存储分配及其像素槽可与数据保持子系统212中的数据同时驻留在各存储设备/位置中。
检索逻辑通过向像素槽提供与要分类的像素相关联的数据来将像素分配到像素槽中。再一次,每一槽单独与其分类正待处理的像素相关联。在所描绘的示例中,检索逻辑是从深度图检索数据的一个或多个像素走查器202。
在本示例中,通过以下方式来为各个体像素顺序地分配槽:将每一像素的XY屏幕值216馈送到像素槽中。这些像素槽被串行地填充/分配,例如按这些像素槽被从深度图中扫描出的次序,例如在深度图的特定行中从左向右移动的次序。再一次,“较早像素”是在其他像素(其被称为“较晚像素”)之前被分配到其槽中的像素。换言之,除了深度图中的第一个像素和最后一个像素以外,任何给定像素都将相对于一些像素“更早”,并且相对于其他像素“更晚”。如以下将更详细描述的,处理逻辑208可被深度管线化,并且系统可实现调度制度,该调度制度:(i)减少停滞和等待时间;(ii)高效地利用可用执行机制来避免有资源闲置;(iii)无序地计算结果——例如,较晚像素的分类相比于较早像素的分类可被更快地生成——以最大化性能和吞吐量;(iv)最小化存储器争用的影响;(v)允许各像素独立地向前前进通过有向图结构;(vi)等等。
管线化处理逻辑208可包括一个或多个处理管线222,每一处理管线具有一个或多个处理阶段224。可采用具有任何可行数目的阶段的任何可行数目的管线。此外,可采用任何数目的像素槽。在一个非限制性示例中,发明人已通过使用12个像素槽(即12个待处理像素可在飞行中通过有向图结构)以及3个具有至少一些冗余执行机制(例如,地址计算器、负载存储单元等)的多阶段处理管线来达到合需的考虑平衡。但再一次,可采用任何数目的槽、管线和管线阶段。
现转至数据保持子系统212,它可包括描述有向图节点(例如,决策树)的各方面的节点描述符230。这样的描述符可指定要在某节点处执行的特定操作、决策所需的数据输入的类型等等。
数据保持子系统212通信将还包括像素数据232。这可包括正被分类的各像素的任何相关数据。示例包括:(i)例如来自深度图的XY屏幕坐标以及可能来自深度图的传感器数据;(ii)与该像素相关联的数据的地址;(iii)来自决策树操作的计算结果;(iv)初步分类信息,例如来自非最终决策树的叶节点的概率输出;(v)等等。在该数据可驻留在当像素在飞行中通过有向图结构时向该像素分配的临时主基地(槽)中或者与该临时主基地相关联的意义上说,该数据的部分或全部也可与在待处理分类期间向该像素分配的像素槽相关联。数据保持子系统212也存储每一像素的分类信息234,例如来自深度图的像素对应于由深度相机捕捉的场景中的特定身体部位或其他对象/特征的概率。
现参考图3,该图示出管线化处理逻辑208可用于使各像素走查通过有向图结构以对像素进行分类的示例性方法300。将理解,这是非限制性示例实现:一个或多个步骤可被忽略;不同于附图中所暗示的,各步骤可被按顺序执行;一个或多个步骤可被并行地执行;未示出的附加步骤可被采用;等等。在许多情况下,该附图中示出的许多处理将用硬件来执行,但是将领会,软件和/或硬件和软件的组合可被采用。软件操作可例如通过存储在数据保持子系统212中的可执行指令236来执行。
图3构想了具有多个决策树的有向图结构,并示出了所发生的针对通过树节点的处理回合的管线化操作。将领会,该工作流将针对每一经处理的节点反复迭代地发生。一般来说,槽存储用作标识正被处理的特定节点的指针/标识符的标识符/索引。一旦针对那个节点的处理工作流被完成,指针标识符就被更新为指向目标节点(例如,被分支到的子节点)。针对决策节点的处理回合的结果是到下游目标节点(子)的左或右分支。对于非最终叶节点,该处理回合的结果是该像素属于某类的概率,并且随后工作流移动到后续决策树。在最终叶节点的情况下,来自该最终叶节点和所有先前遍历的非最终叶节点的输出被评估以生成最终分类信息。在一个示例中,来自每一叶节点的概率输出被求平均以产生最终概率(例如,该像素对应于用户的指尖之一)。
一般来说,图3中的操作包括对于给定决策树节点,计算所需数据的地址;取得/存储该所需数据;使用所需数据作为输入来执行计算,例如从决策分支向左还是向右转;存储结果;以及更新标识接着要处理哪个节点的指针。
还将结合示出示例像素槽400及其内容的图4来讨论图3。在404,槽包含指定正被处理的当前节点的节点指针。在一个示例中,该指针可指示有向图结构中的阶段、特定树以及该树内的节点,例如{阶段1.树4.节点9}。在302,方法包括对于被分配到像素槽400中的像素(图4),计算并存储与该像素相关联的一个或多个数据片段的地址。在一个示例中,该地址是从由像素走查器馈送到槽400中的、与该像素相关联的XY屏幕坐标(402处示出的坐标)中计算出。不管该方法如何,计算的地址都可在406处被存储在像素槽中。可取得与像素相关联的任何类型的数据。在一个实现类别中,如贯穿本文讨论的,像素深度值可被取得以供在节点计算中使用。
在304,该方法包括取得并存储像素数据。这可包括例如使用在302处计算出的地址来从数据保持系统212中取得相关的像素数据232。在本文中正讨论的特定实现中,被提取的数据是与该像素相关联的深度信息和/或反射率信息。一些信息可通过深度相机的传感器或产生深度/反射率数据的其他感测机制直接或通过中间处理导出。检索出的信息可被存储在像素槽400中,如408处所示出的。
在一些实现中,可存在从处理流的早期退出,如306处所示出的。例如,该系统可具有关于深度相机正扫描的房间的一些知识,在捕捉体中房间的后墙处于特定深度。如果该像素的深度信息接近于后墙的深度,则可假定,该像素不是用户的身体的一部分,从而消除对进一步分类处理的需要。可使用任何数目的评估来确定早期工作流退出。另一示例将是分析运动信息——如果深度信息在特定持续时间内尚未改变,则可假定这种运动的缺乏意味着该像素不是身体部位。在任何情况下,早期退出允许槽400被释放(即被解除分配),由此允许新的像素被分配到该槽中,在该情况下,该槽中的任何存储数据都将被转储清除,或者被允许被盖写。
在该构想示例中,有向图结构中的每一节点都具有存储在数据保持子系统212中的描述符(描述符230)。该描述符可例如描述要在决策节点处执行的操作的类型,诸如边缘决策、运动决策、与相邻像素的深度比较、与一个或多个阈值的比较、对过滤器的应用等等。描述符可指定作出计算所需的运算对象或其他数据的类型和/或位置。无论如何,该描述符将具有可用于检索该描述符的地址(例如,在数据保持子系统212内的地址)。如308处所指示的,该示例方法包括计算并存储节点描述符地址。如410处所指示的(图4),描述符地址可被存储在槽400中。如上所述,在一些实现中,像素槽400包括标识正被处理的当前节点的节点指针402。回过头参考图1,该指针可包括标识当前决策树的索引以及指定树上的特定节点的子索引。可在308在地址计算中使用这些指针/索引。在310,该方法包括检索节点标识符。取得的描述符可被存储在像素槽400中,如412处所示出的。
如果检索到的节点是决策节点,而非叶节点,则处理流移动到步骤312、314、316和318,这些步骤将附加地参考图5来描述。图5示出用户的手H的深度图500;在502该深度图的一部分被扩大。像素504是正被分类的像素。在一个示例中,分类操作需要将该像素的深度值与两个相邻像素(被称为偏移探针)的深度值进行比较,其中“偏移”意味着这些相邻像素在距正被分类的像素的某个距离处。偏移探针在图5中在506和508处被示出。
可使用涉及偏移探针的大范围的实现:任何可行数目的探针可被采样;采样可以是随机的或者通过某个非随机的采样方法来执行;距正被研究的像素的任何距离可被使用;其中多个探针可被使用,偏移距离可从一个探针到另一探针等同或不同。然而,将领会,这些是作为非限制性示例来提供的,并且其他探针方法在本公开的范围内。
继续图3和4,在312,方法300包括计算并存储与偏移探针相关联的数据(例如,深度数据)的地址。计算出的地址在414被存储在槽400中。在314,探针数据在416处被取得并被存储的槽400中。如贯穿全文讨论的,所描述的系统和方法在将正被研究的像素的深度/反射率数据与针对邻近点探针取得的类似数据进行比较的上下文中可被有益地使用。但这是非限制性示例。可考虑与正被研究的像素和/或邻近像素相关联的任何类型的数据。更广泛地,该描述涵盖非常宽范围的左右决策以及用于作出这样的决策的准则/运算对象/输入。所描述的系统的许多方面不知道分支决策的细节,而改为聚焦于:无序处理的实现;存储器争用的缓解;长等待时间影响的缓解;对深管线的利用和对可用处理资源的高效使用;机器级并行性;等等。在任何情况下,在316处发生左右分支决策,其进而导致流到目标节点,目标节点可以是另一决策节点、非最终叶节点或最终叶节点。如318处所示出的,使用{阶段.树.阶段}表述方式或其他合适的索引/标识符将节点指针更新为指向新目标节点。在这时,针对该节点的处理回合完成。针对感兴趣的像素的流程图随后再次针对下一节点开始。通常,每像素仅进行步骤302、304和306一次,使得处理以对下一节点描述符的检索来恢复(步骤308和310)。
如以下将更详细描述的,针对像素的图3的流不必稳定地沿着有向图结构处理/走查通过有向图结构,而没有中断。可发生各种停滞、障碍和长等待时间事件。例如,地址计算在某些情况下可能是慢的/被延迟,请求的数据可花费几个周期来返回,管线可尝试从正被另一像素/槽访问的存储器位置中检索节点。任何数目的事情可发生以中断处理。因此,来自像素槽的操作可被调度逻辑反复“发射”到管线化处理逻辑,并且进行中操作可被认为“撤退”回到该槽。所谓的撤退构成处理的中断,但槽和调度逻辑协同行动以在问题被解决时高效地恢复处理。通常,槽将包括充当占位符/跟踪器的某个机制,该占位符/跟踪器协调重新发射(包括重新发射的定时)—参见图4中的跟踪/调度信息。换言之,调度逻辑控制到管线化处理逻辑的操作分派,并且它与像素槽协同行动以执行该功能—例如,在接收到请求的数据之际重新发射。将领会,长等待时间事件通常与存储器请求相关联。由此,除了经由智能调度获得的效率和性能益处外,长等待时间存储器存取事件也可通过存储器换页并提供多个请求行来稍微缓解——参见图2的240。
在节点是非最终叶节点的情况下,工作流行进到步骤320和322。在320,该方法包括计算/存储概率信息。如先前所指示的,一个示例实现涉及提供概率的每一非最终叶节点。例如,取非最终叶节点A、B和C,假设非最终叶节点A指示有95%概率正被研究的像素对应于用户的前臂;非最终叶节点B指示有98%的概率正被研究的像素对应于用户的前臂;并且非最终叶节点C指示有78%的概率正被研究的像素对应于用户的前臂。在这样的情况下,在到达最终叶节点之际可对三个结果求平均,以便生成正被研究的像素有90.33%的可能是前臂的最终分类输出。在322,节点指针被更新为指向新目标节点,其在该场景中(从非最终叶节点向外流)通常会以该有向图结构中的下一决策树的根决策节点为目标。针对正被研究的像素的处理将随后行进到该下一根节点。如以上所指示的,通常每像素仅进行步骤302、304和306一次,使得后继处理以对下一根节点的检索(步骤308和310)开始。
在节点是最终叶节点的情况下,处理流从310到324。在324,通用处理将生成最终分类输出,例如像素具有特定特征或属于特定类别/类的概率。在本文中描述的实现中,最终输出是该像素对应于用户的身体部位(前臂、腕部、指尖等)的概率。该概率可作为分类信息234被存储在数据保持子系统212中。在这时,该像素已被分类,这允许其像素槽被解除分配(步骤326),这进而允许该槽被填充进另一像素(例如,像素走查器可将新像素的XY坐标馈送到该槽)。在解除分配之前,经由遍历叶节点产生的分类信息可作为分类信息420被存储在槽400中。
如以上所指示的,使像素走查通过有向图结构可时不时地因停滞、障碍、长等待时间事件、存储器争用/冲突等被中断。在这样的情况下,处理流可“撤退”回到主基地像素槽,并且重新发射可比该问题已被解决(例如,请求的数据已返回)晚几个周期发生。像素槽通常具有调度逻辑可访问的某个占位符/跟踪机制,该机制允许调度逻辑智能地控制该像素到管线化处理逻辑的适当机制的重新发射。应当注意,多个处理管线可被采用,并且重新发射可被控制,从而使得坐标被分派到特定管线。特定管线可以是其中发生了该停滞的管线,或者它可以是可提供与发生的停滞相同功能性的在进行中的另一管线。就这一点而言,调度逻辑通常将具有以下某种机制,该机制允许该调度逻辑最大地利用可用执行资源,使得这些资源被最优地使用且不被允许在这些资源能被良好地使用时闲置。
像素槽、调度逻辑和管线化处理逻辑的协作式操作提供多种益处。首先,如别处所述,对较早像素的分类可在较晚像素的分类之前发生(即,输出顺序可不同于用于将各像素分派到槽中的输入顺序)。例如,在假设为像素P0、P1、P2、P3、P4的时间输入顺序的情况下,输入顺序可以为P3,P0,P2,P4,P1。任何次序是可能的,并且最终的输出顺序通常将根据在使各个像素走查通过有向图结构时发生的指定问题(停滞、长等待时间事件的持续时间和数目、存储器冲突等)。理解该动态的另一种方式是这些像素独立地向前前进通过有向图结构。
图6结合像素分类系统600提供保持在像素存储分配602中的三个像素被走查通过有向图结构604的示例,该有向图结构604由管线化处理逻辑606来用硬件实现。像素存储分配602包括像素槽610,在此处被标识为槽1到12。虽然描绘了十二个槽,但可采用任何可行的数目。在该示例中,十二个槽允许十二个像素被同时在飞行中通过有向图结构604。调度逻辑608在功能上被插入在像素槽和管线化处理逻辑606之间。如在别处描述的,调度逻辑用于:(i)控制操作分派—也被称为“发射”—到有向图结构及其实现的管线化处理逻辑中;(ii)智能地将像素和像素数据分派给可用处理资源;(iii)监视重新发射操作的定时,例如仅在请求的数据在像素槽中变得可用时才重新发射;(iv)通过转储清除停滞的进行中操作,控制回到槽的撤退并跟踪停滞何时被解决以使得重新发射被适当地定时来促成对停滞的清除。
在该示例中,每一像素槽都填充有其分类正待处理的像素;换言之,有十二个像素在飞行中并独立向前前进通过有向图结构604以最后以最终分类输出告终。出于清楚和说明的目的,操作将仅针对这些像素中的以下三个像素来描述:P0、P1和P20/1/2指定指代它们被分配到其槽中的输入顺序:P0是最早的像素,P2是最晚的像素,并且P1在像素P0和P2之间的时间被分配。再次如先前所描述的,针对这些像素的最终输出的定时可按任何次序发生。示出了仅针对一个决策树620的处理。每一像素都流经该树,在去叶节点的途中可能具有偶尔的中断。根决策节点被指定为“0”。该树中的每一子节点是参考其父节点以及籍此到达该子节点的分支方向来指定的。左转用“0”来指定,并且右转用“1”来指定。换言之,来自根节点[0]的左目标为[0.0],并且右目标为[0.1]。[0.0]的左目标为[0.0.0],其右目标为[0.0.1],并以此类推。像素P0流经[0]>[0.0]>[0.0.1]>[0.0.1.0]>[0.0.1.0.0](叶节点)。像素P1流经[0]>[0.0]>[0.0.1]>[0.0.1.1](叶节点)。像素P2流经[0]>[0.1]>[0.1.0](叶节点)。
如可明白的,所有三个像素在某种程度上共享公共路径。首先,所有三个像素在根节点[0]处开始。像素P1随后与其他两个节点分叉到节点[0.1]。像素P2和P0共同流经[0]、[0.0]和[0.0.1],这时,像素P2和P0分叉到不同的目标子节点。
虽然像素P2和P0走查相同路径的一部分,它们可甚至沿着该公共路径越过彼此。例如,像素P0可首先在节点[0]处开始。可随后很好地想像到当P0正在[0.0]处处理时可能的停滞。或许P0正在请求当前在被另一槽/像素访问的节点描述符。或许在[0.0]处,存在与地址计算相关联的一些等待时间。或许在[0.0]处,在点探针被取得时,存在存储器争用。另一中断数目是可能的。在这样的中断的情况下,P0将撤退到其槽,且像素P2随后可能在P0被重新发射之前(例如,在请求的数据已被返回之后)流经[0]>[0.0]>[0.0.1]。该独立、无序的向前前进提供极大的灵活性、对处理资源的高效使用、与存储器争用相关联的性能损失的最小化等等。
使用十二个像素槽允许十二个像素同时在飞行中通过有向图结构606,并且管线化处理逻辑604和调度逻辑608被配置成使得每一像素可独立地向前前进通过该有向图结构—各像素可越过彼此;最终的写出顺序独立于将像素分配到其像素槽中的输入顺序;最终,较晚像素相比于较早像素可被更快速地分类。
调度逻辑608控制从像素槽到管线化处理606的执行机制的操作分派。如所指示的,对于任何给定槽,操作可“发射”到管线化处理逻辑,并可从该管线撤退。将理解,这些术语是概念上的,并且表示相对于该槽发生的活动——即,发射指示该管线中针对所分配的像素的操作的开始;撤退指示操作已停止,例如在停滞或其他长等待时间事件的情况下。
在一些实施例中,本文中描述的方法和过程可以与一个或多个计算设备的计算系统绑定。尤其地,这样的方法和过程可被实现为计算机应用程序或服务、应用编程接口(API)、库和/或其他计算机程序产品。
图7示意性地示出了可执行上述方法和过程中的一个或多个的计算系统700的非限制性实现。以简化形式示出了计算系统700。计算系统700可采取以下形式:一个或多个个人计算机、服务器计算机、平板计算机、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如,智能电话)和/或其他计算设备。例如,计算系统700可以是微软的Kinect。
计算系统700包括数据保持子系统62和管线处理逻辑714。计算系统700可任选地包括显示子系统716、通信子系统718、输入子系统704和/或在图7中未示出的其他组件。
数据保持子系统702包括一个或多个物理设备,该一个或多个物理设备被配置成保持可由管线处理逻辑执行以实现本文中所述的方法和过程的指令。在实现这样的方法和过程时,可以变换数据保持子系统702的状态(例如,以保持不同的数据)。例如,数据保持子系统702可被配置成保持深度图710和/或其他数据712,其中其他数据包括节点描述符230、像素数据232、分类信息234、可执行指令236和任何其他合适的数据。此外,数据保持子系统702可包括被配置成保持数据的像素槽,使得像素存储分配及其像素槽可与数据保持子系统702中的数据同时驻留在各存储设备/位置中。
数据保持子系统702可包括可移动和/或内置设备。数据保持子系统702可以包括光学存储器(例如,CD、DVD、HD-DVD、蓝光碟等)、半导体存储器(例如,RAM、EPROM、EEPROM等)和/或磁性存储器(例如,硬盘驱动器、软盘驱动器、磁带驱动器、MRAM等)、等等。数据保持子系统702可包括易失性、非易失性、动态、静态、读/写、只读、随机存取、顺序存取、位置可寻址、文件可寻址和/或内容可寻址设备。将理解,数据保持子系统702包括一个或多个物理设备。然而,本文描述的指令的各方面可另选地通过不由物理设备在有限时长内持有的通信介质(例如,电磁信号、光信号等)来传播。
输入子系统704可包括传感器子系统706或与传感器子系统706对接。传感器子系统706可被配置成捕捉对象708作深度图710形式的深度信息,其中深度图被发送并存储在数据保持子系统702中附加地或替换地,输入子系统704可包括诸如键盘、鼠标、触摸屏或游戏控制器之类的一个或多个用户输入设备。
在一些实施例中,输入子系统可包括所选的自然用户输入(NUI)部件或与其结合。
这种部件可以是集成的或外围的,且输入动作的转导和/或处理可以在板上或板外被处理。
NUI部件的示例可包括用于语言和/或语音识别的话筒;用于机器视觉和/或姿势识别的红外、色彩、立体显示和/或深度相机;用于运动检测和/或意图识别的头部跟踪器、眼睛跟踪器、加速计和/或陀螺仪;以及用于评估脑部活动的电场感测部件。
管线处理逻辑714包括被配置成执行指令的一个或多个物理设备。例如,管线处理逻辑可以被配置为执行作为一个或多个应用、服务、程序、例程、库、对象、组件、数据结构或其它逻辑构造的一部分的指令。这种指令可被实现以执行任务、实现数据类型、转换一个或多个部件的状态、实现技术效果、或以其它方式得到期望结果。
管线处理逻辑714可包括被配置成执行软件指令的一个或多个处理器。附加地或可替代地,管线处理逻辑可包括被配置为执行硬件或固件指令的一个或多个硬件或固件逻辑机。管线处理逻辑的处理器可以是单核的或多核的,并且其上执行的指令可以被配置用于串行、并行和/或分布式处理。管线处理逻辑的个体组件可任选地可分布在两个或更多个分开的设备之中,所述设备可以位于远程以及/或者被配置用于协同处理。管线处理逻辑的各方面可由以云计算配置进行配置的可远程访问的联网计算设备来虚拟化和执行。
数据保持子系统702和管线处理逻辑704的各方面可被一起集成到一个或多个硬件逻辑组件中。这些硬件逻辑组件可包括例如现场可编程门阵列(FPGA)、程序和应用专用的集成电路(PASIC/ASIC)、程序和应用专用的标准产品(PSSP/ASSP)、片上系统(SOC)以及复杂可编程逻辑器件(CPLD)。
术语“模块”、“程序”和“引擎”可用于描述被实现为执行一个特定功能的计算系统700的一方面。在某些情况下,可以通过执行由数据保持子系统702所保持的指令的管线处理逻辑714来实例化这样的模块、程序或引擎。将理解,可以从同一应用、服务、代码块、对象、库、例程、API、函数等实例化不同的模块、程序和/或引擎。同样,可以由不同的应用程序、服务、代码块、对象、例程、API、函数等来实例化同一模块、程序和/或引擎。术语“模块”、“程序”和“引擎”可涵盖单个或成组的可执行文件、数据文件、库、驱动程序、脚本、数据库记录等。
应当理解,如此处所使用的“服务”可以是跨越多个用户会话可执行的应用程序。服务可对一个或更多系统组件、程序、和/或其他服务可用。在某些实现中,服务可以在一个或多个服务器计算设备上运行。
当被包括时,显示子系统716可用于呈现由数据保持子系统702所保持的数据的可视表示。该视觉表示可采用图形用户界面(GUI)的形式。由于此处所描述的方法和过程改变了由数据保持子系统保持的数据,并由此转变了数据保持子系统的状态,因此同样可以转变显示子系统716的状态以可视地表示底层数据中的改变。显示子系统716可以包括使用实质上任何类型的技术的一个或多个显示设备。可将此类显示设备与数据保持子系统702和/或管线处理逻辑704一起组合在共享封装中,或此类显示设备可以是外围显示设备。
当包括通信子系统718时,通信子系统718可被配置成将计算系统700与一个或多个其他计算设备通信地耦合。通信子系统718可以包括与一个或多个不同通信协议兼容的有线和/或无线通信设备。作为非限制性示例,通信子系统可被配置成用于经由无线电话网络或者有线或无线局域网或广域网来进行通信。在一些实施例中,通信子系统可允许计算系统700经由诸如因特网这样的网络将消息发送至其他设备以及/或者从其它设备接收消息。
本文中的示例主要指代二元决策树,其中节点操作导致“左或右”决策。然而,将领会,本系统和方法可结合其他类型的节点结果被采用。例如,分类器可基于嵌入在节点中的真/假偏移而跳到任意节点。例如,如果决策被评估为真,则(下一节点偏移=当前节点偏移+节点真偏移)。
将会理解,此处描述的配置和/或方法本质是示例性的,这些具体实施例或示例不应被视为限制性的,因为许多变体是可能的。此处描述的具体例程或方法可以表示任何数量的处理策略中的一个或多个。如此,所示和/或所述的各种动作可以以所示和/或所述顺序、以其它顺序、并行地执行,或者被省略。同样,上述过程的次序可以改变。
本公开的主题包括各种过程、系统和配置以及此处公开的其它特征、功能、动作和/或属性、以及它们的任一和全部等价物的所有新颖且非显而易见的组合和子组合。