理解参数不确定性
相机校准通常旨在根据数据拟合合适的数学模型,以便几何地表征一个或多个相机/镜头组合。
许多用户都希望尽可能降低重投影误差 (RPE)。虽然在大多数情况下这确实是可取的,但我们主张根据获得的 RPE 以外的因素来判断校准质量。首先,参数不确定性对相机系统的实际性能起着至关重要的作用。
让我们使用一个更简单的数据拟合示例来更深入地探讨这个主题,这应该揭示数据拟合中不确定性的重要性。
一个适配问题
在下图中,我们绘制了一个正弦半波,作为我们的基本事实函数,我们的目标是尽可能忠实地描述它。(请注意,与映射 $R^3 \rightarrow R^2$ 的相机模型相比,此函数只是 $R \rightarrow R$,但这些概念不受影响。)
不幸的是,我们不知道校准设置中的这个实函数。相反,我们会有一些受噪声和可能的偏差影响的采样值。在相机校准中,噪声和偏差的来源包括传感器暗电流、散粒噪声、量化噪声、散焦等。下面我们有噪声分布符合正态分布 $\mathcal{N}\left(0, 0.05 \right)$ 的采样数据。
在这种情况下,我们有 8 个数据点,我们的目标是拟合一个函数,希望它尽可能地与真正的底层函数相似。由于技术原因,我们可能只有来自域中心部分的样本,在本例中是区间 $[0; \pi]$。这也是相机校准中非常典型的情况,例如棋盘检测可能需要整个目标都在图像内,而外部图像区域则未采样或采样不足。
抛物线拟合
使用普通最小二乘法可以很容易地拟合的模型是抛物线(二次多项式)$y = ax^2 + bx + c$。下图显示了最佳拟合抛物线以及拟合的 $95\%$ 置信区间。
可以看出,真实基础模型得到了合理的重建,但特别是在没有提供数据的域边界处,真实函数实际上超出了置信区域。此外,置信区域在整个函数上具有相当大的宽度,这意味着对数据点进行新的采样可能会导致具有完全不同系数的抛物线。
我们计算出均方根误差 (RMSE) 为 $0.026$,即垂直红色误差线的均方根。这又类似于相机校准,通常会报告重新投影误差的 RMS。
找到的最佳拟合抛物线是:
$y = -0.12 x^2 + 1.42 x - 0.46$
我们还能够估计解决方案中参数的协方差:$\left[\begin{array}{*{3}c} C_{a,a} & C_{a,b} & C_{a,c} \\ C_{a,b} & C_{b,b} & C_{b,c} \\ C_{a,c} & C_{b,c} & C_{c,c} \\ \end{array}\right]$ = $\left[\begin{array}{*{3}c} 0.0036 & -0.0048 & 0.0014 \\ -0.0048 & 0.0074 & -0.0023 \\ 0.0014 & -0.0023 & 0.0007 \\ \end{array}\right]$
对角线条目的平方根给出了每个模型参数的标准差:
$\sigma_a = \sqrt{0.0036} = 0.06$
$\sigma_b = \sqrt{0.0074} = 0.08$
$\sigma_c = \sqrt{0.0007} = 0.03$
这告诉我们,所有参数都存在相当大的不确定性。非对角线项也是不可忽略的,这意味着某些参数组合具有很高的不确定性。以 $C_{a,b} = -0.0048 $ 为例,稍微增加 $a$ 并稍微减少 $b$ 会产生非常相似的 RMSE 值。
请注意,参数之间的相关性$\rho(i, j) = C_{i,j}/(\sqrt{C_{i,i}} \sqrt{C_{j,j}} )$ 可能更容易解释,因为它将这些值标准化为 $-1$ 和 $1$ 之间。
提高模型灵活性
在寻找低 RPE 值的过程中,我们可能会考虑增加拟合多项式的次数。这相当于为我们的模型添加更多参数(想想 OpenCV 失真模型中的 $k_3、k_4、k_5、...$)。下面是 5 阶多项式拟合及其 $95\%$ 置信区间。
确实,我们实现了较低的 RPE 值(从 0.026 降至 0.021),而更灵活的模型几乎总是会得到这样的值。然而,在正确的域边界上,我们看到我们的模型偏离了事实。此外,置信区间要宽得多,因此我们不能指望在重新采样时得到非常一致的结果。在统计学中,这种情况称为过度拟合- 模型的灵活性与约束拟合的数据量之间存在差异。事实上,由于我们的噪声的标准差为 0.05,因此我们应该期望实现 RMSE。
在这种情况下,找到的多项式系数(以及标准误差)是:
$a: -0.351 \pm 1.134$
$b: 2.399 \pm 4.911$
$c: -2.050 \pm 7.688$
$d: 1.253 \pm 5.539$
$e: -0.473 \pm 1.863$
$f: -0.067 \pm 0.237$
标准误差非常高,而且许多参数也高度相关。这导致上述置信区间非常宽。
- 增加模型灵活性并不总是必要的。小心过度拟合。
- 仅通过 RMSE 来判断拟合的质量是不够的。
增加数据量
考虑到最后的结果,避免过度拟合问题的一种方法可能是采样更多数据。在相机校准方面,可以增加目标观测的数量,或者使用具有更多视觉特征的校准目标。
下面我们将样本数量增加到50。
我们注意到模型的置信度确实显著增加了,但仅限于数据支持的区域。RMSE 实际上增加了,但由于过度拟合的情况,之前它异常低。
- 通过采样足够多的数据可以对抗/避免过度拟合。
- 高阶多项式模型可能会在有数据支持的区域外“爆炸”。(OpenCV 用户:请注意高阶多项式失真系数 $k_2、k_3、k_4、...$。)
添加边界数据
我们对域边界附近的模型仍然信心不足,所以让我们回到二阶多项式(抛物线拟合)并研究如果在这些区域添加几个数据点会发生什么:
RMSE 有所增加,但我们的拟合度在整个领域实际上相当好。
- 来自域边界区域的样本有助于很好地约束模型。
修改模型
到目前为止,我们已经研究了多项式模型。也许另一个数学模型更适合描述数据。在我们没有任何信息的那些区域,它也可能更有效。
下面我们切换到正弦函数 $a \cdot \sin \left( w \cdot x \right ) + o$。由于我们知道真实模型本质上是正弦的,因此该模型应该非常合适。
事实确实如此。即使数据相对较少,结果也相当接近事实,置信区间也较窄。
结合更多数据采样和良好覆盖范围应该会产生更好的结果。下面我们使用相同的正弦模型,但在整个域中均匀分布采样 50 个值:
通过从整个域中采样足够的数据并选择最能够用少量参数对底层真实函数进行建模的函数,我们能够获得非常准确和稳健的结果。
我们将获得的 RMSE 绘制为样本数量的函数(均匀分布在区间 $[0; \pi]$ 上,噪声分布为 $\mathcal{N}\left(0, 0.05 \right)$)。
正如预测的那样,RMSE 收敛到噪声的标准差。明显低于该值的数值并不表示拟合良好,而是过度拟合的情况。
这对相机校准意味着什么
上面我们探索了 $R \rightarrow R$ 函数,因为我们可以轻松绘制它并研究不同的拟合。然而,这里适用于数据拟合的所有内容也适用于相机校准,这只是一个更高维度的数据拟合问题。
在相机校准中,我们还必须使用最合适的数学模型,并使用足够的数据,以使所有参数得到很好的确定,同时尽可能减少标准误差。此外,协方差/相关性也应该很低。与置信带如何帮助解释协方差类似,我们可以将校准参数中的不确定性传播到图像平面,并在图像平面上可视化 95% 置信椭圆。下面的屏幕截图显示了 Calibrator 如何可视化此结果。该软件还报告模拟误差的 RMS,这为我们提供了真实验证误差的无偏估计。
更进一步,我们可能对给定的不确定性对多相机系统中点三角测量的精度意味着什么感兴趣。这给出了一个以米/毫米为单位的易于解释的值,并反映了大多数用户真正关心的基准。下面是校准器的“三角测量误差”视图。
总结一下:
- RMSE 值绝不应单独作为校准成功的标准。
- 在相机模型中使用更少的参数并包含更多的观察有助于避免过度拟合。
- 各个参数的置信区域及其传播到三角测量等是校准质量的重要衡量标准。
Calib.io 的相机校准器应用程序可让您调查相机校准误差和不确定性的各个方面。标准误差、参数协方差和三角测量误差是相机校准的置信带等价物。考虑到所有这些方面对于准确的相机校准至关重要。
感谢您帮助我们改进全球相机校准。我们非常欢迎您提出问题和评论。
@Pattabhi Dyta: Thank you for your question. I believe it relates to libCalib. You would run calibration.estimateCovariance(). The individual parameter uncertainties are the square roots of the diagonal entries of the returned covariance structure.
Hi Team,
How does one get the “parameter uncertainty” of the parameters in a given calibration model for an intrinsic calibration. For focal length, center cx and cy and distortion parameters.
@Nicholas Califano: Thanks for your question and please excuse the long wait. The uncertainty estimation is done using our unbiased estimator. We propagate that uncertainty to the projection and triangulation algorithm using proprietary methods that are not based on cross validation.
How is the simulated error of the RMS values calculated? Is it a cross validation-like estimation?