1

我正在为一个需要无标记相对姿势估计的 uni 项目工作。为此,我拍摄了两张图像并匹配图片某些位置的 n 个特征。从这些点我可以找到这些点之间的向量,当包含在距离中时,可以用来估计相机的新位置。

该项目需要可在移动设备上部署,因此算法需要高效。我必须使它更有效的一个想法是获取这些向量并将它们放入神经网络中,该神经网络可以获取向量并根据输入输出对 xyz 运动向量的估计。

我的问题是,如果训练有素,NN 是否适合这种情况?如果是这样,我将如何计算我需要的隐藏单元的数量以及最好的激活函数是什么?

4

1 回答 1

2

为您的应用程序使用神经网络可以很好地工作,但是,我觉得您需要大量的训练样本才能使网络泛化。当然,这也取决于您要处理的姿势的类型和数量。在我看来,通过一些巧妙的数学运算,可以直接从输入向量中导出运动向量——如果你有机会想出一种方法(或提供更多信息以便其他人可以考虑)也),这将是非常可取的,因为在这种情况下,您将包含有关该任务的先验知识,而不是依靠 NN 从数据中学习它。

如果您决定继续使用 NN 方法,请记住以下几点:

  1. 将您的数据划分为训练集和验证集。这使您可以确保网络不会过拟合。您使用训练集进行训练,并使用验证集上的错误来确定特定网络的质量。训练/验证的比率取决于您拥有的数据量。大型验证集(例如,50% 的数据)将允许更准确地得出关于训练网络质量的结论,但通常您的数据太少而无法承受。但是,无论如何,我建议至少使用 10% 的数据进行验证。
  2. 至于隐藏单元的数量,经验法则是每个自由参数(即每个权重)至少有 10 个训练样例。因此,假设您有一个具有 4 个输入、10 个隐藏单元和 3 个输出单元的 3 层网络,其中每个隐藏单元和输出单元还有一个偏置权重,您将有 (4+1) * 10 + (10+ 1) * 3 = 83 个自由参数/权重。一般来说,您应该尝试隐藏单元的数量以及隐藏层的数量。根据我的经验,4 层网络(即 2 个隐藏层)比 3 层网络工作得更好,但这取决于问题。由于您还拥有验证集,因此您可以找出有效的网络架构和规模,而不必担心过度拟合。
  3. 对于激活函数,您应该使用一些sigmoid 函数来允许非线性行为。我喜欢双曲正切的对称性,但根据我的经验,您也可以使用逻辑函数。
于 2013-03-19T08:03:02.580 回答