从 3D 模型制作经过训练的模型(机器学习)
Posted
技术标签:
【中文标题】从 3D 模型制作经过训练的模型(机器学习)【英文标题】:Making a trained model (machine learning) from 3D models 【发布时间】:2017-12-14 09:57:37 【问题描述】:我有一个包含近 20k 3D 文件的数据库,它们是在 CAD 软件中设计的机器零件的图纸(solidworks)。我试图从所有这些 3D 模型构建一个训练有素的模型,因此当有人可以从其中一个部分(在现实世界中)拍照并且该应用程序可以提供有关材料的有用信息时,我可以构建一个 3D 对象识别应用程序,大小,治疗等。
如果有人已经做过类似的事情,您可以提供给我的任何信息将不胜感激!
【问题讨论】:
至少可以说,您所要求的并非微不足道。您可以通过将其更多地视为二维图像分类问题来简化此问题。也许您可以编写脚本,从这些部分以不同的角度生成一组 2-D 训练图像。您必须确保这些训练图像与人们在各种光照条件下看到的真实世界中的某个部分接近,因此您需要具有各种背景的非常逼真的渲染。材料、处理方法等的组合会产生大量可能的类别。 我可以使用我已经拥有的一个脚本导出多个 png 文件,但我认为我不需要在此图像中添加逼真的背景和照明以使其更成功,你说得很好。非常感谢。 为什么不能让机器的学习算法自己创建各种环境光渲染并在其上进行训练,感觉很明显为什么很多人没有想到它跨度> @PabloL 你找到解决方案了吗?或者至少是某个方向? 您是否研究过任何可能的方法?有很多识别算法,但在不知道你已经看过什么的情况下,你的问题非常广泛。 【参考方案1】:一些想法:
1) 几张图片:而不是只有一张。正如Rodrigo 评论和Brad Larson 试图用他的方法规避的那样,用户只拍摄一张图片作为输入的问题是你必然缺乏信息来进行三角测量并形成点云。使用从稍微不同的角度拍摄的 4 张照片,您已经可以重建对象的某些部分。比较点云将使任何 ML 算法、神经网络 (NN)、支持向量机 (SVM) 或其他算法的工作变得更加容易。创建点云的常用标准是 ASTM E2807,它使用 e57 文件格式。
不利的一面是,3D 视觉算法在用户设备上的负担可能很重,而且不是最容易实现的。
2) 人工图片训练:通过像 Brad Larson 建议的那样对预先计算的人工图片进行训练,您可以接管大部分计算,从而使用户受益。请注意,您可能应该使用从图片中提取的“特征”,而不是完整的图片,用于训练和分类。这种方法的问题是您可能对照明和背景环境非常敏感。您应该注意为所有对象生成具有相同闪电条件的 CAD 图片,以便分类器不会过度拟合不属于该对象的“图片”的某些方面。
这方面是解决方案 1) 更加稳定的地方,它对视觉上下文不太敏感。
3) Scale:对象的大小是一个重要的描述符。因此,您应该在训练之前将比例信息添加到您的对象描述符中。您可以要求用户使用参考对象拍照。或者,您可以要求用户对对象大小进行经验法则估计(“对象的大致尺寸是多少,以 [cm] 为单位?”)。提供大小可以使您的算法显着更快、更准确。
【讨论】:
【参考方案2】:如果您在生产中的测试数据主要是 3D 对象的图像,那么 Brad Larson 评论部分中的方法是更好的方法,它也更容易实现,并且花费更少的精力和资源来完成它并运行。
但是,如果您想在 3D 模型之间进行分类,则现有的网络可以对 3D 点云进行分类。您必须将这些模型转换为点云并将它们用作训练样本。我使用过的其中之一是Voxnet
。我还建议您为训练数据添加更多变化,例如 3D 模型的不同旋转。
【讨论】:
我的测试数据是step/iges/parasolid类型的3D模型;我想要实现的是用这样的文件学习我的模型,然后识别现实世界的物体(那些是“固定”物体,比如瓶子等,而不是狗/猫/...) @swalkner 您需要将这些文件转换为 [XYZ 格式],这基本上是顶点的简单 csv 类型表示。完成后,您可以使用 Voxnet 训练模型(在回答中)【参考方案3】:您可以使用预训练的 3D 深度神经网络,因为有许多网络可以帮助您完成工作并产生高精度。
【讨论】:
以上是关于从 3D 模型制作经过训练的模型(机器学习)的主要内容,如果未能解决你的问题,请参考以下文章