视觉SLAM十四讲第十讲笔记(2)

Bundle Adjustment与图优化

在只有观测方程的情况下,这个问题称为BA,并可利用非线性优化方法求解。
所谓的Bundle Adjustment,是指从视觉重建中提炼出最优的3D模型和相机参数(内参数和外参数)。从每一个特征点反射出来的几束光线(bundles of light rays),在我们把相机姿态和特征点空间位置做出最优的调整(adjustment)之后,最后收束到相机光心的这个过程,简称为BA。BA算法不仅具有很高的精度,也开始具备良好的实时性。

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

回顾一下一个世界坐标系的点 P P P出发,把相机的内外参数和畸变都考虑进来,最优投影成像素坐标,需要以下步骤:

在这里插入图片描述

这个过程就是观测方程,之前我们把它抽象地记成:
z = h ( x , y ) z=h(x,y) z=h(x,y)

现在,我们给出了它的详细参数化过程。具体地说,这里的 x x x指代此时相机的位姿,即外参 R , t R,t R,t,它对应的李代数为 ϵ \epsilon ϵ。路标 y y y即这里的三维点 p p p,而观测数据则是像素坐标 z ≜ [ u s , v s ] T z\triangleq[u_s,v_s]^T z[us,vs]T。以最小二乘的角度来考虑,那么可以列写关于此次观测的误差:
e = z − h ( ϵ , p ) e = z - h(\epsilon, p) e=zh(ϵ,p)
然后,把其他时刻的观测量也考虑进来,我们可以给误差添加一个下标。设 z i j z_{ij} zij为在位姿 ϵ i \epsilon_i ϵi处观察路标 p j p_j pj产生的数据,那么整体的代价函数(cost function)为:
1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ e i j ∣ ∣ 2 = 1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ z i j − h ( ϵ i , p j ) ∣ ∣ 2 \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||e_{ij}||^2 = \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||z_{ij} - h(\epsilon_i, p_j)||^2 21i=1mj=1neij2=21i=1mj=1nzijh(ϵi,pj)2

对这个最小二乘进行求解,相当于对位姿和路标同时作了调整,也就是所谓的BA。

2. BA的求解

观测模型 h ( ϵ , p ) h(\epsilon, p) h(ϵ,p)是非线性函数,所以使用一些非线性手段来优化。据非线性优化的思想,我们应该从某个的初始值开始,不断地寻找下降方向 △ x \triangle x x来找到目标函数的最优解,即不断地求解增量方程中的增量 △ x \triangle x x。尽管误差项都是针对单个位姿和路标点的,但在整体的BA目标函数上,我们必须把自变量定义成所有待优化的变量:
x = [ ϵ 1 , . . , ϵ m , p 1 , . . . , p n ] T x= [\epsilon_1,..,\epsilon_m,p_1,...,p_n]^T x=[ϵ1,..,ϵm,p1,...,pn]T
相应的,增量方程中的 △ x \triangle x x则是对整体自变量的增量。在这个意义下,当我们给自变量一个增量时,目标函数变为:
1 2 ∣ ∣ f ( x + △ x ) ∣ ∣ 2 ≈ 1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ e i j + F i j △ ϵ i + E i j △ p j ∣ ∣ 2 \frac{1}{2}||f(x+\triangle x)||^2 \approx \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||e_{ij}+F_{ij}\triangle \epsilon_i + E_{ij}\triangle p_j||^2 21f(x+x)221i=1mj=1neij+Fijϵi+Eijpj2

其中 F i j F_{ij} Fij表示整个代价函数在当前状态下对相机姿态的偏导数,而 E i j E_{ij} Eij表示该函数对路标点位置的偏导。

现在,把相机位姿变量放在一起:
x c = [ ϵ 1 , ϵ 2 , . . . , ϵ m ] T ∈ R 6 m x_c = [\epsilon_1, \epsilon_2,...,\epsilon_m]^T \in \R^{6m} xc=[ϵ1,ϵ2,...,ϵm]TR6m
并把空间点的变量也放在一起:
x p = [ p 1 , p 2 , . . . , p n ] T ∈ R 3 n x_p = [p_1, p_2,...,p_n]^T \in \R^{3n} xp=[p1,p2,...,pn]TR3n

那么目标函数可以简化为:
1 2 ∣ ∣ f ( x + △ x ) ∣ ∣ 2 = 1 2 ∣ ∣ e + F △ x c + E △ x p ∣ ∣ 2 \frac{1}{2}||f(x+\triangle x)||^2 = \frac{1}{2}||e + F\triangle x_c + E\triangle x_p||^2 21f(x+x)2=21e+Fxc+Exp2

这里的雅可比矩阵 E E E F F F必须是整体目标函数对整体变量的导数。最后,无论使用G-N还是L-M方法,最后都將面对增量线性方程:
H △ x = g H \triangle x = g Hx=g

我们知道G-N和L-M的主要差别在于,这里的 H H H是取 J T J J^TJ JTJ还是 J T J + λ I J^TJ+λI JTJ+λI的形式。由于我们把变量归类成了位姿和空间点两种,所以雅可比矩阵可以分块为:
J = [ F E ] J = [F E] J=[FE]

那么,以G-N为例,则 H H H矩阵为:
H = J T J = [ F T F F T E E T F E T E ] H = J^TJ = \biggl [\begin{matrix} F^TF \quad F^TE\\ E^TF \quad E^TE \end{matrix}\biggl ] H=JTJ=[FTFFTEETFETE]

不难发现,因为考虑了所有的优化变量,这个线性方程的维度将非常大,包含了所有的相机位姿和路标点。

3. 稀疏性和边缘化

H H H矩阵的稀疏性是由雅可比 J ( x ) J(x) J(x)引起的。。考虑这些代价函数当中的其中一个 e i j e_{ij} eij。注意到,这个误差项只描述了在 ϵ i \epsilon_i ϵi看到 p j p_j pj这件事,只涉及到第 i i i个相机位姿和第 j j j个路标点,对其余部分的变量的导数都为0。所以该误差项对应的雅可比矩阵有下面的形式:
在这里插入图片描述

这个误差项的雅可比矩阵,除了这两处为非零块之外,其余地方都为零。这体现了该误差项与其他路标和轨迹无关的特性。

我们设 J i j J_{ij} Jij只在 i , j i,j i,j处有非零块,那么它对 H H H的贡献为 J i j T J i j J^T_{ij}J_{ij} JijTJij,具有下面示意图所画的稀疏形式。
在这里插入图片描述

这个 J i j T J i j J^T_{ij}J_{ij} JijTJij矩阵也仅有四个非零块,位于 ( i , i ) , ( i , j ) , ( j , i ) , ( j , j ) (i,i),(i,j),(j,i),(j,j) (i,i),(i,j),(j,i),(j,j)。对于整体的 H H H,由于:
H = ∑ i , j J i j T J i j H = \sum_{i,j} J^T_{ij}J_{ij} H=i,jJijTJij

我们把 H H H进行分块:
H = [ H 11 H 12 H 21 H 22 ] H = \biggl [\begin{matrix} H_{11} \quad H_{12}\\ H_{21} \quad H_{22} \end{matrix}\biggl ] H=[H11H12H21H22]

这里 H 11 H_{11} H11只和相机位姿有关,而 H 22 H_{22} H22只和路标点有关。当我们遍历 i , j i,j i,j时,以下事实总是成立的:

  1. 不管 i , j i,j i,j怎么变, H 11 H_{11} H11都是对角阵,只在 H i , i H_{i,i} Hi,i处有非零块。
  2. 同理, H 22 H_{22} H22也是对角阵,只在 H j , j H_{j,j} Hj,j处有非零块。
  3. 对于 H 12 H_{12} H12 H 21 H_{21} H21,它们可能是稀疏的,也可能是稠密的,视具体的观测数据而定。

这显示了 H H H的稀疏结构。

对于具有这种稀疏结构的 H H H,线性方程 $H\triangle x = g 的 求 解 会 有 什 么 不 同 呢 ? 现 实 当 中 存 在 着 若 干 种 利 用 的求解会有什么不同呢?现实当中存在着若干种利用 H$的稀疏性加速计算的方法,最常用的手段如:Schur消元(Schur trick)。在SLAM研究中亦称为Marginalization(边缘化)

我们转化一下, H H H矩阵可以划分为下面矩阵:

在这里插入图片描述

于是,对应的线性方程组也可以由 H △ x = g H\triangle x = g Hx=g变为如下形式:
[ B E E T C ] [ △ x c △ x p ] = [ v w ] \biggl [\begin{matrix} B \quad E\\ E^T \quad C \end{matrix}\biggl ] \biggl [\begin{matrix} \triangle x_c\\ \triangle x_p \end{matrix}\biggl ] = \biggl [\begin{matrix} v\\ w \end{matrix}\biggl ] [BEETC][xcxp]=[vw]

其中 B B B是对角块矩阵,每个对角块的维度和相机参数的维度相同,对角块的个数是相机变量的个数。由于路标数量会远远大于相机变量个数,所以 C C C往往也远大于 B B B。三维空间中每个路标点为三维,于是 C C C矩阵为对角块矩阵,每个块为3 × 3维矩阵。对角块矩阵逆的难度远小于对一般矩阵的求逆难度,因为我们只需要对那些对角线矩阵块分别求逆即可。考虑到这个特性,我们线性方程组进行高斯消元,目标是消去右上角的非对角部分 E E E,得
[ I − E C − 1 0 I ] [ B E E T C ] [ △ X c △ X p ] = [ I − E C − 1 0 I ] [ v w 小 结 本 讲 比 较 深 入 地 探 讨 了 状 态 估 计 问 题 与 图 优 化 的 求 解 。 我 们 看 到 在 经 典 模 型 中 , S L A M 可 以 看 成 状 态 估 计 问 题 。 如 果 我 们 假 设 马 尔 可 夫 性 , 只 考 虑 当 前 状 态 的 话 , 则 得 到 以 E K F 为 代 表 的 滤 波 器 模 型 。 如 若 不 然 , 我 们 也 可 以 选 择 考 虑 所 有 的 运 动 和 观 测 , 它 们 构 成 一 个 最 小 二 乘 问 题 。 在 只 有 观 测 方 ] \biggl [\begin{matrix} I \quad -EC^{-1}\\ 0 \quad I \end{matrix}\biggl ] \biggl [\begin{matrix} B \quad E\\ E^T \quad C \end{matrix}\biggl ] \biggl [\begin{matrix} \triangle X_c\\ \triangle X_p \end{matrix}\biggl ]= \biggl [\begin{matrix} I \quad -EC^{-1}\\ 0 \quad I \end{matrix}\biggl ]\biggl [\begin{matrix} v\\ w 小结 本讲比较深入地探讨了状态估计问题与图优化的求解。我们看到在经典模型中, SLAM 可以看成状态估计问题。如果我们假设马尔可夫性,只考虑当前状态的话,则得到以 EKF 为代表的滤波器模型。 如若不然, 我们也可以选择考虑所有的运动和观测, 它们构成一个 最小二乘问题。 在只有观测方 \end{matrix}\biggl ] [IEC10I][BEETC][XcXp]=[IEC10I][vwSLAMEKF]

整理可得:
[ B − E C − 1 E T 0 E T C ] [ △ X c △ X p ] = [ v − E C − 1 w w ] \biggl [\begin{matrix} B -EC^{-1}E^T \quad 0\\ \quad E^T \quad \quad \quad \quad \quad C \end{matrix}\biggl ] \biggl [\begin{matrix} \triangle X_c\\ \triangle X_p \end{matrix}\biggl ]= \biggl [\begin{matrix} v-EC^{-1}w\\ w \end{matrix}\biggl ] [BEC1ET0ETC][XcXp]=[vEC1ww]

经过消元之后,第一行方程组变成和 △ x p \triangle x_p xp无关的项。单独把它拿出来,得到关于位姿部分的增量方程:
[ B − E C − 1 E T ] △ X c = v − E C − 1 w [B -EC^{-1}E^T]\triangle X_c = v-EC^{-1}w [BEC1ET]Xc=vEC1w

这个线性方程组的维度和 B B B矩阵一样。我们的做法是先求解这个方程,然后把解得的 △ x c \triangle x_c xc代入到原方程,然后求解 △ x p \triangle x_p xp。 这个过程称为Marginalization,或者Schur消元(Schur Elimination)。相比于直接解线性方程的做法,它的优势在于:

  1. 在消元过程中,由于 C C C为对角块,所以 C − 1 C^{-1} C1容易解得。
  2. 求解了 △ x c \triangle x_c xc之后,路标部分的增量方程由 △ x p = C − 1 ( w − E T △ x c ) \triangle x_p = C^{-1}(w-E^T\triangle x_c) xp=C1(wETxc)给出。这依然用到了 C − 1 C^{-1} C1易于求解的特性。

4. 鲁棒核函数

在前面的BA问题中,我们最小化误差项的二范数平方和,作为目标函数。这种做法虽然很直观,但存在一个严重的问题:如果出于误匹配等原因,某个误差项给的数据是错误的,会发生什么呢?我们把一条原本不应该加到图中的边给加进去了,然而优化算法并不能辨别出这是个错误数据,它会把所有的数据都当作误差来处理。这时,算法会看到一条误差很大的边,它的梯度也很大,意味着调整与它相关的变量会使目标函数下降更多

出现这种问题的原因是,当误差很大时,二范数增长得太快了。于是就有了核函数的存在。核函数保证每条边的误差不会大的没边,掩盖掉其他的边。 具体的方式是,把原先误差的二范数度量,替换成一个增长没有那么快的函数,同时保证自己的光滑性质。因为它们使得整个优化结果更为鲁棒,所以又叫它们为鲁棒核函数(Robust Kernel)。

鲁棒核函数有许多种,例如最常用的Huber核:
H ( e ) = { 1 2 e 2 if ∣ e ∣ ≤ δ , δ ( ∣ e ∣ − 1 2 δ ) otherwise H(e) = \biggl \{ \begin{aligned} &\frac{1}{2} e^2 \quad \quad \quad \quad \quad \text{if} |e| \leq \delta, \\ &\delta (|e|-\frac{1}{2}\delta) \quad \quad \text{otherwise} \end{aligned} H(e)={21e2ifeδ,δ(e21δ)otherwise

我们看到,当误差 e e e大于某个阈值 δ \delta δ后,函数增长由二次形式变成了一次形式,相当于限制了梯度的最大值。同时,Huber核函数又是光滑的,可以很方便地求导

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值