从二维图像恢复三维模型
1.要求优先权
2.本技术要求于2020年8月17日提交的、标题为“用于面部性能捕获的可微分光栅化”的美国临时申请no.63/066,425,以及于2020年8月26日提交的、标题为“用于面部性能捕获的可微分光栅化”的美国临时申请no.63/070,736的权益。其全部内容在此通过引用并入本文。
背景技术:
3.逆渲染是用于基于2d图像迭代地恢复3d模型的形状、照明和材料属性的技术。逆渲染是具有挑战性的,因为用于渲染3d模型以产生2d图像的操作不能简单地反向执行以从2d图像产生3d模型。常规逆渲染技术通常聚焦于图像质量或性能。需要解决与现有技术相关联的这些问题和/或其他问题。
技术实现要素:
4.本公开的实施例涉及从二维(2d)图像恢复三维(3d)模型。公开了使得能够从对象的2d图像的集合恢复对象的3d模型的系统和方法。2d图像集合中的每个图像包括从不同相机位置捕获的对象。恢复的3d模型可以被表示为由与3d空间中的位置相对应的顶点限定的单个基本网格。可以计算对应于每个图像的3d模型的变形。在实施例中,变形是顶点位置的偏移。3d模型还可以包括表示3d模型的照明和材料属性的纹理映射。3d模型的恢复依赖于分析性抗混叠(analytic antialiasing),用于提供2d图像中的像素颜色和3d模型的几何形状之间的链接。
5.公开了一种用于从2d图像构建3d模型的方法、计算机可读介质和系统。渲染由初始几何形状限定的3d模型的图像,其中由渲染管线执行的抗混叠运算处理与几何形状相关联的数据以对图像进行抗混叠,并且基于图像和参考图像来计算像素差。像素差通过渲染管线的抗混叠运算向后传播以计算对应于减小像素差的几何形状变化,且基于几何形状变化调整初始几何形状以产生限定3d模型的经修改的几何形状。
附图说明
6.下面参考所附附图详细描述用于从2d图像恢复3d模型的本系统和方法,其中:
7.图1a示出了根据实施例的3d模型恢复系统的概念图。
8.图1b示出了根据实施例的3d模型恢复系统的另一概念图。
9.图1c示出了根据实施例的分析性抗混叠的概念图。
10.图1d示出了根据实施例的分析性抗混叠的另一概念图。
11.图2a示出了适用于实现本公开的一些实施例的示例3d模型恢复系统的框图。
12.图2b示出了适用于实现本公开的一些实施例的示例3d模型恢复系统的另一框图。
13.图2c示出了适用于实现本公开的一些实施例的示例3d模型恢复系统的另一框图。
14.图3示出了适用于实现本公开的一些实施例的用于3d模型恢复的方法的流程图。
15.图4示出了适用于实现本公开的一些实施例的示例并行处理单元。
16.图5a为适用于实现本公开的一些实施例的使用图4的ppu实现的处理系统的概念图。
17.图5b示出了其中可以实现各个先前实施例的各个架构和/或功能的示例性系统。
18.图5c示出了在至少一个实施例中可以用于训练和利用机器学习的示例性系统的部件。
19.图6a是适用于实现本公开的一些实施例的由图4的ppu实现的图形处理管线的概念图。
20.图6b示出了适用于实现本公开的一些实施例的示例性游戏流式传输系统。
具体实施方式
21.公开了涉及从2d图像恢复3d模型的系统和方法。模块化可微分渲染器设计通过利用现有的高度优化的硬件图形管线来重建3d模型而产生高性能。在实施例中,可微分渲染器的一个或更多个操作是使用图形处理单元(gpu)图形管线、gpu通用计算核心或在中央处理单元(cpu)上的任何组合来执行的。可微分渲染器实现全部处于高分辨率的操作,诸如光栅化大量三角形、属性插值、滤波纹理查找以及用户可编程着色和几何处理。与常规系统相比,恢复的3d模型是准确的,并且可通过渲染3d模型的分析性抗混叠的图像并通过渲染管线向后传播渲染的图像与参考图像之间的差异以迭代地调整3d模型来生成。
22.图1a示出了根据实施例的3d模型恢复系统100的概念图。从多种相机位置捕获对象的2d图像的集合110。3d模型恢复系统100使用2d图像的集合来构建对象的3d模型130以细化初始3d模型。初始3d模型可以是球体或其他几何形状。在实施例中,3d模型130是基本模型,其被变形以产生对应于该集合中的2d图像中的每一个的特定3d模型。在另一个实施例中,为该集合中的2d图像中的一个或更多个中的每一个构建完整的3d模型130。纹理映射的集合125是限定可应用于3d模型130的照明和材料属性120的全局表面纹理。在实施例中,纹理映射的集合125包括mip映射的纹理。初始全局表面纹理可以是恒定颜色,并且初始全局表面纹理中的每个纹理像素的颜色由3d模型恢复系统100调整以产生纹理映射的集合125。
23.3d模型恢复系统100的目标是产生3d模型130,当使用纹理映射的集合125渲染时,3d模型130产生与对象的2d图像的集合110紧密匹配的渲染图像。3d模型恢复系统100使用与对象的2d图像的集合110相关联的相机位置来渲染3d模型130。与具有渲染高质量图像的目标的常规渲染系统不同,3d模型恢复系统100利用渲染来实现3d模型130的恢复。换言之,渲染的图像被处理以确定并微调限定3d模型的几何形状。在实施例中,几何形状由形成3d模型130的网格的顶点的位置限定。在实施例中,网格由其他类型的图元或表示来限定。在一个实施例中,对象的2d图像的集合110包括视频。
24.3d模型130的恢复可用于执行无标记的面部表现(performance)捕获。无标记意味着在对象的2d图像的集合110中没有标记到对象上的标记点。恢复过程构建了再现在不同2d图像中可见的面部表情的3d模型130。3d模型恢复使得能够生成3d模型的新图像以用于角色动画,诸如在玩游戏期间或用于影片制作期间。
25.现在将阐述关于各种可选架构和特征的更多说明性信息,根据用户的希望,可以
用这些架构和特征来实现前述框架。应强烈注意的是,以下信息是出于说明性目的阐述的并且不应被解释为以任何方式进行限制。以下特征中的任一个可以可选地结合有或不排除所描述的其他特征。
26.图1b示出了根据实施例的3d模型恢复系统100的另一概念图。3d模型恢复系统100接收对象的初始3d模型132和初始全局纹理(未示出)。在实施例中,初始3d模型132的纹理坐标与限定初始3d模型132的每个顶点相关联,并且即使当顶点的位置被修改以产生构建的3d模型134时,顶点与纹理坐标之间的关联也不变。然而,随着所构建的3d模型134被修改,全局纹理的内容被调整。
27.3d模型恢复系统100还接收对象的2d图像的集合110,其可包括参考图像112。如前所述,3d模型恢复系统100的目标是找到全局纹理和所构建的3d模型134(例如,每图像网格),其在从与参考图像112相关联的相机位置114渲染时,产生与参考图像112匹配的渲染的图像115。在实施例中,3d模型恢复系统100比较参考图像112和渲染的图像115,确定差异并计算图像空间损失。然后,通过渲染操作向后传播图像空间损失,以调整初始3d模型132并产生构建的3d模型134。与被配置成从3d几何形状产生图像的常规渲染系统相反,3d模型恢复系统100包括可微分渲染管线。可微分渲染管线能够在前向操作模式中从3d几何形状产生图像,并且还能够在反向操作模式中从图像重建3d几何形状。可以针对若干不同的参考图像重复渲染和反向传播以迭代地调整初始3d模型132,使初始3d模型132变形以对应于各个参考图像。
28.在以下描述的上下文中,渲染的图像115和由3d模型恢复系统100渲染的其他图像是抗混叠图像,其中抗混叠运算处理与初始3d模型132或基础网格相关联的几何数据(例如,顶点位置或图元)以对图像进行抗混叠。在一个实施例中,抗混叠运算是分析性抗混叠运算,其基于在执行光栅化、可见性测试和纹理映射之后的几何覆盖来确定经着色的像素值。
29.图1c示出了根据实施例的分析性抗混叠的概念图。渲染的几何形状136形成与背景或被对象遮挡的另一表面相比更靠近相机的对象的轮廓边138。在实施例中,如果边仅具有一个连接三角形,或者如果边用相同的缠绕(winding)(指示两个三角形是面向前的或面向后的)连接两个三角形,则边形成轮廓。在实施例中,如果连接至边的三角形位于如从相机看到的边的同一侧上,则边形成轮廓,而不管缠绕如何。
30.轮廓边提供准确地恢复对象的3d模型所需的有用信息,因为可以提取图像平面中的对象的形状并且可以结合相机位置将其用于调整3d模型的几何形状(例如,顶点位置)。由此,如本文进一步描述的每个参考2d图像和对应的渲染的分析性抗混叠图像提供用于改进3d模型的附加信息。
31.像素135和140中的每一个包括在像素中心处的单个样本。常规地,渲染的几何形状136在像素135中可见且在像素140中不可见,因为像素135中的样本由渲染的几何形状136覆盖且像素140中的样本未被覆盖。由此,当着色(shade)时,像素135和140显现为经着色像素141和142。对于边138的许多不同位置和定向,经着色的像素141和142看起来相同。值得注意的是,经着色的像素141和142仅提供足够的信息以知道边138的交点137在沿像素135和140的两个样本之间的水平区段的某处。当像素140中的样本被覆盖或未被覆盖时,过渡是突然和不连续的,而不是平滑或逐渐的,并且不精确地表示所渲染的几何形状136。
32.分析性抗混叠使用几何数据(尤其是边138和交点137)来计算经着色的像素143和144,而不是简单地依赖于样本是否被覆盖来计算经着色的像素。如图1c中所示,对应于被渲染的几何形状136部分覆盖,像素144被着色。随着交点137移动为更靠近像素140中的样本,来自所渲染的几何形状136的对经着色的像素144的着色值的贡献增加。相反,随着交点137进一步从像素140中的样本移动,来自所渲染的几何形状136的对经着色的像素144的着色值的贡献的着色值减小。用于确定所渲染的几何形状136对图像空间中的经着色的像素143和144的贡献的相同信息可用于反向工作以计算3d模型空间中的顶点位置的梯度。正如分析性抗混叠在对象可见性方面产生更准确的图像,对应顶点梯度对3d模型提供更准确的调整。
33.在实施例中,边138在水平相邻的像素135和140的中心之间通过,并且由具有被光栅化到水平相邻的像素135和140中的不同三角形标识符(id)的像素135和140检测。像素135和140可以作为一对被一起处理,并且可以发生以下情况之一。(a)边138与像素140内部的交点137处的连接像素中心的线段相交,使得像素135的颜色混合到像素140中。(b)相交发生在像素135内部,因此在相反方向上完成混合。为了近似表面之间的几何覆盖,混合因子是交点的位置的线性函数——从中点处的零到像素中心处的50%。该特定的分析性抗混叠方法是可微的,因为得到的像素颜色是所渲染的几何形状136的顶点的位置的连续函数。在实施例中,考虑到例如边138的端点的定向、长度和位置,可以执行更复杂的计算来确定混合因子,以更准确地估计所渲染的几何形状136覆盖像素140的量。在实施例中,当确定混合因子时,可以考虑多个边。在一个实施例中,可确定多个混合因子以实现两个以上像素之间的混合。
34.图1d示出了根据实施例的分析性抗混叠的另一概念图。渲染的几何形状146形成对象的轮廓边148。像素145和150中的每一个包括在像素中心处的单个样本。常规地,渲染的几何形状146在像素145中可见并且在像素150中不可见,因为像素145中的样本被渲染的几何形状146覆盖并且像素150中的样本未被覆盖。由此,当着色时,像素145和150显现为经着色像素151和152。使用没有分析性抗混叠的常规光栅化(每个像素一个样本,或甚至每个像素多个样本),可见性(即,在每个像素中哪个几何形状是可见的)是不连续的并且分片(piecewise)恒定的——将任何顶点或边148移动无限小的量将不会改变所渲染的几何形状146覆盖哪些像素(或样本)。
35.相比之下,分析性抗混叠使用边148和交点147来计算经着色的像素153和154。交点147在像素145内部,使得像素150的颜色混合到像素145中。如图1d中所示,像素153对应于被渲染的几何形状146部分覆盖而被着色,并且像素154未被着色,因为渲染的几何形状146并不与像素150相交。
36.分析性抗混叠基于像素中的轮廓边的位置来近似像素积分(像素内部的平均表面颜色)。像素的输出颜色取决于限定像素中的轮廓边的顶点的位置等。尤其是,不同三角形id的像素对之间的区段的相交。依存性是(逐片)连续的并且因此是可微分的,并且因此顶点位置的梯度还将反映由于限定轮廓边的更接近的渲染的几何形状覆盖像素多少的变化而引起的输出像素颜色的变化。梯度因此将包含关于顶点的移动如何影响轮廓边在所渲染的图像中的位置的信息。如图1c和图1d所示,随着所渲染的几何形状的轮廓边朝着像素中心移动得更近或者移动得更远离像素中心,像素的颜色改变。由此,像素颜色的改变提供关
于顶点位置的信息。相比之下,当使用常规光栅化时,像素的颜色仅在中心被覆盖或未被覆盖时改变,因此可从颜色确定关于顶点位置的非常少的信息。因此,如果传统渲染的3d模型的轮廓边在图像空间中的位置错误,则很少或没有基于3d模型的哪些顶点可以被调整以使得轮廓边看起来更接近其在渲染的图像中应当处于的位置的信息。
37.给定对象的2d图像的集合,3d模型恢复技术可使用分析性抗混叠来不仅恢复对象的形状,而且恢复3d模型的照明和材料属性。分析性抗混叠包括在可微分光栅化管线中,所述可微分光栅化管线执行延迟着色以渲染3d模型,以产生与2d图像相关联的每个相机位置的渲染的图像。具体来说,对延迟的着色操作的输出执行分析性抗混叠,接收经着色的像素,且将几何形状的数据、三角形id以及顶点位置和索引作为附加输入。
38.可通过首先通过找到具有失配三角形id的所有相邻水平和垂直像素对检测潜在可见性不连续性来实现分析性抗混叠。对于每个潜在不连续性,提取如从在光栅化期间计算的经归一化装置坐标(ndc)深度确定的与更靠近相机的表面相关联的三角形。接着检查三角形的边以确定边中的任一者是否形成轮廓且在像素对的像素中心之间传递。对于水平像素对,仅考虑垂直定向的边(|w
c,1
·yc,2-w
c,2
·yc,1
|》|w
c,1
·
x
c,2-w
c,2
·
x
c,1
|),并且反之亦然,其中(x,y,w)是剪辑空间中的x,y像素坐标。如果轮廓边在像素中心之间跨越区段,则通过确定跨越发生的交点来计算混合权重。接着调整像素颜色以反映像素中的任一表面的近似覆盖。该技术使用轴对齐的厚片(slab)基本上近似每个像素的精确表面覆盖。因此,覆盖估计仅对于延伸超过像素的完美垂直和水平边是精确的。然而,出于恢复准确3d模型的目的,覆盖估计对于其他(非垂直、非水平)相交而言是足够充分的近似。在实施例中,考虑到例如边端点的定向、长度和位置,可以执行更复杂的计算来确定混合因子。
39.给定几何形状、材料以及相机和照明模型形式的3d场景描述,渲染2d图像归结为两个计算问题:计算出3d场景的在每个像素中可见的那些部分以及可见部分看起来是什么颜色。适当的可微分渲染器必须为在该过程中使用的所有参数(例如,照明和材料参数以及纹理映射的内容)提供梯度。在以下描述的上下文中,将渲染过程分解成以下形式是有用的,其中在屏幕坐标(xi,yi)处的像素的最终颜色ii由以下给出:
40.ii=filter
x,y
(shade(m(p(x,y)),lights))(xi,yi)
ꢀꢀꢀꢀꢀꢀ
等式(1)
41.此处,p(x,y)表示在从3d投影到2d之后在(连续)图像坐标(x,y)处可见的世界点,且m(p)表示生活在场景的表面上的所有空间变化因子(纹理映射、法线向量等)。着色函数通常对光表面相互作用进行建模。对于图像质量和可微分性两者至关重要的2d抗混叠滤波器被应用于连续(x,y)中的着色结果,并且通过在像素中心(x,y)处对结果进行采样来获得最终颜色。
42.图2a示出了适用于实现本公开的一些实施例的示例3d模型恢复系统100的框图。应当理解,本文所述的这种和其他布置仅作为示例被阐述。除了所示的那些布置和元素之外或代替所示的那些布置和元素,还可以使用其他布置和元素(例如,机器、接口、功能、顺序、功能分组等),并且一些元素可以一起省略。进一步,本文描述的许多元件是可被实现为分立或分布式组件或结合其他组件、和在任何合适的组合和位置中实现的功能实体。本文中描述为由实体执行的各种功能可由硬件、固件和/或软件执行。例如,各种功能可由执行存储在存储器中的指令的处理器执行。此外,本领域普通技术人员将理解,执行3d模型恢复系统100的操作的任何系统在本公开的实施例的范围和精神内。
43.3d模型恢复系统100包括3d模型构建单元200、可微分渲染器215和图像空间损失单元245。可微分渲染器215包括渲染管线205和反向传播管线260。3d模型在前向传递(pass)中通过可微分渲染器215的渲染管线205从相机位置被渲染,以产生抗混叠图像。3d模型构建单元200将3d模型的表示连同参考相机位置一起提供给渲染管线205。在实施例中,初始3d模型可以是与立方体或球体一样简单的基础网格。在实施例中,3d模型包括3d模型空间中的顶点以及与顶点相关联的属性。对应于初始3d模型的初始表面纹理映射可以是均匀的颜色。
44.渲染管线205处理3d模型,从而执行变换(从3d到2d)、光栅化、插值、纹理查找和抗混叠的步骤。渲染管线205中的最后一个阶段(stage)执行分析性抗混叠,以计算几何边对经渲染的图像的可见性相关效果。当由反向传播管线260反向执行时,分析性抗混叠运算确定像素颜色的梯度如何转移到3d模型的梯度。
45.图像空间损失单元245基于抗混叠图像和与参考相机位置相关联的对象的参考(目标)图像之间的每像素颜色差确定图像空间(颜色)损失。该差量化了对象的3d模型的准确度并且表示“损失”。在实施例中,所述差被计算为每像素均方差。在实施例中,计算图像的高维嵌入之间的差,例如,使用预训练的神经网络计算。图像空间损失惩罚其中渲染不匹配参考图像的3d模型解决方案。然而,图像空间损失单元245可与图像空间损失一起使用其他损失函数来正则化优化。在实施例中,拉普拉斯损失惩罚其中网格的曲率与基础网格相比严重改变的解决方案,有效地鼓励优化以仅考虑物理上合理的解决方案。
46.反向传播管线260接收指示抗混叠图像的每个像素的颜色如何影响损失的抗混叠图像梯度。反向传播管线260计算(1)输入到渲染管线205的最后一个阶段的经混叠图像的梯度(分析性抗混叠),和(2)顶点位置的梯度。针对多个相机位置执行前向渲染、与参考图像的比较、以及反向传播,以产生用于每个参考图像的初始3d模型或基础网格的修改版本的表面纹理映射和几何形状。结果是对象的3d模型和相应的表面纹理映射,其在被渲染时与目标图像匹配。由于所渲染的轮廓边的多样性,使用多个相机位置使得能够通过分析性抗混叠来恢复对象的不同部分。
47.在实施例中,纹理映射值(例如,纹理映射坐标和纹理像素)和顶点位置是可以被优化以减少损失的潜在变量,从而提高3d模型的准确性。使用反向传播来执行确定如何改变潜在变量以实现损失的降低。当通过反向传播管线260传播抗混叠图像梯度时,每个计算步骤的输出的梯度是已知的(即,每个计算步骤的输出值的变化将如何影响损失),从而可以确定输入至计算步骤的梯度(即,每个计算步骤的输入值的变化将如何影响损失)。在前向传播期间通过渲染管线105由每个步骤计算的参数可被提供到反向传播管线260,以用于计算对应的每阶段梯度。
48.在抗混叠图像梯度被反向传播通过整个反向传播管线260之后,可以量化潜在变量的改变如何影响损失,并且可以在应减少损失的方向上调整潜在变量。在反向传播期间计算的可见性相关的3d模型梯度指示由于部分(fractional)像素覆盖的改变而移动顶点位置对抗混叠图像的影响。3d模型构建单元200接收3d模型梯度并调整3d模型以减少损失。
49.将等式(1)应用于可微分渲染、几何形状、投影和照明都可以被视为参数化函数。可见世界点受到由θg参数化的几何形状以及由θc参数化的投影的影响。类似地,表面因子由θm参数化,且光源由θ
l
参数化。在最简单的情况下,θg和θm可以描述例如固定拓扑的三角形
网格的顶点坐标和存储在顶点处并且被插值到三角形内部的扩散反照率(albedo)。在实施例中,3d模型表示是复杂参数化,其由3d模型构建单元200内的深度学习模型计算并且输入到可微分渲染器115。在以下描述的上下文中,可微分渲染包括计算渲染的图像i的标量函数l(i)相对于场景参数的梯度数l(i)相对于场景参数的梯度注意,这不需要计算(非常大的)雅可比矩阵等,而是仅需要实现与雅可比转置的乘法(“反向传播”)的能力,从而通过链规则产生最终结果:
[0050][0051]
并且对于其他参数向量类似。
[0052]
两个主要因素使得高效渲染算法的设计具有挑战性。首先,3d模型或世界空间点与屏幕或图像坐标之间的映射p(x,y)是动态的:其受到场景几何形状和3d到2d投影两者的改变的影响。此外,由于遮挡边界,映射是不连续的。这两个因素也是反向传播管线260计算梯度的难度的中心点。
[0053]
可微分渲染器215可以以高分辨率渲染在几何细节、遮挡和外观方面复杂的3d场景。在一个实施例中,实时执行渲染,且管线中的阶段(stage)对几何图元和像素两者并行化处理。在实施例中,可微分渲染器215包括模块化、可配置和可编程阶段,以使得能够容易地构建潜在复杂的定制渲染管线。在实施例中,可微分渲染器215以张量的形式采用输入几何形状和纹理映射(例如,3d模型),允许以自由选择的方式参数化两者,并且使渲染图元能够用作复杂学习系统的构建块。
[0054]
可微分渲染器215针对每个像素对来自等式(1)的m(p(x,y))项执行延迟着色的第一计算,并且将中间结果存储在图像空间规则网格中。所述网格随后由着色函数消耗以产生经着色的输出网格,所述经着色的输出网格被输入到等式(1)中的分析性抗混叠滤波器。有效地,假设着色相对于在轮廓边界处的覆盖效果是恒定的,但是相对于在外观上的其他效果不是恒定的。
[0055]
图2b示出了适合用于实现本公开的一些实施例的另一示例3d模型恢复系统100的另一框图。可微分渲染管线205包括顶点变换单元210、光栅化器220、插值单元230、纹理查找240和分析性抗混叠单元250。在实施例中,可微分渲染管线205还包括反向传播管线260。反向传播管线260的细节在图2c中示出。在实施例中,可微分渲染管线205和反向传播管线260被组合,并且由反向传播管线260执行的操作由顶点变换单元210、光栅化器220、插值单元230、纹理查找240、分析性抗混叠单元250的组合执行。
[0056]
3d模型构建单元200针对可微分渲染器215的每次迭代调整3d模型。在实施例中,3d模型构建单元200包括“变形网络”,该变形网络采用3d模型的基础网格和帧索引表示,并且输出顶点位置以渲染针对参考相机位置的抗混叠图像。变形网络不一定是通用神经网络,但它可以比针对每个帧单独具有顶点位置阵列更有效地学习(即,更服从优化)。3d模型构建单元200还为可微分渲染器215的每次迭代调整全局表面纹理。如图2b所示,输出到顶点变换单元210的3d模型包括3d模型空间中的顶点和属性。
[0057]
顶点变换单元210执行世界、视图和同构透视变换,以产生被输出到光栅化器220的经变换的顶点。光栅化器220执行透视划分并实现世界坐标和离散像素坐标之间的动态
映射。每像素辅助数据可以重心坐标和三角形id的形式在前向传递通过渲染管线205中存储。使用重心和ndc深度(u,v,zc/wc)作为基本坐标系允许着色和插值的容易耦合,以及在反向传递通过反向传播管线260时将纹理梯度与几何梯度组合。
[0058]
在实施例中,光栅化器220消耗具有给定为剪辑空间同构坐标(xc,yc,zc,wc)的阵列的顶点位置的三角形。反向传播管线260然后计算损失l相对于剪辑空间位置的梯度可以在3d模型恢复系统100的外部执行关于任何更高级参数化的微分。
[0059]
在前向传递通过渲染管线205时,光栅化器220输出与正被渲染的图像相关联的2d样本网格,其中每个位置存储元组(id,u,v,zc/wc),其中id标识覆盖该样本的三角形,(u,v)是指定沿着三角形的相对位置的重心坐标,且z/w对应于归一化的设备坐标(ndc)中的深度。在实施例中,为空白像素保留特殊id。重心坐标充当用于渲染管线205中的下游阶段的插值和纹理映射计算的便利基本域。在实施例中,ndc深度仅由后续分析性抗混叠单元250利用,并且不传播梯度。在实施例中,光栅化器220针对每个像素输出具有重心相对于图像坐标的2x2雅可比矩阵的辅助输出缓冲器。该辅助输出缓冲器可由插值单元230使用以计算纹理坐标的图像空间导数,所述图像空间导数又可由纹理查找240使用以用于确定经滤波的纹理查找的纹理占用空间。
[0060]
在光栅化器220内,可利用硬件图形管线通过opengl执行光栅化。使用硬件图形管线确保了光栅化是准确的并且例如没有由于精度问题导致的可见性泄漏。另外,使用硬件图形管线自动提供适当的视椎体裁剪。重心与图像坐标之间的每像素2x2雅可比矩阵可从opengl片段着色器获得,其由2x2像素四边形中的有限差计算。或者,可针对每个像素分析性地计算每像素2x2雅可比矩阵。
[0061]
插值单元230将每顶点数据(即,顶点属性)扩展到像素或图像空间,从而产生经插值的属性。利用光栅化器220计算的重心,插值单元230完成前向方向的映射,这些重心也可被反向传播管线260中的对应插值操作用来从图像空间映射到ndc空间。
[0062]
属性插值是图形管线的标准部分。确切地说,它需要计算顶点属性的加权和,其中权重由重心给出,由此创建像素与属性之间的映射。一般来说,顶点属性可用于任意目的。然而,典型用途之一是提供用于纹理映射的2d坐标。除了其一般操作之外,插值单元230还提供用于在前向传递中计算纹理坐标的图像空间导数的特殊支持,所述纹理坐标的图像空间导数稍后可由纹理查找240在确定mip映射滤波器占用空间时使用。
[0063]
插值单元230接收与第i个顶点相关联的属性ai的向量,其中在像素(x,y)中可见的三角形的属性索引为i
0,1,2
,且由光栅化器220产生的重心为u=u(x,y)及v=v(x,y)。给定光栅化器的输出(每像素三角形id和重心)的情况下,插值向量a被定义为
[0064]
,
[0065]
前向传递的实现是直截了当的。使用由光栅化器输出的重心雅可比矩阵通过来计算被标记为要求导数的属性的图像空间导数,其中最后的雅可比矩阵易于从等式(2)中导出。
[0066]
纹理查找240接收插值的纹理坐标属性和纹理坐标属性的图像空间导数,并且从
存储在3d模型构建单元200中的全局表面纹理读取纹理像素。纹理查找240使用纹理像素和图像空间导数来产生经着色的像素。反向传播管线260可以通过输入纹理坐标以及(mip映射的)纹理映射的内容两者来正确地向后传播梯度。
[0067]
当纹理查找240使用三线mip映射的纹理获取执行纹理映射时,(连续的)mip映射金字塔层级(即,细节层级,lod)基于纹理坐标的进入的图像空间导数来选择。然后,使用来自该对适当的mip金字塔层级的八个最近的纹理像素来执行三线插值。mip级别可以基于由导数定义的样本占用空间的长轴的纹理空间长度来选择。在实施例中,mip级别由插值单元230作为插值操作的一部分来计算,其中必要的数据可容易地获得。在一个实施例中,纹理查找240可被配置为使用双线性、点采样或其他类型的mip映射或非mip映射纹理获取来执行纹理映射。
[0068]
包括由纹理查找240输出的经着色像素的图像不展现表面内(渲染几何形状内部)的混叠。然而,点采样的可见性在可见性不连续处引起混叠,并且更关键地,不能产生用于调整3d模型的顶点位置的可见性相关的梯度。分析性抗混叠单元250将不连续性转换成平滑变化,从该平滑变化可计算梯度。注意,抗混叠可仅在着色之后执行,且因此必须实现为渲染管线205的单独阶段,而不是作为光栅化的一部分执行。
[0069]
分析性抗混叠单元250接收从延迟着色、经变换顶点、三角形id和深度(zc/wc)产生的经着色像素,且输出抗混叠图像。分析性抗混叠单元250根据需要检测可见性不连续且与顶点位置相关联,以计算梯度。在实施例中,通过找到具有失配三角形id的所有相邻水平和垂直像素对,并且如先前结合图1c和图1d所述,计算混合权重以调整在检测到的相邻水平和垂直像素对的中心之间交叉的轮廓边的像素颜色,来检测潜在的可见性不连续。为了在反向传播期间为梯度计算做准备,由分析性抗混叠单元250在前向传递期间执行的不连续性分析的结果可被存储以避免在反向传递期间重复计算。
[0070]
图2c示出了适合用于实现本公开的一些实施例的示例3d模型恢复系统100的另一框图。示出了反向传播管线260的细节。反向传播管线260中的阶段中的一个或更多个阶段可集成到渲染管线205的相应阶段中。反向传播管线260中的阶段250-b、240-b、230-b、220-b和210-b分别对应于分析性抗混叠单元250、纹理查找240、插值单元230、光栅化器220和顶点变换单元210。
[0071]
阶段250-b使用不连续性分析的存储结果针对由分析性抗混叠单元250在前向传递中分析性地抗混叠的每个像素对计算梯度。通过确定轮廓边的两个顶点位置如何影响混合权重,将像素的抗混叠图像梯度转移到顶点位置梯度。由阶段250-b针对混叠图像计算的相对于经着色像素的损失梯度作为经着色像素梯度被输出到阶段240-b。相对于顶点位置的损失梯度由阶段250-b输出到阶段210-b以从裁剪空间变换到3d模型空间。
[0072]
阶段240-b计算相对于属性a和相对于纹理像素的损失梯度。一旦选择了mip映射级别,前向和反向传递的操作非常类似于属性插值:八个最接近的纹理像素代替三个三角形顶点,并且确定八纹理像素全体内的精确位置的三个子纹理像素坐标代替重心。mip映射的纹理化在其多尺度性质上而不同于属性插值:梯度在反向传递中在mip映射金字塔的各个级别上累积。由于mip映射金字塔的所有mip映射级别在前向传递的构建期间都是从最精细级别的纹理获得的,因此反向传递需要通过转置构建操作并平坦化梯度金字塔以使得在最精细级别密集地指定梯度来完成。幸运的是,这是通过在最粗糙的级别开始、递归地对结
果进行上采样并且精确地从下一级别添加梯度(像坍塌拉普拉斯金字塔一样)而容易地实现。阶段240-b向3d模型构建单元200提供纹理像素梯度。纹理像素梯度用于调整3d模型的全局表面纹理映射的纹理像素。
[0073]
阶段230-b与插值单元230相关联并且接收相对于插值属性的每像素损失梯度阶段230-b向3d模型构建单元200提供属性梯度。属性梯度可以用于调整3d模型的全局表面纹理映射的纹理坐标。在实施例中,由scatter-add(发散添加)将相对于属性张量的梯度计算为张量,其将简单的雅可比矩阵应用于每像素输入梯度。通过简单的微分,由阶段230-b计算的相对于输入重心的梯度由下式给出:
[0074][0075]
光栅化器反向传递针对每个像素接收相对于由光栅化器输出的重心的梯度并且针对每个输入顶点计算梯度重心位置与裁剪空间位置之间的透视映射容易被分析性地微分,并且必要的输出由阶段220-b通过以下等式来计算:
[0076][0077]
等式(4)可被实现为对输出像素的密集运算,其使用scatter-add运算来基于三角形id累积从像素到正确顶点的梯度。
[0078]
阶段210-b与顶点变换单元210相关联,并且将用于3d模型的裁剪空间梯度变换到3d模型空间,以向3d模型构建单元100提供3d模型梯度。在实施例中,3d模型构建单元100直接使用顶点位置来表示3d模型几何形状,并且基于3d模型梯度来调整顶点位置。在另一个实施例中,3d模型构建单元100将3d模型几何形状表示为变形网络的权重集,并且基于3d模型梯度来调整权重。变形网络将该权重集应用于基础网格,以产生可以针对每个相机位置渲染的3d模型。
[0079]
在实施例中,3d模型恢复系统100被配置为构造2d模型,其中由初始几何形状限定的3d模型被由2d模型空间中的多边形2d几何形状限定的2d模型代替。当构建2d模型时,可以省略深度相关的计算。在实施例中,恢复的2d模型表示由2d网格或弯曲图元限定的字体或2d裁剪艺术。
[0080]
图3示出了适合于实现本公开的一些实施例的用于3d模型恢复的方法300的流程图。本文描述的方法300的每个框包括可使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,各种功能可通过处理器执行存储在存储器中的指令而执行。所述方法还可体现为存储在计算机存储介质上的计算机可用指令。仅举几例,该方法可以由独立应用、服务或托管服务(独立地或与另一托管服务组合)、或另一产品的插件来提供。此外,通过示例,关于图1a、图1b、图2a、图2b和图2c的3d模型恢复系统100来描述方法300。然而,此方法可另外或替代地由任一系统或系统的任何组合执行,所述系统包括但不限于本文中所描述的系统。此外,本领域普通技术人员将理解,执行方法300的任何系统都在本公开的实施例的范围和精神内。
[0081]
在步骤305处,渲染由初始几何形状限定的3d模型的图像,其中由渲染管线执行的
抗混叠运算处理与几何形状相关联的数据以对图像进行抗混叠。在实施例中,初始几何形状由顶点位置或多个位置限定。在另一个实施例中,初始几何形状由施加到基础网格的权重限定。权重可以由变形网络应用于基础网格以产生3d模型。
[0082]
在实施例中,抗混叠运算是分析性抗混叠运算,其包括基于与几何形状相关联的数据确定轮廓边与一对相邻像素相交,计算相邻像素之间的混合权重,以及根据混合权重调整相邻像素的颜色。在实施例中,基于相邻像素之间的交点来计算混合权重。在实施例中,考虑例如边端点的定向、长度和位置,执行更复杂的计算以确定混合因子。在实施例中,确定包括:标识与第一标识符相关联的第一渲染的几何形状和与第二标识符相关联的第二渲染的几何形状之间的轮廓边。在实施例中,抗混叠运算基于像素内的轮廓边的位置来近似像素积分。
[0083]
在步骤310,基于图像和参考图像计算像素差。在实施例中,像素差通过损失函数计算为每像素均方差。在实施例中,计算图像的高维嵌入之间的像素差,例如,使用预训练的神经网络计算。
[0084]
在步骤315处,像素差通过渲染管线的抗混叠运算向后传播以计算对应于减小像素差的几何形状改变。在实施例中,像素差用于计算混叠图像的每像素梯度。在实施例中,几何变化包括顶点位置的梯度。在实施例中,传播像素差还包括:产生对应于3d模型的表面纹理。表面纹理表示3d模型的照明和/或材料属性。
[0085]
在步骤320,基于几何形状变化调整初始几何形状以产生限定3d模型的经修改的几何形状。可针对至少一个附加参考图像重复步骤305、310、315和320。在实施例中,参考图像和至少一个附加参考图像各自与不同的相机位置相关联。在实施例中,根据相机位置来渲染3d模型的图像。
[0086]
3d模型恢复系统100的主要目标是构建对象的准确3d模型。虽然3d模型恢复系统100还可渲染对象的抗混叠图像,但高质量图像的生成应当被认为是次要目标。可微分渲染器215提供用于可编程着色和几何处理的框架,从而提供高度的用户控制以及渲染由数百万个几何图元组成的场景的高分辨率图像的能力。可微分渲染器215提供用于以下操作的定制、高性能实现:光栅化、属性插值、纹理滤波、以及用于构造准确的3d模型的抗混叠和微分操作。
[0087]
并行处理架构
[0088]
图4示出了根据实施例的并行处理单元(ppu)400。ppu 400可用于实现3d模型恢复系统100。ppu 400可用于实现3d模型恢复系统100内的3d模型构建单元200、可微分渲染器215、渲染管线205、反向传播管线260和图像空间损失单元245中的一个或更多个。在实施例中,诸如ppu 400之类的处理器可被配置为实现神经网络模型。神经网络模型可被实现为由处理器执行的软件指令,或者在其他实施例中,处理器可包括被配置成处理一组输入(例如,表示值的电信号)以生成一组输出的硬件元件的矩阵,该组输出可表示神经网络模型的激活。在其他实施例中,神经网络模型可被实现为软件指令和由硬件元件矩阵执行的处理的组合。实现神经网络模型可包括通过例如神经网络模型的有监督或无监督训练来确定神经网络模型的参数集合,以及,或者在替换方案中,使用该参数集合来执行推理以处理新颖的输入集合。
[0089]
在一个实施例中,ppu 400是在一个或更多个集成电路器件上实现的多线程处理
器。ppu 400是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由ppu 400执行的指令集的实例。在一个实施例中,ppu 400是图形处理单元(gpu),其被配置为实现用于处理三维(3d)图形数据的图形渲染管线,以便生成用于在显示设备上显示的二维(2d)图像数据。在其他实施例中,ppu 400可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
[0090]
一个或更多个ppu 400可以被配置为加速数千个高性能计算(hpc)、数据中心、云计算和机器学习应用。ppu 400可被配置为加速众多深度学习系统和应用,用于自主车辆、模拟、计算图形(诸如光线或路径跟踪)、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
[0091]
如图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)堆叠在每个设备内。
[0092]
nvlink 410互连使得系统能够扩展并且包括与一个或更多个cpu结合的一个或更多个ppu 400,支持ppu 400和cpu之间的高速缓存一致性,以及cpu主控。数据和/或命令可以由nvlink 410通过集线器430发送到ppu 400的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图5b更详细地描述nvlink 410。
[0093]
i/o单元405被配置为通过互连402从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。i/o单元405可以经由互连402直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,i/o单元405可以经由互连402与一个或更多个其他处理器(例如,一个或更多个ppu 400)通信。在一个实施例中,i/o单元405实现外围组件互连高速(pcie)接口,用于通过pcie总线进行通信,并且互连402是pcie总线。在替代的实施例中,i/o单元405可以实现其他类型的已知接口,用于与外部设备进行通信。
[0094]
i/o单元405对经由互连402接收的数据包进行解码。在一个实施例中,数据包表示被配置为使ppu 400执行各种操作的命令。i/o单元405按照命令指定将解码的命令发送到ppu 400的各种其他单元。例如,一些命令可以被发送到前端单元415。其他命令可以被发送到集线器430或ppu 400的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,i/o单元405被配置为在ppu 400的各种逻辑单元之间和之中路由通信。
[0095]
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向ppu 400提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数
据。缓冲区是存储器中可由主机处理器和ppu 400两者访问(例如,读/写)的区域。例如,i/o单元405可以被配置为经由通过互连402传输的存储器请求访问连接到互连402的系统存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向ppu 400发送指向命令流开始的指针。前端单元415接收指向一个或更多个命令流的指针。前端单元415管理一个或更多个流,从流读取命令并将命令转发到ppu 400的各个单元。
[0096]
前端单元415耦合到调度器单元420,其配置各种gpc 450以处理由一个或更多个流定义的任务。调度器单元420被配置为跟踪与由调度器单元420管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个gpc 450,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元420管理一个或更多个gpc 450上的多个任务的执行。
[0097]
调度器单元420耦合到工作分配单元425,其被配置为分派任务以在gpc 450上执行。工作分配单元425可以跟踪从调度器单元420接收到的若干调度的任务。在一个实施例中,工作分配单元425为每个gpc 450管理待处理(pending)任务池和活动任务池。当gpc 450完成任务的执行时,该任务从gpc 450的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在gpc 450上执行。如果gpc 450上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从gpc 450中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在gpc 450上执行。
[0098]
在一个实施例中,主机处理器执行实现应用程序编程接口(api)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在ppu 400上执行。在一个实施例中,多个计算应用由ppu 400同时执行,并且ppu 400为多个计算应用程序提供隔离、服务质量(qos)和独立地址空间。应用程序可以生成指令(例如,api调用),其使得驱动程序内核生成一个或更多个任务以由ppu 400执行。驱动程序内核将任务输出到正在由ppu 400处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。该任务可被分配到gpc 450内的一个或更多个处理单元,并且指令被调度用于通过至少一个线程束来执行。
[0099]
工作分配单元425经由xbar470与一个或更多个gpc450通信。xbar470是将ppu 400的单元中的许多单元耦合到ppu 400的其他单元的互连网络。例如,xbar470可被配置为将工作分配单元425耦接至特定的gpc450。尽管未明确示出,ppu 400的一个或更多个其他单元也可以经由集线器430连接到xbar 470。
[0100]
任务由调度单元420管理并且由工作分配单元425分派给gpc 450。gpc 450被配置为处理任务并且产生结果。结果可以由gpc 450内的其他任务消耗,经由xbar 470路由到不同的gpc 450,或者存储在存储器404中。结果可经由存储器分区单元480写入到存储器404,存储器分区单元480实施用于将数据读取到存储器404和将数据从存储器404写入的存储器接口。可以经由nv链路410将结果传输至另一个ppu 400或cpu。在实施例中,ppu 400包含数目u的存储器分区单元480,其等于耦合到ppu 400的存储器404的单独且不同的存储器装置的数目。每个gpc 450可以包括存储器管理单元以提供虚拟地址到物理地址的转换、存储器保护和存储器请求的仲裁。在一个实施例中,存储器管理单元提供用于执行虚拟地址到存储器404中的物理地址的转换的一个或更多个转换后备缓冲器(tlb)。
[0101]
在一个实施例中,存储器分区单元480包含光栅操作(rop)单元、二级(l2)高速缓存存储器和耦合到存储器404的存储器接口。存储器接口可以实现32、64、128、1024位数据总线等,用于高速数据传输。ppu 400可连接到多达y个存储器设备,例如高带宽存储器堆栈或图形双数据速率、版本5、同步动态随机存取存储器或其他类型的持久存储装置。在实施例中,存储器接口实现hbm2存储器接口,并且y等于半u。在实施例中,hbm2存储器堆栈位于与ppu 400相同的物理封装上,与传统的gddr5sdram系统相比提供了显著的功率和面积节省。在实施例中,每个hbm2堆叠包括四个存储器管芯并且y等于4,其中每个hbm2堆叠包括每管芯两个128位沟道(总共8个沟道)以及1024位的数据总线宽度。
[0102]
在实施例中,存储器404支持单错误校正双错误检测(secded)错误校正码(ecc)以保护数据。ecc为对数据破坏敏感的计算应用提供了更高的可靠性。可靠性在其中ppu 400处理非常大的数据集和/或运行应用达扩展时段的大规模群集计算环境中尤其重要。
[0103]
在实施例中,ppu 400实现多级存储器层次结构。在一个实施例中,存储器分区单元480支持统一存储器来为cpu和ppu 400存储器提供单个统一虚拟地址空间,从而实现虚拟存储器系统之间的数据共享。在实施例中,跟踪ppu 400对位于其他处理器上的存储器的访问的频率以确保存储器页面被移动到ppu 400的更频繁地访问页面的物理存储器。在一个实施例中,nvlink410支持地址转换服务,允许ppu 400直接访问cpu的页表并且提供ppu 400对cpu存储器的完全访问。
[0104]
在实施例中,复制引擎在多个ppu 400之间或者在ppu 400和cpu之间传输数据。复制引擎可以生成未映射到页表中的地址的页错误。存储器分区单元480可接着服务于页错误,将地址映射到页表中,其后复制引擎可执行传送。在常规系统中,对于多个处理器之间的多个复制引擎操作,存储器被钉住(例如,不可分页),从而大大减少了可用存储器。在硬件页面故障的情况下,可将地址传递到复制引擎,而不用担心存储器页面是否驻留,且复制过程是透明的。
[0105]
来自存储器404或其他系统存储器的数据可由存储器分割单元480提取且存储在l2高速缓存存储器460中,所述l2高速缓存存储器460位于芯片上且在不同gpc450之间共享。如图所示,每一存储器分区单元480包含与对应存储器404相关联的l2高速缓存存储器的一部分。较低级高速缓存然后可在gpc450内的不同单元中实现。例如,gpc 450中的每个处理单元可以实现一级(l1)缓存。l1高速缓存是专用于特定处理单元的私有存储器。l2高速缓存460耦合到存储器接口470和xbar470,并且来自l2高速缓存的数据可被获取并存储在l1高速缓存中的每一个中以供处理。
[0106]
在实施例中,每个gpc 450内的处理单元实现simd(单指令、多数据)架构,其中,一组线程(例如,线程束)中的每个线程被配置成用于基于相同的指令集来处理不同的数据集。线程组中的所有线程执行相同的指令。在另一个实施例中,处理单元实现simt(单指令,多线程)架构,其中,一组线程中的每个线程被配置用于基于相同的指令集来处理不同的数据集合,但是其中,允许一组线程中的各个线程在执行期间分叉。在一个实施例中,为每一线程束维持程序计数器、调用栈和执行状态,从而在线程束内的线程发散时实现线程束与线程束内的串行执行之间的并发性。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而实现所有线程之间、线程束内和线程束之间的相等并发性。当针对每个单独的线程保持执行状态时,为了最大效率,可以收敛并且并行执行执行相同指
令的线程。
[0107]
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动api支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
[0108]
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
[0109]
每个处理单元包括大量(例如128个等)不同的处理核心(例如功能单元),其可以包括完全管线化的、单精度、双精度和/或混合精度,并且其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的ieee 754-2008标准。在一个实施例中,核心包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
[0110]
张量核心被配置为执行矩阵运算。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于在神经网络训练和推理期间的卷积运算的gemm(矩阵-矩阵乘法)。在一个实施例中,每个张量核心在4
×
4矩阵上运算并且执行矩阵乘法和累加运算d=a
×
b+c,其中a、b、c和d是4
×
4矩阵。
[0111]
在实施例中,矩阵乘法输入a和b可以是整数、定点或浮点矩阵,而累加矩阵c和d可以是相等或更高位宽的整数、定点或浮点矩阵。在实施例中,张量核心在具有32位整数累加的一位、四位或八位整数输入数据上运算。8位整数矩阵乘法需要1024个运算并且导致全精度乘积,然后使用32位整数加法将其与8x8x16矩阵乘法的其他中间乘积进行累加。在一个实施例中,张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4
×4×
4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。api(诸如cuda 9c++api)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自cuda-c++程序的张量核心。在cuda层面,线程束级接口假定16
×
16尺寸矩阵跨越线程束的全部32个线程。
[0112]
每个处理单元还包括执行特殊函数(例如,属性评估、倒数平方根等)的m个特殊函数单元(sfu)。在一个实施例中,sfu可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,sfu可以包括被配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器404加载纹理映射(例如,纹理像素的2d阵列)并且对纹理映射进行采样以产生经采样的纹理值,用于在由处理单元执行的着色器程序中使用。在一个实施例中,纹理映射被存储在共享存储器其可以包括或包含l1高速缓存中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理映射)的过滤操作。在一个实施例
中,每个处理单元包括两个纹理单元。
[0113]
每个处理单元还包括n个存取单元(lsu),其实现共享存储器和寄存器文件之间的加载和存储操作。每个处理单元包括将每个核心连接到寄存器文件以及将lsu连接到寄存器文件、共享存储器的互连网络。在一个实施例中,互连网络是交叉开关,其可以被配置为将任何核心连接到寄存器文件中的任何寄存器,以及将lsu连接到寄存器文件和共享存储器中的存储器位置。
[0114]
共享存储器是片上存储器阵列,其允许数据存储和处理单元之间以及处理单元中的线程之间的通信。在一个实施例中,共享存储器包括128kb的存储容量并且在从每个处理单元到存储器分区单元480的路径中。共享存储器可以用于高速缓存读取和写入。共享存储器、l1高速缓存、l2高速缓存和存储器404中的一个或更多个是后备存储。
[0115]
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器内的集成使共享存储器起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
[0116]
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元425将线程块直接指派并分配给gpc 450内的处理单元。线程执行相同的程序,使用计算中的唯一线程id来确保每个线程生成唯一结果,使用处理单元执行程序并执行计算,使用共享存储器以在线程之间通信,以及使用lsu通过共享存储器和存储器分区单元480读取和写入全局存储器。当被配置用于通用并行计算时,处理单元还可以写入调度器单元420可用来在处理单元上启动新工作的命令。
[0117]
ppu 400可以各自包括以下各项和/或被配置成用于执行以下功能,一个或更多个处理核心和/或其组件,如张量核心(tc)、张量处理单元(tpu)、像素视觉核心(pvc)、光线跟踪(rt)核心、视觉处理单元(vpu)、图形处理群集(gpc)、纹理处理群集(tpc)、流式多处理器(sm)、树横向单元(ttu)、人工智能加速器(aia)、深度学习加速器(dla)、算术逻辑单元(alu)、专用集成电路(asic)、浮点单元(fpu)、输入/输出(i/o)元件、外围组件互连(pci)或外围组件互连快速(pcie)元件等。
[0118]
ppu 300可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(pda)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,ppu 300包含在单个半导体衬底上。在另一个实施例中,ppu 300与一个或更多个其他器件(诸如附加ppu 300、存储器304、精简指令集计算机(risc)cpu、存储器管理单元(mmu)、数字-模拟转换器(dac)等)一起被包括在片上系统(soc)上。
[0119]
在一个实施例中,ppu 300可以被包括在图形卡上,图形卡包括一个或更多个存储器设备304。图形卡可以被配置为与台式计算机的主板上的pcie插槽接口。在又一个实施例中,ppu 300可以是包含在主板的芯片集中的集成图形处理单元(igpu)或并行处理器。在又一实施例中,ppu 400可在可重新配置的硬件中实现。在又一实施例中,ppu 400的部分可在可重新配置的硬件中实现。
[0120]
示例性计算系统
[0121]
具有多个gpu和cpu的系统被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能gpu加速系统,以解决更大的问题。随着高性能系统内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
[0122]
图5a是根据一个实施例的使用图4的ppu 400实现的处理系统500的概念图。示例性系统500可以被配置为实现3d模型恢复系统100和/或图3中所示的方法300。处理系统500包括cpu 530、交换机510和多个ppu 400以及相应的存储器404。
[0123]
nvlink 410提供每个ppu 400之间的高速通信链路。尽管图5b中示出了特定数量的nvlink 410和互连402连接,但是连接到每个ppu 400和cpu 530的连接的数量可以改变。交换机510在互连402和cpu 530之间接口。ppu 400、存储器404和nvlink 410可以位于单个半导体平台上以形成并行处理模块525。在一个实施例中,交换机510支持两个或更多个在各种不同连接和/或链路之间接口的协议。
[0124]
在另一个实施例(未示出)中,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在ppu 400和cpu 530之间通过交换机510提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连402在每个ppu 400之间直接地提供一个或更多个通信链路。可以使用与nvlink 410相同的协议将一个或更多个nvlink 410高速通信链路实现为物理nvlink互连或者片上或裸晶上互连。
[0125]
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块525可以被实现为电路板衬底,并且ppu 400和/或存储器404中的每一个可以是封装器件。在一个实施例中,cpu 530、交换机510和并行处理模块525位于单个半导体平台上。
[0126]
在一个实施例中,每个nvlink 410的信令速率是20到25千兆位/秒,并且每个ppu 400包括六个nvlink 410接口(如图5a所示,每个ppu 400包括五个nvlink 410接口)。每个nvlink 410在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供400千兆位/秒。当cpu 530还包括一个或更多个nvlink 410接口时,nvlink 410可专门用于如图5a所示的ppu到ppu通信,或者ppu到ppu以及ppu到cpu的某种组合。
[0127]
在一个实施例中,nvlink 410允许从cpu 530到每个ppu 400的存储器404的直接加载/存储/原子访问。在一个实施例中,nvlink 410支持一致性操作,允许从存储器404读取的数据被存储在cpu 530的高速缓存分层结构中,减少了cpu 530的高速缓存访问延迟。在一个实施例中,nvlink 410包括对地址转换服务(ats)的支持,允许ppu 400直接访问cpu 530内的页表。一个或更多个nvlink 410还可以被配置为以低功率模式操作。
[0128]
图5b示出了示例性系统565,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性系统565可以被配置为实现3d模型恢复系统100和/或图3中所示的方法300。
[0129]
如所示,提供了一个系统565,该系统包括连接至通信总线575上的至少一个中央处理单元530。通信总线575可以直接或间接耦合以下设备中的一个或更多个:主存储器540、网络接口535、一个或更多个cpu530、一个或更多个显示设备545、一个或更多个输入设备560、交换机510和并行处理系统525。通信总线575可使用任何合适的协议来实现,并且可表示一个或更多个链路或总线,诸如地址总线、数据总线、控制总线或其组合。通信总线575可包括一个或更多个总线或链路类型,诸如工业标准体系结构(isa)总线、扩展工业标准体系结构(eisa)总线、视频电子标准协会(vesa)总线、外围组件互连(pci)总线、外围组件互连高速(pcie)总线、超传输和/或另一类型的总线或链路。在一些实施例中,部件之间存在直接连接。例如,cpu 530可直接连接到主存储器540。进一步,cpu530可直接连接到并行处理系统525。在组件之间存在直接或点对点连接的情况下,通信总线575可以包括用于执行连接的pcie链路。在这些示例中,pci总线不需要被包括在系统565中。
[0130]
尽管图5b的各个框被示出为通过通信总线575与线连接,但这不旨在是限制性的并且仅是为了清楚起见。例如,在一些实施例中,诸如显示设备545之类的呈现组件可以被认为是诸如输入设备560之类的i/o组件(例如,如果显示器是触摸屏)。作为另一实例,cpu530和/或并行处理系统525可包含存储器(例如,主存储器540可表示除了并行处理系统525、cpu530和/或其他组件之外的存储设备)。换言之,图5c的计算设备仅是说明性的。在如“工作站”、“服务器”、“膝上型计算机”、“台式计算机”、“平板计算机”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ecu)”、“虚拟现实系统”和/或其他设备或系统类型的此类类别之间不做区分,因为所有都被考虑在图5c的计算设备的范围内。
[0131]
系统565还包括主存储器540。控制逻辑(软件)和数据被存储在主存储器540中,主存储器540可以采取各种计算机可读介质的形式。计算机可读介质可以是可由系统565访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质,以及可移除和不可移除介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。
[0132]
计算机存储介质可以包括以用于存储信息(如计算机可读指令、数据结构、程序模块和/或其他数据类型)的任何方法或技术实现的易失性和非易失性介质和/或可移动和不可移动介质两者。例如,主存储器540可存储计算机可读指令(例如,表示程序和/或程序元素,例如操作系统)。计算机存储介质可以包括但不限于ram、rom、eeprom、闪存或其他存储器技术,cd-rom、数字通用盘(dvd)或其他光盘存储、磁带盒、磁带,磁盘存储装置或其他磁存储设备,或可用于存储所要信息且可由系统565存取的任何其他媒体。如本文所使用的,计算机存储介质不包括信号本身。
[0133]
计算机存储介质可以将计算机可读指令、数据结构、程序模块、和/或其他数据类型具体化为调制数据信号(如载波或其他传输机制)并且包括任何信息递送介质。术语“调制数据信号”可以指代以编码信号中的信息的方式设置或改变其一个或更多个特性的信号。作为示例而非限制,计算机存储介质可包括有线介质(诸如有线网络或直接有线连接)和无线介质(诸如声学、rf、红外和其他无线介质)。以上任何内容的组合也应包含在计算机可读介质的范围内。
[0134]
计算机程序当被执行时使系统565能够执行不同功能。cpu530可经配置以执行计
算机可读指令中的至少一些以控制系统565的一个或更多个组件以执行本文中所描述的方法和/或过程中的一个或更多个。cpu530可以各自包括能够同时处理多个软件线程的一个或更多个核(例如,一个、两个、四个、八个、二十八个、七十二个等)。cpu530可包含任何类型的处理器,且可取决于所实施的系统565的类型而包含不同类型的处理器(例如,具有用于移动装置的较少核心的处理器和用于服务器的具有较多核心的处理器)。例如,取决于系统565的类型,处理器可以是使用精简指令集计算(risc)实现的高级risc机器(arm)处理器或使用复杂指令集计算(cisc)实现的x86处理器。除了一个或更多个微处理器或补充协处理器(诸如数学协处理器)之外,系统565还可以包括一个或更多个cpu530。
[0135]
除了cpu 530之外或替代cpu 530,并行处理模块525可以被配置成用于执行计算机可读指令中的至少一些计算机可读指令以控制系统565的一个或更多个部件执行在此描述的方法和/或过程中的一个或更多个。并行处理模块525可由系统565用来渲染图形(例如,3d图形)或执行通用计算。例如,并行处理模块525可用于gpu上的通用计算(gpgpu)。在实施例中,一个或更多个cpu 530和/或并行处理模块525可以离散地或联合地执行方法、过程和/或其部分的任何组合。
[0136]
系统565还包括一个或更多个输入设备560、并行处理系统525、一个或更多个显示设备545。一个或更多个显示设备545可包含显示器(例如,监视器、触摸屏、电视屏幕、平视显示器(hud)、其他显示器类型或其组合)、扬声器和/或其他呈现组件。一个或更多个显示设备545可从其他组件(例如,并行处理系统525、cpu530等)接收数据,且输出所述数据(例如,作为图像、视频、声音等)。
[0137]
网络接口535可以使系统565能够逻辑地耦合至其他设备,包括输入设备560、一个或更多个显示设备545和/或其他组件,其中一些可以内置到(例如,集成在)系统565中。说明性输入设备560包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等。输入设备560可提供处理空中姿态、语音或由用户生成的其他生理输入的自然用户界面(nui)。在一些情况下,可将输入发射到适当的网络元件以供进一步处理。nui可实现与系统565的显示相关联的语音识别、指示笔识别、面部识别、生物计量识别、屏幕上和屏幕附近的姿态识别、空中姿态、头部和眼睛跟踪、以及触摸识别(如以下更详细描述的)的任何组合。系统565可以包括用于手势检测和识别的深度相机,诸如立体相机系统、红外相机系统、rgb相机系统、触摸屏技术和这些的组合。另外,系统565可以包括使得能够检测运动的加速度计或陀螺仪(例如,作为惯性测量单元(imu)的一部分)。在一些示例中,系统565可以使用加速度计或陀螺仪的输出来渲染沉浸式增强现实或虚拟现实。
[0138]
进一步地,系统565可以通过网络接口535耦合至网络(例如,电信网络、局域网(lan)、无线网络、广域网(wan)(如互联网)、对等网络、电缆网络等)以用于通信目的。系统565可以包括在分布式网络和/或云计算环境内。
[0139]
网络接口535可以包括一个或更多个接收器、发射器、和/或收发器,该一个或更多个接收器、发射器、和/或收发器使系统565能够经由电子通信网络(包括有线和/或无线通信)与其他计算设备通信。网络接口535可包含用以实现经由若干不同网络中的任一者的通信的组件和功能性,所述网络例如无线网络(例如,wi-fi、z-波、蓝牙、蓝牙le、zigbee等)、有线网络(例如,经由以太网或infiniband通信)、低功率广域网(例如,lorawan、sigfox等)和/或互联网。
[0140]
系统565还可以包括辅助存储装置(未示出)。辅助存储装置包括例如硬盘驱动器和/或可移动存储驱动器,表示软盘驱动器、磁带驱动器、致密盘驱动器、数字通用盘(dvd)驱动器、记录设备、通用串行总线(usb)闪存。可移动存储驱动器以公知的方式从可移动存储单元读取和/或向可移动存储单元写入。系统565还可包括硬接线电源、电池电源或其组合(未示出)。电源可以向系统565提供功率以使得系统565的组件能够操作。
[0141]
前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成系统565。或者,不同模块还可根据用户的需要单独地或在半导体平台的不同组合中定位。虽然以上已经描述了不同实施例,但应理解的是,这些实施例仅通过举例而非限制的方式呈现。由此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
[0142]
示例网络环境
[0143]
适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(nas)、其他后端设备、和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图5a的处理系统500和/或图5b的示例性系统565的一个或更多个实例上实现——例如,每个设备可以包括处理系统500和/或示例性系统565的类似组件、特征和/或功能。
[0144]
网络环境的组件可以经由一个或更多个网络彼此通信,所述网络可以是有线的、无线的或两者。网络可以包括多个网络或多个网络中的一个网络。例如,网络可包括一个或更多个广域网(wan)、一个或更多个局域网(lan)、一个或更多个公共网络诸如互联网和/或公共交换电话网(pstn)和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)的组件可以提供无线连接。
[0145]
兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以包括在网络环境中)。在对等网络环境中,本文相对于服务器所描述的功能可在任何数量的客户端设备上实现。
[0146]
在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、工作调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用的框架。所述软件或应用程序可分别包含基于网络的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用(例如,通过经由一个或更多个应用编程接口(api)访问服务软件和/或应用)。框架层可以是但不限于自由和开源软件网络应用框架的类型,诸如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)。
[0147]
基于云的网络环境可以提供执行在此描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、地球等上的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环
境)。
[0148]
客户端设备可以包括图5a的示例处理系统500和/或图5b的示例性系统565的组件、特征和功能中的至少一些。作为示例而非限制,客户机设备可被实现为个人计算机(pc)、膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(pda)、mp3播放器、虚拟现实耳机、全球定位系统(gps)或设备、视频播放器、相机、监视设备或系统、车辆、船、飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合,或任何其他合适的设备。
[0149]
机器学习
[0150]
在处理器(诸如ppu 400)上开发的深度神经网络(dnn)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习系统需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配情景时变得更加智能和高效。
[0151]
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
[0152]
深度神经网络(dnn)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,dnn模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高级别的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
[0153]
一旦dnn经过训练,dnn就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(dnn从给定输入中提取有用信息的过程)包括识别存入atm机中的支票存款上的手写数字,识别照片中朋友的图像,向超过五千万用户提供电影推荐,在无人驾驶汽车中识别和分类不同类型的汽车、行人和道路危险,或实时翻译人类言语。
[0154]
在训练期间,数据在前向传播阶段流过dnn,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到dnn正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由ppu 400支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、检测情绪、识别推荐、识别和翻译语音以及通常推理出新的信息。
[0155]
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和
带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百tflops的性能,ppu 400是能够传送基于深度神经网络的人工智能和机器学习应用所需性能的计算平台。
[0156]
此外,应用在此公开的技术中的一项或更多项生成的图像可以用于训练、测试或认证用于识别现实世界中的对象和环境的dnn。此类图像可包含道路、工厂、建筑物、城市环境、农村环境、人、动物和任何其他物理对象或真实世界环境的场景。此类图像可用于训练、测试或认证在机器或机器人中采用以操纵、处理或修改现实世界中的物理对象的dnn。此外,此类图像可以用于训练、测试或证明在自动车辆中采用的dnn,以便在真实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术生成的图像可用于向这种机器、机器人和车辆的用户传达信息。
[0157]
图5c示出了根据至少一个实施例的可以用于训练和利用机器学习的示例性系统555的组件。如将讨论的,各种组件可以由计算设备和资源的不同组合或单个计算系统来提供,其可以在单个实体或多个实体的控制下。进一步,各方面可由不同实体触发、发起或请求。在至少一个实施例中,神经网络的训练可由与提供商环境506相关联的提供商指示,而在至少一个实施例中,训练可由通过客户端设备502或其他这样的资源访问提供商环境的客户或其他用户请求。在至少一个实施例中,训练数据(或将由经训练的神经网络分析的数据)可由提供商、用户或第三方内容提供商524来提供。在至少一个实施例中,客户端设备502可以是代表用户导航的车辆或对象,例如,其可以提交请求和/或接收辅助设备导航的指令。
[0158]
在至少一个实施例中,请求能够跨至少一个网络504被提交,以由提供商环境506接收。在至少一个实施例中,客户端设备可以是使得用户能够生成并发送这样的请求的任何适当的电子和/或计算设备,诸如但不限于台式计算机、笔记本计算机、计算机服务器、智能电话、平板计算机、游戏控制台(便携式或以其他方式)、计算机处理器、计算逻辑和机顶盒。网络504可包括用于传送请求或其他此类数据的任何合适的网络,如可包括互联网、内联网、以太网、蜂窝网络、局域网(lan)、广域网(wan)、个域网(pan)、对等体之间的直接无线连接的自组织网络等。
[0159]
在至少一个实施例中,可以在接口层508处接收请求,在本示例中,该接口层可以将数据转发至训练和推理管理器532。训练和推理管理器532可以是包括用于管理对应于数据或内容的请求和服务的硬件和软件的系统或服务,在至少一个实施例中,训练和推理管理器532可以接收训练神经网络的请求,并且可以向训练模块512提供请求的数据。在至少一个实施例中,训练模块512可选择要使用的适当模型或神经网络(如果该请求未指定),并且可使用相关训练数据来训练模型。在至少一个实施例中,训练数据可以是存储在训练数据储存库514中、从客户端设备502接收或从第三方提供商524获得的一批数据。在至少一个实施例中,训练模块512可以负责训练数据。神经网络可以是任何适当的网络,诸如循环神经网络(rnn)或卷积神经网络(cnn)。一旦神经网络被训练和成功评估,经训练的神经网络可被存储在例如可为用户、应用或服务等存储不同模型或网络的模型储存库516中。在至少一个实施例中,可存在用于单个应用或实体的多个模型,如可基于多个不同因素利用的。
[0160]
在至少一个实施例中,在随后的时间点,可以从客户端设备502(或另一个这样的设备)接收对至少部分地由经训练的神经网络确定或影响的内容(例如,路径确定)或数据
的请求。此请求可包括例如将使用神经网络来处理以获得一个或更多个推理或其他输出值、分类或预测的输入数据,或对于至少一个实施例,输入数据可以由接口层508接收并且被引导至推理模块518,尽管也可以使用不同的系统或服务。在至少一个实施例中,如果尚未本地存储到推理模块518,则推理模块518可以从模型储存库516获得适当的经训练的网络,诸如如本文中所讨论的经训练的深度神经网络(dnn)。推理模块518可以将数据作为输入提供给经训练的网络,经训练的网络然后可以生成一个或更多个推理作为输出。这可包括例如输入数据的实例的分类。在至少一个实施例中,推理随后可被传送到客户端设备502以用于向用户显示或其他通信。在至少一个实施例中,用户的上下文数据也可被存储到用户上下文数据储存库522,该用户上下文数据储存库522可包括关于用户的数据,该数据在生成推理或确定在获得实例之后要返回给用户的数据时可用作对网络的输入。在至少一个实施例中,可以包括输入或推理数据中的至少一些的相关数据也可以被存储到本地数据库534中,用于处理将来的请求。在至少一个实施例中,用户可以使用账户信息或其他信息来访问提供商环境的资源或功能。在至少一个实施例中,如果许可且可用,还可以收集用户数据并用于进一步训练模型,以便为未来的请求提供更准确的推理。在至少一个实施例中,可通过用户界面接收针对在客户端设备502上执行的机器学习应用526的请求,并通过同一界面显示结果。客户端设备可包括用于生成请求和处理结果或响应的资源(诸如处理器528和存储器562),以及用于存储机器学习应用526的数据的至少一个数据存储元件552。
[0161]
在至少一个实施例中,处理器528(或训练模块512或推理模块518的处理器)将是中央处理单元(cpu)。然而,如所提及的,此类环境中的资源可利用gpu来处理至少某些类型的请求的数据。利用数千个核心,gpu(诸如ppu 300)被设计成处理基本上并行的工作负载,并且因此已经在用于训练神经网络和生成预测的深度学习中变得流行。虽然针对离线构建使用gpu已经使得能够更快地训练更大且更复杂的模型,但离线生成预测意味着请求时输入特征不能被使用,或者必须针对特征的所有排列生成预测并且将其存储在查找表中以便服务实时请求。如果深度学习框架支持cpu模式并且模型足够小且简单以便以合理的延迟在cpu上执行前馈,则cpu实例上的服务可以托管模型。在这种情况下,训练可以在gpu上离线完成,并且推理可以在cpu上实时完成。如果cpu方法不可行,那么服务可在gpu实例上运行。然而,因为gpu具有与cpu不同的性能和成本特性,所以运行将运行时算法卸载到gpu的服务可能需要与基于cpu的服务不同地设计gpu。
[0162]
在至少一个实施例中,可以从客户端设备502提供视频数据以供提供商环境506中增强。在至少一个实施例中,视频数据可被处理以在客户端设备502上进行增强。在至少一个实施例中,视频数据可以从第三方内容提供商524流式传输并且由第三方内容提供商524、提供商环境506或客户端设备502增强。在至少一个实施例中,视频数据可从客户端设备502提供以用作提供商环境506中的训练数据。
[0163]
在至少一个实施例中,有监督和/或无监督训练可以由客户端设备502和/或提供商环境506来执行。在至少一个实施例中,提供一组训练数据514(例如,分类的或标记的数据)作为输入以用作训练数据。在至少一个实施例中,训练数据可包括神经网络将被训练所针对的至少一种类型的对象的实例,以及标识该类型的对象的信息。在至少一个实施例中,训练数据可包括各自包括一种类型对象的表示的一组图像,其中每个图像还包括标签、元数据、分类或标识在相应图像中表示的对象类型的其他信息或与标签、元数据、分类或标识
在相应图像中表示的对象类型的其他信息相关联。各种其他类型的数据也可被用作训练数据,并且可包括文本数据、音频数据、视频数据等。在至少一个实施例中,训练数据514作为训练输入被提供给训练模块512。在至少一个实施例中,训练模块512可以是包括硬件和软件的系统或服务,诸如用于训练神经网络(或其他模型或算法等)的执行训练应用的一个或更多个计算设备。在至少一个实施例中,训练模块512接收指示要用于训练的模型的类型的指令或请求,在至少一个实施例中,模型可以是用于这样的目的的任何适当的统计模型、网络或算法,如可以包括人工神经网络、深度学习算法、学习分类器、贝叶斯网络等。在至少一个实施例中,训练模块512可以从适当的储存库516中选择初始模型或其他未经训练的模型,并利用训练数据514来训练模型,从而生成可以用于对相似类型的数据进行分类的经训练的模型(例如,经训练的深度神经网络),或者生成其他这样的推理。在其中不使用训练数据的至少一个实施例中,仍然可以选择适当的初始模型用于在每训练模块512的输入数据上进行训练。
[0164]
在至少一个实施例中,可以用多种不同的方式来训练模型,如可以部分地取决于所选择的模型的类型。在至少一个实施例中,机器学习算法可以被提供有训练数据集,其中模型是由训练过程创建的模型伪像。在至少一个实施例中,训练数据的每个实例包含正确的答案(例如,分类),其可以被称为目标或目标属性。在至少一个实施例中,学习算法在训练数据中找到将输入数据属性映射到目标的模式、要预测的答案,并且输出捕获这些模式的机器学习模型。在至少一个实施例中,然后可以使用机器学习模型来获得关于未为其指定目标的新数据的预测。
[0165]
在至少一个实施例中,训练和推理管理器532可以从包括二进制分类、多类别分类、生成和回归模型的机器学习模型的集合中进行选择。在至少一个实施例中,要使用的模型的类型可至少部分地取决于要预测的目标的类型。
[0166]
图形处理管线
[0167]
在一个实施例中,ppu 400包括图形处理单元(gpu)。ppu 400被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。ppu 400可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
[0168]
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如系统存储器或存储器404)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行api调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在ppu 400内的处理单元上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,处理单元中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的处理单元可以被配置为同时执行不同的着色程序。例如,处理单元的第一子集可以被配置为执行顶点着色程序,而处理单元的第二子集可以被配置为执行像素着色程序。处理单元的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入l2高速缓存460和/或存储器404。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产
生片段数据之后,处理单元的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器404中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
[0169]
图6a是根据一个实施例的由图4的ppu 400实现的图形处理管线600的概念图。图形处理管线600是被实现以从3d几何数据生成2d计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线600接收从图形处理管线600的一个阶段传送到下一阶段的输入数据601,以生成输出数据602。在一个实施例中,图形处理管线600可表示由api定义的图形处理管线。作为选择,图形处理管线600可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
[0170]
如图6a所示,图形处理管线600包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段610、顶点着色阶段620、图元组装阶段630、几何着色阶段640、视口缩放、剔除和裁剪(viewport scale,cull,and clip,vscc)阶段650、光栅化阶段660、片段着色阶段670和光栅操作阶段680。在一个实施例中,输入数据601包括命令,其配置处理单元以实现图形处理管线600的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据602可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
[0171]
数据组装阶段610接收输入数据601,其指定用于高阶表面、图元等的顶点数据。数据组装阶段610收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段620以进行处理。
[0172]
顶点着色阶段620通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,《x,y,z,w》)。顶点着色阶段620可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段620对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,ncd)空间。顶点着色阶段620生成被传送到图元组装阶段630的经变换的顶点数据。
[0173]
图元组装阶段630收集由顶点着色阶段620输出的顶点并且将顶点分组成几何图元以由几何着色阶段640处理。例如,图元组装阶段630可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段640的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段630将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段640。
[0174]
几何着色阶段640通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图
元。换言之,几何着色阶段640可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线600的其余部分进行处理。几何着色阶段640将几何图元传送到视口scc阶段650。
[0175]
在一个实施例中,图形处理管线600可以在流式多处理器和顶点着色阶段620、图元组装阶段630、几何着色阶段640、片段着色阶段670和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口scc阶段650可以利用数据。在一个实施例中,由图形处理管线600中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,l1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口scc阶段650可以访问高速缓存中的数据。在一个实施例中,视口scc阶段650和光栅化阶段660被实现为固定功能电路。
[0176]
视口scc阶段650执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段660。
[0177]
光栅化阶段660将3d几何图元转换成2d片段(例如,能够用于显示等)。光栅化阶段660可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段660还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段660生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段670。
[0178]
片段着色阶段670通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段670可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理映射。片段着色阶段670生成像素数据,其被发送到光栅操作阶段680。
[0179]
光栅操作阶段680可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段680已经完成对像素数据(例如,输出数据602)的处理时,可以将像素数据写入渲染对象,诸如帧缓冲区、颜色缓冲区等。
[0180]
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线600中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段640)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线600的任何阶段可以由图形处理器(诸如ppu 400)内的一个或更多个专用硬件单元来实现。图形处理管线600的其他阶段可以由可编程硬件单元(诸如ppu 400内的处理单元)来实现。
[0181]
图形处理管线600可以经由由主机处理器(诸如cpu)执行的应用程序来实现。在一
个实施例中,设备驱动程序可以实现应用程序编程接口(api),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制ppu 400的操作的多个指令。api为程序员提供抽象,其允许程序员利用专用图形硬件(诸如ppu 400)来生成图形数据而不要求程序员利用ppu 400的特定指令集。应用程序可以包括被路由到ppu 400的设备驱动程序的api调用。设备驱动程序解释api调用并执行各种操作以响应api调用。在一些情况下,设备驱动程序可以通过在cpu上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用cpu和ppu 400之间的输入/输出接口在ppu 400上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用ppu 400的硬件来实现图形处理管线600。
[0182]
可以在ppu 400内执行各种程序以便实现图形处理管线600的各个阶段。例如,设备驱动程序可以启动ppu 400上的内核以在一个处理单元(或多个处理单元)上执行顶点着色阶段620。设备驱动程序(或由ppu 400执行的初始内核)还可启动ppu 400上的其他内核以执行图形处理管线600的其他阶段,诸如几何着色阶段640和片段着色阶段670。另外,图形处理管线600的阶段中的一些可以在固定单元硬件(诸如在ppu 400内实现的光栅器或数据组装器)上实现。应当领会,在被处理单元上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
[0183]
应用在此公开的技术中的一项或更多项生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可直接耦合到产生或渲染图像的系统或处理器。在其他实施例中,显示设备可例如经由网络间接耦合到系统或处理器。此类网络的实例包括互联网、移动电信网络、wifi网络、以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器产生的图像可经由网络流式传输到显示设备。这样的流式传输允许例如在服务器上执行渲染图像的视频游戏或其他应用,在数据中心中,或在基于云的计算环境中,并且所渲染的图像将被传输和显示在与服务器或数据中心物理地分开的一个或更多个用户设备(诸如计算机、视频游戏控制台、智能电话、其他移动设备等)上。所以,本文公开的技术可以应用于增强流传输的图像以及增强流传输图像的服务,诸如nvidia geforce now(gfn)、google stadia等。
[0184]
示例游戏流式传输系统
[0185]
图6b是根据本公开的一些实施例的游戏流式传输系统605的示例系统图。图6b包括一个或更多个游戏服务器603(其可以包括与图5a的示例处理系统500和/或图5b的示例性系统565类似的组件、特征和/或功能),一个或更多个客户端设备604(其可以包括与图5a的示例处理系统500和/或图5b的示例性系统565类似的组件、特征和/或功能),以及一个或更多个网络606(其可以类似于本文描述的一个或更多个网络)。在本公开的一些实施例中,系统605可被实现。
[0186]
在系统605中,对于游戏会话,一个或更多个客户端设备604可以仅响应于对一个或更多个输入设备的输入接收输入数据,将输入数据传输至一个或更多个游戏服务器603,从一个或更多个游戏服务器603接收经编码的显示数据,并且在显示器624上显示显示数据。如此,将计算上更密集的计算和处理卸载到一个或更多个游戏服务器603(例如,渲染——具体为光线或路径跟踪——以供一个或更多个游戏服务器603的一个或更多个gpu执行游戏会话的图形输出)。换言之,将游戏会话从一个或更多个游戏服务器603流式传输
到一个或更多个客户端设备604,由此降低一个或更多个客户端设备604对图形处理和渲染的要求。
[0187]
例如,关于游戏会话的实例,客户端设备604可以基于从一个或更多个游戏服务器603接收显示数据在显示器624上显示游戏会话的帧。客户端设备604可以接收到一个或更多个输入设备中的一个的输入并且作为响应生成输入数据。客户机设备604可经由通信接口621并经由一个或更多个网络606(例如,互联网)将输入数据传输到一个或更多个游戏服务器603,并且一个或更多个游戏服务器603可经由通信接口618接收输入数据。cpu可接收输入数据,处理输入数据,并将数据传输到gpu,使得gpu产生游戏会话的渲染。例如,输入数据可以表示在比赛中用户的角色的移动、击发武器、重新装载、传球、转动车辆等。渲染组件612可以渲染游戏会话(例如,表示输入数据的结果),并且渲染捕获组件614可以捕获游戏会话的渲染作为显示数据(例如,捕获游戏会话的所渲染的帧的图像数据)。游戏会话的渲染可以包括使用一个或更多个并行处理单元(如gpu)计算的光线或路径跟踪照明和/或阴影效果,该一个或更多个并行处理单元可以进一步采用一个或更多个专用硬件加速器或处理核来执行一个或更多个游戏服务器603的光线或路径跟踪技术。编码器616可接着编码显示数据以产生经编码显示数据,且经编码显示数据可经由通信接口618经由网络606发射到客户端设备604。客户端设备604可以经由通信接口621接收经编码的显示数据,并且解码器622可以对经编码的显示数据进行解码以生成显示数据。客户端设备604可接着经由显示器624显示该显示数据。
[0188]
注意的是,在此所描述的技术可以被实现在存储在计算机可读介质中的可执行指令中,以供基于处理器的指令执行机器、系统、设备或装置使用或与其结合使用。所属领域的技术人员将了解,对于一些实施例,可包含不同类型的计算机可读介质用于存储数据。如本文中所使用的,“计算机可读介质”包括用于存储计算机程序的可执行指令的任何合适的介质中的一个或更多个,从而使得指令执行机器、系统、装置或设备可以从计算机可读介质读取(或获取)指令并且执行用于实现所描述的实施例的指令。合适的存储格式包括电子格式、磁性格式、光学格式和电磁格式中的一个或更多个。常规示例性计算机可读介质的非穷举列表包括:便携式计算机盘;随机存取存储器(ram);只读存储器(rom);可擦除可编程只读存储器(eprom);闪存设备;以及光学存储设备,包括便携式致密盘(cd)、便携式数字视频盘(dvd)等。
[0189]
应理解的是,附图中所示出的部件的布置是出于说明性目的并且其他布置是可能的。例如,本文中所描述的元件中的一个或更多个可整体或部分地实现为电子硬件组件。其他元件可在软件、硬件或软件和硬件的组合中实施。此外,可以组合这些其他元件中的一些或全部,可以完全省略一些元件,并且可以在仍然实现本文所描述的功能的同时添加附加组件。由此,本文描述的主题可以许多不同的变型来体现,并且所有这样的变型都被设想为在权利要求的范围内。
[0190]
为了便于理解在此描述的主题,就动作序列而言描述了许多方面。所属领域的技术人员将认识到,不同动作可由专用电路或电路、由一个或更多个处理器执行的程序指令或由两者的组合来执行。本文中对任何动作序列的描述并不旨在暗示必须遵循所描述的用于执行该序列的特定顺序。除非本文另有指示或上下文明显矛盾,本文所述的所有方法都可以任何合适的顺序进行。
[0191]
术语“一个/一种(a)”和“该(the)”以及在描述该主题的上下文中(特别是在以下权利要求的上下文中)的类似参考的使用应被解释为覆盖单数和复数两者,除非在此另外指明或与上下文明显矛盾。跟随有一个或更多个项目的列表(例如,“a和b中的至少一个”)的术语“至少一个”的使用应被解释为意指选自所列出的项目(a或b)的一个项目或所列出的项目(a和b)中的两个或更多个的任何组合,除非本文另有说明或与上下文明显矛盾。此外,前面的描述仅用于说明的目的,而不是用于限制的目的,因为所寻求的保护范围由下文阐述的权利要求及其任何等同物限定。在此提供的任何和所有实例或示例性语言(例如,“诸如”)的使用仅旨在更好地说明该主题,并且不对该主题的范围造成限制,除非另外要求。在权利要求书和书面说明书中使用术语“基于”和指示引起结果的条件的其他类似短语并不旨在排除引起该结果的任何其他条件。说明书中的语言不应被解释为指示任何未要求保护的元素是对于如所要求保护的本发明的实践必不可少的。
技术特征:
1.一种用于构建三维(3d)模型的计算机实现的方法,包括:渲染由初始几何形状限定的3d模型的图像,其中由渲染管线执行的抗混叠运算处理与所述几何形状相关联的数据,以对所述图像进行抗混叠;基于所述图像和参考图像计算像素差;通过所述渲染管线的所述抗混叠运算反向传播所述像素差,以计算对应于减小所述像素差的几何形状改变;基于所述几何形状改变来调整所述初始几何形状,以产生所述3d模型的经修改的几何形状。2.根据权利要求1所述的计算机实现的方法,其中所述初始几何形状由顶点位置限定。3.根据权利要求1所述的计算机实现的方法,其中所述初始几何形状由应用于基础网格的权重限定。4.根据权利要求1所述的计算机实现的方法,还包括:针对至少一个附加参考图像重复所述渲染、所述计算、所述传播和所述调整。5.根据权利要求4所述的计算机实现的方法,其中所述参考图像和所述至少一个附加参考图像各自与不同的相机位置相关联。6.根据权利要求1所述的计算机实现的方法,其中传播所述像素差还包括:产生对应于所述3d模型的表面纹理。7.根据权利要求6所述的计算机实现的方法,其中所述表面纹理表示所述3d模型的照明或材料属性中的至少一个。8.根据权利要求1所述的计算机实现的方法,其中所述抗混叠运算包括:基于与所述几何形状相关联的所述数据确定轮廓边与一对相邻像素相交;计算所述相邻像素之间的混合权重;以及根据所述混合权重调整所述相邻像素的颜色。9.根据权利要求8所述的计算机实现的方法,其中所述确定包括:识别与第一标识符相关联的第一渲染的几何形状和与第二标识符相关联的第二渲染的几何形状之间的所述轮廓边。10.根据权利要求1所述的计算机实现的方法,其中所述抗混叠运算基于所述像素内的轮廓边的位置来近似像素积分。11.根据权利要求1所述的计算机实现的方法,其中所述渲染、所述计算、所述传播和所述调整步骤中的至少一个步骤在云计算环境内被执行。12.根据权利要求1所述的计算机实现的方法,其中所述渲染、所述计算、所述传播和所述调整步骤中的至少一个步骤在服务器上或在数据中心中被执行,以生成所述图像和所述3d模型,并且所述图像和所述3d模型中的至少一个被流式传输到用户设备。13.根据权利要求1所述的计算机实现的方法,其中所述渲染、所述计算、所述传播和所述调整步骤中的至少一个步骤被执行,以用于训练、测试或认证在机器、机器人或自主车辆中采用的神经网络。14.根据权利要求1所述的计算机实现的方法,其中所述渲染、所述计算、所述传播和所述调整步骤中的至少一个步骤在包括图形处理单元的一部分的虚拟机上被执行。15.一种系统,包括:
处理器,其被配置为:渲染由初始几何形状限定的三维(3d)模型的图像,其中由渲染管线执行的抗混叠运算处理与所述几何形状相关联的数据,以对所述图像进行抗混叠;基于所述图像和参考图像计算像素差;通过所述渲染管线的所述抗混叠运算反向传播所述像素差,以计算对应于减小所述像素差的几何形状改变;基于所述几何形状改变来调整所述初始几何形状,以产生所述3d模型的经修改的几何形状。16.根据权利要求15所述的系统,其中所述初始几何形状由顶点位置限定。17.根据权利要求15所述的系统,其中所述初始几何形状由应用于基础网格的权重限定。18.根据权利要求15所述的系统,其中所述处理器被配置为针对至少一个附加参考图像重复所述渲染、所述计算、所述传播和所述调整。19.根据权利要求15所述的系统,其中所述处理器被配置为通过产生对应于所述3d模型的表面纹理来传播所述像素差。20.一种非暂时性计算机可读介质,其存储用于三维(3d)模型构造的计算机指令,所述计算机指令在由一个或更多个处理器执行时,使所述一个或更多个处理器执行以下步骤:渲染由初始几何形状限定的3d模型的图像,其中由渲染管线执行的抗混叠运算处理与所述几何形状相关联的数据,以对所述图像进行抗混叠;基于所述图像和参考图像计算像素差;通过所述渲染管线的所述抗混叠运算反向传播所述像素差,以计算对应于减小所述像素差的几何形状改变;基于所述几何形状改变来调整所述初始几何形状,以产生所述3d模型的经修改的几何形状。
技术总结
公开了从二维图像恢复三维模型。从对象的二维(2D)图像恢复对象的三维(3D)模型。2D图像集合中的每个图像包括从不同相机位置捕获的对象,并且可计算对应于每个图像的限定3D模型的基本网格的变形。3D模型还可以包括表示3D模型的照明和材料属性的纹理映射。3D模型的恢复依赖于分析性抗混叠来提供2D图像中的像素颜色和3D模型的几何形状之间的链接。模块化可微分渲染器设计通过利用现有的高度优化的硬件图形管线来重建3D模型而产生高性能。可微分渲染器渲染3D模型的图像,并且所渲染的图像和参考图像之间的差通过渲染管线反向传播以迭代地调整3D模型。地调整3D模型。地调整3D模型。
技术研发人员:S
受保护的技术使用者:辉达公司
技术研发日:2021.08.12
技术公布日:2022/3/8