合成数据集(Synthetic Datasets)正在成为计算机视觉模型训练的标准部分。 虽然新工具使合成数据集变得更容易访问,但除了标准机器学习过程之外,许多工具还需要对 3D 建模有基本的了解。 最简单的捷径是从现实世界中获取现有对象并将其导入 3D 场景中。
推荐:用 NSDT编辑器 快速搭建可编程3D场景
在本文中,我们将介绍如何对对象进行 3D 扫描以获取合成数据。 这是一个工作流程,可将你从真实对象带到 Blender 内的基本实现。 然后,使用合成数据工具包 zpy,你可以创建任意大小的合成数据集所需的标签、分段和随机变体。
要复制此实验,你需要使用 Blender、Meshroom、zpy 和手机摄像头。
1、3D 扫描物体
如果我们遵循一些最佳实践,拍摄 3D 扫描照片可能会非常简单。 尝试消除深阴影并保持照明一致。 为此,我们使用了一个非常简单的台灯。 尽可能保持整个物体的焦点。
使用手机摄像头,我们希望从各个可能的角度覆盖整个物体。 这有助于运动算法的结构找出物体的形状并将其重建为点云。
需要注意的是:一旦开始拍照,请勿移动物体或改变灯光,否则你将不得不重新开始。 即使是在背景中移动的物体(如上图所示的好奇宠物)也可能会导致 3D 重建出现问题。
我们在大约 5 分钟的时间内拍了 54 张照片。 一方面,不存在“图片太多”这样的问题,但试图获得“全面覆盖”却会让自己发疯。对于一个小物体,你不需要数千张图片,所以当遇到问题时就停下来。 你认为你已经足够了。
拍摄照片后,上传到 Meshroom 非常简单 - 只需拖放到图像文件夹中即可。 完成后,点击“开始”,Meshroom 会完成剩下的工作。 在 Meshroom 工作时密切关注它可能是件好事,否则就不清楚是否发生了任何事情。 Meshroom 有一个非常精彩的简短视频,介绍如何使用他们的产品,因此我们不会深入了解 Meshroom 的工作原理,但真正需要的只是几次点击和一些时间来输出模型。
完成模型后,我们可以检查输出中列出的 Meshroom 缓存。
2、导入Blender
接下来我们将导入并清理 Meshroom 输出。 打开 Blender 并单击“文件”,然后单击“导入”。 选择 OBJ,然后导航到 Meshroom Cache 以选择我们的纹理网格。 结果通常是模型未正确旋转或缩放。
我们可以使用屏幕左侧提供的简单工具来解决此问题,移动、旋转和缩放按钮是图中从上到下的三个按钮。
Blender 是一个非常复杂的软件包,拥有庞大的社区,因此如果你有更多问题并想深入研究 3D 动画,Youtube 上有大量教程。
现在,我们要让模型直立并调整尺寸。 我们可以通过点击最右侧的圆形按钮切换到纹理版本。 如果你的模型看起来很暗,请尝试添加灯光来调整场景的亮度。
即使没有任何编辑,我们已经得到了很好的结果!
但正如你所看到的,我们在网格中捕获了许多周围区域。 如果我们想创建机器学习数据集,我们需要将对象与背景隔离。
为了获得这种隔离,我们可以通过单击对象来选择对象,点击选项卡按钮,然后单击并拖动以框选我们要删除的区域。
点击删除按钮并选择“顶点”,然后再次点击选项卡,现在我们有了一个非常好的 3D 扫描模型可以在 Blender 中使用。
在我们开始数据集创建之前,需要进行更多的清理工作。 原点应该以我们的几何体为中心,以便我们获得一致的旋转和缩放。 通过选择“对象”选项卡,选择“选择原点”,然后选择“原点到几何体”来执行此操作。
你现在已经获得了现实世界对象的 3D 模型。 围绕它创建一个场景可能需要做更多的工作,但是这是否值得花费时间和精力完全取决于你的用例以及你希望将场景发展到什么程度。
3、生成综合数据
3D 模型完成后,你就可以开始使用 zpy 了。 作为一个为 Blender 添加功能的开源工具包,它允许我们创建各种各样的图像,这些图像构成了用于机器学习目的的数据集。 你可以选择为 3D 模型实现随机背景、随机相机角度、随机照明,甚至引入其他对象以增加数据集的复杂性。
开始使用 zpy(可在 GitHub 上获取)的最简单方法是按照这个简短视频教程系列中概述的步骤进行操作。
希望这能让你对如何 3D 扫描物体并开始使用合成数据有一个坚实的了解。
原文链接:用3D扫描生成合成数据 — BimAnt