最近空闲时间在研究Semi-Direct Monocular Visual Odometry(SVO)[1,2],觉得它值得写一写。另外,SVO的运算量相对较小,我想在手机上尝试实现它。
关于SVO的介绍,有两篇博客介绍得非常好,因此我这里只简单提一下大概的思路,重点讲解了一下深度滤波器的原理。
svo: semi-direct visual odometry 论文解析
姿态估计
估计初始姿态
利用相邻两帧之间的特征点对,计算相对位姿。
-
计算第 帧和第帧中的特征点对的patch的灰度差。特征点对指的是第时深度已知的地图点(3D)在两帧中的投影点(2D)。特征点patch是特征点周围4×4的区域。
-
利用Gauss-Newton迭代法求解 。
-
给帧加一个小扰动 ,通过灰度差优化 。这步叫Inverse compositional formulation。
-
-
-
这一步忽略patch的变形,不做warping。因为相邻帧之间的形变很小。
Inverse compositional formulation保证Jacobian在迭代中保持不变,因此可以预先计算,降低计算量。
关于文章中导数的求解,请参考高博的直接法,非常详细。参考文献见[3]。
优化匹配关系
利用初始位姿,寻找更多的地图点(3D)到当前帧投影点(2D)的对应关系。
对每个当前帧能观察到的地图点 (已经收敛的深度估计),找到观察 角度最小的关键帧 上的对应点,优化得到 在当前帧上的投影。优化的目标函数是仿射变换下的灰度差。
这一步中的patch采用的是8×8邻域,表示一个仿射变换。这步不考虑极线约束,因为此时的位姿还是不准确的。第二步和第三步需要一定量的地图点,不能在一开始就使用,猜测这是作者强调深度估计收敛快的原因之一。
BA优化
利用第二步建立起的 的对应关系,优化世界坐标系下的位姿,标准motion only bundle adjustment。这里是世界坐标系下的3D坐标。
根据文章图11,BA优化前投影误差均值为0.3 pixel左右,优化后均值降低了一点点,误差曲线更稳定了。也许是这个原因,作者在程序中提供了一个选项忽略这步。
地图构建
深度估计
当出现新的关键帧 时,作者在 上选取若干特征点(即seed),每个特征点对应一个深度估计,其初值为该帧的平均深度,并被赋予极大的不确定性。
后续帧对它能观测到的seed的深度估计产生贡献。具体而言,对 上深度还没有确定的点,根据找到 对应的极线,在极线上寻找和 最相似的点,通过三角测量计算得到深度 及不确定性 ,然后利用贝叶斯概率模型更新 点的估计。当 的深度估计收敛时,计算其三维坐标,并加入地图。
深度估计的思路
以下内容来源于参考文献[4]
G. Vogiatzis and C. Hern´ andez, “Video-based, Real-Time Multi View Stereo,” Image and Vision Computing, vol. 29, no. 7, 2011.
给定已知相对位姿的两个视角下的图像。由两幅图像中的对应点及位姿可以计算得到一个深度值 。由于重建误差和误匹配的存在,考察实际情况中 的直方图分布,[4]作者认为, 的分布可以用高斯分布和均匀分布来联合表示
其中
表示
为有效测量的概率。下图是一个若干测量的直方图例子。
轴表示深度测量范围,
轴表示直方图统计。
考虑同一个seed的一系列测量假设这些测量是独立的。我们想从式求出。最直观的做法是通过最大似然估计求解。然而[4]作者认为最大似然估计容易被局部极大值干扰,其结果并不准确。[4]作者选择从最大后验概率求解,等价于
上式右边同比与(相对于变量,的分布和无关)
作者证明,式可以用Gaussian×Beta分布来近似
并给出一个迭代格式
这里,约等于是因为右端并不是Gaussian×Beta的分布,而是用去近似右端项。[4]作者实际上利用一阶矩和二阶矩相等来更新参数。根据式,在加入新的测量时,seed的近似后验概率分布也会得到更新。当小于给定阈值时,认为seed的深度估计已经收敛,计算其三维坐标,并加入地图。
近似分布的推导
[4]作者提供了文档给出了上面推导过程的证明。文档的名字为“Supplementary matterial Parametric approximation to posterior”。这里首先假设满足独立性公式
第一步:引入潜变量(latent variable)。 表示 是内点,表示是外点。那么有
和
可以通过直观验证,为1表明是内点,满足Gaussian分布,反之满足均匀分布。也类似,当内点概率为 时,的概率为 ,反之为。容易证明
第二步:估计后验概率。令,的联合概率密度为
由于并不知道长什么样,我们想办法去近似它。令是的一个近似推断,且满足以下的因子分解
由变分推断理论,求解的最佳近似分布等价于最小化 和 的Kullback-Leibler散度,由此推出需要满足
和
其中表示对变量 求期望,表示对变量求期望。以上结论来自于参考文献[5]中的10.1.1章节(变分推断之分解分布)。Git上有人将这本书全文翻译了(膜拜一下),链接点此,也可以参考WIKI Variational_Bayesian_methods 中的Further discussion。
第三步:求解近似表达。这里我们只关心 的估计,将及代入,可以证明满足Gaussian×Beta分布。
这里有一个遗留问题:为什么要引入潜变量?
近似分布的迭代求解
因为右边并不满足Gaussian×Beta分布,[4]作者退而求其次,尝试用另一个Gaussian×Beta分布来近似右端项。令式两端相对于 和 的一阶矩和二阶矩相等,建立起参数方程,联立求解得到新的参数。
定义Guassian×Beta分布为
其中 是Gaussian分布,以及
当 为整数时,。根据式,我们想找到(记为),使得的一阶矩和二阶矩与
相等。将 的表达式代入上式,有
注意到
第一式用 定义即可,第二式分离Gaussian分布乘积中的 项和其它项即可。其中
注意,[4]补充文档里的的公式是错误的,应当是上面这个式子。SVO程序里的公式是对的(SVO作者发现了哈)。将以上式子代入,就可以得到[4]补充文档(18)式,即
其中
是与无关的系数。分别计算和关于
和
的一阶矩和二阶矩,通过一阶矩相等和二阶矩相等得到的四个方程。由于
是
、
的联合分布,要先求关于
的边缘分布,再求其期望,结果是
(感谢丁弘毅指正_)。
下面是[4]作者给出的公式
以[4]作者推导为例,那么从(23)式得到,从(24)式得到。令
那么
这样就可以在加入新的测量时更新参数。
一些问题
- SVO在large scale下能否保持精度?
- SVO中的位姿估计可以容忍多大的旋转平移?
- 没有重定位,怎么找回?
- MAV场景的特殊性在哪里?
参考资料
Git source code https://github.com/uzh-rpg/rpg_svo
参考文献
[1] Forster, Christian, Matia Pizzoli, and Davide Scaramuzza. "SVO: Fast semi-direct monocular visual odometry." 2014 IEEE International Conference on Robotics and Automation (ICRA). IEEE, 2014.
[2] M. Pizzoli, C. Forster, and D. Scaramuzza, “REMODE: Probabilistic, Monocular Dense Reconstruction in Real Time,” in Proc. IEEE Int. Conf. on Robotics and Automation, 2014.
[3] S. Baker and I. Matthews, “Lucas-Kanade 20 Years On: A Unifying Framework: Part 1,” International Journal of Computer Vision, vol. 56, no. 3, pp. 221–255, 2002.
[4] G. Vogiatzis and C. Hern´ andez, “Video-based, Real-Time Multi View Stereo,” Image and Vision Computing, vol. 29, no. 7, 2011.
[5] Christopher M. Bishop. Pattern Recognition and Machine Learning (Information Science and Statistics). Springer, 1 edition, October 2007.
评论(0)
您还未登录,请登录后发表或查看评论