3D对象识别

我正在开发AR解决方案。

使用案例 – 用户可以从任意角度用相机对准3D对象(复印机),并应能获取3D对象的姿态信息。

尽管我尝试使用Vuforia并借助模型目标生成器 – https://www.youtube.com/watch?v=0CIWhxf94wk,但没有成功。

然后我尝试了VisionLib – https://visionlib.com/,它在一定程度上有效,我是说你必须将其与HUD中的图像对齐。

接着我采取了不同的方法,开始探索机器学习的选项。我还发现可以使用CNN – 卷积神经网络。

但这是正确的途径吗,或者我应该尝试使用OpenCV编写自己的解决方案?

或者还有其他我应该采取的方法吗?

我还了解到YOLOv2 – https://pjreddie.com/darknet/yolo/,但我不确定它是否能提供姿态信息。

到目前为止,我能理解的是,我应该使用CNN来检测相机画面中的对象,然后借助OpenCV找出其姿态。上述方法听起来简单,但需要一些繁重的工作。

我走在正确的轨道上吗?


回答:

卷积神经网络可能是解决您问题的最佳方法。

使用CNN,您可以解决检测特定对象的问题(在您的情况下,是复印机)。所需的步骤是:

  1. 选择一个模型(SSD、Faster-RCNN、R-FCN、YOLOv2…)
  2. 下载您所选模型的预训练权重(这一过程称为迁移学习)
  3. 拍摄数百张您的复印机照片并对其进行标注
  4. 使用您自己的数据集微调您的模型(这将需要修改网络)
  5. 评估您的模型以查看其预测效果如何(即在当前画面中检测到复印机的位置)
  6. 如果不行,考虑使用更多图像来扩充您的数据集,或者尝试调整网络的参数(学习率、训练轮数、层数、优化算法…)

但是

最终您得到的网络将不会提供关于复印机姿态的任何信息。它只会说:是的,它在画面中,或者不,它不在这里。

一个可能的解决方法可能是为您数据集中的每张图像编码(即标注)姿态估计信息(您可以从设备的IMU获取这些信息)。然后,您需要修改您的网络以考虑这些信息。这意味着:

  1. 修改您的输入层,以便在训练阶段提供额外信息
  2. 修改您的输出层,以便输出姿态估计
  3. 修改网络的内部结构,以便在测试阶段进行姿态估计的回归

这真不是一件简单的事。希望对您有帮助。

祝您好运!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注