鲁棒估计: RANSAC & 鲁棒核函数

在VSLAM中,我们首先构造3D-3D、3D-2D、2D-2D匹配,然后据此去估计相机的运动。完美估计需要完美的匹配,但实际的匹配中往往存在很多错误。如何消除或者降低错误匹配的影响呢?一种方法是选择那些正确的匹配进行估计(RANSAC),另一种是降低那些错误匹配的权重(鲁棒核函数),下面分别介绍。

1. RANSAC随机采样一致算法

这种方法的目的是,从所有数据中选择正确的数据,用于估计。为了方便,先给几个定义。

点:每一个数据,SLAM里指的是匹配的点对
野值/外点:错误的点
内点:正确的点
内点集:内点的集合
外点集:外点的集合
模型:带估计的参数
s:估计模型所需要的最小点数
S:所有的点形成的点集

显然,内点集就是我们想要找的正确数据。RANSAC的想法是从点集中随机的选择出 [公式] 个点,估计出一个模型,查看剩余点是否符合这个模型。如果大部分点都符合这个模型,就相当于我们找到了一个合适的模型,自然的符合模型的点就是内点啦。由于是随机选择,一次可能难以找到正确的模型,因此需要多次才可以。下面给出完整的RANSAC算法。

  • 在原始数据中随机选取一个(最小)子集作为假设内点;
  • 根据假设的内点拟合一个模型;
  • 判断剩余的原始数据是否符合拟合的模型,将其分为内点和外点。如果内点过少则标记为无效迭代;
  • 根据假设的内点和上一步划分的内点重新拟合模型;
  • 计算所有内点的残差,根据残差和或者错误率重新评估模型。

迭代以上步骤,把具有最小残差和的或是最多内点数的模型作为最佳模型。

RANSAC与最小二乘的区别:

最小二乘法尽量去适应包括外点在内的所有点。而RANSAC得出一个仅仅用内点计算出模型,并且概率还足够高。但是,RANSAC不能保证结果一定正确(只有一定的概率得到可信的模型),为了保证算法有足够高的合理概率,必须小心选择算法的参数。对于外点数量较多的数据集,RANSAC的效果远优于直接的最小二乘法。

鲁棒核函数

上述RANSAC方法进行模型估计,实际上分了两步,首先选出局内点,然后再进行一步优化。鲁棒核函数只需要一步,直接优化求解模型参数,通过降低外点的权重,来降低错误数据的影响。一般,我们会优化如下的代价函数。

SLAM中的很多状态估计都是以最小化误差平方和作为代价函数,一个偏离较大的外点会对估计结果产生巨大的影响。而M估计的主要思想便是将原先误差的平方项替换为一个增长没那么快的函数,同时保证自己的光滑性质(能求导),获得更加鲁棒的最小二乘,这个函数又称为鲁棒核函数。

在这里插入图片描述

其具体过程其等价于迭代加权最小二乘估计,即根据前一次代价函数的残差大小来确定之后各样本的权重变化。

参考文献

【1】【2】

你可能感兴趣的:(鲁棒估计: RANSAC & 鲁棒核函数)