社区计算机视觉课程文档

使用 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

或者,您可以使用 Git 从 GitHub 克隆官方 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 上更新