1

我正在开发一个uni项目,它需要无标记的相对姿态估计。为此,我拍摄两张图像,并在图片的某些位置匹配n个要素。从这些点我可以找到这些点之间的矢量,当与距离一起被包括时,可以用来估计相机的新定位。姿态估计中人工神经网络的适用性

该项目需要在移动设备上进行deplyoable,因此算法需要高效。一个想法,我不得不使它更有效率,将采取这些向量,并将它们放入一个神经网络,它可以采取向量,并输出基于输入的xyz运动向量的估计。

我的问题是如果一个神经网络适合这种情况,如果充分训练?如果是这样,我将如何计算我需要的隐藏单位的数量以及最佳激活函数是什么?

回答

2

使用神经网络为您的应用程序可以很好地工作,但是,我觉得您将需要大量的训练样本,以允许网络推广。当然,这也取决于你正在处理的姿势的类型和数量。这听起来对于我来说,用一些聪明的数学可以直接从输入向量中导出运动向量 - 如果有机会,你可以想出一种方法来做到这一点(或提供更多的信息,以便其他人可以考虑它),那将是非常受欢迎的,因为在那种情况下,您将包括关于该任务的先前知识,而不是依靠NN来从数据中学习它。

如果你决定继续与NN方法,请记住以下几点:

  1. 将您的数据转化为训练和验证集。这可以让你确保网络不会过度使用。您使用训练集进行训练,并使用验证集上的错误确定特定网络的质量。培训/验证的比例取决于您拥有的数据量。一个大的验证集(例如,50%的数据)将允许关于训练网络质量的更精确的结论,但通常您的数据太少而无法承担。但是,无论如何,我会建议使用至少10%的数据进行验证。
  2. 至于隐藏单位的数量,经验法则是每个自由参数,即每个重量,至少有10个训练样例。所以假设你有一个有4个输入,10个隐藏单元和3个输出单元的3层网络,其中每个隐藏单元和输出单元都有额外的偏置权重,你应该有(4 + 1)* 10 +(10+ 1)* 3 = 83个自由参数/权重。一般来说,您应该尝试隐藏单位的数量以及隐藏层的数量。根据我的经验,4层网络(即2个隐藏层)比3层网络工作得更好,但这取决于问题。由于您还拥有验证集,因此您可以了解哪些网络体系结构和大小可行,而不必担心过度配合。
  3. 对于激活功能,您应该使用一些sigmoid function以允许非线性行为。我喜欢双曲正切的对称性,但根据我的经验,您还可以使用逻辑函数。
+0

感谢这是一个写得很好的答案。我认为NN有用的原因是因为在数据可能出现异常值的情况下,它应该能够很好地推广。也只是想知道,在培训/验证集方面你考虑多少? – 2013-03-19 11:11:37

+0

正如我所说,这取决于你的问题的难度,即你正在处理什么样的姿势等等。一般来说,你有更多的样本需要输入尺寸,但很难给出具体的数字,没有有关您的问题的更多信息。再次阅读你的描述,这听起来像你在静态场景中移动摄像机,并想要推导摄像机的移动。在那种情况下,直接推导运动的方法将更为合适,例如来自运动方法的结构。 – ahans 2013-03-19 11:54:50

+0

对,非常感谢。这非常有帮助,并且让我有很多想法和玩法。 – 2013-03-19 22:37:35