论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》

  本文总结了RANSAC算法的流程与存在的问题,整理了近几年基于RANSAC提出的改进算法,并整合各个算法的优势,提出一个统一的RANSAC算法框架。因此本文也可以看做是一片关于RANSAC算法的论文综述。

1. 标准RANSAC算法流程

  RANSAC随机采样一致性算法是在筛除异常点(outlier),寻找内点(inlier)建立数据模型领域中最常用的算法,其采用“假设-验证”的结构,通过随机采样一组最小规模样本,建立模型,然后用其他点验证该模型的有效性,如果符合该模型的点越多,则表示该模型得到的支持(support)越多,则该模型越可能是正确的数据模型,而不符合该模型的点则越可能为异常点。通过多次随机采样和验证,寻找到得到支持最多的模型作为最终的输出模型,并将不符合该模型的异常点筛除。标准的RANSAC算法流程如下图所示
论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第1张图片
其中 U \mathcal{U} U表示总的数据点集, k m a x k_{max} kmax表示最大迭代次数, η 0 \eta_0 η0表示置信度, t t t表示异常点的判断阈值。
  首先,从数据点集中采样得到一组最小样本点 m m m,这与传统的拟合算法希望采样更多的数据点来获取正确模型的思路正好相反,RANSAC希望尽可能少的采样,这样可以使得样本中更多地包含无污染的数据(内点)。因为随着样本数量的增长,采样得到异常点的概率是呈指数上升的。
  然后,利用这 m m m个样本估计得到模型参数 θ k \theta_k θk,这个估计过程就要根据实际的使用需求进行选择了,如在图像匹配领域中常用的有本征矩阵、基础矩阵、仿射矩阵、单应性矩阵等。
  接着要对估计得到的模型进行验证,将 U \mathcal{U} U中所有的数据点带入到模型中进行计算,输出结果与真实值之间的误差小于设定阈值 t t t的点被看做是支持点,所有的支持点构成支持点集 I k \mathcal{I}_k Ik,支持点数量越多则表示模型预测的效果越好。阈值 t t t的设定通常是根据试验得到的,但也可以根据以下公式进行估计
在这里插入图片描述
其中 α \alpha α为内点占全部点的比例,可以设置为0.95, σ \sigma σ为数据噪声分布的标准差, χ n \chi_n χn表示卡方分布。
  如果支持点数超过当前最大的支持点集的包含的支持点数,则更新最佳模型参数 θ ∗ \theta^* θ和最优支持点集 I ∗ \mathcal{I}^* I,并重新计算最大迭代次数 k m a x k_{max} kmax。根据计算要满足模型预测需求,模型最少迭代次数计算过程如下
论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第2张图片
其中 ϵ \epsilon ϵ表示内点占全部点的比例,估计方法如下
在这里插入图片描述
  最后,重新随机采样,重复上述计算过程,直至迭代次数达到最大值,输出最优模型参数和支持点集。

2. 标准RANSAC算法的局限性

了解了标准RANSAC流程之后,作者总结了RANSAC算法存在的几点局限性:

  1. 效率。RANSAC算法的计算复杂度取决于最小采样点数 m m m,内点比例 ϵ \epsilon ϵ和总的样本点数 N N N,因此在某些场景下,RANSAC算法的计算时间会比较长。此外,最大迭代次数 k m a x k_{max} kmax在实际情况中会比理论计算的数值更大,这也导致RANSAC算法耗时较长。
  2. 准确性。由于RANSAC中模型参数是根据最小采样点集估计得到的,因此最终的预测结果可能是次优结果,还需要其他的任务相关的先验知识对结果进行优化。
  3. 退化问题。数据退化是指当前采样的样本点不能提供足够的约束,使得估计结果不唯一。例如在使用七点法估计对极几何模型时,如果采样的点中有五个点共面,那么所有在这个面上的点都会符合这五个点预测得到的模型,而这通常是不对的。

3. 现有的改进方案

  针对标准RANSAC算法存在局限性问题,众多算法提出了相应的改进和解决方案,作者将RANSAC算法划分成数据预处理(阶段0)、最小样本采样(阶段1)、生成模型(阶段2)、模型验证(阶段3)和模型优化(阶段4),如下图所示
论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第3张图片
阶段0:数据预处理
  RANSAC算法的执行时间与内点比例密切相关,通过数据预处理提高数据集的质量,能够有效的提高RANSAC算法的效果和效率。严格来讲,这一步骤并不属于RANSAC算法,因此称之为阶段0。在估计多视图几何关系的具体问题中,RANSAC算法的输入是一组特征匹配点,许多算法通过给特征检测器的输出施加约束来提供更为可靠的特征匹配点。SCRAMSAC算法则是尝试增加了一个空间一致性滤波器(spatial consistency filter)来缩减特征匹配点的数量。
阶段1:最小样本采样
  在标准RANSAC算法中,最小样本是通过均匀随机采样生成的。在许多实际应用中,通过在采样过程中结合一定的先验知识和偏好,能够使得生成的模型更为准确。

  • NAPSAC算法(N-adjacent points sample consensus)利用数据中的内点之间彼此更加接近(closer)这一现象来帮助采样,假设有一个 n n n维空间,异常点均匀分布在一个有界区域内,而内点分布在相同区域的一个 d d d维空间中( d < n dd<n)。以该区域中心为球心,以 r r r为半径生成一个超球,则内点的数量与 r d r^d rd成正比,异常点的数量与 r n r^n rn成正比。因为 d < n dd<n所以随着半径缩小,寻找到异常点的概率下降速度要超过寻找到内点的概率下降速度。随机选择一个初始点 x 0 x_0 x0,以该点为中心,半径为 r r r得到一个超球 S x 0 S_{x_0} Sx0,如果该超球内包含的样本点数小于设定阈值,则该点被抛弃,重新选择初始点。否则,从超球 S x 0 S_{x_0} Sx0内随机均匀采样得到最小样本 m m m。NAPSAC算法能够比较好的处理高维数据模型。
  • PROSAC算法(progressive sample consensus)通过度量数据点的质量来优先选择更可能是有效数据的点。例如在寻找图像匹配点的过程中,特征点之间的相似程度得分可以作为度量匹配点正确与否的性能指标。首先按照标准RANSAC方法采样得到 T N T_N TN组最小样本 { M i } i = 1 T N \{\mathcal{M}_i\}_{i=1}^{T_N} {Mi}i=1TN,然后按照质量得分降序排列,得分越高的,越有可能是正确匹配的点,越先被用于模型预测。在实际应用中PROSAC算法能够有效的减少计算量。
  • GroupSAC算法泛化了NAPSAC算法的思想,认为内点之间彼此应该更加相似(similiar),可以按照相似程度将数据分成若干个组 { G i } \{G_i\} {Gi},这些组的内点比例要么很高,要么很低。在图像匹配问题中,GroupSAC算法认为规模更大,一致性更强的分组可能包含更多的内点。GroupSAC算法能够有效提高采样效率,但该算法的适用性依赖于找到一个针对当前需解决问题有意义的分组。

  在标准RANSAC算法中,完成最小样本采样之后,就直接用用样本生成模型了。然而在有些情况下,还需要对样本进行一个检查(check)。比如从四个匹配点构成的样本中计算单应性矩阵时,通过结合手性约束(chirality constraints)能够快速的筛除掉不相容的点。
阶段2:生成模型
  从最小样本中计算模型参数,每个样本都会生成多组解,每组解都需要进行评估。因为模型参数是从一个最小样本中获取的,噪声的影响会较大,因此计算得到的模型最好经过优化处理后再使用。在标准的RANSAC算法中,模型生成后直接用全部的数据点来计算支持点数。但如果可能的话,最好先基于特定任务约束来检查模型,并且只在需要时才对模型进行验证。例如从一组点中拟合一个圆时,可以只考虑特定半径范围内的点对模型进行验证,这样可以有效的减少验证次数。
阶段3:验证模型
  在标准RANSAC流程中,模型验证的目的是计算模型的支持点集并得到具备最多支持点的模型。在USAC算法中,作者判断一个模型是否正确主要看两点:1.模型是否能够得到足够多的支持点;2.模型是否不会退化。不仅考虑计算的效率还要考虑计算的鲁棒性。
  对于第一点问题,通常是采用在少量数据上进行统计测试,接受或者拒绝这个模型是基于这个测试的结果来判断的。

  • T d ; d T_{d;d} Td;d 测试。首先利用 d d d d < < N d<d<<N)个随机采样的点来验证模型,只有当 d d d个点全部属于内点时,才用剩下的 N − d N-d Nd个点验证模型。在该算法中,一种最优的设定方法是取 d = 1 d=1 d=1 T 1 ; 1 T_{1;1} T1;1测试用随机采样点来检验模型,如果模型与该点一致,则继续测试;否则该模型被抛弃,并重新生成新的样本。
  • Bail-Out测试。给定一个模型,随机采样 n n n个点来验证模型,如果得到的内点比例 ϵ n \epsilon_{n} ϵn远低于目前得到的最高内点比例 ϵ ∗ \epsilon^* ϵ,那么该模型就不可能得到最大的支持点集,因此该模型被抛弃。Bail-Out测试背后的思想是将当前模型得到的内点数量与一个下限值与比较,如果低于下限值,则要将该模型抛弃。这个下限值当 n n n的值较小时满足伯努利分布,当 n n n的值较大时满足正态分布。
  • SPRT测试。该测试基于Wald’s连续测试理论(我们在论文阅读笔记《Efficient Sequential Correspondence Selection by Cosegmentation》这篇文章中介绍过SPRT测试的过程),计算随机采样点符合正确的模型的概率(可用内点比例 ϵ \epsilon ϵ近似得到)与随机采样点符合错误模型的概率(可用伯努利分布建模)之间的比例,连续测试多个点,当比例的乘积超过阈值 A A A时该模型被抛弃。
  • Preemptive Verification。前面介绍的测试方法都是基于深度优先思想的,也就是当一个模型被充分验证测试完成后,再进行下一个模型。而Preemptive Verification测试则是基于广度优先思想,在一个样本子集上生成固定数量的模型并计算评分,然后按照评分将这些模型重新排序,只有一部分模型能够进入下一轮的验证。这种验证方法更适用于实时场景应用。

  对于第二点退化问题,标准的RANSAC流程是无法抵御退化问题的,这将导致算法输出一个错误的结果。DEGENSAC算法中展示了对退化问题进行检验的作用,针对我们前文提到的七点法预测对极几何模型时存在的问题,该算法设计一个专用的测试,来检验在每个最小样本集中的五个点(或更多的点)是否具备单应关系。QDEGSAC算法则提出一种更为通用的解决退化问题的方法,其通过估计线性关系情况来解决退化问题。给定一个数据矩阵 A A A,其每一行包含用来估计关系的数据点所提供的约束条件,通过多次调用RANSAC算法来计算数据矩阵 A A A的秩。第一次计算得到最为通用的模型(约束最少),其适用于所有非退化的数据。然后,在前一次计算得到的内点基础上反复执行RANSAC算法,每次都会增加一个新的线性约束。最终,约束最强的模型(内点数量只占第一次计算结果的50%)作为输出结果。
阶段4:模型优化
  使用带有噪声的最小样本来估计模型参数会带来两个严重的后果:1.从全部都是内点的样本集中得到的模型不能够满足所有的内点,这将导致迭代次数的增多;2.最终预测的模型可能还远未达到全局最优。实际应用中,问题1通常被忽略,因为算法最终会输出正确的结果,只不过耗费更多的计算量。问题2则需要后续的优化过程来进行补偿。

  • 局部优化(Lo-RANSAC)。该算法出于这样一种观察结果,一个由无污染的最小样本计算得到的模型在他的支持点集中总是包含较高比例的内点。因此可以以当前最佳的输出结果作为起点,从其预测的内点中选取样本计算更优的模型,然后反复迭代10-20次,保留支持点数最多的模型。另外,还可以先用所有的样本点去检验当前最优模型,保留误差低于 K t Kt Kt的样本点, K K K是比例系数, t t t是最小误差阈值。然后用新的样本点来更新模型,不断降低 K K K的取值,直到阈值降为 t t t,得到最终的优化模型。
  • 误差传播。从带有噪声的样本得到的模型,其误差传播到模型本身中去了。结果导致,当采用一个理想的阈值 t t t时(如上文所述的估计公式),无污染的模型未必能够获取到固定比例 α \alpha α的内点。然而,如果我们能够用协方差矩阵明确估计关系的不确定性,并显式地进行误差传播,这种情况就能得到缓解。

4. RANSAC算法的通用框架(USAC)

  作者在总结了标准RANSAC算法以及多种改进算法的优缺点之后,博采众家之长,提出一种通用的RANSAC算法框架(USAC),其流程如下图所示
论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第4张图片
  可以看到在样本采样阶段,作者采用PROSAC算法并结合具体应用采用对应的样本检查方法,这个选择是在算法表现,通用性和对退化问题的敏感程度之间的妥协的结果,PROSAC算法比GroupSAC算法更容易应用在普通场景中,而且与NAPSAC算法相比,对退化问题更不敏感。生成模型和模型检查方法取决于要解决的问题,不同问题采用的方法也截然不同。模型验证过程采用SPRT测试,其代表了随机模型验证的最优策略,并采用DEGENSAC算法来解决数据退化问题。最后使用LO-RANSAC算法来对模型进行优化
  最终如何设置迭代的终止条件,RANSAC算法是直到找到一组数量超过当前最优支持点的内点集合的概率低于阈值 η 0 \eta_0 η0时停止,简单来说就是找到比现在最优的支持点集更好的支持点集的概率已经非常低了,就可以停止了。这个概率计算方法如下
在这里插入图片描述
其中 k k k表示当前的采样点数。本文提出了两点改进策略:

  • 非均匀采样。非均匀采样使得好的样本优先被采样到,本文考虑两个终结算法的因素:非随机性和极大性。一个子集 U n \mathcal{U}_n Un中包含 i i i个随机内点的概率满足二项分布
    在这里插入图片描述
    对于每个迭代 n n n,非随机支持点集的最小值如下
    论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第5张图片
    终结的迭代次数 n ∗ n^* n必须满足 I n ∗ ≥ I n m i n I_{n^*}\geq I_n^{min} InInmin。极大性约束则要求在一定置信度条件下,子集 U n \mathcal{U}_n Un不存在更好的解,则最终迭代次数是根据下式,在满足非随机约束的条件通过最小化样本数量 k n ∗ k_{n^*} kn来得到的
    在这里插入图片描述
  • 随机验证。因为本文采用SPRT方法来验证模型,则找到一个比当前最优模型更好结果的概率如下
    在这里插入图片描述
    α \alpha α表示正确模型被SPRT算法抛弃的概率,实际中 α \alpha α并非一个常数,而是样根据当前的测试参数 ϵ \epsilon ϵ δ \delta δ来不断更新,给定SPRT的测试阈值 A i A_i Ai α i = A i − h i \alpha_i=A_i^{-h_i} αi=Aihi,其中 h i h_i hi由下式计算得到
    论文阅读笔记《USAC: A Universal Framework for Random Sample Consensus》_第6张图片

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。

你可能感兴趣的:(论文阅读笔记,#,图像匹配,算法,RANSAC,图像匹配)