3D对象识别

时间:2018-03-14 08:17:07

标签: opencv machine-learning computer-vision augmented-reality

我正在开发AR解决方案。

使用案例 - 用户可以从任何角度将相机对准3D物体(影印机),它应该给出3D物体的姿势。

虽然我在模型目标生成器https://www.youtube.com/watch?v=0CIWhxf94wk的帮助下尝试过Vuforia,但没有运气。

然后我尝试了VisionLib - https://visionlib.com/它有效,但在某种程度上,我的意思是你必须将它与HUD中的图像对齐。

然后我采取了不同的方法,开始探索机器学习选项。 我还发现我可以使用CNN - 常规神经网络。

但这是正确的方法,还是我应该尝试使用OpenCV编写我自己的解决方案?

或者我还有其他方法。

我也发现了YOLOv2 - https://pjreddie.com/darknet/yolo/,但我不确定它会不会给我一个姿势。

到目前为止,我能够理解的是,我应该使用CNN来检测相机框架中的对象,然后在OpenCV的帮助下找到它的姿势。 上述方法听起来很简单但需要一些繁重的工作。

我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 选择型号(SSD,Faster-RCNN,R-FCN,YOLOv2 ......)
  2. 下载所选模型的预训练重量(称为转移学习过程)
  3. 拍摄数百张影印机照片并注明
  4. 使用您自己的数据集对模型进行微调(这需要修改网络)
  5. 评估您的模型以查看它是否能够很好地预测(即检测复印机实际位于当前帧中的位置)
  6. 如果不是,请考虑为您的数据集使用更多图像,或尝试调整网络参数(学习率,训练时期数,图层数,优化算法......)
  7. <强> BUT

    您最终会得到的网络不会向您提供有关复印机姿势的任何信息。它只会说:是的,它在框架中或否,它不在这里。

    可能的解决方法可能是对数据集的每个图像进行编码(别名注释)姿势估计信息(您可以从设备的IMU获取此信息)。然后,您需要修改您的网络以考虑此信息。这意味着:

    1. 修改输入图层以提供其他信息(仅在培训阶段)
    2. 修改输出图层以输出姿势估计值
    3. 修改网络的内部结构,以便在测试阶段执行姿势估计的回归
    4. 真的不是一项简单的任务。希望它有所帮助。

      祝你好运!