使用3D渲染器生成合成数据
在创建用于作为合成训练数据的计算机生成图像时,理想情况下我们希望这些图像看起来尽可能逼真。基于物理的渲染器 (PBR),例如Blender Cycles 或Unity,有助于创建超级逼真的图像,使其外观和感觉与现实世界中的图像完全一样。
想象一下,您正在创建一张闪亮苹果的图像。现在,当您给苹果上色时,您希望它看起来逼真,对吧?这就是所谓的PBR发挥作用的地方。
好的,让我们分解一下
颜色和光线
- 当光线照射到物体上时,它会以不同的方式与物体相互作用。PBR试图找出并模拟这种相互作用。
- 想想光线是如何照射到苹果上的。光线直接照射的部分可能更亮,而光线被遮挡或到达较少的部分可能更暗。
材质
- 不同的材质对光的反应不同。例如,光滑的金属表面比柔软的哑光织物反射更多的光线。
- PBR考虑了物体的材质,因此,如果您正在渲染一个金属花瓶,它反射的光线将与毛茸茸的泰迪熊不同。
纹理
- PBR使用纹理来添加细节,例如物体表面上的凸起、划痕或细小的凹槽。这使得物体看起来更真实,因为在现实世界中,很少有东西是完全光滑的。
真实感
- PBR旨在使事物看起来尽可能接近现实生活。它通过考虑光线在现实中的行为方式、不同材料如何与光线相互作用以及表面如何存在细微缺陷来实现这一点。
光线层
- 想象一下,您正在看一杯水。PBR将尝试模拟光线穿过水的方式以及它如何可能扭曲您所看到的东西。
- 它考虑了光线如何与物体不同部分相互作用的多个层,使渲染的图像更加逼真。
PBR还可以简化工作流程。您无需手动调整许多参数以获得正确的外观,而是可以使用一组标准化的材质和照明模型。这使得流程更加直观和用户友好。
现在,想想训练计算机视觉中使用的AI模型。如果您正在教计算机识别图像中的物体,那么拥有大量与现实世界场景非常相似的图像将是有益的。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>
您可以查看此笔记本,在 Google Colab 中尝试 BlenderProc,演示了提供的基本示例 此处。以下是一些使用基本示例渲染的图像