我正在开发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,您可以解决检测特定对象的问题(在您的情况下,是复印机)。所需的步骤是:
- 选择一个模型(SSD、Faster-RCNN、R-FCN、YOLOv2…)
- 下载您所选模型的预训练权重(这一过程称为迁移学习)
- 拍摄数百张您的复印机照片并对其进行标注
- 使用您自己的数据集微调您的模型(这将需要修改网络)
- 评估您的模型以查看其预测效果如何(即在当前画面中检测到复印机的位置)
- 如果不行,考虑使用更多图像来扩充您的数据集,或者尝试调整网络的参数(学习率、训练轮数、层数、优化算法…)
但是
最终您得到的网络将不会提供关于复印机姿态的任何信息。它只会说:是的,它在画面中,或者不,它不在这里。
一个可能的解决方法可能是为您数据集中的每张图像编码(即标注)姿态估计信息(您可以从设备的IMU获取这些信息)。然后,您需要修改您的网络以考虑这些信息。这意味着:
- 修改您的输入层,以便在训练阶段提供额外信息
- 修改您的输出层,以便输出姿态估计
- 修改网络的内部结构,以便在测试阶段进行姿态估计的回归
这真不是一件简单的事。希望对您有帮助。
祝您好运!