社区计算机视觉课程文档

使用 3D 渲染器生成合成数据

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

使用 3D 渲染器生成合成数据

当创建计算机生成的图像以用作合成训练数据时,理想情况下,我们希望图像看起来尽可能逼真。物理渲染 (PBR) 引擎,例如 Blender CyclesUnity,有助于创建超级逼真的图像,使其外观和感觉就像在现实世界中一样。

想象一下您正在创建一个闪亮的苹果图像。现在,当您为那个苹果着色时,您希望它看起来逼真,对吧?这就是 PBR 发挥作用的地方。

apple

好的,让我们分解一下

颜色和光线

  • 当光线照射到物体上时,它会以不同的方式与物体相互作用。PBR 尝试弄清楚并模拟这种相互作用。
  • 想想光线如何照射到苹果。一些部分可能是光线直接照射到的地方更亮,而一些部分可能是光线被阻挡或没有到达那么多地方更暗。

材质

  • 不同的材质对光线的反应不同。例如,闪亮的金属表面比柔软的哑光织物更能反射光线。
  • PBR 考虑了物体的材质,因此如果您要渲染金属花瓶,它反射光线的方式将与蓬松的泰迪熊不同。

纹理

  • PBR 使用纹理来添加细节,例如物体表面的凸起、划痕或细小凹槽。这使事物看起来更真实,因为在现实世界中,很少有东西是完全光滑的。

真实感

  • PBR 旨在使事物看起来尽可能接近现实生活。它通过考虑光线在现实中的行为方式、不同材质与光线的相互作用方式以及表面如何具有细微瑕疵来实现这一点。

光线层

  • 想象一下您正在看一杯水。PBR 将尝试模拟光线穿过水的方式以及它可能如何扭曲您所看到的东西。
  • 它考虑了光线如何与物体的不同部分相互作用的多个层,使渲染图像更加逼真。

PBR 还简化了工作流程。您可以使用一组标准化的材质和照明模型,而无需手动调整许多参数来获得正确的外观。这使得过程更加直观和用户友好。

现在,想想训练人工智能模型,例如计算机视觉中使用的那些模型。如果您正在教计算机识别图像中的物体,那么拥有各种各样的图像来紧密模仿现实世界的场景是有益的。PBR 有助于生成看起来非常真实的合成数据,可用于有效地训练计算机视觉模型。

您可以使用多种 3D 渲染引擎进行 PBR,包括 Blender CyclesUnity。我们将专注于 Blender,因为它是一个开源软件,并且有很多关于 Blender 的资源。

Blender

Blender 是一款功能强大的开源 3D 计算机图形软件,用于创建动画电影、视觉效果、艺术作品、3D 游戏等。它包含广泛的功能,使其成为艺术家、动画师和开发人员的多功能工具。让我们从一个基本示例开始,逐步了解如何渲染大象的合成图像。

以下是基本步骤

  • 创建大象模型。下面显示的那个是使用 Metascan 应用程序使用摄影测量法创建的。摄影测量法是将普通照片转换为 3D 模型的一种方法。这就像从不同角度拍摄玩具的一堆照片,然后使用这些照片制作玩具的计算机版本。
  • 创建背景 - 这是一个多步骤过程。有关更详细的说明,请参阅此处
  • 调整照明和相机位置。
  • 修复大象的位置和旋转,使其适合框架(或相机视图)。

这是在 Blender 中生成的大象图像

elephant image

它不是完全照片级的真实感,但可能足够接近以训练模型来监测大象种群。当然,要做到这一点,我们需要创建大量的合成大象图像数据集!您可以使用 Blender python 环境 bpy 渲染大量图像,并随机化大象的位置和旋转。您还可以使用脚本来帮助进行分割、深度、法线和姿势估计。

太棒了!我们如何开始?

不幸的是,Blender 的学习曲线相当陡峭。这些步骤都不太复杂,但是如果我们可以在不试图弄清楚所有这些的情况下渲染数据集,那不是很好吗?幸运的是,我们有一个名为 BlenderProc 的库,其中包含渲染逼真的合成数据和注释所需的所有脚本,并且它构建在 Blender 之上。

BlenderProc

BlenderProc 管道在 BlenderProc, Denninger 等人中介绍,它是一个构建在 Blender 之上的模块化管道。它可用于生成各种用例的图像,包括分割、深度、法线和姿势估计。

它是专门为帮助生成逼真图像以训练卷积神经网络而创建的。
它具有以下属性,使其成为合成数据生成的绝佳选择

  • 程序化生成:使用程序化技术实现复杂 3D 场景的自动化创建和变化。
  • 模拟:支持集成模拟,包括物理模拟,以增强真实感。
  • 大规模生成:旨在高效处理大规模场景生成,使其适用于各种应用。
  • 自动化和可扩展性
    • 脚本:允许用户通过使用 python 脚本来定制 BlenderProc 以满足其特定需求和配置参数,从而实现生成过程的自动化。
    • 并行处理:支持并行处理以实现可扩展性,使其能够高效地生成大量场景。

您可以通过 pip 安装 BlenderProc

pip install blenderProc

或者,您可以从 GitHub 使用 Git 克隆官方 BlenderProc 存储库

git clone https://github.com/DLR-RM/BlenderProc

BlenderProc 必须在 blender python 环境 (bpy) 中运行,因为这是访问 Blender API 的唯一方法。

blenderproc run <your_python_script>

您可以查看此 notebook 以在 Google Colab 中试用 BlenderProc,演示了 此处 提供的基本示例。以下是一些使用基本示例渲染的图像

colors normals depth

Blender 资源

以下视频解释了如何在 Blender 中渲染 3D 合成数据集:

以下视频解释了如何使用摄影测量法创建 3D 对象:

论文 / 博客

BlenderProc 资源

以下视频概述了 BlenderProc 管道:

论文

< > 在 GitHub 上更新