我正在进行一项大学项目,需要进行无标记的相对姿态估计。为此,我拍摄两张图片,并在图片的特定位置匹配n个特征点。通过这些点,我可以找到这些点之间的向量,这些向量结合距离可以用来估计相机的新位置。
该项目需要在移动设备上部署,因此算法需要高效。我想到的一个提高效率的方法是将这些向量输入到神经网络中,让神经网络根据输入输出一个估计的xyz移动向量。
我的问题是,如果经过充分训练,神经网络是否适合这种情况?如果适合,我应该如何计算所需的隐藏单元数量,以及最佳的激活函数是什么?
回答:
在你的应用中使用神经网络是可行的,但是我认为你需要大量的训练样本来让网络能够泛化。当然,这也取决于你处理的姿势的类型和数量。我觉得通过一些巧妙的数学运算,有可能直接从输入向量中推导出移动向量——如果你能找到一种方法来做到这一点(或者提供更多信息让其他人也能思考这个问题),那将是非常理想的,因为这样你就可以利用你对任务的先验知识,而不是依赖神经网络从数据中学习这些知识。
如果你决定继续使用神经网络方法,请记住以下几点:
- 将你的数据分为训练集和验证集。这样可以确保网络不会过拟合。你使用训练集进行训练,并使用验证集上的误差来确定特定网络的质量。训练/验证的比例取决于你拥有的数据量。一个大的验证集(例如,你数据的50%)将允许对训练网络的质量做出更精确的结论,但通常你没有足够的数据来负担这一点。然而,无论如何,我建议至少使用10%的数据进行验证。
- 关于隐藏单元的数量,一个经验法则是每个自由参数(即每个权重)至少有10个训练样本。因此,假设你有一个3层网络,具有4个输入、10个隐藏单元和3个输出单元,每个隐藏单元和输出单元还额外有一个偏置权重,你将有(4+1) * 10 + (10+1) * 3 = 83个自由参数/权重。一般来说,你应该尝试不同的隐藏单元数量和隐藏层数量。根据我的经验,4层网络(即2个隐藏层)比3层网络表现更好,但这取决于问题。由于你还有验证集,你可以找出什么样的网络架构和大小在不担心过拟合的情况下有效。
- 对于激活函数,你应该使用一些S形函数来允许非线性行为。我喜欢双曲正切函数的对称性,但根据我的经验,你也可以使用逻辑函数。