Replicator
文章目录
- Replicator
- Replicator简介
- 合成数据训练背后的理论
- Replicator核心组件
- 已知的问题
Replicator简介
Omniverse Replicator 是一个高度可扩展的框架,构建在可扩展的 Omniverse 平台上,可生成物理上准确的 3D 合成数据,以加速 AI 感知网络的训练和性能。
Omniverse Replicator 为深度学习工程师和研究人员提供了一套工具和工作流程,用于引导模型训练、提高现有模型的性能或开发由于缺乏数据集或所需注释而无法实现的新型模型。 它允许用户轻松导入模拟就绪资产以构建上下文感知的 3D 场景,通过创建以前不可用的新型数据集和注释来释放以数据为中心的方法。
基于通用场景描述 (USD)、PhysX、材质定义语言 (MDL) 等开源标准,Omniverse Replicator 可以通过可扩展的 Python API 轻松集成或连接到现有管道。
Omniverse Replicator 建立在高度可扩展的 OmniGraph 架构之上,允许用户轻松扩展内置功能以创建满足自己需求的数据集。 它提供了一个可扩展的注释器和编写器注册表,以解决围绕训练 AI 模型所需的注释类型和输出格式的自定义要求。 此外,可扩展随机化器允许创建可编程数据集,从而支持以数据为中心的方法来训练这些模型。
Omniverse Replicator 在 Omniverse Code 中作为一组扩展、内容和示例公开。 有关 Replicator 的详细介绍,请查看此演讲。
合成数据训练背后的理论
为感知任务训练深度神经网络的典型过程涉及手动收集数据(大多数情况下是图像),然后是手动注释这些图像和可选增强的过程。 然后将这些图像转换为 DNN 可用的格式。 然后对 DNN 进行感知任务训练。 超参数调整或网络架构更改是优化网络性能的典型步骤。 对模型性能的分析可能会导致数据集发生潜在变化,但这可能需要另一个手动数据收集和注释周期。 这是一个昂贵的手动过程。
合成数据生成能够以具有成本效益的方式生成具有准确注释的大规模训练数据。 此外,合成数据生成还解决了与长尾异常、没有可用训练数据的引导模型训练以及在线强化学习相关的挑战。
一些更困难的感知任务需要对手动极难完成的图像进行注释(例如,带有遮挡物体的图像)。 以编程方式生成的合成数据可以非常有效地解决这个问题,因为所有生成的数据都被完美地标记了。 数据生成的程序化性质还允许创建有利于 DNN 性能的非标准注释和间接特征。
如上所述,合成数据生成具有许多优点,但要使其有效,还需要解决一系列挑战。
合成数据集是使用模拟生成的; 因此,缩小模拟与现实世界之间的差距至关重要。 这种差距被称为域差距,它可以分为两部分:
-
外观差距是真实图像和合成图像之间的一组像素级差异。 这些差异可能是由于对象细节、材料的差异,或者在合成数据的情况下,所使用的渲染系统的功能差异造成的
-
内容差距是指领域之间的差异。 这包括场景中对象的数量、类型和位置的多样性以及类似的上下文信息等因素。
克服这些领域差距的一个关键工具是领域随机化。 域随机化增加了我们为合成数据集生成的域的大小,以尝试确保我们包括最符合现实的范围,包括长尾异常。 通过生成比我们在现实中可能发现的更广泛的数据分布,神经网络可能能够学习更好地概括问题的整个范围。
外观差距可以通过高保真 3D 资产和基于光线跟踪或路径跟踪的渲染,使用基于物理的材料(例如使用 MDL 材料语言定义的材料)进一步解决。 经过验证的传感器模型及其参数的域随机化也可以提供帮助。
在内容方面,需要大量与场景相关的资产。 Omniverse 提供了可用于其他 3D 应用程序的各种连接器。 开发人员还可以编写工具来生成适用于其特定领域的多样化领域场景。
这些挑战给使用合成数据进行训练带来了一层复杂性,因为无法知道在合成数据集中进行的随机化是否能够封装真实域。 要使用合成数据成功训练网络,必须在真实数据集上测试网络。 为了解决任何模型性能问题,我们采用以数据为中心的方法作为第一步,在尝试更改模型架构或超参数之前调整我们的数据集。
这意味着使用合成数据进行训练的过程是高度迭代的。 Replicator 通过将模拟世界转换为一组可学习的参数来实现这种以数据为中心的 AI 训练。 在整个训练过程中,场景可以修改、随机化,资产的分布可以迭代地改变。
Replicator核心组件
Replicator 由六个组件组成,使您能够生成合成数据:
-
语义模式编辑器需要语义注释(与给定网格相关的“感兴趣的”数据)才能正确使用合成数据扩展。 这些注释告知扩展场景中的哪些对象需要边界框、姿态估计等……语义模式编辑器提供了一种通过 UI 将这些注释应用于舞台上的基元的方法。
-
可视化工具 Replicator 可视化工具使您能够可视化 2D/3D 边界框、法线、深度等的语义标签。
-
随机化器:Replicator 的随机化工具允许开发人员轻松创建域随机化场景,从资产、材料、照明和相机位置快速采样。
-
Omni.syntheticdata:Omni.synthetiticdata 是 Replicator 软件堆栈的最低级别组件,它将作为 Omniverse Kit SDK 未来所有版本的内置扩展发布。 omni.syntheticdata 扩展提供与 RTX 渲染器和 OmniGraph 计算图系统的低级集成。这是为 Replicator 的 Ground Truth 提取注释器的计算图提供动力的组件,将任意输出变量或 AOV 从渲染器传递到注释器 .
-
注释器:注释系统本身从 omni.syntheticdata 扩展中摄取 AOV 和其他输出,为 DNN 训练生成精确标记的注释。
-
编写器:编写器处理来自注释器的图像和其他注释,并生成用于训练的 DNN 特定数据格式。 编写器可以输出到本地存储,通过网络输出到基于云的存储后端,例如 SwiftStack,未来我们将提供后端用于实时 GPU 训练,允许生成的数据保留在 GPU 上进行训练,避免任何额外的 IO 全部。
在数据集的整个生成过程中,最常见的工作流程是随机化一个场景,选择您的注释器,然后写入您想要的格式。 但是,如果需要更多定制,您可以访问 omni.synthetic 数据。
已知的问题
-
在 RTX - 实时模式下,材料或纹理有时无法及时加载以进行捕捉。 如果发生这种情况,您可以通过设置 /omni/replicator/RTSubframes 标志(默认值 = 3)来增加捕获之间的间隔。 要在 Python 中设置,
carb.settings.get_settings().set(<new value>)
。 同样,如果没有材料被随机化,则可以通过将该值设置为最小值 1 来提高捕获速度。 -
在具有多 GPU 的系统上运行时,可能会出现注释器可视化和数据生成错误。 要禁用多 GPU,请使用 --/renderer/multiGpu/enabled=false 标志启动。
-
在具有大量 3D 边界框的场景中,可视化器会因框的渲染顺序而闪烁。 这个渲染问题纯粹是美学问题,在写入数据时不会有任何影响。