掌桥专利:专业的专利平台
掌桥专利
首页

应用于半监督环境中以在图像帧序列中执行实例跟踪的机器学习框架

文献发布时间:2023-06-19 16:06:26



本申请要求于2021年1月8日提交的美国临时申请第63/135,478号的权益,其全部内容通过引用并入本文。

背景技术

实例分割是指分析视频中的图像或帧以便为图像中的各种对象分配标签。例如,可以分析图像以对图像中的背景对象和前景对象进行分类,使得每个像素属于与背景或前景相关联的一组像素。此外,可以用单独的分类来标记图像的前景中的单独对象,例如以区分图像中的不同人或将人和汽车单独标记为图像中不同对象的单独实例。已经对跨视频的多个帧跟踪多个实例的分割掩模进行了深入研究,但仍然面临两个基本挑战:(1)需要大规模的逐帧注释;(2)目前使用的两阶段方法的复杂性。

应对这一挑战的许多现有方法利用依赖于全监督学习技术的机器学习算法。为了训练这些算法,需要一组训练数据,其包括视频中完整注释的图像帧集。因为视频的注释,尤其是以每帧的方式,需要大量的手工劳动,因此全监督学习技术成为一个具有挑战性的问题。

还开发了自监督方法来从大型未标记视频集中学习像素级视频对应关系。学习到的对应关系可用于在每像素的基础上跟踪任何细粒度的属性(例如,分割掩模、关键点和/或纹理);然而,这些方法是语义无关的,这意味着这些方法不会区分不同对象的实例。换句话说,可以对视频进行处理以创建每一帧的分割图,但并没有从一帧到下一帧跟踪每一帧中的不同对象,也没有任何尝试建立一帧中对象的实例和另一帧中同一对象的实例之间的对应关系,即使该对象的外观或姿态可能会随时间发生变化。

这些技术中的每一种都受到某些限制。因此,需要改进用于跨视频帧序列跟踪实例的自动化技术。

发明内容

本公开的实施例涉及用于在视频帧序列内跟踪实例的方法和系统。机器学习框架是用一组带注释的图像帧和/或一组未标记的视频帧序列以半监督方式定义和训练的。可以预测并利用视频帧序列中每个实例的嵌入特征来跨视频帧序列跟踪唯一实例。

根据本公开的第一方面,提供一种方法,其包括以下步骤:由骨干网络处理图像帧以生成一组特征图,由一个或更多个预测头处理该组特征图,以及分析与所述视频帧序列中的两个或更多个图像帧中的一组实例相对应的所述嵌入特征,以在不同的图像帧中的实例之间建立一对一的相关性。所述一个或更多个预测头包括嵌入头,所述嵌入头被配置为生成与在所述图像帧中识别出的对象的一个或更多个实例相对应的一组嵌入特征。所述方法还包括:使用一组带注释的图像帧和/或多个未标记的视频帧序列来训练所述一个或更多个预测头。

在第一方面的实施例中,一个或更多个预测头还包括:分类头,其被配置为预测图像中多个对象类中的每个对象类的零个或更多个实例的位置;以及掩模头,其被配置为预测图像中每个实例的像素级分割掩模。

在第一方面的实施例中,所述嵌入头包括关键点嵌入头,所述关键点嵌入头包括编码器-解码器结构,其中所述编码器-解码器结构包括编码器和解码器,所述编码器包括卷积层,所述解码器包括解卷积层。

在第一方面的实施例中,一个或更多个预测头包括分类头和形状回归头,所述形状回归头被配置为基于多个关键点估计每个实例的姿态估计。

在第一方面的实施例中,骨干网络包括特征金字塔网络,并且其中该组特征图包括不同空间分辨率的多个特征图。

在第一方面的实施例中,该方法还包括:使用一组带注释的图像帧和/或多个未标记的视频帧序列来训练一个或更多个预测头。

在第一方面的实施例中,训练嵌入头包括:最小化实例对比损失项。

在第一方面的实施例中,训练嵌入头还包括:对相似性矩阵强制执行最大熵正则化。

在第一方面的实施例中,训练嵌入头包括:最小化基于对应于视频帧序列的前向亲和矩阵和反向亲度矩阵计算的循环损失项。

根据本公开的第二方面,提供了一种用于在视频帧序列内跟踪实例的系统。该系统包括:非暂时性计算机可读存储器和至少一个处理器,其被配置为实现多个神经网络。神经网络包括:骨干网络,其被配置为处理图像帧并生成一组特征图,和一个或更多个预测头,其被配置为处理由骨干网络生成的该组特征图。一个或更多个预测头包括嵌入头,该嵌入头被配置为生成与在图像帧中识别出的对象的一个或多个实例相对应的一组嵌入特征。

在第二方面的实施例中,一个或更多个预测头还包括:分类头,其被配置为预测所述图像中多个对象类中的每个对象类的零个或更多个实例的位置;以及掩模头,其被配置为预测所述图像中每个实例的像素级分割掩模。

在第二方面的实施例中,所述嵌入头包括关键点嵌入头,所述关键点嵌入头包括编码器-解码器结构,其中所述编码器-解码器结构包括编码器和解码器,所述编码器包括卷积层,所述解码器包括解卷积层。

在第二方面的实施例中,一个或更多个预测头包括分类头和形状回归头,所述形状回归头被配置为基于多个关键点估计每个实例的姿态估计。

在第二方面的实施例中,骨干网络包括特征金字塔网络,并且其中该组特征图包括不同空间分辨率的多个特征图。

在第二方面的实施例中,该方法还包括:使用一组带注释的图像帧和/或多个未标记的视频帧序列来训练一个或更多个预测头。

在第二方面的实施例中,其中训练所述嵌入头包括:最小化实例对比损失项,以及对相似性矩阵强制执行最大熵正则化。

在第二方面的实施例中,训练嵌入头包括:最小化基于对应于视频帧序列的前向亲和矩阵和反向亲和矩阵计算的循环损失项。

在第二方面的实施例中,至少一个处理器包括并行处理单元。

在第二方面的实施例中,该系统被包括在自主车辆中。

根据本公开的第三方面,提供了一种非暂时性计算机可读介质,其存储指令,所述指令响应于由一个或更多个处理器执行,使计算系统通过执行本公开的第一方面的方法来在视频帧序列内跟踪实例。

附图说明

下面参考附图详细描述了用于跟踪视频帧序列中的实例的本系统和方法,其中:

图1A示出了根据一些实施例的机器学习框架;

图1B示出了根据其他实施例的机器学习框架;

图2示出了根据一些实施例的用于跨图像帧序列执行实例跟踪的方法的流程图;

图3示出了根据一些实施例的包括在图1的机器学习框架中的关键点嵌入头;

图4示出了适合用于实现本公开的一些实施例的示例并行处理单元;

图5A是适合用于实现本公开的一些实施例的使用图4的PPU实现的处理系统的概念图;

图5B示出了示例性系统,其中可以实现各种先前实施例的各种架构和/或功能;

图5C示出了在至少一个实施例中可用于训练和利用机器学习的示例性系统的组件;

图6A是适合用于实现本公开的一些实施例的由图4的PPU实现的图形处理管线的概念图;

图6B示出了适合用于实现本公开的一些实施例的示例性游戏流媒体系统。

具体实施方式

本公开中描述了一种机器学习框架,用于学习视频帧序列中不同实例的区别表示。具体来说,提出了预测头,该预测头包括多个卷积层,后跟一组归一化层,并被配置为将一个或更多个全连接网络的特征图作为预测头的输入。机器学习框架仅使用带注释的(即标记的)图像数据集和可选地未标记的视频序列进行训练。

实例分割需要识别和分类图像中的所有对象,同时在像素级对对象的每个实例进行语义分割。图像中的对象属于一组固定的语义分类,但每个对象的实例数量各不相同。例如,图像可以包括多个对象,其中至少一个对象被分类为狗。然而,同一图像中的多个狗虽然共享属于同一类型对象的共同分类,但每个都是单独的实例。这些狗可能看起来相同或共享一些相似的特征,但即使是图像中不同位置的完全相同的对象,也可能是单独的实例。

最近的实例分割技术可以分为两组:自顶向下和自底向上范例。自顶向下的方法首先检测每个对象的包围盒,然后在每个包围盒内分割实例掩模。自底向上的方法通过推开属于不同实例的像素的嵌入向量并拉近属于同一实例的像素的嵌入向量来学习亲和关系,其为每个像素分配一个嵌入向量。然后需要后处理(例如,基于嵌入向量的聚类)来分离图像中识别出的各种实例。

SOLO是利用自底向上方法的实例分割解决方案,其在空间上是可变的并且直接预测每个对应位置处的对象实例的语义类别和分割两者。在Wang等人的“Solo:按位置分割对象(Solo:Segmenting object by locations)”(Eur.Conf.Comput.Vis.,2020)中描述了SOLO,其全部内容通过引用并入本文。SOLO使用全连接网络,其馈入到并行预测头,第一预测头用于预测与S x S网格中的每个位置相关联的语义类别,第二预测头用于预测每个位置的实例掩模。所选网格越密,图像中可预测的对象的各个实例的数量就越多。

SOLO中描述的框架可以适于用于跨视频帧序列跟踪实例的即时问题。应当理解,SOLO框架仅被训练为在单个帧上执行实例分割,并且未被训练为随着实例跨帧移动(即,改变实例位置)和随着时间的推移改变外观(由于实例运动)而跟踪实例。因此,实例跟踪问题不仅适用于跨特定帧中不同位置跟踪多个对象分类的不同实例,还适用于跨多个帧中不同位置跟踪同一实例。

用于实例分割网络的监督学习的常规技术将该问题视为多类分类问题。然而,在当前情况下,因为训练数据集缺少地面实况关联标签(即逐帧图像注释),因此而是网络被训练为学习特征图(例如,嵌入张量),其区分不同的实例并且对视频中实例的运动引起的外观变化是鲁棒的。训练完成后,网络可用于利用其嵌入特征在后续帧中搜索最相似的对象来跟踪任何对象实例。

实例分割是在许多自主驾驶应用中使用的核心技术。自主车辆可以包括机器学习框架,其被配置为处理由车辆中包括的一个或更多个图像传感器捕获的图像。本文描述的技术可用于跟踪在视频序列中捕获的对象的实例以执行例如碰撞避免等。实例分割也可用于其他类型的应用程序,例如安全应用程序或体育应用程序。

图1A示出了根据一些实施例的机器学习框架100。如图1A所示,框架100包括耦合到多个预测头的骨干网络。在一个实施例中,骨干网络是特征金字塔网络(FPN)110。FPN110可以包括以金字塔形式布置的多个卷积层,其中金字塔的每一级包括一个或更多个层并以特定的分辨率生成特征图。可以在金字塔的每一级对特征图进行下采样(例如,通过跨步操作或池化层),以产生与原始输入图像相比空间分辨率更小的特征图。在一个实施例中,FPN 110可以包括跳跃连接和具有上采样层的自顶向下结构,如Lin等人在“用于对象检测的特征金字塔网络(Feature Pyramid Networks for Object Detection)”(Comp.Vis.And Pattern Recognition,2016)中所述,其全部内容通过引用并入本文。

FPN 110获取输入图像102并以不同的空间分辨率和固定数量的通道(例如,256个通道)生成一组特征图。例如,256x256像素的输入图像可能会产生具有256x256、128x128、64x64、32x32和16x16空间分辨率的一组特征图,每个特征图都有256个通道。应当理解,上述图像尺寸仅仅是示例,不同的实施例可以实现FPN 110的不同配置。

然后将该组特征图传递给多个预测头。如图1A所示,预测头包括分类头112、掩模头114和嵌入头116。分类头112包括多个卷积层(例如,7个卷积层),其生成具有C个通道的特征图,每个特征图大小S×S表示图像空间域初始划分为单元格网格。在一些实施例中,分类头112还可以包括在每个卷积层之间或在卷积层之后的插值层。分类头112生成的特征图表示图像帧中C类对象的实例的位置的预测。更具体地,图像被分成S×S网格并且分类头112的输出提供网格中的每个单元是否与特定分类的对象相关联的预测。因此,分类头112的输出是表示图像的网格单元包含每个对应分类的对象的置信度水平的S×S×C值(例如,在0和1之间)的图。在一个实施例中,C的大小固定为256,这为图像中的对象提供固定数量的类。在一些实施例中,使用softmax函数分析分类头112的输出以确定哪一类对象位于网格的每个单元中。

应当理解,所选择的网格(即,S

掩模头114为位于每个网格中的对象的每个实例预测像素级分割掩模。掩模头114也可以由多个卷积层和/或插值层组成。掩模头114的输出是一组大小为H x W x S

分类头112和掩模头114可以使用包括带有注释的图像帧的训练数据集来训练。注释可以指图像中识别出的对象的一个或更多个实例中的每一个的分割掩模,以及与每个实例相关联的分类。

除了分类头112和掩模头114,它们提供每个实例的类别的标识和每个识别出的实例的相应像素级对应关系(即,分割图),框架100还包括另一个预测头,用于跨帧序列跟踪实例。为了跨视频帧序列跟踪实例,为每个识别出的实例预测嵌入向量,并且使用在单独帧中识别出的实例的嵌入向量的相似性来预测跨视频帧序列的实例之间的对应关系。

在一个实施例中,嵌入头116提供跟踪特征,其:(1)区分图像内的不同实例,以及(2)在视频序列中通常存在的实例变化上是一致的。嵌入头116的结构类似于分类头112,包括多个卷积层。然而,如下文更详细描述的,使用中心和对比损失的组合来训练嵌入头116。

在一个实施例中,嵌入头116由具有256个输出通道的四个卷积层实现。卷积层之后是一个或更多个组归一化层。应当理解,在一些实施例中,嵌入头116可以设计为具有更多或更少的卷积层,并且可以省略组归一化层或用其他类型的层代替。

实例i的中心表示是通过将所有嵌入特征平均分配给给定实例获得的,给出如下:

其中Ω

在训练期间最小化中心损失项的目标迫使同一实例但位于网格的不同单元中的嵌入特征向量相似。但是,不同实例的嵌入特征向量也需要不同,以便具有很强的区别能力。因此,还定义了一个对比项来将所有实例的中心表示推得更远。具体来说,一个密集的相似性矩阵计算如下:

在等式3中,变量i和j指的是在图像中识别出的不同实例,该图像中识别出的对象的实例总数为K。为了将不同实例的嵌入向量推得分开,鼓励矩阵对角线上的元素大于非对角线元素。然后定义交叉熵损失,给出如下:

其中I是单位矩阵。总实例对比损失是每个实例的中心损失总和与交叉熵损失的组合,给出如下:

其中λ是对比损失项的相对强度的参数。

一旦嵌入头116被训练为预测网格单元中识别出的不同实例的嵌入特征,那么中心表示就可以用于通过将一帧中预测出的每个中心表示与另一帧中的中心表示进行比较来跨帧跟踪实例。此外,还可以通过在训练期间利用来自分类头112的信息来改进跟踪,如下面将利用非最大值抑制技术讨论的。

在一个实施例中,每个实例的中心表示连同分类和分割掩模可以在处理每一帧视频时存储在存储器中的数据结构中。一旦处理了多个视频帧,帧序列中实例的中心表示通过例如余弦相似性值进行比较,以跨视频帧序列识别实例相关性。

仅通过实例对比损失进行跟踪是基于当前帧中的任何实例也存在于相邻帧中的假设。然而,这无法识别新出现的实例(因为它们进入后续帧)或在后续帧中被遮挡或不在视野中的一个帧中的实例。当基于实例的嵌入特征计算相似性分数时,新出现的实例可能会与一个或更多个现有实例进行匹配,因此,跨帧预测可能会存在不正确的匹配。解决此问题的一种技术是除了最小化实例对比损失项之外,还应用熵最大化项。

熵项定义如下:

其中K是图像中的实例数,S(i,j)是等式3中描述的密集相似性矩阵。高熵值H指示均匀的输出概率,并且当使用总实例对比损失项

当成功检测到新实例时,将新实例的嵌入特征与现有K个实例的嵌入特征进行比较。最大熵项强制所有现有实例的相似性分数都一样低,因此,当所有相似性分数低于阈值时,很容易为新发现的实例分配新身份。

图1B示出了根据一些实施例的机器学习框架100。图1A的机器学习框架100可以完全基于仅包括带注释的图像的训练数据集进行训练。例如,用于训练嵌入头116的参数的实例对比损失项和最大熵项仅依赖于对单个图像的分析以及图像中每个实例的嵌入特征的相似性与同一图像中识别出的其他实例相似性分数相比较。但是,不能保证基于图像集合执行的训练会导致跟踪随着时间的推移是连续和连贯的。在一些实施例中,有可能通过使用包括未标记视频帧序列的训练数据集训练机器学习框架100来改进跟踪。可以利用自监督视频对应关系学习来规范(regularize)对跨视频帧序列预测的实例的跟踪。

如图1B所示,机器学习框架100可以被扩展以应用于输入图像102和输入视频104两者,其中输入图像102可以包括单个帧,该帧包括帧中实例的注释,并且输入视频104可以包括视频帧序列中的多个帧,但缺少任何地面实况注释信息。输入图像102和/或输入视频104的帧中的每一个由骨干网络处理,骨干网络在图1B中被描述为全卷积网络(FCN)150。FCN 150可以是共享的(即,网络的结构和参数对于FCN 150的所有实例是共同的)并且用于处理输入图像102和输入视频104的帧序列中的各个帧。在一个实施例中,FCN 150被实现为特征金字塔网络,如上文在图1A的FPN 110中所述。

图1B的机器学习框架100包括分类头112和掩模头114,如上所述。然而,嵌入头116可以分成一对嵌入头:图像嵌入头152和视频嵌入头154。图像嵌入头152可以类似于上述嵌入头116。视频嵌入头154在结构上类似于图像嵌入头152,但是可以使用不同的技术来训练。

具体地,可以基于分类头112的输出,通过对具有更高分类响应的匹配的非极大值抑制(NMS)来识别有效网格单元。可以在有效网格单元内通过循环一致性损失因子训练网格-单元级视频对应关系。特别地,给定从一个视频帧序列中随机采样的一组帧,定义跨实例亲和度

理想情况下,如果视频序列被反转并且实例从时间t+k到时间t被跟踪,那么第i个实例应该返回到它在第一帧中的原始位置。反向亲和矩阵

发现,当用于训练机器学习框架100的图像数据集和视频数据集共享一个域时(例如,其中视频序列包括带有注释的关键帧,但大部分帧没有被注释),然后可以使用未注释的视频帧序列并将循环损失项添加到最小化实例对比损失项的目标和/或强制执行最大熵目标来训练图像嵌入头152。然而,在用于训练的图像数据集和视频数据集不共享域的情况下(即,视频序列没有被注释并且被注释的图像数据与视频序列无关),那么单独且不同的视频嵌入头154可以通过循环损失项进行训练。图1B中的虚线指示当训练数据集中存在域间隙时不使用图像嵌入头152来处理视频序列。应理解,经由采用未标记的视频的视频嵌入头154进行训练还将帮助改进骨干网络(诸如,FPN 110)的训练。即使在推理期间并未使用(即,被禁用)视频嵌入头154,骨干网络也将通过使用未标记的视频与视频嵌入头154进行联合训练来产生用于图像嵌入头152处理的更好的特征。

图2示出了根据一些实施例的用于跨图像帧序列执行实例跟踪的方法200的流程图。方法200可以由软件(即,进程或应用程序)、硬件或软件和硬件的某组合来执行。在一个实施例中,方法200至少部分地通过在并行处理单元(例如下面描述的PPU 400)上处理机器学习框架100的各个层来执行。

在步骤202,使用一组带注释的图像和可选地一组未标记的视频来训练机器学习框架。在一个实施例中,每个带注释的图像包括图像、图像的识别图像中的一个或更多个实例的每像素分割图,以及分割图的每个实例的分类器。每个未标记的视频包括图像帧序列,其中不包括图像帧的注释或其他语义信息(例如,分割图)。

在一个实施例中,使用作为中心损失和对比损失的组合的实例对比损失函数来训练机器学习框架。损失函数还可以包括应用最大熵正则化的项,其有助于检测新对象何时出现在视频的后续图像帧中。最后,损失函数包括与每实例的亲和矩阵相关的交叉熵损失项,其有助于确保实例之间的对应关系在前向时间方向和反向时间方向上是相同的。

在步骤204,图像帧序列中的每个图像帧由骨干网络处理以生成一组特征图。在一个实施例中,骨干网络包括FPN 110,并且该组特征图包括多个不同大小或分辨率的特征图。

在步骤206,该组特征图由一个或更多个预测头处理以生成分割掩模、分类器、实例级嵌入特征和/或关键点级嵌入特征中的至少一个。在一个实施例中,可以在图像帧中识别多个不同类的对象的实例。估计每个实例的分割掩模以预测图像帧中每个实例的像素级关联。在另一个实施例中,为对象的每个实例估计一组关键点(例如,三维(3D)点)。

在一个实施例中,提供嵌入头116以处理该组特征图并生成实例级嵌入特征。嵌入头116被训练为估计与由分类头112在图像中识别出的每个实例相关联的嵌入特征。在另一个实施例中,提供关键点嵌入头300,用于处理该组特征图并生成关键点级嵌入特征。关键点嵌入头300被训练为估计与关联于图像帧中对象的一个或更多个实例的每个关键点相关联的嵌入特征。

在步骤208,处理嵌入特征以生成图像帧序列的实例级对应关系。实例级对应关系将语义标签分配给图像帧序列中的不同实例,并跟踪多个图像帧中的同一实例。

图3示出了根据一些实施例的机器学习框架100的姿态跟踪预测头。图1A的机器学习框架100可以进一步适于预测和跟踪不同人类或其他对象(例如,动物)的姿态,它们是同一类的实例。姿态跟踪或跟踪对象的关键点的位置与实例分割略有不同,因为它不仅需要通过估计实例的分割图来确定哪些像素属于特定实例,还需要在实例的占用空间内定位一个或更多个关键点的预测位置。与实例分割相比,姿态跟踪需要框架100学习更细粒度的特征表示,以区分不同帧中的不同人类实例。

在一个实施例中,框架100可以适于包括关键点嵌入头300。与嵌入头116不同,关键点嵌入头300被设计成学习与对象的实例相关联的不同关键点的区别特征。定义了用于定义给定类的实例的关键点姿态的PointSetAnchor。例如,可以为人类对象的姿态定义一组17个关键点,其中17个关键点表示人体17个不同关节(例如,颈部、肩部、手腕等)的位置。关键点嵌入头300的目的是学习表示图像帧中给定实例的唯一一组关键点的嵌入特征,从而可以基于嵌入特征的相关性跨图像帧序列中跟踪与每个实例相关联的关键点。

关键点嵌入头300将来自FPN 110的一组特征图与关键点位置的预测热图连接起来。如图3所示,该组特征图也由单独的预测头处理,该预测头被配置为生成预测的热图。该单独的预测头被描绘为一组卷积层310(例如,4个卷积层),其后是聚合层320。然后将连接的输入馈送到关键点嵌入头300,其包括编码器-解码器结构。在一个实施例中,编码器330包括一个卷积层,解码器包括一个解卷积层340。编码器-解码器结构预测关键点级嵌入特征350。此外,热图还可用于识别对应于特定关节位置的每个关键点级嵌入特征的位置。

然后使用如以上等式4中定义的相同实例对比损失项来训练关键点嵌入头300。更具体地,IC损失计算被重复17次,该17次对应于17个关键点中的每一个。此外,IC损失计算还可以应用于给定实例的所有关键点的平均嵌入特征。可以将关键点嵌入头300添加到分类头和形状回归头,如Wei等人在“用于对象检测、实例分割和姿态估计的点集锚点(Point-Set Anchors for Object Detection,Instance Segmentation and Pose Estimation)”,(Eur.Conf.Comput.Vis.,2020)中更详细描述的,其全部内容通过引用并入本文。

实例跟踪或姿态跟踪可以被合并到各种应用架构中。实例跟踪在自主驾驶应用中特别有用。例如,能够识别和跟踪使用位于车辆上的一个或更多个图像传感器捕获的危险(例如,其他汽车、行人等)可以显著帮助避免碰撞算法并提高自驾驶特征的安全系数。实例跟踪或姿态跟踪在其他应用中也很有用,例如安全(例如,跟踪赌场地板上的人)或运动(例如,跟踪玩家在场地上的运动)。

机器学习框架100通常被实现为由一个或更多个处理器执行的计算机程序。例如,全连接网络的每一层都可以在处理器上实现,例如中央处理单元(CPU)或并行处理单元(PPU),例如图形处理单元(GPU)或向量处理单元(VPU)。在一些实施例中,机器学习框架可以实现为可通过网络(例如,基于云的网络)访问的服务。在其他实施例中,机器学习框架可以在本地计算机系统中实现,例如在台式计算机、移动设备或自主车辆上。下面阐述了用于实现机器学习框架的至少一部分的示例性系统的更详细描述。

并行处理架构

图4示出了根据一个实施例的并行处理单元(PPU)400。PPU 400可用于实现上述方法200的任何部分。例如,PPU 400可用于通过执行用于对图像帧进行编码的指令来生成图像嵌入。此外,PPU 400可用于处理图像嵌入或视频嵌入中的至少一个以产生上述机器学习框架的输出。

在一个实施例中,PPU 400是在一个或更多个集成电路设备上实现的多线程处理器。PPU 400是被设计为并行处理许多线程的延迟隐藏架构。线程(例如执行线程)是被配置为由PPU 400执行的指令集的实例化。在一个实施例中,PPU 400是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示设备上显示的二维(2D)图像数据。在其他实施例中,PPU 400可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,这样的处理器仅出于说明目的进行阐述,并且可采用任何处理器来补充和/或替代该处理器。

一个或更多个PPU 400可以被配置为加速数千个高性能计算(HPC)、数据中心、云计算和机器学习应用。PPU 400可被配置为加速众多深度学习系统和应用,所述系统和应用用于自主车辆、模拟、诸如光线或路径追踪之类的计算图形学、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。

如图4所示,PPU 400包括输入/输出(I/O)单元405、前端单元415、调度器单元420、工作分配单元425、集线器430、交叉开关(Xbar)470、一个或更多个通用处理集群(GPC)450以及一个或更多个存储器分区单元480。PPU 400可以经由一个或更多个高速NVLink 410互连连接到主机处理器或其他PPU 400。PPU 400可以经由互连402连接到主机处理器或其他外围设备。PPU 400还可以连接到包括多个存储器设备的本地存储器404。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子系统,其中多个DRAM管芯(die)堆叠在每个设备内。

NVLink 410互连使得系统能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 400,支持PPU 400和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 410通过集线器430发送到PPU 400的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5B更详细地描述NVLink 410。

I/O单元405被配置为通过互连402从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元405可以经由互连402直接与主机处理器通信,或通过一个或更多个诸如内存桥之类的中间设备与主机处理器通信。在一个实施例中,I/O单元405可以经由互连402与诸如一个或更多个PPU 400之类的一个或更多个其他处理器通信。在一个实施例中,I/O单元405实现外围组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连402是PCIe总线。在替代的实施例中,I/O单元405可以实现其他类型的已知接口,用于与外部设备进行通信。

I/O单元405对经由互连402接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 400执行各种操作的命令。I/O单元405将解码的命令传输至这些命令可能指定的PPU 400的各种其他单元。例如,一些命令可以被传输至前端单元415。其他命令可以被传输至集线器430或PPU 400的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元405被配置为在PPU 400的各种逻辑单元之间和之中路由通信。

在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 400提供工作负载用于处理。工作负载可以包括若干指令和要由那些指令处理的数据。缓冲区是存储器中可由主机处理器和PPU 400两者访问(例如,读/写)的区域。例如,I/O单元405可以被配置为经由通过互连402传输的存储器请求访问连接到互连402的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然反向PPU 400传输指向命令流开始的指针。前端单元415接收指向一个或更多个命令流的指针。前端单元415管理所述一个或更多个流,从这些流读取命令并将命令转发到PPU 400的各个单元。

前端单元415耦合到调度器单元420,其配置各种GPC 450以处理由所述一个或更多个流定义的任务。调度器单元420被配置为跟踪与由调度器单元420管理的各种任务有关的状态信息。状态可以指示任务被指派给哪个GPC 450,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元420管理所述一个或更多个GPC 450上的多个任务的执行。

调度器单元420耦合到工作分配单元425,其被配置为分派任务以在GPC 450上执行。工作分配单元425可以跟踪从调度器单元420接收到的若干调度的任务。在一个实施例中,工作分配单元425为每个GPC 450管理待处理(pending)任务池和活动任务池。当GPC450完成任务的执行时,该任务从GPC 450的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 450上执行。如果GPC 450上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 450中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 450上执行。

在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得在主机处理器上执行的一个或更多个应用程序能够调度用于在PPU 400上执行的操作。在一个实施例中,多个计算应用程序由PPU 400同时执行,并且PPU 400为所述多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 400执行。驱动程序内核将任务输出到正在由PPU 400处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。这些任务可以分配给GPC 450内的一个或更多个处理单元,并且指令被调度用于由至少一个线程束执行。

工作分配单元425经由XBar 470与所述一个或更多个GPC 450通信。XBar 470是将PPU 400的许多单元耦合到PPU 400的其他单元的互连网络。例如,XBar 470可以被配置为将工作分配单元425耦合到特定的GPC 450。虽然没有明确示出,但PPU 400的一个或更多个其他单元也可以经由集线器430连接到XBar 470。

任务由调度器单元420管理并由工作分配单元425分派给GPC 450。GPC 450被配置为处理任务并生成结果。结果可以由GPC 450内的其他任务消费,经由XBar 470路由到不同的GPC 450,或存储在存储器404中。结果可以经由存储器分区单元480写入存储器404,存储器分区单元480实现用于从存储器404读取数据和向存储器404写入数据的存储器接口。结果可以经由NVLink 410传输至另一个PPU 400或CPU。在一个实施例中,PPU 400包括数量为U的存储器分区单元480,该数量等于耦合到PPU 400的存储器404的单独且不同的存储器设备的数量。每个GPC 450可以包括存储器管理单元以提供虚拟地址到物理地址的转化、存储器保护以及存储器请求的仲裁。在一个实施例中,存储器管理单元提供一个或更多个转化后备缓冲区(TLB)以用于在存储器404中执行虚拟地址到物理地址的转化。

在一个实施例中,存储器分区单元480包括光栅操作(ROP)单元、二级(L2)高速缓存以及耦合到存储器404的存储器接口。存储器接口可以实现用于高速数据传输的32比特、64比特、128比特、1024比特数据总线。PPU 400可以连接到高达Y个存储器设备,例如高带宽存储器堆栈或图形双数据速率、版本5、同步动态随机存取存储器或其他类型的持久性存储装置。在一个实施例中,所述存储器接口实现一种HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆栈位于与PPU 400相同的物理封装上,与常规的GDDR5 SDRAM系统相比提供大量的功率和面积节省。在一个实施例中,每个HBM2堆栈包括四个存储器裸晶并且Y等于4,其中每个HBM2堆栈包括每个裸晶的两个129比特通道,总共8个通道且数据总线宽度为1024比特。

在一个实施例中,存储器404支持单纠错双检错(SECDED)纠错码(ECC)以保护数据。ECC为对于数据损坏敏感的计算应用提供了较高的可靠性。可靠性在其中PPU 400处理非常大的数据集和/或在延长的时段运行应用程序的大规模集群计算环境中尤为重要。

在一个实施例中,PPU 400实现多级存储器层级结构。在一个实施例中,存储器分区单元480支持为CPU和PPU 400存储器提供单个统一的虚拟地址空间的统一存储器,允许实现虚拟存储器系统之间的数据共享。在一个实施例中,PPU 400访问位于其他处理器上的存储器的频率被追踪以确保存储器页面移动到正在更频繁地访问这些页面的PPU 400的物理存储器。在一个实施例中,NVLink 410支持地址转化服务,允许PPU 400直接访问CPU的页面表并且提供PPU 400对CPU存储器的完全访问。

在一个实施例中,复制引擎在多个PPU 400之间或在PPU 400与CPU之间传输数据。复制引擎可以为没有映射到页面表中的地址生成页面错误。然后,存储器分区单元480可以维修页面错误,将这些地址映射到页面表中,之后,复制引擎可以执行所述传输。在常规的系统中,存储器被固定(例如不可分页)用于多个处理器之间的多个复制引擎操作,大大地减少了可用存储量。在硬件页面故障的情况下,可以将地址传递给复制引擎,而不用担心存储器页面是否驻留,并且复制过程是透明的。

来自存储器404或其他系统存储器的数据可以由存储器分区单元480获取并且存储在位于片上且在各种GPC 450之间共享的L2高速缓存460中。如图所示,每个存储器分区单元480包括与相应存储器404关联的L2高速缓冲的部分。然后,可以在GPC 450内的各种单元中实现低级高速缓存。例如,GPC 450内的处理单元中的每一个可以实现一级(L1)高速缓存。L1高速缓存是专用于特定处理单元的私有存储器。L2高速缓存460耦合到存储器接口470和XBar 470,并且来自L2高速缓存的数据可以被获取且存储在L1高速缓存中的每一个中以用于处理。

在一个实施例中,每个GPC 450内的处理单元实现一种SIMD(单指令多数据)架构,其中线程组(例如线程束)中的每个线程被配置为基于相同的指令集合处理不同的数据集合。线程组中的所有线程执行相同的指令。在另一个实施例中,处理单元实现一种SIMT(单指令多线程)架构,其中线程组中的每个线程被配置为基于相同的指令集合处理不同的数据集合,但是其中线程组中的个别线程允许在执行期间有分歧。在一个实施例中,对于每个线程束维持程序计数器、调用堆栈和执行状态,允许在线程束内的线程有分歧时实现线程束之间的并发性和线程束内的串行执行。在另一个实施例中,对于每个个别的线程维持程序计数器、调用堆栈和执行状态,允许实现线程束之内和之间的所有线程之间的同等的并发性。当对于每个个别的线程维持执行状态时,执行相同指令的线程可以聚合并且并行地执行以获得最大效率。

协作组是一种用于组织通信线程组的编程模型,其允许开发人员表达线程正在通信的粒度,允许实现更丰富、更高效的并行分解的表达。协作启动API支持用于执行并行算法的线程块之间的同步。常规的编程模型提供了用于同步协作线程的单个简单构造:跨线程块的所有线程的屏障(例如syncthreads()函数)。然而,程序员经常愿意以集体组范围的函数接口的形式定义小于线程块粒度的线程组,并且在定义的组内同步以便允许实现更大的性能、设计灵活性和软件重用。

协作组使得程序员能够以子块和多块粒度显式地定义线程组(如和单个线程一样小),并且在协作组中的线程上执行诸如同步之类的集体操作。该编程模型支持跨软件边界的清洁组成,使得库和实用函数可以在其局部上下文内安全地同步而不必做出关于聚合的假设。协作组基元允许实现新的协作并行模式,包括生产者消费者并行、机会主义并行以及跨整个线程块网格的全局同步。

每个处理单元包括大量(例如128等等)的不同处理核心(例如功能单元),这些处理核心可以是完全管线化的、单精度的、双精度的和/或混合精度的,并且包括浮点算术逻辑单元和整数算术逻辑单元。在一个实施例中,浮点算术逻辑单元实现用于浮点算术的IEEE 754-2008标准。在一个实施例中,所述核心包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心。

张量核心被配置为执行矩阵运算。特别地,张量核心被配置为执行深度学习矩阵算术,例如GEMM(矩阵-矩阵乘法),用于神经网络训练和推理期间的卷积运算。在一个实施例中,每个张量核心在4x4矩阵上运算,并且执行矩阵乘法和累加运算,D=A×B+C,其中A、B、C和D为4x4矩阵。

在一个实施例中,矩阵乘法输入A和B可以为整数、定点或浮点矩阵,而累加矩阵C和D可以是相等或更高位宽的整数、定点或浮点矩阵。在一个实施例中,张量核心采用32位整数累加在1位、4位或8位整数输入数据上运算。8位整数矩阵乘法需要1024次运算,并且导致全精度乘积,该全精度乘积然后使用32位整数加法与其他中间乘积累加,以用于8x8x16矩阵乘法。在一个实施例中,张量核心利用32位浮点累加在16位浮点输入数据上运算。16位浮点乘法要求64次运算,并且导致全精度乘积,该乘积然后使用32位浮点加法与其他中间乘积累加以用于4x4x4矩阵乘法。在实践中,张量核心用于执行由这些较小的元素组成的大得多的二维或更高维矩阵运算。诸如CUDA 9C++API之类的API公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储操作以便高效地使用于自CUDA-C++程序的张量核心。在CUDA层级,线程束级别的接口采取跨越线程束的所有32个线程的16x16大小的矩阵。

每个处理单元也可以包括执行特殊功能(例如属性评估、平方根倒数等等)的M个特殊功能单元(SFU)。在一个实施例中,SFU可以包括被配置为遍历层级树数据结构的树遍历单元。在一个实施例中,SFU可以包括被配置为执行纹理图滤波操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器404中加载纹理图(例如2D纹元阵列),并且对这些纹理图采样以便产生采样的纹理值以用于处理单元执行的着色器程序。在一个实施例中,纹理图存储在可以包括或包含L1高速缓存的共享存储器中。纹理单元使用mip图(例如细节水平变化的纹理图)实现诸如滤波操作之类的纹理操作。在一个实施例中,每个处理单元包括两个纹理单元。

每个处理单元也包括在共享存储器与寄存器文件之间实现加载和存储操作的N个加载存储单元(LSU)。每个处理单元包括将所述核心中的每一个连接到寄存器文件以及将LSU连接到寄存器文件、共享存储器的互连网络。在一个实施例中,互连网络是一种交叉开关,其可以被配置为将任何所述核心连接到寄存器文件中的任何寄存器并且将LSU连接到寄存器文件和共享存储器中的存储器位置。

共享存储器是允许数据存储以及处理单元之间和处理单元内的线程之间通信的片上存储器阵列。在一个实施例中,共享存储器包括128KB存储容量,并且处于从每个所述处理单元到存储器分区单元480的路径上。共享存储器可以用于缓存读和写。共享存储器、L1高速缓存、L2高速缓存和存储器404中的一个或更多个为后备仓。

将数据高速缓存和共享存储器功能结合到单个存储器块中对于两种类型的存储器访问提供了最佳的总体性能。所述容量可以由不使用共享存储器的程序用作高速缓存。例如,如果共享存储器被配置为使用一半的容量,那么纹理和加载/存储操作可以使用剩余的容量。整合到共享存储器内使得共享存储器能够用作用于流式数据的高吞吐量导管,同时提供对于频繁重用的数据的高带宽和低延迟访问。

当被配置用于通用并行计算时,可以使用与图形计算相比更简单的配置。特别地,绕过固定功能图形处理单元,创建简单得多的编程模型。在该通用并行计算配置中,工作分配单元425将线程块直接分派和分配给GPC 450内的处理单元。线程在计算中使用唯一线程ID执行相同的程序以便确保每个线程使用执行程序和执行计算的处理单元、在线程之间通信的共享存储器以及通过共享存储器和存储器分区单元480读写全局存储器的LSU生成唯一的结果。当被配置用于通用并行计算时,处理单元也可以写入命令,调度器单元420可以使用所述命令启动处理单元上的新工作。

PPU 400中的每一个可以包括诸如张量核心(TC)、张量处理单元(TPU)、像素视觉核心(PVC)、射线追踪(RT)核心、视觉处理单元(VPU)、图形处理集群(GPC)、纹理处理集群(TPC)、流式多处理器(SM)、树遍历单元(TTU)、人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU)、专用集成电路(ASIC)、浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或外围组件互连高速(PCIe)元件和/或类似物之类的一个或更多个处理核心和/或其组件和/或被配置为执行其功能。

PPU 400可以包括在台式计算机、膝上型计算机、平板计算机、服务器、超级计算机、智能电话(例如无线、手持式设备)、个人数字助理(PDA)、数字照相机、车辆、头戴式显示器、手持式电子设备等等内。在一个实施例中,PPU 400在单个半导体衬底上实施。在另一个实施例中,PPU 400与诸如附加的PPU 400、存储器404、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等等之类的一个或更多个其他设备一起包括在片上系统(SoC)内。

在一个实施例中,PPU 400可以包括在包括一个或更多个存储器设备的图形卡上。该图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU400可以是包括在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。在又一个实施例中,PPU 400可以在可重新配置的硬件中实现。在又一个实施例中,PPU 400的部分可以在可重新配置的硬件中实现。

示例性计算系统

随着开发人员在诸如人工智能计算之类的应用中公开和利用更多的并行性,具有多个GPU和CPU的系统被用于各行各业中。具有数十至数千个计算节点的高性能GPU加速系统部署在数据中心、研究设施和超级计算机中以解决越来越大的问题。随着高性能系统内的处理设备数量的增多,通信和数据传输机制需要扩展以支持增大的带宽。

图5A为根据一个实施例的、使用图4的PPU 400实现的处理系统500的概念图。示例性系统500可以被配置为实现图2中示出的一种或更多种方法。处理系统500包括CPU 530、交换机510和多个PPU 400以及各个存储器404。

NVLink 410提供每个所述PPU 400之间的高速通信链路。尽管图5B中图示了具体数量的NVLink 410和互连402连接,但是到每个PPU 400和CPU 530的连接的数量可以变化。交换机510在互连402与CPU 530之间形成接口。PPU 400、存储器404和NVLink 410可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两种或更多种协议以在各个不同的连接和/或链路之间形成接口。

在另一个实施例(未示出)中,NVLink 410提供每个PPU 400与CPU 530之间的一个或更多个高速通信链路,并且交换机510在互连402与每个PPU 400之间形成接口。PPU 400、存储器404和互连402可以位于单个半导体平台上以形成并行处理模块525。在又一个实施例(未示出)中,互连402提供每个PPU 400与CPU 530之间的一个或更多个通信链路,并且交换机510使用NVLink 410在每个PPU 400之间形成接口以便提供PPU 400之间的一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 410通过交换机510提供PPU 400与CPU 530之间的一个或更多个高速通信链路。在又一个实施例(未示出)中,互连402直接提供每个PPU 400之间的一个或更多个通信链路。NVLink 410高速通信链路中的一个或更多个可以使用与NVLink 410相同的协议实现为物理NVLink互连或片上或裸晶上互连。

在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的基于半导体的单一集成电路。应当指出,术语单个半导体平台也可以指具有增多的连接性的多芯片模块,其模拟片上操作并且相对于利用常规总线实现方式做出了重大的改进。当然,所述各个不同的电路或设备也可以按照用户的愿望单独地位于半导体平台中或位于其各种不同的组合中。可替换地,并行处理模块525可以实现为电路板衬底,并且每个PPU 400和/或存储器404可以为封装设备。在一个实施例中,CPU 530、交换机510和并行处理模块525位于单个半导体平台上。

在一个实施例中,每个NVLink 410的信令速率为20-25千兆比特/秒,并且每个PPU400包括六个NVLink 410接口(如图5A中所示,对于每个PPU 400包括五个NVLink 410接口)。每个NVLink 410在每个方向提供25千兆字节/秒的数据传输速率,六个链路提供400千兆字节/秒。NVLink 410可以如图5A所示排他性地用于PPU到PPU通信,或在CPU 530也包括一个或更多个NVLink 410接口时,用于PPU到PPU和PPU到CPU的某种组合。

在一个实施例中,NVLink 410允许从CPU 530到每个PPU 400的存储器404的直接加载/存储/原子访问。在一个实施例中,NVLink 410支持一致性操作,允许从存储器404读取的数据存储在CPU 530的高速缓存层级结构中,降低了CPU 530的高速缓存访问延迟。在一个实施例中,NVLink 410包括对于地址转化服务(ATS)的支持,允许PPU 400直接访问CPU530内的页面表。NVLink 410中的一个或更多个也可以被配置为操作于低功率模式。

图5B图示了其中可以实现各种先前实施例的各种架构和/或功能的示例性系统565。示例性系统565可以被配置为实现图2中示出的一种或更多种方法。

如图所示,提供了一种系统565,其包括连接到通信总线575的至少一个中央处理单元530。通信总线575可以直接或间接地耦合以下设备中的一个或更多个:主存储器540,网络接口535,CPU 530,显示设备545,输入设备560,交换机510和并行处理系统525。通信总线575可以使用任何适当的协议实现,并且可以表示一个或更多个链路或总线,例如地址总线、数据总线、控制总线或其组合。通信总线575可以包括一种或多种总线或链路类型,例如行业标准架构(ISA)总线、扩展行业标准架构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、外围组件互连高速(PCIe)总线、超级传输和/或另一种类型的总线或链路。在一些实施例中,存在组件之间的直接连接。作为一个示例,CPU 530可以直接连接到主存储器540。此外,CPU 530可以直接连接到并行处理系统525。在存在组件之间的直接或点对点连接的情况下,通信总线575可以包括实现该连接的PCIe链路。在这些示例中,PCI总线不必包括在系统565中。

尽管利用线条将图5C的不同方框示为经由通信总线575连接,但是这并不预期是限制性的并且只是为了清楚起见。例如,在一些实施例中,诸如显示设备545之类的呈现组件可以被认为是I/O组件,例如输入设备560(例如如果显示器为触摸屏的话)。作为另一个示例,CPU 530和/或并行处理系统525可以包括存储器(例如,主存储器540可以表示除了并行处理系统525、CPU 530之外的存储设备,和/或其他组件)。换言之,图5C的计算设备仅仅是说明性的。在诸如“工作站”、“服务器”、“膝上型电脑”、“台式电脑”、“平板电脑”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ECU)”、“虚拟现实系统”和/或其他设备或系统类型之类的类别之间不进行区分,因为所有这些都预期处于图5C的计算设备的范围内。

系统565也包括主存储器540。控制逻辑(软件)和数据存储在主存储器540中,该主存储器可以采取各种各样的计算机可读介质的形式。计算机可读介质可以是可以被系统565访问的任何可用的介质。计算机可读介质可以包括易失性和非易失性介质以及可移除和不可移除介质。举例而言且非限制性地,计算机可读介质可以包括计算机存储介质和通信介质。

计算机存储介质可以包括以任何方法或技术实现的易失性和非易失性介质和/或可移除和不可移除介质以用于存储诸如计算机可读指令、数据结构、程序模块和/或其他数据类型之类的信息。例如,主存储器540可以存储诸如操作系统之类的计算机可读指令(例如,其表示程序和/或程序元素)。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储装置、磁盒、磁带、磁盘存储装置或其他磁性存储设备,或可以用于存储希望的信息以及可以被系统565访问的任何其他介质。当在本文使用时,计算机存储介质不包括信号本身。

计算机存储介质可以在诸如载波或其他传输机制之类的调制数据信号中包含计算机可读指令、数据结构、程序模块或其他数据类型,并且包括任何信息输送介质。术语“调制数据信号”可以指这样的信号,该信号使它的特性中的一个或更多个以这样的将信息编码到该信号中的方式设置或改变。举例而言且非限制性地,计算机存储介质可以包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声音、RF、红外和其他无线介质之类的无线介质。任何以上所述的组合也应当包括在计算机可读介质的范围内。

当被执行时,计算机程序使得系统565能够执行各种功能。CPU 530可以被配置为执行所述计算机可读指令中的至少一些以控制系统565的一个或更多个组件执行本文描述的方法和/或过程中的一个或更多个。CPU 530中的每一个可以包括能够同时处理众多软件线程的一个或更多个核心(例如一个、两个、四个、八个、二十八个、七十二个等等)。取决于实现的系统565的类型,CPU 530可以包括任何类型的处理器,并且可以包括不同类型的处理器(例如,用于移动设备的具有较少核心的处理器,以及用于服务器的具有较多核心的处理器)。例如,取决于系统565的类型,处理器可以是使用精简指令集计算(RISC)实现的高级RISC机器(ARM)处理器或使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或诸如数学协处理器之类的补充协处理器之外,系统565可以包括一个或更多个CPU 530。

除了CPU 530之外或可替换地,并行处理模块525可以被配置为执行所述计算机可读指令中的至少一些以控制系统565的一个或更多个组件执行本文描述的方法和/或过程中的一个或更多个。并行处理模块525可以由系统565用于渲染图形(例如3D图形)或执行通用计算。例如,并行处理模块525可以用于GPU上的通用计算(GPGPU)。在实施例中,CPU 530和/或并行处理模块525可以分立地或联合地执行所述方法、过程和/或其部分的任意组合。

系统565也包括输入设备560、并行处理系统525和显示设备545。显示设备545可以包括显示器(例如监视器、触摸屏、电视屏、平视显示器(HUD)、其他显示器类型或其组合)、扬声器和/或其他呈现组件。显示设备545可以接收来自其他组件(例如并行处理系统525、CPU 530等等)的数据,并且输出该数据(例如图像、视频、声音等等)。

网络接口535可以使得系统565能够逻辑耦合到其他设备,所述其他设备包括输入设备560、显示设备545和/或其他组件,其中一些可以嵌入到(例如集成到)系统565中。说明性输入设备560包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、卫星天线、扫描仪、打印机、无线设备等等。输入设备560可以提供自然用户界面(NUI),其处理用户生成的空中手势、语音或其他生理输入。在一些实例中,可以将输入传输至适当的网络元件以供进一步处理。NUI可以实现语音识别、手写笔识别、面部识别、生物特征识别、屏幕上和邻近屏幕的手势识别、空中手势、头眼跟踪以及与系统565的显示器关联的触摸识别(如下文中更详细地描述的)。系统565可以包括用于手势检测和识别的深度照相机,例如立体照相机系统、红外照相机系统、RGB照相机系统、触摸屏技术及其组合。此外,系统565可以包括允许实现运动检测的加速度计或陀螺仪(例如作为惯性测量单元(IMU)的部分)。在一些示例中,加速度计或陀螺仪的输出可以由系统565用于渲染沉浸式增强现实或虚拟现实。

此外,系统565可以出于通信的目的通过网络接口535耦合到网络(例如电信网络、局域网(LAN)、无线网络、诸如因特网之类的广域网(WAN)、对等网络、电缆网络等等)。系统565可以包括在分布式网络和/或云计算环境内。

网络接口535可以包括一个或更多个接收器、发射器和/或收发器,其使得系统565能够经由包括有线和/或无线通信的电子通信网络与其他计算设备通信。网络接口535可以包括允许实现通过若干不同网络中的任意网络通信的组件和功能,所述网络例如无线网络(例如Wi-Fi、Z波、蓝牙、蓝牙LE、ZigBee等等)、有线网络(例如通过以太网或InfiniBand的通信)、低功率广域网(例如LoRaWAN、SigFox等等)和/或因特网。

系统565也可以包括辅助存储装置(未示出)。辅助存储装置包括例如硬盘驱动器和/或表示软盘驱动器、磁带驱动器、紧密盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存的可移除存储驱动器。可移除存储驱动器以众所周知的方式从可移除存储单元读和/或写到可移除存储单元。系统565也可以包括硬接线电源、电池电源或其组合(未示出)。该电源可以向系统565供电以使得系统565的组件能够操作。

前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。可替换地,各种不同的模块也可以按照用户的愿望单独地放置或位于半导体平台的各种组合中。尽管上面描述了各个不同的实施例,但是应当理解,它们仅仅通过示例的方式且非限制性地给出。因此,优选实施例的宽度和范围应当不受限于上面描述的任何示例性实施例,而是应当仅仅根据下面的权利要求及其等效物限定。

示例网络环境

适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、附接到网络的存储装置(NAS)、其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如每个设备)可以在图5A的处理系统500和/或图5B的示例性系统565的一个或更多个实例上实现,例如,每个设备可以包括处理系统500和/或示例性系统565的相似的组件、特征和/或功能。

网络环境的组件可以经由网络彼此通信,所述网络可以是有线的、无线的或兼而有之。网络可以包括多个网络或网络的网络。举例而言,网络可以包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络——例如因特网,和/或公共交换电话网络(PSTN),和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或甚至接入点之类的组件(以及其他组件)可以提供无线连接性。

兼容的网络环境可以包括一个或更多个对等网络环境——在该情况下,服务器可以不包括在网络环境中,以及一个或更多个客户端-服务器网络环境——在该情况下,一个或更多个服务器可以包括在网络环境中。在对等网络环境中,本文关于服务器描述的功能可以在任意数量的客户端设备上实现。

在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、其组合等等。基于云的网络环境可以包括框架层、作业调度器、资源管理器以及在一个或更多个服务器上实现的分布式文件系统,所述服务器可以包括一个或更多个核心网络服务器和/或边缘服务器。框架层可以包括支持软件层的软件和/或应用程序层的一个或更多个应用程序的框架。该软件或应用程序可以分别包括基于web的服务软件或应用程序。在实施例中,客户端设备中的一个或更多个可以使用基于web的服务软件或应用程序(例如通过经由一个或更多个应用编程接口(API)访问服务软件和/或应用程序)。框架层可以是但不限于例如可以将分布式文件系统用于大规模数据处理(例如“大数据”)的免费开源软件web应用程序框架类型。

基于云的网络环境可以提供实现本文描述的计算和/或数据存储功能(或其一个或更多个部分)的云计算和/或云存储。这些不同功能中的任何功能可以从中心或核心服务器(例如一个或更多个数据中心的中心或核心服务器,所述数据中心可以跨州、地区、国家、全球等等分布)分布在多个位置。如果到用户(例如客户端设备)的连接相对靠近边缘服务器,那么核心服务器可以将所述功能的至少一部分指派给边缘服务器。基于云的网络环境可以是私有的(例如限于单个组织),可以是公共的(例如对于许多组织可用),和/或其组合(例如混合云环境)。

客户端设备可以包括图5B的示例处理系统500和/或图5C的示例性系统565的组件、特征和功能中的至少一些。举例而言且非限制性地,客户端设备可以实施为个人计算机(PC)、膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实头戴式视图器、全球定位系统(GPS)或设备、视频播放器、视频照相机、监视设备或系统、车辆、船、飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、器具、消费电子设备、工作站、边缘设备、这些划定的设备的任意组合或任何其他适当的设备。

机器学习

诸如PPU 400之类的处理器上开发的深度神经网络(DNN)已经用于从自动驾驶汽车到更快的药物开发,从在线图像数据库中的自动图像配字幕到视频聊天应用中的智能实时语言翻译的多种多样的用例。深度学习是一种对人脑的神经学习过程进行建模的技术,其不断地学习、不断地变得更聪明并且随着时间的推移更快速地输送更精确的结果。小孩最初由成年人教导对各种不同的形状进行正确的标识和分类,最终能够在没有任何指导的情况下标识形状。类似地,深度学习或神经学习系统需要在对象识别和分类中进行训练,以便它在标识基本的对象、被遮挡的对象等等方面变得更聪明和更高效,同时也将上下文赋予对象。

在最简单的水平下,人脑中的神经元观看接收的各种输入,重要性水平被赋予这些输入中的每一个,并且输出传递至其他神经元以做出反应。人工神经元或感知机是神经网络的最基本模型。在一个示例中,感知机可以接收一个或更多个输入,所述输入表示感知机正被训练对其识别和分类的对象的各种特征,并且这些特征中的每一个基于在定义对象的形状中该特征的重要性而被赋予某个权重。

深度神经网络(DNN)模型包括多层许多连接的节点(例如感知机、玻尔兹曼机、径向基函数、卷积层等等),其可以利用巨量的输入数据进行训练以便以高精度快速地解决复杂的问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为不同的片段并且寻找诸如线条和角之类的基本图案。第二层组装这些线条以便寻找诸如轮子、风挡和镜子之类的更高水平的图案。下一层标识车辆的类型,并且最终几层生成用于输入图像的标记,标识特定汽车品牌的型号。

一旦训练了DNN,DNN就可以被部署且用于在称为推理的过程中对对象或图案进行标识和分类。推理(DNN通过其从给定输入中提取有用信息的过程)的示例包括标识存入ATM机的支票上的手写数字,标识照片中朋友的图像,将电影推荐输送至超过五千万用户,在无人驾驶汽车中对不同类型的汽车、行人和道路危险进行标识和分类,或实时地翻译人类语言。

在训练期间,数据在前向传播阶段中流经DNN,直到产生指示与输入相应的标记的预测。如果神经网络没有正确地标记输入,那么对正确标记与预测的标记之间的误差进行分析,并且在反向传播阶段期间针对每个特征调节所述权重,直到DNN正确地标记所述输入以及训练数据集中的其他输入。训练复杂的神经网络需要大量的并行计算性能,包括PPU400支持的浮点乘法和加法。推理的计算密集程度低于训练,是个延迟敏感过程,其中将训练的神经网络应用到它之前没有见过的新输入以便对图像分类,检测情绪,标识推荐,识别和翻译语言,并且通常推理出新信息。

神经网络严重依赖于矩阵数学运算,并且为了效率和速率二者,复杂的多层网络需要巨量的浮点性能和带宽。利用针对矩阵数学运算优化的且提供数十至数百TFLOPS的性能的数千个处理核心,PPU 400是一种能够提供基于深度神经网络的人工智能和机器学习应用所需的性能的计算平台。

此外,应用本文公开的技术中的一种或更多种生成的图像可以用于训练、测试或认证用于识别真实世界中的对象和环境的DNN。这样的图像可以包括车行道、工厂、建筑物、城市环境、农村环境、人类、动物以及任何其他物理对象或真实世界环境的场景。这样的图像可以用于训练、测试或认证在机器或机器人中被采用于操控、处理或修改真实世界中的物理对象的DNN。此外,这样的图像可以用于训练、测试或认证在自主车辆中被采用于在真实世界中导航和移动车辆的DNN。此外,应用本文公开的技术中的一种或多种生成的图像可以用于将信息传达至这样的机器、机器人和车辆的用户。

图5C示出了根据至少一个实施例的可用于训练和利用机器学习的示例系统555的组件。如将要讨论的,可以由可以在单个实体或多个实体的控制下的单个计算系统或计算设备和资源的各种组合来提供各种组件。此外,可以由不同实体触发、发起或请求各个方面。在至少一个实施例中,可以由与供应商环境506相关联的供应商来指导对神经网络的训练,而在至少一个实施例中,可以由能够通过客户端设备502或其他此类资源访问供应商环境的顾客或其他用户来请求训练。在至少一个实施例中,训练数据(或要由经训练的神经网络分析的数据)可以由供应商、用户或第三方内容供应商524提供。在至少一个实施例中,客户端设备502可以是例如要代表用户被导航的车辆或对象,该用户可以提交请求和/或接收有助于设备导航的指令。

在至少一个实施例中,能够通过至少一个网络504提交请求以便由供应商环境506接收。在至少一个实施例中,客户端设备可以是使得用户能够生成和发送这样的请求的任何适当的电子和/或计算设备,诸如但不限于台式计算机、笔记本计算机、计算机服务器、智能手机、平板电脑、游戏控制台(便携式或其他方式)、计算机处理器、计算逻辑和机顶盒。一个或更多个网络504可以包括用于传输请求或其他这样的数据的任何适当的网络,例如可以包括因特网、内联网、以太网、蜂窝网络、局域网(LAN)、广域网(WAN)、个人区域网络(PAN)、在对等体之间进行直接无线连接的自组织网络等等。

在至少一个实施例中,可以在接口层508接收请求,在该示例中,该接口层可以将数据转发到训练和推理管理器532。训练和推理管理器532可以是包括用于管理与数据或内容相应的服务和请求的硬件和软件的系统或服务。在至少一个实施例中,该训练和推理管理器532可以接收训练神经网络的请求,并且可以将用于请求的数据提供给训练模块512。在至少一个实施例中,如果请求未指定,则训练模块512可以选择要使用的适当模型或神经网络,并可以使用相关的训练数据来训练模型。在至少一个实施例中,训练数据可以是存储在训练数据存储库514中的、从客户端设备502接收的或从第三方供应商524获得的一批数据。在至少一个实施例中,训练模块512可以负责训练数据。神经网络可以是任何适当的网络,例如递归神经网络(RNN)或卷积神经网络(CNN)。一旦训练并成功评估了神经网络,就可以将经训练的神经网络存储到例如模型存储库516,其可以存储用于用户、应用程序或服务等的不同模型或网络。在至少一个实施例中,针对单个应用程序或实体可能存在多个模型,其可以基于多个不同因素而被利用。

在至少一个实施例中,在随后的时间点,可以从客户端设备502(或另一个这样的设备)接收对至少部分地被经训练的神经网络确定或影响的内容(例如,路径确定)或数据的请求。该请求可以包括例如输入数据,其要使用神经网络进行处理,以获得一个或更多个推理或其他输出值、分类或预测,或对于至少一个实施例,输入数据可以由接口层508接收并且被引导到推理模块518,尽管不同的系统或服务也可以使用。在至少一个实施例中,如果尚未本地存储到推理模块518,则推理模块518可以从模型存储库516中获得适当的训练的网络,例如本文所讨论的训练的深度神经网络(DNN)。推理模块518可以将数据作为输入提供给训练的网络,其然后可以生成一个或更多个推理作为输出。例如,这可以包括输入数据实例的分类。在至少一个实施例中,然后可以将推理传输至客户端设备502以向用户显示或与用户进行其他通信。在至少一个实施例中,用户的上下文数据也可以存储到用户上下文数据存储库522,该数据库可以包括关于用户的数据,该数据可以用作生成推理或确定获得实例后返回给用户的数据的网络输入。在至少一个实施例中,可以包括输入或推理数据中的至少一些的相关数据也可以被存储到本地数据库534以用于处理将来的请求。在至少一个实施例中,用户可以使用帐户信息或其他信息来访问供应商环境的资源或功能。在至少一个实施例中,如果允许和可用,还可以收集用户数据并将其用于进一步训练模型,以便为将来的请求提供更精确的推理。在至少一个实施例中,可以通过用户界面接收对在客户端设备502上执行的机器学习应用526的请求,并通过相同的界面显示结果。客户端设备可以包括资源,诸如用于生成请求和处理结果或响应的处理器528和存储器562,以及用于存储用于机器学习应用526的数据的至少一个数据存储元件552。

在至少一个实施例中,处理器528(或训练模块512或推理模块518的处理器)将是中央处理单元(CPU)。但是,如上所述,此类环境中的资源可以利用GPU来处理用于至少某些类型的请求的数据。诸如PPU 400之类的GPU具有数千个核心,被设计为处理大量的并行工作负载,因此在用于训练神经网络和生成预测的深度学习中变得很流行。虽然使用GPU进行离线构建允许更快地训练更大、更复杂的模型,但离线生成预测意味着无法使用请求-时间输入特征,或必须针对所有特征排列生成预测并将其存储在查找表中以进行服务实时请求。如果深度学习框架支持CPU模式,并且模型足够小且简单以至可以合理的延迟在CPU上执行前馈,则CPU实例上的服务可以托管模型。在这种情况下,可以在GPU上离线进行训练,并在CPU上实时进行推理。如果CPU方法不是可行的,则服务可以在GPU实例上运行。但是,由于GPU具有与CPU不同的性能和成本特性,因此运行将运行时算法卸载到GPU的服务可能要求将其设计成与基于CPU的服务不同。

在至少一个实施例中,可以从客户端设备502提供视频数据以便在供应商环境506中进行增强。在至少一个实施例中,可以对视频数据进行处理以便在客户端设备502上进行增强。在至少一个实施例中,可以从第三方内容供应商524流式传输并且由第三方内容供应商524、供应商环境506或客户端设备502增强视频数据。在至少一个实施例中,可以从客户端设备502提供视频数据以便用作供应商环境506中的训练数据。

在至少一个实施例中,有监督和/或无监督训练可以由客户端设备502和/或供应商环境506执行。在至少一个实施例中,训练数据514(例如分类的或标记的数据)集作为输入而提供以便用作训练数据。在一个实施例中,该组训练数据可以在生成对抗训练配置中使用以训练生成器神经网络。

在至少一个实施例中,训练数据可以包括神经网络要针对其训练的至少一个人类对象、化身或角色的图像。在至少一个实施例中,训练数据可以包括针对其要对神经网络进行训练的至少一种类型的对象的实例,以及标识该对象类型的信息。在至少一个实施例中,训练数据可以包括图像集,其每个图像包括一种类型的对象的表示,其中每个图像也包括标记、元数据、分类或标识对应图像中表示的对象类型的其他信息,或与之关联。各种不同的其他类型的数据也可以用作训练数据,其可以包括文本数据、音频数据、视频数据等等。在至少一个实施例中,训练数据514作为训练输入提供给训练模块512。在至少一个实施例中,训练模块512可以是包括硬件和软件的系统或服务,例如执行训练应用程序的一个或更多个计算设备,以用于训练神经网络(或其他模型或算法等等)。在至少一个实施例中,训练模块512接收指示要用于训练的模型类型的指令或请求,在至少一个实施例中,模型可以是对于这样的目的有用的任何适当的统计模型、网络或算法,其可以包括人工神经网络、深度学习算法、学习分类器、贝叶斯网络等等。在至少一个实施例中,训练模块512可以从适当的储存库中选择初始模型或其他未训练的模型,并且利用训练数据514训练模型,从而生成可以用于对相似类型的数据分类或生成其他这样的推理的训练的模型(例如训练的深度神经网络)。在其中未使用训练数据的至少一个实施例中,仍然可以选择初始模型以便对每个训练模块512的输入数据进行训练。

在至少一个实施例中,可以以若干不同的方式训练模型,其可以部分地取决于选择的模型类型。在至少一个实施例中,可以向机器学习算法提供训练数据集,其中模型是通过训练过程创建的模型工件。在至少一个实施例中,训练数据的每个实例包含可以称为目标或目标属性的正确答案(例如分类)。在至少一个实施例中,学习算法找到将输入数据属性映射到目标(要预测的答案)的训练数据中的模式,并且机器学习模型是捕获这些模式的输出。在至少一个实施例中,机器学习模型于是可以用于获得对未指定目标的新数据的预测。

在至少一个实施例中,训练和推理管理器532可以从包括二元分类、多类分类、生成式和回归模型的机器学习模型集中进行选择。在至少一个实施例中,要使用的模型类型可以至少部分地取决于要预测的目标类型。

图形处理管线

在一个实施例中,PPU 400包括图形处理单元(GPU)。PPU 400被配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可以被定义为诸如点、线、三角形、四边形、三角形带等等之类的图元集。典型地,图元包括指定用于该图元的顶点的数量(例如在模型-空间坐标系统中)以及与该图元的每个顶点关联的属性的数据。PPU 400可以被配置为处理图形图元以生成帧缓冲区(例如用于显示器的像素中的每一个的像素数据)。

应用程序将用于场景的模型数据(例如属性和顶点集合)写入诸如系统存储器或存储器404之类的存储器。模型数据定义了可能在显示器上可见的对象中的每一个。然后,应用程序对驱动程序内核进行API调用,其请求渲染和显示该模型数据。驱动程序内核读取该模型数据,并且将命令写入所述一个或更多个流以便执行处理该模型数据的操作。这些命令可以引用要在PPU 400内的处理单元上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几何着色器和像素着色器中的一个或更多个。例如,所述处理单元中的一个或更多个可以被配置为执行顶点着色器程序,其处理模型数据定义的若干顶点。在一个实施例中,这些不同的处理单元可以被配置为并发地执行不同的着色器程序。例如,第一处理单元子集可以被配置为执行顶点着色器程序,而第二处理单元子集可以被配置为执行像素着色器程序。第一处理单元子集处理顶点数据以产生处理的顶点数据,并且将处理的顶点数据写入L2高速缓存460和/或存储器404。在处理的顶点数据被光栅化(例如从三维数据变换为屏幕空间中的二维数据)以产生片段数据之后,第二处理单元子集执行像素着色器以产生处理的片段数据,其然后与其他处理的片段数据混合并且写入存储器404中的帧缓冲区。顶点着色器程序和像素着色器程序可以并发地执行,以流水线方式处理来自相同场景的不同数据,直到该场景的所有模型数据都被渲染到帧缓冲区。然后,将帧缓冲区的内容传输至显示控制器以便在显示设备上显示。

图6A是根据一个实施例的由图4的PPU 400实现的图形处理管线600的概念图。图形处理管线600是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个接续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由

如图6A所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610,顶点着色阶段620,图元组装阶段630,几何着色阶段640,视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段650,光栅化阶段660,片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(例如,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。

数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610例如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据而收集临时存储装置或队列中的顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。

顶点着色阶段620通过对顶点中的每一个执行一次操作集(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这样的操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。

图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。

几何着色阶段640通过对几何图元执行操作集(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口SCC阶段650。

在一个实施例中,图形处理管线600可以在流式多处理器内操作,并且顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件可顺序地执行处理操作。在一个实施例中,一旦顺序处理操作完成,视口SCC阶段650可以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段650可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段650和光栅化阶段660被实现为固定功能电路系统。

视口SCC阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象照相机位置相关联。照相机位置表示正观看场景的观看者的位置并定义了包围该场景的对象的截头视锥体(viewing frustum)。截头视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于截头视锥体之外的任何几何图元都可被剔除(例如丢弃),因为该几何图元将不会对最终渲染的场景做出贡献。部分位于截头视锥体内并且部分位于截头视锥体外的任何几何图元可以被裁剪(例如,变换为被包围在截头视锥体内的新的几何图元)。此外,可以基于截头视锥体的深度来对每个几何图元进行缩放。然后,将所有可能可见的几何图元传送到光栅化阶段660。

光栅化阶段660将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩模,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。

片段着色阶段670通过对片段中的每一个执行操作集(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图生成片段的像素数据(例如,颜色值)。片段着色阶段670生成像素数据,其被传送到光栅操作阶段680。

光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。

应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线预期处于本公开的范围内。此外,图形处理管线600的任何阶段可以由诸如PPU 400之类的图形处理器内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由诸如PPU 400内的处理单元之类的可编程硬件单元来实现。

图形处理管线600可以经由诸如CPU之类的主机处理器执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以便生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU400的操作的多个指令。API为程序员提供抽象,其允许程序员利用诸如PPU 400之类的专用图形硬件来生成图形数据而不要求程序员利用PPU 400的特定指令集。应用程序可以包括被路由到PPU 400的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 400之间的输入/输出接口在PPU 400上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 400的硬件来实现图形处理管线600。

可以在PPU 400内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动PPU 400上的内核以在一个处理单元(或多个处理单元)上执行顶点着色阶段620。设备驱动程序(或由PPU 400执行的初始内核)还可启动PPU 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在诸如在PPU 400内实现的光栅器或数据组装器之类的固定单元硬件上实现。应当领会,在被处理单元上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。

应用本文公开的技术中的一种或更多种生成的图像可以在监视器或其他显示设备上显示。在一些实施例中,显示设备可以直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接耦合到系统或处理器。这样的网络的示例包括因特网、移动电信网络、WIFI网络以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,系统或处理器生成的图像可以通过网络流式传输至显示设备。这样的流式传输允许例如渲染图像的视频游戏或其他应用程序在服务器、数据中心上或基于云的计算环境中执行,并且渲染的图像被传输和显示于与服务器或数据中心物理上分开的一个或更多个用户设备(例如计算机、视频游戏控制台、智能电话、其他移动设备等等)上。因此,本文公开的技术可以应用于增强被流式传输的图像,并且增强流式传输图像的服务,例如NVIDIAGeForce Now(GFN)、Google Stadia等等。

示例游戏流式系统

图6B为根据本公开一些实施例的游戏流式系统605的示例系统示意图。图6B包括一个或更多个游戏服务器603(其可以包括与图5A的示例处理系统500和/或图5B的示例性系统565相似的组件、特征和/或功能)、一个或更多个客户端604(其可以包括与图5A的示例处理系统500和/或图5B的示例性系统565相似的组件、特征和/或功能)和一个或更多个网络606(其可以与本文描述的一个或更多个网络相似)。在本公开的一些实施例中,系统605可以被实现。

在系统605中,对于游戏会话,一个或更多个客户端设备604可以响应于一个或更多个输入设备的输入而仅仅接收输入数据,将输入数据发送至一个或更多个游戏服务器603,接收来自一个或更多个游戏服务器603的编码的显示数据,并且在显示器624上显示该显示数据。这样,计算强度更高的计算和处理被卸载到一个或更多个游戏服务器603(例如游戏会话的图形输出的渲染,尤其是光线或路径追踪,由一个或更多个游戏服务器603的一个或更多个GPU执行)。换言之,游戏会话从一个或更多个游戏服务器603流式传输至一个或更多个客户端设备604,从而降低一个或更多个客户端设备604对于图形处理和渲染的要求。

例如,关于游戏会话的实例化,客户端设备604可以基于接收到来自一个或更多个游戏服务器603的显示数据而正在显示器624上显示游戏会话的帧。客户端设备604可以接收一个或更多个输入设备之一的输入,并且作为响应生成输入数据。客户端设备604可以经由通信接口621且通过一个或更多个网络606(例如因特网)将输入数据发送至一个或更多个游戏服务器603,并且一个或更多个游戏服务器603可以经由通信接口618接收该输入数据。一个或更多个CPU可以接收输入数据,处理输入数据,并且将数据发送至GPU,该数据使得GPU生成游戏会话的渲染。例如,输入数据可以表示游戏中用户角色的运动,发射武器、重新装弹、传球、使车辆转向等等。渲染组件612可以渲染游戏会话(例如表示输入数据的结果),并且渲染捕获组件614可以捕获游戏会话的渲染作为显示数据(例如作为捕获游戏会话的渲染的帧的图像数据)。游戏会话的渲染可以包括使用一个或更多个游戏服务器603的一个或更多个并行处理单元(例如GPU,其可以进一步采用一个或更多个专用硬件加速器或处理核心的使用以执行光线或路径追踪技术)计算的光线或路径追踪的光照和/或阴影效果。然后,编码器616可以对显示数据进行编码以生成编码的显示数据,并且该编码的显示数据可以经由通信接口618通过一个或更多个网络606发送至客户端设备604。客户端设备604可以经由通信接口621接收该编码的显示数据,并且解码器622可以对该编码的显示数据进行解码以生成显示数据。然后,客户端设备604可以经由显示器624显示该显示数据。

应当指出,本文描述的技术可以包含在存储于计算机可读介质中的可执行指令中,所述指令供基于处理器的指令执行机器、系统、装置或设备使用或结合其使用。本领域技术人员将领会,对于一些实施例而言,可以包括各种不同类型的计算机可读介质以用于存储数据。当在本文使用时,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何适当的介质中的一种或更多种,从而指令执行机器、系统、装置或设备可以从计算机可读介质中读取(或获取)指令并且执行这些指令以实现所描述的实施例。适当的存储格式包括电子、磁性、光学和电磁格式中的一种或多种。常规的示例性计算机可读介质的非详尽列表包括:便携式计算机磁盘;随机存取存储器(RAM);只读存储器(ROM);可擦除可编程只读存储器(EPROM);闪存设备;以及光学存储设备,包括便携式紧密盘(CD)、便携式数字视频盘(DVD)等等。

应当理解,附图中所示的组件的布置用于说明性目的,并且其他布置是可能的。例如,本文所描述的元件中的一个或更多个可以全部或部分实现为电子硬件组件。其他元件可以以软件、硬件或软件和硬件的组合实现。而且,这些其他元件中的一些或全部可以进行组合,一些可以完全省略,并且可以添加附加的组件,同时仍然实现本文描述的功能。因此,本文描述的主题可以在许多不同的变型中实施,并且所有这样的变型预期处于权利要求书的范围之内。

为了便于理解本文描述的主题,许多方面是按照动作序列来描述的。本领域技术人员会认识到,各种不同的动作可以通过专用电路或电路系统、通过一个或更多个处理器执行的程序指令或通过二者的组合执行。本文对于任何动作序列的描述并不预期意味着被描述用于执行该序列的特定顺序必须被遵循。本文描述的所有方法都可以以任何适当的顺序执行,除非本文另有指明或以其他方式与上下文明显矛盾。

在描述所述主题的上下文中(尤其是在下面的权利要求书的上下文中)术语“一”、“一个”、“该/这个”以及类似指称的使用应当被解释为覆盖单数和复数二者,除非本文另有指明或与上下文明显矛盾。后接具有一个或更多个项目的列表的术语“至少一个”(例如A和B中的至少一个)的使用应当被解释为表示选自列出的项目的一个项目(A或B),或列出的项目中的两个或更多个的任意组合(A和B),除非本文另有指明或与上下文明显矛盾。此外,前面的描述仅仅用于说明的目的,并不用于限制的目的,因为寻求保护的范围由此后与其等效物一起阐述的权利要求书限定。本文提供的任何和所有示例或示例性语言(例如“诸如”)的使用仅仅预期更好地说明所述主题,并不构成对主题的范围的限制,除非另有声明。权利要求书和书面说明书二者中指示带来结果的条件的“基于”以及其他类似短语的使用并不预期排除带来该结果的任何其他条件。说明书中的语言不应当被解释为指示任何未要求权利保护的元素对于要求保护的本发明的实施是必不可少的。

技术分类

06120114707354