基于深度学习的视觉定位方法初探:PoseNet简介
引言
在先前的博文中,笔者已经对视觉定位的基本概念进行了介绍,并展开阐述了传统的基于几何计算的视觉定位方法。在本篇博文中,笔者将介绍一种基于深度神经网络的机器学习方法——PoseNet方法[1]。本方法虽然提出于2015年,但方案理论清晰简洁,便于理解,也为后续的视觉定位方法提供了基本思路。
基本思路
损失函数设计
考虑到视觉定位的最终目的在于估计出query图像的位姿,而所谓位姿包含了位置和姿态两个部分,PoseNet的作者在实验中发现,若将位置和姿态的估计分解成两个网络分别进行回归,其效果不如将二者综合起来一并计算。因此PoseNet针对视觉定位特别设计了损失函数,损失函数同时参考了位置误差和方向误差。若设相机的真实位置为 ,真实方向为 ,由网络计算得到的估计位置为 ,估计方向为 ,则损失函数定义为:
其中,方向 通过四元数的方式表达; 则是一个用来平衡位置和方向的权重参数,该参数的设置受数据集影响较大,PoseNet在实现过程中通过规划网格来搜索最佳的 值。
网络结构设计
PoseNet采用GoogLeNet作为骨干网络,GoogLeNet共有22层,包含6个Inception结构。关于该网络,本文不做介绍,有兴趣的读者可以自行搜索,在笔者看来,经过这些年的发展,骨干深度神经网络结构已经有了更多的选择,不必拘泥于原作。这里介绍一下PoseNet在GoogLeNet上做出的修改:
GoogLeNet包括3个分类器,而PoseNet的目的不在于分类,其实现可以用回归问题来描述,所以GoogLeNet的分类器均被替换为了回归器,具体包括:
- 移除softmax激活函数
- 设置7个输出神经元(对应3个位置分量和4个四元数方向分量)
- 在最终的输出层前添加了一个包含2048个神经元的全连接层用于整理最终的输出
此外,在测试时,四元数形式的方向向量需要执行归一化操作。
输入数据
PoseNet接受224x224个像素的输入。所有训练图像均需经过随机裁剪以产生大小匹配的图像块,而测试数据则可以采用中心裁剪(产生1个图像块)和等间距密集裁剪(产生128个图像块)两种裁剪方式。
实验结论
PoseNet在7Scenes室内数据集和Cambridge Landmarks室外数据集进行了测试。其结果如下图所示
在室外数据集上,中心裁剪所产生的定位结果平均产生2到3米,3到4度的定位误差,密集裁剪产生的误差较中心裁剪略小;在室内数据及上,则基本可以产生0.5米以内的定位误差。
此外,PoseNet在光线变换(例如夜晚)、内参未知等特殊情况下具有较强的抵抗能力,能够产生可接受的较鲁棒结果。一般而言,这是基于深度学习方法的优势,而传统几何方法在这些特殊情况下产生的结果往往不尽如人意。
总结
PoseNet网络作为较早使用深度学习方法进行视觉定位的工作,对于所有后续使用深度学习方法进行视觉定位的方案都具有深刻的启发性意义。本篇博文基于原作文章对PoseNet网络进行了介绍和总结,希望能够对视觉定位领域的研究人员和开发者有所帮助。
References
[1] Kendall A, Grimes M, Cipolla R. Posenet: A convolutional network for real-time 6-dof camera relocalization[C]//Proceedings of the IEEE international conference on computer vision. 2015: 2938-2946.
- 点赞
- 收藏
- 关注作者
评论(0)