《视觉SLAM14讲》学习小结——供小白快速入门ch9

后端1-BA

一、概述

根据前面的学习我们知道,前端的功能和目的是根据观测到的图像确定相机的位姿。这种处理方法一般只用到两帧的图片信息,具有速度快但精度有限的特点。在相机位姿确定之后,我们还可以进一步确定目标点在世界坐标系中的三维坐标\mathbf{P}^w。随着时间的增加,我们会不断累积同一个路标的\mathbf{P}^w值。这就产生了一个问题,哪个\mathbf{P}^w值是正确的呢?一种最直觉的想法就是计算这些路标的平均值所为更高精度的估计值。既然有\mathbf{P}^w的更高精度值,那就意味着前面哪些时刻前端送过来的\mathbf{P}^w值存在误差。这种现象换一句话说就是前面那些时刻前端的位姿估计存在误差,应该根据新确定的更高精度的\mathbf{P}^w值反过来重新对以前前端确定的位姿进行修正,这就是后端的功能。从信息处理的角度来看,前端只能获取当前时刻的观测信息,所以辨识得到的位姿精度有限。后端累积了一批观测信息,自然有可能辨识得到更高的位姿精度。

后端在具体实现上有两种思路,第一种是滤波方法,第二种是非线性优化方法。滤波方法是在每次获得前端送过来的\mathbf{P}^w新信息,都与上一次的滤波结果融合形成\mathbf{P}^w的新估计。这种处理方法存在着一些问题。其一是新信息数据如果异常,系统无法察觉,从而降低滤波精度甚至导致发散。其二是滤波只能对当前的\mathbf{P}^w进行优化,对于\mathbf{P}^w的历史数据(那些当前帧无法观测到的点信息)无法修正。因此总得说来优化方法要比滤波方法具有更高的辨识精度,本篇主要讲优化方法。优化方法的本质是根据前端送过来各个时刻的相机位姿\mathbf{T},空间点三维坐标\mathbf{P}^w提炼出最优的\mathbf{T}\mathbf{P}^w。可以想象,从相机光心到任何一个\mathbf{P}^w的连线若根据对应的\mathbf{T}转换到同一个相机为下,它们应该重合。由于前端所提供的\mathbf{P}^w\mathbf{T}存在误差,因此这些线往往不重合。优化的目的就是通过调整前端所提供的\mathbf{P}^w\mathbf{T},使得这些光线重合,因此优化又称为光束平差法或捆集调整法(BA,Bundle Adjustment)。需要补充说明的是,这些讨论都是针对路标位置固定的情况,本篇的讨论内容也仅限于这种情况。

二、BA与图优化

1.投影模型和BA代价函数

在ch5中我们已经讨论过相机的成像模型,我们这里简单回顾一下。空间点坐标\mathbf{P}^w经过外参\mathbf{T}\mathbf{R},\mathbf{t}转换成相机坐标\mathbf{P},接着投影到归一化坐标系中去得到归一化坐标\mathbf{p}^1。归一化坐标经过畸变校正后将结果用内参\mathbf{K}左乘就得到像素坐标\mathbf{p},即我们的观测值。如果相机已标定,则内参和畸变模型是确定的,因此上面过程可用如下模型来表示。

\mathbf{e}=\mathbf{p}-\mathbf{h}(\mathbf{T},\mathbf{P}^w)                                                   (1)

这个模型表明,观测误差是由于外参\mathbf{T}或空间点世界坐标\mathbf{P}^w不准确引起的。优化的目的就是要通过调整\mathbf{T}\mathbf{P}^w,使得\mathbf{e}最小,即

\min\limits_{\mathbf{T},\mathbf{P}^w}|\mathbf{p}-\mathbf{h}(\mathbf{T},\mathbf{P}^w)|_2^2.                                                   (2)

我们需要将上面的模型与ch6中的公式(4)对应起来,以便套用前面介绍的优化方法。那里的优化变量就是这里的\mathbf{T}\mathbf{P}^w,因此

\mathbf{x}=[\mathbf{T}_1,\cdots,\mathbf{T}_m,\mathbf{P}^w_1,\cdots,\mathbf{P}^w_n]^\mathrm{T} =[\mathbf{T},\mathbf{P}^w]^\mathrm{T}                                         (3)

显然目标函数\mathbf{f}=\mathbf{p}-\mathbf{h}(\mathbf{T},\mathbf{P}^w)。优化的重点在于计算雅可比矩阵,因此将\mathbf{f}进行泰勒级数展开可得\mathbf{f}(\mathbf{x}+\Delta\mathbf{x})=\mathbf{f}(\mathbf{x})-\frac{\partial \mathbf{h}}{\partial \mathbf{T}}\Delta\mathbf{T}-\frac{\partial \mathbf{h}}{\partial \mathbf{P}^w}\Delta\mathbf{P}^w。如前所述,我们在对\mathbf{T}求导的时候需要考虑正交阵约束,因此引入李群和李代数的概念将\mathbf{T}改写成\delta\boldsymbol{\xi},进一步记\mathbf{F}=\frac{\partial \mathbf{h}}{\partial \mathbf{T}},~\mathbf{E}=\frac{\partial \mathbf{h}}{\partial \mathbf{P}^w},则\mathbf{f}的展开式可写为

\mathbf{f}(\mathbf{x}+\Delta\mathbf{x})=\mathbf{f}(\mathbf{x})-\mathbf{F}\Delta\delta\boldsymbol{\xi}-\mathbf{E}\Delta\mathbf{P}^w                                          (4)

由于负号对优化问题的影响容易处理,因此雅可比矩阵可写成分块形式\mathbf{J} = [\mathbf{F}, \mathbf{E}]。在不考虑畸变的情况下\mathbf{F}, \mathbf{E}的表达式分别为ch7下中的式(13)和(15)。畸变修正的目的是将相机模型修正成无畸变的情况,因此在相机模型有畸变但标定后,\mathbf{F}, \mathbf{E}的表达式仍然是这两个。根据ch6中的分析,无论是高斯牛顿法还是列文伯格-马夸尔特法,都要计算增量方程中的矩阵

\mathbf{H}=\mathbf{J}^\mathrm{T}\mathbf{J=\begin{bmatrix} \mathbf{F}^\mathrm{T}\mathbf{F} &\mathbf{F}^\mathrm{T}\mathbf{E} \\ \mathbf{E}^\mathrm{T}\mathbf{F}& \mathbf{E}^\mathrm{T}\mathbf{E} \end{bmatrix}}                                          (5)

求解增量方程时需要对\mathbf{H}求逆。由于空间点\mathbf{P}^w的数量很多,因此这种矩阵求逆的计算量非常大。21世纪视觉SLAM的最重要进展之一就是发现矩阵\mathbf{H}的结构特点并可通过图优化的方法来表示。\mathbf{H}的结构特点是下一节要讨论的内容

2.\mathbf{H}矩阵的稀疏性和边缘化

H矩阵稀疏化和边缘化有着丰富的内容,然而本系列博文的目的是为了让读者快速入门视觉SLAM,因此这里略去了许多具有重要学术意义的内容,偏重于具有工程意义的结论。

图1是一个具有2个相机位C_1,C_2和6个路标点P_1,P_2,P_3,P_4,P_5,P_6的场景,连线表示相机位可以观测到路标。我们针对这个场景来分析式(1)中的误差函数\mathbf{e}。显然,对于每一个C-P组合都会有一个误差函数,因此总共有\mathbf{e}_{11},\mathbf{e}_{12},\mathbf{e}_{13},\mathbf{e}_{14}, \mathbf{e}_{21},\mathbf{e}_{22},\mathbf{e}_{23},\mathbf{e}_{24}共8个误差函数。其中\mathbf{e}的第一个下标表示相机位序号,第二个下标表示路标序号。这种误差函数实际上表示归一化坐标系上的重投影误差,因此是一个二维的列矩阵。将所有的误差函数排成列阵即可得到总误差函数列阵,即\mathbf{e}=[\mathbf{e}_{11};\mathbf{e}_{12};\mathbf{e}_{13};\mathbf{e}_{14};\mathbf{e}_{21};\mathbf{e}_{22};\mathbf{e}_{23};\mathbf{e}_{24}],其中分号表示按列排序的意思。将所有的相机位和路标按如下方式排列即可构成优化参数列阵,即\mathbf{x}=[C_1;C_2;P_1;P_2;P_3;P_4;P_5;P_6]。雅可比矩阵\mathbf{J}就是将\mathbf{e}\mathbf{x}求导数的结果,它将是一个8\times8的分块矩阵。其中第一个8表示\mathbf{e}矩阵中按方块矩阵来算的元素个数,第二个8表示\mathbf{x}矩阵中按方块来算的元素个数。雅可比矩阵的第i,j个分块元素\mathbf{J}_{ij}=\partial\mathbf{e}_i/\partial\mathbf{x}_j。显然\mathbf{J}_{ij}也是一个矩阵,其元素取决于\mathbf{e}_i\mathbf{x}_j的个数。根据前面的分析,\mathbf{e}_i的个数都是2。若\mathbf{x}_j表示相机位C_1,C_2,则其维数为6(相机的位姿需要用\boldsymbol{\xi}中六个元素来描述)。若\mathbf{x}_j表示路标P_1,P_2,P_3,P_4,P_5,P_6,则其维数为3(三维空间位置用三个坐标来表示)。

图1:2相机位6路标的场景相机-路标观测示意图

\mathbf{J}_{11}为例来看其具体形式

\mathbf{J}_{11}=\frac{\partial\mathbf{e}_{11}}{\partial\mathbf{x}}=[\frac{\partial\mathbf{e}_1}{\partial\boldsymbol{\xi}_1},\mathbf{0}_{2\times6}, \frac{\partial\mathbf{e}_{11}}{\partial\mathbf{P}_1},\mathbf{0}_{2\times3},\mathbf{0}_{2\times3},\mathbf{0}_{2\times3},\mathbf{0}_{2\times3},\mathbf{0}_{2\times3}]                         (6)

我们发现\mathbf{J}_{11}中仅含有第一个下标所表征相机位的项和第二个下标所表征路标的项,其他\mathbf{x}所对应的项都为零。根据这个规律,可以绘制出整个\mathbf{J}的特性示意图,如图2所示

图2:雅可比矩阵的稀疏性和H矩阵的特性

图2中黑色方块表示数据非零,其他的地方数据均为零。与相机位有关的方块比较长是因为表征相机位姿所需要的变量比路标多的缘故。根据这种雅可比矩阵\mathbf{J}的特性,我们可以求得计算增量方程中矩阵\mathbf{H}的特性如图2右边所示。\mathbf{H}矩阵可分解位四个方块矩阵,其左上角矩阵\mathbf{B}和右下角矩阵\mathbf{C}均为对角方块矩阵。其左下角方块矩阵和右上角方块矩阵\mathbf{E}互为转置。

这种特性对于计算ch6中的增量方程\mathbf{H}\Delta \mathbf{x}=\mathbf{g}非常有帮助。根据\mathbf{H}的特性可将此增量方程改写为

\begin{bmatrix} \mathbf{B} &\mathbf{E} \\ \mathbf{E}^\mathrm{T} &\mathbf{C} \end{bmatrix} \begin{bmatrix} \Delta\mathbf{x}_c\\ \Delta\mathbf{x}_p \end{bmatrix}= \begin{bmatrix} \mathbf{v}\\ \mathbf{w} \end{bmatrix}                                                 (7)

将上述方程两边同时乘以矩阵[\mathbf{I},~-\mathbf{E}\mathbf{C}^{-1}; \mathbf{0},~\mathbf{I}]并整理可得

\begin{bmatrix} \mathbf{B}-\mathbf{E}\mathbf{C}^{-1}\mathbf{E} &\mathbf{0} \\ \mathbf{E}^\mathrm{T} &\mathbf{C} \end{bmatrix} \begin{bmatrix} \Delta\mathbf{x}_c\\ \Delta\mathbf{x}_p \end{bmatrix}= \begin{bmatrix} \mathbf{v}-\mathbf{E}\mathbf{C}^{-1}\mathbf{w}\\ \mathbf{w} \end{bmatrix}                                         (8)

这个方程组中,第一行所对应方程的解为\Delta\mathbf{x}_c=\begin{bmatrix} \mathbf{B}-\mathbf{E}\mathbf{C}^{-1}\mathbf{E} &\mathbf{0} \end{bmatrix}^{-1} \begin{bmatrix} \mathbf{v}-\mathbf{E}\mathbf{C}^{-1}\mathbf{w}\end{bmatrix}。由于矩阵\mathbf{C}是对角阵,因此\mathbf{C}求逆不存在困难;矩阵\mathbf{B}的维数等于相机位的数量,一般比较小,因此\Delta\mathbf{x}_c的求解不存在困难。在获得\Delta\mathbf{x}_c后将其代入第二行所对应的方程可求得\Delta\mathbf{x}_q=\mathbf{C}^{-1}(\mathbf{w}-\mathbf{E}^\mathrm{T}\Delta\mathbf{x}_c)。如前所述,\mathbf{C}是对角阵,因此\Delta\mathbf{x}_q的计算也不存在困难。

总而言之,通过分析矩阵\mathbf{J}\mathbf{H}的特性,减小了增量方程\mathbf{H}\Delta \mathbf{x}=\mathbf{g}求解过程中的计算量问题。特别是对于路标点数量比较大的场景,这种处理非常有效。

三、鲁棒核函数

在BA过程中,如果因为某种原因导致观测数据异常,就会使得其所对应的误差函数\mathbf{e}很大。这种异常的\mathbf{e}将通过BA过程传递给\mathbf{x},使得辨识得到的相机位姿或路标误差很大。解决这个问题的一个有效办法是引入鲁棒核函数,这里介绍其中比较著名的Huber核:

H(e)=\left\{\begin{matrix} e^2/2& |e|\leq \delta\\ \delta(|e|-\delta/2)& \mathrm{other} \end{matrix}\right.                                              (9)

这个函数表示,当\mathbf{e}中元素e比较小的时候,He的变化是二次函数;当e比较大的时候,He的变化是一次函数,如图3所示

图3:Huber核函数与二次函数的对比

将此核函数作用在目标函数\mathbf{e}中各元素上以得到新的目标函数。可以发现,采用新的目标函数后,如果因数据异常而使得\mathbf{e}中某元素异常增大时,因为Huber核函数的特性,新目标函数只会合理增大,从而减小这种异常所产生的辨识结果即\mathbf{x}的误差。

四、小结

本篇讨论后端的BA过程。由于这方面的内容在ch7中也有涉及,因此理解起来也不会困难。和前面章节不同的是,这里着重讨论通过分析雅可比矩阵的稀疏性和增量方程矩阵\mathbf{H}的结构特性来简化增量方程的求解。这种分析在路标数量比较大的时候非常有效。博文最后介绍了鲁棒核函数Huber及其对BA的作用。

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视觉SLAM14》第13主要介绍了多视图几何(Multi-view Geometry)在视觉SLAM中的重要性和应用。本章内容包括三维重建、相机姿态估计、稠密地图构建、三维点云的优化等方面。 首先,介绍了三维重建的基本概念和方法。通过多视图之间的特征匹配和三角化,可以获取相机位置和场景的三维结构。其中使用了基础矩阵、本质矩阵和投影矩阵等几何工具进行相机位置估计。 其次,解了相机姿态估计的原理和方法。通过将特征点在不同视角中的投影进行匹配,可以计算得到相机之间的位姿变化。常用的方法包括通过两帧图像的本质矩阵或单应性矩阵来进行计算。 然后,述了稠密地图构建的过程。通过对特征点云进一步处理,可以得到更加丰富的场景信息。常用的方法有基于三维重建的稠密地图构建和基于场景几何关系的稠密地图构建等。 最后,介绍了三维点云的优化方法。从视觉SLAM系统的角度出发,通过优化相机的位姿和特征点的三维位置,提高系统的准确性和鲁棒性。常用的方法有基于图优化的方法和基于束优化的方法等。 综上所述,《视觉SLAM14》第13详细介绍了多视图几何在视觉SLAM中的关键技术和应用。可以通过多视图的特征匹配和三角化,实现三维重建和相机姿态估计。同时,通过稠密地图构建和三维点云的优化,提高系统的精度和鲁棒性。这些技术对于实现高效的视觉SLAM系统具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值