CN115439628A - 通过拓扑采样进行接合点形状和外观优化 - Google Patents
通过拓扑采样进行接合点形状和外观优化 Download PDFInfo
- Publication number
- CN115439628A CN115439628A CN202210558436.7A CN202210558436A CN115439628A CN 115439628 A CN115439628 A CN 115439628A CN 202210558436 A CN202210558436 A CN 202210558436A CN 115439628 A CN115439628 A CN 115439628A
- Authority
- CN
- China
- Prior art keywords
- topology
- model
- mesh
- computer
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
公开了通过拓扑采样进行接合点形状和外观优化,提出的系统和方法实现了优化包括特定的3D场景或对象的形状及外观的3D模型表示。不透明的3D网格(例如,顶点位置和对应拓扑)和空间变化的材料属性基于图像空间损失进行联合优化以匹配多个图像观察结果(例如,参考3D场景或对象的参考图像)。几何拓扑定义了不透明3D网格中的可见并且可以基于图像空间损失通过训练来随机地初始化和优化的面和/或单元。与使用透明网格表示相比,将几何拓扑应用于不透明的3D网格以学习该形状提高了轮廓边缘的准确度和性能。相比于需要对该拓扑的初始猜测和/或对可能的几何拓扑的穷举测试的方法,该3D模型表示基于图像空间差异进行学习,而无需初始猜测。
Description
要求优先权
本申请要求2021年6月1日提交的题为“通过蒙特卡罗采样的拓扑进行接合点形状和外观优化(JOINT SHAPE AND APPEARANCE OPTIMIZATION THROUGH MONTE CARLOSAMPLED TOPOLOGIES)”的美国临时申请No.63/195,301的权益,其全部内容通过引用并入本文。
背景技术
合成具有复杂形状和外观的对象的图像是计算机图形学的核心目标。问题可以分解为为所述对象的形状和外观选择合适的表示,根据所选择的表示对三维(3D)场景进行建模,最后高效地渲染该场景。为特定的3D场景创建形状和外观模型本质上是一个逆问题:寻找一个3D模型表示,其在被渲染时将产生按需显现的二维(2D)图像。在多次迭代中,逆向渲染用于基于正在建模的该3D场景的参考图像迭代地恢复3D模型的形状、光照和材料属性。
现有技术通常依赖于至少部分地基于参考图像(或参考3D模型)确定的初始体网格或3D模型(立方体、球体等)。其他技术依赖于使用统一体网格的所有可能拓扑进行训练,并且在执行时间方面实现起来代价高。例如,深度步进立方体技术为统一3D网格中的每个立方体评估140种可能的拓扑。还有其他技术产生的3D模型存在几何结构不准确。存在解决与现有技术关联的这些问题和/或其他问题的需求。
发明内容
本公开的实施例涉及通过拓扑采样的接合点形状和外观优化。公开了实现优化包括特定3D场景或对象的形状和外观的3D模型表示的系统和方法。在一个实施例中,不需要使用该3D场景或对象的一些知识的几何拓扑的初始猜测。在一个实施例中,几何拓扑定义了可见的(例如,启用的、活动的、包括的)体网格的单元(例如,3D网格、填充(packed)四面体)和/或单元的面(例如,三角形、四边形等)。几何拓扑可以基于图像空间损失通过训练来随机地初始化和优化。与使用透明网格表示相比,将所述几何拓扑应用于不透明3D网格以学习所述形状可提高轮廓边缘的准确性和性能。与需要对该拓扑的初始猜测和/或对可能的几何拓扑进行穷尽测试的方法相比,所述几何拓扑是基于图像空间差学习的,而无需初始猜测。外观驱动的3D模型提取有很多用途,例如创建复杂场景的多个细节层次的渲染,不同渲染系统之间的转换,甚至不同几何场景表示之间的转换。
在一个实施例中,不透明3D网格(例如,顶点位置和定义这些顶点位置之间的连接以形成表面或体的面的相应拓扑)和3D模型表示的空间变化的材料属性基于图像空间损失进行联合优化以匹配多个图像观察结果(例如,所述参考3D场景或对象的参考图像)。所述3D模型表示由可微分渲染器渲染以产生与所述参考图像相对应的经渲染图像。所述图像空间损失是基于与包括在体网格中的面相关联的计算的概率值以及参考图像和经渲染图像之间的差来计算的。更高的概率值对应于该面被包括在该3D模型表示中的更高的可能性。因此,可以从该3D模型表示中移除与概率值为零(或低于最小阈值)相关联的面或单元(单元不是基于所述概率值插入的)。该图像空间损失被反向传播以更新用于生成该3D模型表示和概率值的学习的参数。
公开了一种用于通过拓扑采样进行接合点(joint)形状和外观优化的方法、计算机可读介质和系统。在一个实施例中,一种用于构建3D模型的方法包括:接收识别体网格内的单元的面的3D拓扑定义并且根据参数处理该3D拓扑和该体网格以预测对应于参考3D模型的3D模型表示,其中该3D模型表示包括表面网格。在一个实施例中,该表面网格是所述面的顶点位置的列表和定义所述单元的活动面之间的连接的拓扑。在优化期间,该体网格被修改并且在优化完成后,该体网格通过去除该体内部的面而转换为表面网格(只有该表面网格上的那些面被保留)。在一个实施例中,体网格中与低于阈值的学习的概率值相关联的面被移除以产生表面网格。在一个实施例中,该表面网格由三角形面定义。在一个实施例中,3D模型表示被渲染以产生经渲染图像并且对应于该经渲染图像的光线被传输通过该3D模型表示以计算该单元的概率值。在一个实施例中,基于该概率值以及经渲染图像与参考3D模型的参考图像之间的差来更新参数以减小该差。
附图说明
下面结合附图对通过拓扑采样进行形状和外观优化的本系统和方法进行详细描述,其中:
图1A示出了根据实施例的拓扑和用于学习拓扑的概率数据的概念图。
图1B示出了根据实施例的3D模型表示、学习的概率密度、渲染的3D模型表示和渲染的参考对象的概念图。
图1C示出了根据实施例的学习的概率密度、渲染的3D模型表示和学习的表面网格的概念图。
图1D示出了根据实施例的形状和外观驱动的自动3D建模系统的概念图。
图1E示出了适用于实现本公开的一些实施例的形状和外观驱动的自动3D建模的方法的流程图。
图2A示出了适用于实现本公开的一些实施例的用于渲染经采样拓扑的概率值的方法的流程图。
图2B示出了适用于实现本公开的一些实施例的用于基于概率值图像空间差来更新参数的方法的流程图。
图2C示出了适用于实现本公开的一些实施例的用于基于概率值对拓扑进行重要性采样的方法的流程图。
图3A示出了根据实施例的从粗到细的分层训练的概念图。
图3B示出了根据实施例的学习的表面网格、经渲染的3D模型表示和经渲染的参考3D模型的概念图。
图3C示出了适用于实现本公开的一些实施例的形状和外观驱动的自动3D建模的另一种方法的流程图。
图4示出了适用于实现本公开的一些实施例的示例并行处理单元。
图5A为适用于实现本公开的一些实施例的、使用图4的PPU实现的处理系统的概念图。
图5B示出了其中可以实现各种先前实施例的各种架构和/或功能的示例性系统。
图5C示出了在至少一个实施例中可以用于训练和利用机器学习的示例性系统的组件。
图6A为适用于实现本公开的一些实施例的、使用图4的PPU实现的图形处理管线的概念图。
图6B示出了适用于实现本公开的一些实施例的示例性游戏流系统。
具体实施方式
公开了与通过拓扑采样进行接合点形状和外观优化有关的系统和方法。3D模型表示包括来自多个图像观察结果的特定3D场景或对象的形状和外观。该3D模型表示是由3D模型生成单元生成的,该3D模型生成单元在每个训练迭代(例如,步骤)中使用参考图像和随机拓扑来学习形状和外观参数。在一个实施例中,对多个随机化拓扑进行采样以学习形状和外观参数。该拓扑由掩模指定,该掩模指示体网格(例如3D网格、填充四面体)中的哪些面(例如,三角形、四边形等)或单元被包括在拓扑中(例如,可见的、启用的、活动的、覆盖的)。学习该体网格的顶点位置以定义该拓扑的3D模型表示的形状。还学习了外观属性(例如,空间变化的材料属性,例如颜色、法向量、纹理、粗糙度、金属度等)以定义3D模型表示的外观。可以使用外观属性来渲染由体网格定义的表面网格以产生图像。由3D模型生成单元用于产生3D模型表示的参数基于在3D模型表示的经渲染图像和3D场景或对象的参考图像之间计算的图像空间损失(例如,像素差)进行更新。
图1A示出了根据实施例的拓扑105以及用于学习拓扑的概率密度110和115的概念图。出于解释的目的,描述了2D示例而不是3D示例。2D对象的参考图像125用于学习产生2D模型表示所需的参数,该2D模型表示在被渲染时与参考图像125相比在视觉上完全相同或几乎完全相同。
拓扑105识别2D网格(mesh)100(例如,网格(grid))中的哪些单元包括在2D模型表示中。如图1A所示,每个单元都是二维数组中的正方形。在另一个实施例中,网格100是3D结构,例如数组,并且单元是3D几何结构,例如立方体、四面体等。在一个实施例中,拓扑105可以使用用于每个单元的单个位进行定义,其中该位指示该单元是包括(启用)在2D模型表示中还是从2D模型表示中移除(禁用)。对于拓扑105,包括的网格100的每个单元被示出为纯黑色并且网格100的被移除单元示出为纯白色。在一个实施例中,拓扑105可以被编码为“覆盖”掩模,该掩模包括用于每个单元的位。在一个实施例中,拓扑105可以使用用于每个单元的每个面(例如,覆盖)的单个位来定义,其中该位指示该面是包括(启用)在2D模型表示中还是从2D模型表示中移除(禁用)。
在一个实施例中,拓扑105是随机生成的,而不依赖于关于参考图像125或正在建模的对象的任何信息。在一个实施例中,不同的单个拓扑105用于每个训练迭代。一旦提供了该拓扑105,通过将学习的参数应用于网格100和拓扑105来预测2D模型表示。2D模型表示包括启用的单元的顶点位置和材料属性。2D模型表示根据环境条件被渲染以产生经渲染图像。环境条件对应于用于渲染参考图像125的相机位置和光照。当多个参考图像可用时,可以使用拓扑105或不同的拓扑针对每个参考图像完成训练迭代。
对于每个训练迭代,损失基于每个参考图像和经渲染图像之间的每像素图像空间差来计算。为了更新2D模型参数(例如,学习的参数),与损失相对应的梯度被反向传播(例如,有效地反转计算),这要求渲染器是可微的。不幸的是,二进制值,例如编码拓扑105的该值不是可微分的。概率密度不是使拓扑表示复杂化以使其可微的,而是为网格100计算的并且可微的连续函数。例如,被包括在模型表示中的特定单元的概率可以具有介于0和1之间(包括0和1)的若干个值。
概率值和用于计算概率值的参数(例如,顶点的位置和材料参数)基于计算的损失进行更新。在一个实施例中,概率值与网格100的每个单元相关联。在另一个实施例中,概率值与网格100的每个单元的每个面相关联。概率密度110中的概率值可以被初始化为预定值或针对每个训练迭代更新的随机值。如图1A所示,每个概率值都与一个单元(或一个面)相关联并且被初始化为0.5,其中较低的概率值(较暗)指示该单元在学习的拓扑中不太可能是活动的,而较高的概率值(较浅)指示该单元在学习的拓扑中更有可能是活动的。
针对经渲染图像的每个像素在网格100的2D平面内追踪光线以计算每像素的概率值。当网格100是3D网格时,光线在3D中被追踪并且不限于2D平面。如图1A所示,第一光线102在与覆盖单元112相交之前与几个未覆盖单元相交。相交的单元以对角线图案示出。第二光线103在与覆盖单元113相交之前与一个未覆盖单元相交。因为网格100是不透明的,所以在与覆盖单元相交时光线终止,或如果该光线穿过整个网格100而不与覆盖单元相交,那么光线终止。在一个实施例中,保留单元交点以在反向传播期间更新概率值。在一个实施例中,不保留单元交点,而是回溯光线以在反向传播期间更新概率值。
将经渲染图像与参考图像125进行比较以计算每像素的差。针对每个像素,将该差乘以与该像素对应的概率值以生成积。这些积用于计算图像层损失。随着训练进展以及更新概率值以减小损失,与具有较低概率值的像素相比,具有较高概率值的像素对图像层损失的贡献更大。在至少一个训练迭代之后经更新的概率密度115显示了相交的单元被更新以减小损失。具体而言,与参考图像中的对象内的单元相对应的单元112和114的概率值增加并且不在对象内的相交单元的概率值减小。在几个训练迭代之后,经更新的概率密度115将在优化之后收敛到等于学习的拓扑120。在学习的拓扑120中,覆盖的(或活动的)单元被指示为黑色并且空的单元被指示为白色。学习的拓扑120还表示学习的拓扑。网格100的分辨率提升将导致学习的拓扑120更接近地复制参考图像125中对象的精细轮廓细节。
即使在训练依赖于单个拓扑时,例如用于训练的拓扑105,当使用多个参考图像时,根据拓扑105未被覆盖的单元的概率值将增加并且随着为多个参考图像中的每一个而计算的损失被反向传播以更新对应于网格100的概率密度,根据拓扑105被覆盖的单元的概率值将减小。此外,根据拓扑105覆盖的单元的位置顶点将随着训练进展而改变以收敛和逼近参考图像125中对象的形状。根据拓扑105启用的单元被有效地变形,从而使得为网格100和拓扑105产生的3D模型表示的经渲染图像与参考图像125相匹配。类似地,3D模型表示的材料属性也随着多个训练迭代而演进。
现在将阐述关于可以利用其按照用户的期望实现前述框架的各种可选的架构和特征的更多说明性信息。应当强烈指出的是,以下信息出于说明的目的而被阐述,不应当以任何方式被解释为限制性的。可选地,可以在排除或不排除所描述的其他特征的情况下合并以下任何特征。
图1B示出了根据一个实施例的3D模型表示122、学习的概率密度126、经渲染的3D模型表示124和经渲染的参考对象158的概念图。3D模型表示122定义来自多个图像观察结果的特定3D场景或对象的形状和外观。体网格121(例如,密集的3D网格)的顶点位置被变形以定义至少一个拓扑的3D模型表示122的形状。拓扑控制体网格121的哪些面和/或单元是可见的(例如,活动的)并且可以随机选择或基于迄今为止学习的概率密度来选择。体网格121可以被初始化为统一的3D网格并且在训练期间进行学习。表面网格132可以从体网格121中提取。表面网格132的形状被学习,它与经渲染的参考对象158的形状紧密匹配。外观属性136(例如,空间变化的材料参数)也被学习以定义3D模型表示122的外观。3D模型表示146有效地包括学习的体网格121、学习的表面网格132和学习的外观属性136。
3D模型表示122由可微分渲染器渲染以产生对应于参考图像的经渲染图像。如图1B所示,在训练过程的早期,经渲染的3D模型表示124不会非常接近经渲染的参考对象158。根据用于学习被渲染以产生经渲染的3D模型表示124的3D模型表示122的拓扑,在体网格121中,只有单元面的子集是可见的,因此对象的重要部分是丢失或未知的。例如,可能已经执行了500个训练迭代以产生与经渲染的3D模型表示124和学习的概率密度126相关联的体网格121。
体网格121由概率渲染器根据拓扑来渲染以产生学习的概率密度126。例如,为每个可见单元计算的概率值表示光线与单元相交的概率,以及每个光线被追踪,直到体网格121中的被包括在拓扑中的单元(例如,活动单元)相交(或光线穿过整个拓扑)。换言之,拓扑和所得到的学习的表面网格132是不透明的,并且追踪终止于第一个交点。
概率密度126包括体网格中的每个面或单元的概率值。较浅的颜色对应较高的概率值,较深的颜色对应较低的概率值。较高的概率值对应于体网格121的单元被包括在3D模型表示中的较高可能性。因此,在一个实施例中,可以从3D模型表示122中移除关联于概率值为零(或低于最小阈值)的面或单元。在一个实施例中,可以从3D模型表示122中移除面和/或单元,但新的面和/或单元不能被插入或添加到3D模型表示122中。基于单元或面的概率密度值可以被转换为用于图像空间损失计算的像素概率值。
基于学习的概率密度126以及经渲染的3D模型表示124和经渲染的参考对象158之间的每像素差计算图像空间损失。图像空间损失被反向传播通过可微分渲染器、概率渲染器、和预测3D模型表示122的3D模型生成单元,以更新由概率渲染器和3D模型生成单元使用的学习参数。
图1C示出了根据一个实施例的学习的概率密度134和144,经渲染的3D模型表示128和138,参考表面网格148和经渲染的参考对象158的概念图。相比于与经渲染的3D模型表示和图1B中所示的学习的概率密度126相关联的体网格121,已经执行了1000个训练迭代以产生与经渲染3D模型表示128和学习的概率密度134相关联的体网格121。已经执行了2000个训练迭代以产生与经渲染的3D模型表示138和学习的概率密度144相关联的体网格121。相比于参考表面网格148和经渲染的参考对象158,表面网格132和经渲染的3D模型表示138,分别准确地表示该对象的形状和外观。当学习的概率密度126,134和144中的概率值被更新时,更准确的值增加(变浅)并且更不准确的值(更暗)被移除。
图1D示出了根据一个实施例的形状和外观驱动的3D建模系统150。该系统150包括3D模型生成单元140,其接收根据学习的参数142处理的体网格130和拓扑136以产生3D模型表示122。在一个实施例中,3D模型生成单元140是神经网络模型。3D模型表示122包括用于对象或场景的3D表面网格和外观属性。在一个实施例中,3D模型生成单元140从体网格130提取表面三角形网格。
体网格130包括密集的几何单元阵列,其中每个单元由形成体(例如,立方体,四面体或其他几何形状)的3D空间中的顶点的位置定义。在一个实施例中,体网格130由其他类型的基元或表示定义。在一个实施例中,初始的体网格130是立方体或四面体的统一网格。通过训练,调整顶点的位置,并且随着3D模型表示122被学习,可以将顶点、单元面和/或单元中的一个或更多个移除。体网格130可以随着训练进展被细分以改进该3D模型表示122。
拓扑生成单元135提供了指示体网格130中的面和/或单元的可见性或覆盖的拓扑136定义。在一个实施例中,训练期间使用的一个或更多个拓扑是蒙特卡罗采样拓扑。在一个实施例中,学习的概率密度156还用于通过重要性采样生成一个或更多个拓扑。
3D模型表示122包括体网格130中的学习的顶点的位置、对应于体网格130的表面网格以及外观属性136。外观属性可以包括法向量图,材料,纹理图,蒙皮权重,粗糙度,金属度等。更具体地,纹理贴图可以定义光照和材料属性。初始3D模型表示122的初始表面纹理可以是恒定的或随机的颜色,并且基于图像空间差来调整初始表面纹理中的每个纹理像素(texel)的颜色,以产生3D模型表示122的纹理。
环境条件108定义每个参考图像154的相机和光源位置,并且其由可微分渲染器145使用以产生每个经渲染图像144。可微分渲染器145根据环境条件108渲染3D模型表示122以产生经渲染图像144。特别地,可微分渲染器145渲染对应于体网格130的表面网格和外观属性。通过根据环境条件108渲染参考3D模型来生成每个参考图像154。虽然初始体网格130的形状可能与参考3D模型的形状不很相似,但在成功优化之后,学习的体网格的形状确实与参考3D模型的形状很相似。
在一个实施例中,可微分渲染器145的一个或更多个操作可以使用图形处理单元(GPU)图形管线,GPU通用计算核心的任何组合来执行或在中央处理单元(CPU)上执行。可微分渲染器145使得诸如光栅化大量三角形、属性插值、过滤的纹理查找以及用户可编程着色和几何处理之类的操作,所有都在一系列分辨率内。与常规的渲染管道相比,由可微分渲染器145执行的操作是可微分的,并且图像空间损失162可以通过可微分渲染器145反向传播,以迭代地调整3D模型表示122。在一些实施例中,渲染操作可以包括光栅化、光线追踪和路径追踪。
概率渲染单元155基于环境条件108、拓扑136和预测或学习的3D模型表示122的体(3D)网格部分计算每单元或每面的概率值。光线是通过体网格130步进的并且在与根据拓扑被覆盖的(或在该场景背景下,如果没有覆盖的单元交点存在)单元(或面)的第一个交点处终止。在以下描述的上下文中,通过3D网格的光线追踪或光线步进被称为传输。
图像空间损失单元160处理每个参考图像157和每个对应的经渲染图像144以产生图像空间损失162。该图像空间损失162被反向传播通过可微分渲染器145、概率渲染单元155和3D模型生成单元140,以减小参考图像157和经渲染图像144之间的差。反向传播向用于概率渲染单元155和3D模型生成单元140的参数142提供更新。参数可以针对每个经渲染图像144和对应的参考图像157进行更新。在一个实施例中,可以使用单个拓扑来渲染多个经渲染图像144,其各自与不同的环境条件108相关联。在一个实施例中,可以使用多个拓扑来渲染多个经渲染图像144以用于相同的环境条件108。
根据经渲染图像144与参考图像157相比在视觉上是否是完全相同的或几乎完全相同的来测量学习成功与否。换句话说,经渲染图像和参考图像用于确定和微调定义3D模型表示122的几何体并且不需要将3D模型表示122与参考3D模型直接进行比较。实际上,与3D模型表示122的表示相比,参考3D模型的表示可以是完全不同的。由于驱动优化的唯一信号是经渲染图像和参考图像的差异,因此该方法是高度通用和多功能的:它易于支持许多不同的前向渲染模型,例如法线贴图、空间变化的双向反射率分布函数(BRDF)、位移映射等。只通过图像进行监督也是在渲染系统和场景表示之间轻松转换的能力的关键。
在一个实施例中,生成的3D模型表示122包括具有编码为纹理的材料的三角形网格,以确保3D模型表示122有效地在现代图形硬件上渲染并受益于例如,硬件加速光栅化、光线追踪和过滤纹理查找。自动生成的3D模型表示122可以用于优化的细节层次生成,以减少混叠、无缝网格过滤、合计几何形状的近似、形状和蒙皮权重的接合点优化,以产生减少的动画几何形状,形状表示之间的转换,以及渲染系统之间的转换。
现有技术依赖于使用所有可能的拓扑的训练。相比之下,每训练步骤(损失计算的迭代,反向传播和参数142的更新)的单个拓扑136可以用于学习3D模型表示122。每训练步骤使用一个参考图像157或每训练步骤可以使用多个参考图像。在每个训练步骤中,单个拓扑136使得来自体网格130的面的子集能够创建被渲染的不透明表面网格。如果整个体网格130都是可见的,则仅体网格130的外部将是相交的,并且光线不会透射到其内部。实现面的子集,特别是实现面的不同组合的子集也产生更准确和平滑的轮廓边缘。
现有技术不使用不透明体网格130,因此由于网格的透明度的级别变化,光线不会终止于第一交点,并且轮廓边缘看起来光滑。这些现有技术在执行时间和/或几何准确度方面(因为一旦训练完成,网格会从透明转换为不透明)实现起来是昂贵的。另外,现有技术通常依赖于至少部分地基于参考图像(或参考3D模型)确定的初始体网格或3D模型(立方体、球体等)输入。相反,相同的初始体网格130可用于学习任何3D模型表示122。
图1E示出了适用于实现本公开的一些实施例的形状和外观驱动的自动3D建模的方法170的流程图。本文描述的方法170的每个框包括可以使用硬件、固件和/或软件的任意组合来执行的计算过程。例如,各种功能可以通过处理器执行存储在存储器中的指令而实施。该方法也可以实现为存储在计算机存储介质上的计算机可用指令。该方法可以由,举几个例子来说,独立的应用程序、服务或托管服务(独立地或与另一个托管服务相结合)或另一个产品的插件提供。此外,方法170通过示例的方式针对图1D的形状和外观驱动的3D建模系统150进行描述。然而,此外或可替换地,该方法可以由任何一个系统,或系统(包括但不限于本文描述的那些系统)的任意组合来执行。此外,本领域普通技术人员将会理解,执行方法170的任何系统都处于本公开实施例的范围和精神之内。
在步骤175,识别体网格内的单元的面的3D拓扑定义被接收。在一个实施例中,3D拓扑定义是拓扑136,并且体网格是体网格130。在一个实施例中,体网格是不透明的。在一个实施例中,体网格被初始化为统一的3D网格。在一个实施例中,体网格是密集体网格。在一个实施例中,拓扑定义是多位可见性掩模,其包括用于体网格内的单元的每个面的单个位。在一个实施例中,拓扑定义是多位可见性掩模,其包括用于体网格内的每个单元的单个位,并且单元的面之间共享单个位。单个位可以在面或单元可见时生效(asserted)并在面或单元不可见时无效(negated)。
在步骤180,根据参数处理3D拓扑和体网格以预测与参考3D模型相对应的3D模型表示,其中3D模型表示包括由单元的顶点位置和顶点位置(例如,顶点)之间的连接所定义的表面网格。在一个实施例中,表面网格是不透明的。在一个实施例中,表面网格的面是三角形。在一个实施例中,3D模型表示包括空间变化的材料属性(例如,颜色、纹理、法向量、粗糙度、金属度等)。在一个实施例中,3D拓扑和体网格由3D模型生成单元140处理。
在步骤185,渲染3D模型表示以产生经渲染图像。在一个实施例中,诸如可微分渲染器145之类的可微分渲染器产生经渲染图像。在一个实施例中,只根据拓扑渲染位于可见的体网格内的面或单元。在一个实施例中,步骤185和190并行执行。在一个实施例中,包括不透明表面网格的3D模型表示被直接优化,而不是优化体表示或半透明表示。
在步骤190,将对应于经渲染图像的光线传输通过3D模型表示以计算单元的概率值。在一个实施例中,用于产生参考3D模型的参考图像的相同的环境条件(例如,相机位置、光位置等)被用来渲染经渲染图像以及计算概率值。在一个实施例中,光线传输通过用于经渲染图像中的每个像素的3D模型表示。
在一个实施例中,针对单元的每个面计算概率值。在一个实施例中,概率值针对每个单元进行计算,并为该单元的所有面所共享。在一个实施例中,3D模型表示包括与3D拓扑一起处理的预测的体网格,以更新与光线相交的每个面或单元的概率值。在一个实施例中,体网格被初始化为统一网格,并且针对每个训练迭代修改体网格的结构(单元面顶点位置和连接),以更好地近似参考对象或场景。在一个实施例中,根据拓扑,当与可见的单元或面相交时,光线的传输终止。在一个实施例中,概率值由概率渲染单元155计算。
在步骤195,基于概率值以及经渲染图像与参考3D模型的参考图像之间的差来更新参数,以减小该差。在一个实施例中,这些差被反向传播通过可微分渲染器145以更新参数。在一个实施例中,更新参数包括:使用概率值计算经渲染图像中的每个像素的像素概率值,以用于每个像素的概率值来缩放该像素的差以计算积,以及对积求和以生成图像损失。
步骤175、180、185、190和195包括训练迭代,并且可以针对附加的3D拓扑定义而多次重复。在一个实施例中,针对每个训练迭代随机生成3D拓扑定义和附加的3D拓扑定义。在一个实施例中,3D拓扑定义和附加的3D拓扑定义中的至少一部分是蒙特卡罗采样拓扑。在一个实施例中,附加的3D拓扑定义中的至少一个是基于概率值确定的。在一个实施例中,体网格被细分用于附加的3D拓扑定义中的至少一个。
在一个实施例中,单个3D拓扑定义被用于多个训练迭代,其中与不同相机位置或光位置相关联的附加图像被渲染,对应于附加的经渲染图像的附加光线被传输通过3D模型表示以计算单元的附加的概率值,并且参数针对每个训练迭代进行更新。参数基于附加的概率值以及附加的经渲染图像与对应于不同相机位置或光照位置的参考3D模型的附加参考图像之间的附加的差进行更新以减小附加的差。
算法的细节在以下段落中进行描述。通过训练,与采用未知拓扑和一组学习的属性θ(例如,顶点位置以及空间变化的材料属性)预测的3D模型表示的渲染xi相比,参考渲染yi之间的可见的差异被减少。令T代表选自拓扑的离散集合的拓扑。3D模型表示通过最小化经渲染图像之间的目标函数(其通常为图像空间中的像素值j之间的l2范数)在多个图像观察结果i上进行优化:
arg minT,θ∑i∑j|xij(T,θ)-yij|2, 等式(1)
即,拓扑T和参数θ的接合点优化。3D模型表示用可微分渲染器R进行渲染,所以xi=R(T,θ,vi),其中,vi代表视图i的环境条件,例如,相机参数和光照。
为了实现在离散拓扑上进行基于梯度的优化,拓扑分布上的损失的预测被用作优化目标:
其中,p(T|θ)是拓扑T的概率。与使用基于3D网格之间的距离的损失的现有技术解决方案相比,该损失函数可以在图像空间中表示,这实现了从图像观察结果进行优化,而无需了解参考3D网格。
通过光线传输的提前终止,在一条光线与多少个m面相交方面可以实现线性复杂度。然而,针对每个光线评估唯一一组拓扑常常是不切实际的。通过统一采样拓扑并使用对Ep(T|φ)[∑j|xij(T)-yij|2]的无偏差蒙特卡罗估计训练3D模型生成单元140和概率渲染单元155,恒定拓扑可被用于每个训练迭代。
回到等式2中的初始优化任务,重新引入训练示例的总和,并且从等式3中代入蒙特卡罗估计,产生
注意在最后一行中,可以以任何顺序评估嵌套和的项。这意味着拓扑Ti可以在每训练迭代中随机采样,并且蒙特卡罗估计可以被视为添加附加的训练示例。结果是一个实用且简单的优化过程:在每个训练迭代中,随机采样单个拓扑,使用单个拓扑渲染图像,并通过概率对图像损失进行加权。相比之下,现有技术,例如Liao等人在“深度步进立方体:学习显式表面表示(Deep Marching Cubes:Learning Explicit SurfaceRepresentations)”CVPR 2018中描述的深度步进立方体在每个训练步骤中评估所有拓扑。
等式4中的最终目标函数导致简单的训练算法,如表1所示。在每个训练步骤中,选择随机拓扑,使用由该拓扑导出的网格渲染图像,计算光线概率,并且损失被更新。损失的梯度用于更新面概率和用于计算顶点位置和外观属性的其他优化参数。
表1
一个关键的见解是像素颜色xij和光线概率的计算可以解耦。这个简单的观察具有强大的实际效果:可以重用三角形网格上的可微分渲染的完整机制,同时联合学习拓扑。因此,可以使用任何现成的可微分渲染器来计算像素颜色。
为了计算光线概率,可以使用简单的光线步进器,如下面的图2A和表2所示。面概率的累积φk类似于半透明三角形的阿尔法混合(alpha compositing),但重要的区别是光线在根据拓扑可见的第一个不透明交点处终止。可微分光栅化用于使用表1中所示的renderColor来渲染彩色图像,因此每训练示例的拓扑可以是恒定的。对于整个训练示例,拓扑保持恒定并不是一个严格的要求。例如,在一个实施例中,可微分光线追踪可用于针对每条光线更新拓扑。但是,每经渲染图像使用单个拓扑确实会导致快速收敛,因此在每条光线的基础上增加改变拓扑所需的复杂度和计算量可能对3D模型构建的准确度或速度没有好处。形状和外观可以与拓扑联合优化。但是,在优化顶点位置时应该小心,这会影响光线概率和像素颜色。在一个实施例中,可以通过在每个训练迭代之间更新包围体层次来处理动态顶点位置。
图2A示出了用于渲染适用于实现本公开的一些实施例的采样拓扑的概率值的方法200的流程图。方法200可用于执行表1中所示算法的第8行。方法200可针对在参考图像和/或经渲染图像中渲染的每个像素执行。在步骤205,光线概率值被初始化。光线概率值可以被初始化为随机值或预定值。
在方法200的以下描述中,描述了光线与一个或更多个单元之间的相交。在另一实施例中,可以识别光线与一个或更多个单元的特定面之间的交点。在步骤210,概率渲染单元155确定体网格130中的单元是否与光线相交,如果是,则在步骤215,概率渲染单元155接下来根据拓扑136确定相交的单元是否可见。如果相交的单元不可见,则概率渲染单元155进行到步骤225。否则,在步骤220,概率渲染单元155计算相交且可见的单元的概率值。一旦可见单元与光线相交,则该光线的传输就完成并终止,并且在步骤230,概率渲染单元155完成该光线的概率渲染。
在步骤215,如果概率渲染单元155根据拓扑确定该相交的单元不可见,则在步骤225,概率渲染单元155确定该光线的传输是否完成。当光线已经穿过整个体网格130而不与可见单元相交时,该光线的传输就完成了。当传输完成时,在步骤230概率渲染单元155完成针对该光线的概率生成。在步骤225,如果传输未完成,则概率渲染单元155返回到步骤210以确定光线是否与体网格130中的另一个单元相交。
在一个实施例中,使用表2中所示的算法2计算每条光线的概率值。每条光线与特定像素相关联。
表2
一旦计算出所有的概率值且渲染了经渲染图像144,则图像空间损失单元160可以计算图像空间损失162。
图2B示出了用于基于适用于实现本公开的一些实施例的图像空间差异的概率值来更新参数的方法240的流程图。在步骤245,图像空间损失单元160计算经渲染图像144和参考图像154中的对应像素的像素差。在步骤250,图像空间损失单元160将每个像素差乘以各自的概率值以产生乘积。在步骤255,图像空间损失单元160对乘积求和以计算图像空间损失162。在步骤260,图像空间损失单元160反向传播图像空间损失162以更新参数142。
从等式(5),偏导数被给定为:
当优化顶点位置时,需要偏导数其中vk是顶点k的位置。请注意,移动顶点位置会改变可见性并引入不连续性。这些可见性梯度应该小心处理,这是一个有许多解决方案的非常活跃的研究课题。在一个实施例中,可见性梯度可以通过屏幕空间抗锯齿基于3D模型表示122的光栅化来近似。可以将相同的屏幕空间抗锯齿技术应用于光线概率以获得
在一个实施例中,使用表3中所示的算法,学习的面概率φ可用于对训练期间选择的重要性样本拓扑。
表3
图2C示出了用于基于适用于实现本公开的一些实施例的概率值对拓扑进行重要性采样的方法265的流程图。在步骤270,拓扑生成单元135生成包括体网格130的每个面的可见性位的拓扑136。针对拓扑136的每个面执行步骤275和步骤280或步骤290。在步骤275,拓扑生成单元135确定一个面的拓扑值是否小于该面的概率值,如果是,则在步骤280设置该面的可见性位。否则,在步骤290,不设置该面的可见性位。
为了促进格式良好的网格并简化uv映射,优化可以用密集的3D网格来初始化,概率φ可以被分配给每个网格单元。每个单元可以被曲面细分成12个三角形,每边两个,而不是依赖于步进立方体,其中网格单元的所有三角形都共享单元的概率φk。与每三角形具有唯一的概率值相比,单元的所有面共享单个概率值提供了更受约束的优化问题。重要的是,假设体网格130不重叠或不自相交,所得的网格是多种多样的(manifold)。
顶点位置vk被优化,这允许体网格130的顶点移动以更好地匹配对象表面。可以从顶点和面推理给定拓扑的切线空间,并且可以训练包括法线扰动和材质属性的纹理,其表示切线空间法线贴图kn、纹理漫反射反射率kd和镜面参数ks(即,金属度和粗糙度)。
表1中所示的算法可以通过在训练期间定期增加网格的分辨率来分层地应用于从粗到细的方案。较粗分辨率的中间结果有效地充当很好的初始猜测,从而大大提高收敛性。
图3A图示了根据一个实施例的从粗到细的分层训练的概念图。训练开始在每个方向(x、y和z)上使用16个单元的网格大小以产生学习的概率密度310。与学习的概率密度310相比,网格大小在每个维度上被细分一次以产生学习的概率密度320,从而提高轮廓的平滑度和保真度。网格大小在每个维度上再次细分两次以产生学习的概率密度330,进一步提高轮廓的平滑度和保真度。
图3B示出了根据实施例的学习的表面网格340、经渲染的3D模型表示345和经渲染的参考3D模型350的概念图。学习的表面网格340包括优化后的密集体网格的表面上的面。在一个实施例中,密集体网格内的顶点和面被移除以产生学习的表面网格340。在一个实施例中,具有低于阈值的学习的概率的密集体网格的面被移除以产生学习的表面网格340。在一个实施例中,学习的表面网格340包括不透明的三角形面,其中顶点的位置在优化的拓扑中被学习。3D模型表示122还包括学习的材料属性,经渲染的3D模型表示345看起来与经渲染的参考3D模型350几乎完全相同。
在一个实施例中,图像空间损失被反向传播通过渲染管线,以更新初始3D模型并提高图像集合和参考图像集合之间的视觉相似性。在一个实施例中,图像空间损失,作为指示移动网格顶点位置和调整其他参数对图像集合的影响的梯度,被反向传播。由渲染管线执行以生成图像集合的操作是可微分的,因此可以计算梯度以用于反向传播。
图3C示出了用于适用于实现本公开的一些实施例的形状和外观驱动的自动3D建模的另一种方法360的流程图。本文描述的方法360的每个框包括可以使用硬件、固件和/或软件的任意组合执行的计算过程。例如,各种功能可以通过处理器执行存储在存储器中的指令而实现。该方法也可以实现为存储在计算机存储介质上的计算机可用指令。该方法可以由(举几个例子来说)独立的应用程序、服务或托管服务(独立地或与另一托管服务相结合)或另一产品的插件提供。此外,方法360通过示例的方式针对图1D的形状和外观驱动的3D建模系统150进行描述。然而,此外或可替换地,该方法可以由任何一个系统,或系统(包括但不限于本文描述的那些系统)的任意组合来执行。此外,本领域普通技术人员将会理解,执行方法360的任何系统都在本公开实施例的范围和精神内。
在步骤365,接收识别由面的顶点位置和顶点位置之间的连接定义的体网格内的单元的可见面的3D拓扑定义。在一个实施例中,3D拓扑定义由拓扑生成单元135输出并且3D拓扑定义识别体网格130内的单元的可见面。
在步骤370,体网格根据参数进行变形以产生由可见面的顶点位置和可见面的这些顶点位置之间的连接所定义的不透明表面网格,其中不透明表面网格对应于参考3D模型。在一个实施例中,由3D模型生成单元140生成的3D模型表示122包括变形的体网格。在一个实施例中,体网格是密集的3D网格,其被变形以定义3D拓扑定义的3D模型表示122的形状。
在步骤375,基于不透明表面网格的经渲染图像和参考3D模型的参考图像之间的差来更新参数以减少该差。在一个实施例中,基于图像空间损失162来更新参数142。在一个实施例中,方法240用于更新这些参数。在一个实施例中,针对附加的3D拓扑定义重复步骤370和375,其中附加的3D拓扑定义与3D拓扑定义相比是不同的。在一个实施例中,附加的3D拓扑定义基于体网格内的单元的计算的概率值进行定义,该概率值指示每个单元与对应于参考图像的光线相交的可能性。在一个实施例中,方法200用于计算概率值。在一个实施例中,方法265用于生成附加的3D拓扑定义。
三角形模型的形状和外观的端到端优化在改变拓扑方面具有挑战性。因此,优化任务是在拓扑分布上制定的,这实现了基于梯度的优化。此外,通过追踪通过蒙特卡罗采样拓扑的光线来估计分布上的期望值,这可以实现非常高效的实现方式。拓扑采样技术使得能够从图像观察中联合学习三角形网格的拓扑、形状和外观。此外,通过对可能拓扑的分布进行重要性采样,可以通过针对每个训练迭代使用随机采样的拓扑进行逆渲染来实现优化。
并行处理架构
图4图示了根据实施例的并行处理单元(PPU)400。PPU 400可用于实现形状和外观驱动的3D建模系统150。PPU 400可用于实现拓扑生成单元135、3D模型生成单元140、概率渲染单元155、可微分渲染器145或图像空间损失单元160中的一个或更多个。在一个实施例中,诸如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是将PPU400的许多单元耦合到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的概念图。示例性系统565可以被配置为实现形状和外观驱动的3D建模系统150和/或图1E中示出的方法170。处理系统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可以被配置为实现形状和外观驱动的3D建模系统150、图1E中示出的方法170和/或图3C中示出的方法360。
如图所示,提供了一种系统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正确地标记输入以及训练数据集中的其他输入。训练复杂的神经网络需要大量的并行计算性能,包括PPU 400支持的浮点乘法和加法。推理的计算密集程度低于训练,是个延迟敏感过程,其中将训练的神经网络应用到它之前没有见过的新输入以便对图像分类,检测情绪,标识推荐,识别和翻译语言,并且通常推理出新信息。
神经网络严重依赖于矩阵数学运算,并且为了效率和速率二者,复杂的多层网络需要巨量的浮点性能和带宽。利用针对矩阵数学运算优化的且提供数十至数百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 300之类的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可表示由API定义的图形处理管线。作为一个选项,图形处理管线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坐标向量(例如,<x,y,z,w>)。顶点着色阶段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网络以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,系统或处理器生成的图像可以通过网络流式传输至显示设备。这样的流式传输允许例如经渲染图像的视频游戏或其他应用程序在服务器、数据中心上或基于云的计算环境中执行,并且渲染的图像被传输和显示于与服务器或数据中心物理上分开的一个或更多个用户设备(例如计算机、视频游戏控制台、智能电话、其他移动设备等等)上。因此,本文公开的技术可以应用于增强被流式传输的图像,并且增强流式传输图像的服务,例如NVIDIA GeForce 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),除非本文另有指明或与上下文明显矛盾。此外,前面的描述仅仅用于说明的目的,并不用于限制的目的,因为寻求保护的范围由此后与其等效物一起阐述的权利要求书限定。本文提供的任何和所有示例或示例性语言(例如“诸如”)的使用仅仅预期更好地说明主题,并不构成对主题的范围的限制,除非另有声明。权利要求书和书面说明书二者中指示带来结果的条件的“基于”以及其他类似短语的使用并不预期排除带来该结果的任何其他条件。说明书中的语言不应当被解释为指示任何未要求权利保护的元素对于要求保护的本发明的实施是必不可少的。
Claims (24)
1.一种用于构建三维3D模型的计算机实现的方法,包括:
接收3D拓扑定义,所述3D拓扑定义识别体网格内的单元的面;
根据参数处理所述3D拓扑和所述体网格以预测对应于参考3D模型的3D模型表示,其中所述3D模型表示包括由所述面的顶点位置和所述顶点位置之间的连接定义的表面网格;
渲染所述3D模型表示以产生经渲染图像;
将对应于所述经渲染图像的光线传输通过所述3D模型表示,以计算所述单元的概率值;以及
基于所述概率值以及所述经渲染图像和所述参考3D模型的参考图像之间的差来更新所述参数,以减小所述差。
2.根据权利要求1所述的计算机实现的方法,其中所述表面网格的所述面是不透明的。
3.根据权利要求1所述的计算机实现的方法,进一步包括:
渲染与不同相机位置或光照位置相关联的附加图像;
将对应于附加的经渲染图像的附加光线传输通过所述3D模型表示,以计算所述单元的附加概率值;以及
基于所述附加概率值以及所述附加的经渲染图像和所述参考3D模型的对应于所述不同相机位置或光照位置的附加参考图像之间的附加差来更新所述参数,以减小所述附加差。
4.根据权利要求1所述的计算机实现的方法,其中所述3D模型表示包括空间变化的材料属性。
5.根据权利要求1所述的计算机实现的方法,其中所述经渲染图像使用可微分渲染器产生,且所述差被反向传播通过所述可微分渲染器以更新所述参数。
6.根据权利要求1所述的计算机实现的方法,其中每个概率值与所述单元中的每个单元的不同面相关联。
7.根据权利要求1所述的计算机实现的方法,其中每个概率值与所述单元中的每个单元的所有面相关联。
8.根据权利要求1所述的计算机实现的方法,其中所述处理、渲染、传输和更新包括训练迭代且进一步包括针对附加的3D拓扑定义重复所述训练迭代。
9.根据权利要求8所述的计算机实现的方法,其中所述3D拓扑定义和附加的3D拓扑定义是针对每个训练迭代而随机生成的。
10.根据权利要求8所述的计算机实现的方法,其中所述附加的3D拓扑定义中的至少一个是基于所述概率值而确定的。
11.根据权利要求8所述的计算机实现的方法,其中所述体网格针对所述附加的3D拓扑定义中的至少一个进行细分。
12.根据权利要求1所述的计算机实现的方法,其中所述体网格被初始化为统一的3D网格。
13.根据权利要求1所述的计算机实现的方法,其中所述渲染和传输是并行执行的。
14.根据权利要求1所述的计算机实现的方法,其中更新包括:
使用所述概率值为所述经渲染图像中的每个像素计算像素概率值;
以用于每个像素的所述概率值缩放用于该像素的所述差以计算积;以及
对所述积求和以生成图像损失。
15.根据权利要求1所述的方法,其中所述体网格是密集体网格。
16.一种系统,包括:
处理器,其通过以下方式构建三维3D模型:
接收3D拓扑定义,所述3D拓扑定义识别体网格内的单元的面;
根据参数处理所述3D拓扑和所述体网格以预测对应于参考3D模型的3D模型表示,其中所述3D模型表示包括由所述面的顶点位置和所述顶点位置之间的连接定义的表面网格;
渲染所述3D模型表示以产生经渲染图像;
将对应于所述经渲染图像的光线传输通过所述3D模型表示,以计算所述单元的概率值;以及
基于所述概率值以及所述经渲染图像和所述参考3D模型的参考图像之间的差来更新所述参数,以减小所述差。
17.根据权利要求16所述的系统,其中所述表面网格的面是不透明的。
18.根据权利要求16所述的系统,其中所述经渲染图像使用可微分渲染器产生,且所述差被反向传播通过所述可微分渲染器以更新所述参数。
19.根据权利要求16所述的系统,其中所述处理器进一步被配置为通过以下方式更新所述参数:
使用所述概率值为所述经渲染图像中的每个像素计算像素概率值;
以用于每个像素的所述概率值缩放用于该像素的所述差以计算积;以及
对所述积求和以生成图像损失。
20.一种非暂时性计算机可读介质,其存储用于构建三维3D模型的计算机指令,所述计算机指令在由一个或更多个处理器执行时,使所述一个或更多个处理器执行以下步骤:
接收3D拓扑定义,所述3D拓扑定义识别体网格内的单元的面;
根据参数处理所述3D拓扑和所述体网格以预测对应于参考3D模型的3D模型表示,其中所述3D模型表示包括由所述面的顶点位置和所述顶点位置之间的连接定义的表面网格;
渲染所述3D模型表示以产生经渲染图像;
将对应于所述经渲染图像的光线传输通过所述3D模型表示,以计算所述单元的概率值;以及
基于所述概率值以及所述经渲染图像和所述参考3D模型的参考图像之间的差来更新所述参数,以减小所述差。
21.根据权利要求20所述的非暂时性计算机可读介质,其中所述表面网格的所述面是不透明的。
22.一种用于构建三维3D模型的计算机实现的方法,包括:
接收3D拓扑定义,所述3D拓扑定义识别体网格内的单元的可见面,所述体网格由所述面的顶点位置和所述顶点位置之间的连接定义;
根据参数变形所述体网格以预测由所述可见面的顶点位置和所述可见面的所述顶点位置之间的连接定义的不透明表面网格,其中所述不透明表面网格对应于参考3D模型;以及
基于所述不透明表面网格的经渲染图像和所述参考3D模型的参考图像之间的差来更新所述参数,以减小所述差。
23.根据权利要求22所述的计算机实现的方法,进一步包括:针对附加的3D拓扑定义重复所述变形和所述更新,其中所述附加的3D拓扑定义与所述3D拓扑定义相比是不同的。
24.根据权利要求23所述的计算机实现的方法,其中所述附加的3D拓扑定义是基于所述体网格内的所述单元的计算的概率值定义的,所述计算的概率值指示每个单元与对应于所述参考图像的光线相交的可能性。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163195301P | 2021-06-01 | 2021-06-01 | |
US63/195,301 | 2021-06-01 | ||
US17/459,223 US11610370B2 (en) | 2021-06-01 | 2021-08-27 | Joint shape and appearance optimization through topology sampling |
US17/459,223 | 2021-08-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115439628A true CN115439628A (zh) | 2022-12-06 |
Family
ID=83997668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210558436.7A Pending CN115439628A (zh) | 2021-06-01 | 2022-05-20 | 通过拓扑采样进行接合点形状和外观优化 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11610370B2 (zh) |
CN (1) | CN115439628A (zh) |
DE (1) | DE102022113244A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116451885A (zh) * | 2023-06-20 | 2023-07-18 | 埃睿迪信息技术(北京)有限公司 | 一种供水管网健康度预测方法、装置及计算设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11610370B2 (en) * | 2021-06-01 | 2023-03-21 | Nvidia Corporation | Joint shape and appearance optimization through topology sampling |
CN115984440B (zh) * | 2023-03-20 | 2023-06-27 | 腾讯科技(深圳)有限公司 | 对象渲染方法、装置、计算机设备和存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10403037B1 (en) * | 2016-03-21 | 2019-09-03 | URC Ventures, Inc. | Verifying object measurements determined from mobile device images |
US11723748B2 (en) * | 2019-12-23 | 2023-08-15 | Align Technology, Inc. | 2D-to-3D tooth reconstruction, optimization, and positioning frameworks using a differentiable renderer |
CN115428028A (zh) * | 2020-01-30 | 2022-12-02 | 因思创新有限责任公司 | 用于合成用于在包括偏振图像的不同成像模态下训练统计模型的数据的系统和方法 |
US11610370B2 (en) * | 2021-06-01 | 2023-03-21 | Nvidia Corporation | Joint shape and appearance optimization through topology sampling |
-
2021
- 2021-08-27 US US17/459,223 patent/US11610370B2/en active Active
-
2022
- 2022-05-20 CN CN202210558436.7A patent/CN115439628A/zh active Pending
- 2022-05-25 DE DE102022113244.7A patent/DE102022113244A1/de active Pending
- 2022-12-13 US US18/065,555 patent/US11657571B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116451885A (zh) * | 2023-06-20 | 2023-07-18 | 埃睿迪信息技术(北京)有限公司 | 一种供水管网健康度预测方法、装置及计算设备 |
CN116451885B (zh) * | 2023-06-20 | 2023-09-01 | 埃睿迪信息技术(北京)有限公司 | 一种供水管网健康度预测方法、装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
US20220392160A1 (en) | 2022-12-08 |
US11610370B2 (en) | 2023-03-21 |
US11657571B2 (en) | 2023-05-23 |
DE102022113244A1 (de) | 2022-12-01 |
US20230105025A1 (en) | 2023-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11704857B2 (en) | Three-dimensional object reconstruction from a video | |
US11295514B2 (en) | Inverse rendering of a scene from a single image | |
US11734890B2 (en) | Three-dimensional model recovery from two-dimensional images | |
US11657571B2 (en) | Joint shape and appearance optimization through topology sampling | |
US11615602B2 (en) | Appearance-driven automatic three-dimensional modeling | |
US11954830B2 (en) | High dynamic range support for legacy applications | |
US11967024B2 (en) | Extracting triangular 3-D models, materials, and lighting from images | |
US20230052645A1 (en) | Multiresolution hash encoding for neural networks | |
US20230237342A1 (en) | Adaptive lookahead for planning and learning | |
CN114792331A (zh) | 应用于半监督环境中以在图像帧序列中执行实例跟踪的机器学习框架 | |
US20230062503A1 (en) | Pruning and accelerating neural networks with hierarchical fine-grained structured sparsity | |
US11282258B1 (en) | Adaptive sampling at a target sampling rate | |
US20230298243A1 (en) | 3d digital avatar generation from a single or few portrait images | |
US20220398283A1 (en) | Method for fast and better tree search for reinforcement learning | |
US11830145B2 (en) | Generation of differentiable, manifold meshes of arbitrary genus | |
US11935194B2 (en) | Constrained BSDF sampling | |
US11925860B2 (en) | Projective hash maps | |
US11783532B1 (en) | View synthesis using attribute correspondences and geometric relationship constraints | |
US20230316631A1 (en) | Noise-free differentiable ray casting | |
US20240112308A1 (en) | Joint neural denoising of surfaces and volumes | |
US20230360278A1 (en) | Table dictionaries for compressing neural graphics primitives | |
US20240193887A1 (en) | Neural vector fields for 3d shape generation | |
US20230229916A1 (en) | Scalable tensor network contraction using reinforcement learning | |
US20240104842A1 (en) | Encoder-based approach for inferring a three-dimensional representation from an image | |
CN113822975A (zh) | 用于对图像进行有效采样的技术 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |