3D物体识别

3D object recognition

我正在开发 AR 解决方案。

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

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

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

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

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

或者我应该采取任何其他方法。

我也发现了 YOLOv2 - https://pjreddie.com/darknet/yolo/,但我不确定它是否会给我 pose。

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

我走在正确的轨道上吗?

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

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

  1. 选择模型(SSD、Faster-RCNN、R-FCN、YOLOv2...)
  2. 为您选择的模型下载 pre-trained 个权重(称为迁移学习的过程)
  3. 为您的影印机拍摄数百张照片并添加注释
  4. 用你自己的数据集微调你的模型训练(这需要修改网络)
  5. 评估您的模型以查看它是否预测良好(即检测复印机在当前帧中的实际位置)
  6. 如果不是,请考虑为您的数据集使用更多图像或尝试调整您的网络参数(学习率、训练时期数、层数、优化器算法...)

但是

你最终得到的网不会给你任何关于复印机姿势的信息。它只会说:是的,它在框架中或不,它不在这里。

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

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

真的,这不是一项简单的任务。希望对你有帮助。

祝你好运!