社区计算机视觉课程文档
使用 3D 渲染器生成合成数据
并获得增强的文档体验
开始使用
使用 3D 渲染器生成合成数据
当创建计算机生成图像用作合成训练数据时,理想情况下我们希望图像看起来尽可能真实。基于物理的渲染器 (PBR),例如 Blender Cycles 或 Unity,有助于创建超真实的图像,其外观和感觉就像真实世界中的一样。
想象一下您正在创建一张闪亮苹果的图像。现在,当您为苹果着色时,您希望它看起来真实,对吗?这就是 PBR 的用武之地。
好的,我们来分解一下
颜色和光线
- 当光线照射到物体上时,它会以不同的方式与物体相互作用。PBR 试图计算和模拟这种相互作用。
- 想想光线是如何照射到苹果上的。光线直接照射的部分可能更亮,而光线被阻挡或照射不到的部分可能更暗。
材质
- 不同的材质对光的反应不同。例如,闪亮的金属表面比柔软的哑光织物反射更多的光线。
- PBR 会考虑物体的材质,因此如果您正在渲染一个金属花瓶,它会以与毛绒泰迪熊不同的方式反射光线。
纹理
- PBR 使用纹理来添加细节,例如物体表面的凹凸、划痕或微小凹槽。这使得事物看起来更真实,因为在现实世界中,很少有东西是完全光滑的。
真实感
- PBR 旨在使事物看起来尽可能接近真实生活。它通过考虑光线在现实中的行为方式、不同材料与光的相互作用以及表面如何存在细微缺陷来实现这一点。
光线层
- 想象一下您正在看一杯水。PBR 将尝试模拟光线穿过水的方式以及它可能如何扭曲您所看到的东西。
- 它考虑了光线如何与物体的不同部分进行多层相互作用,使渲染的图像更具真实感。
PBR 还简化了工作流程。您可以使用一组标准化的材质和光照模型,而无需手动调整许多参数以获得正确的外观。这使得过程更加直观和用户友好。
现在,想想训练用于计算机视觉的人工智能模型。如果您正在教计算机识别图像中的物体,拥有多样化的图像集以密切模仿现实世界场景将是有益的。PBR 有助于生成看起来非常真实的合成数据,可有效用于训练计算机视觉模型。
有多种 3D 渲染引擎可用于 PBR,包括 Blender Cycles 或 Unity。我们将重点关注 Blender,因为它是开源的,并且有大量的 Blender 相关资源。
Blender
Blender 是一款功能强大的开源 3D 计算机图形软件,用于创建动画电影、视觉效果、艺术、3D 游戏等。它包含广泛的功能,使其成为艺术家、动画师和开发人员的多功能工具。让我们从渲染一张大象的合成图像的基本示例开始。
以下是基本步骤
- 创建大象模型。下图所示的模型是使用 Metascan 应用程序通过摄影测量创建的。摄影测量是一种将普通照片转换为 3D 模型的方法。它就像从不同角度拍摄一堆玩具照片,然后使用这些照片制作它的计算机版本。
- 创建背景——这是一个多步骤的过程。有关更详细的解释,请参见此处。
- 调整灯光和相机位置。
- 固定大象的位置和旋转,使其适合框架(或相机视图)内。
以下是 Blender 中生成的大象图像
它并非完全逼真,但可能足以训练模型来监测大象种群。当然,为此我们需要创建大量合成大象图像数据集!您可以使用 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,演示此处提供的基本示例。以下是使用基本示例渲染的一些图像