非线性优化
如前所述,视觉SLAM的本质是一个参数优化问题。如何对此类问题进行优化已有基于Linux系统的支持库。为了使用这些库,我们首先要了解参数优化的基本过程和一些基本术语。本章的内容仅仅讲述优化的方法,并不涉及SLAM模型中外参的具体优化。后者将在第9章具体讲述。
一、状态最优估计的概念
根据ch2中的分析,视觉SLAM的本质是根据观测模型 来确定相机的外参和路标点。其中下标k表示时间,所以每一个时刻都可以得到一个这样的观测方程。表示路标的坐标列阵,下标j用于区别不同的路标;也就是说每一个特征点都有一个,可建立一个这样的观测方程。表示相机的外参,也就是其位姿。表示相机的观测结果,也就是像素坐标。表示观测噪声,与观测时刻和路标有关。根据ch5的公式(5),观测模型的具体形式为
(1)
为了根据观测结果反求外参和路标,我们先猜测这三个参数的初始值,然后计算
(2)
以及
(3)
其中为高斯分布协方差矩阵之逆,又称为信息矩阵。如果没有量测噪声且和路标的猜测值正确,则和应当精确等于零。事实上因为一般不为零。为此我们调整和路标的值使得的变小。当达到最小时就认为所得到的和路标为最优估计。
如何调整和路标就是参数优化或静态优化问题所要研究的内容。如果式(1)中与待优化变量的关系是线性的,则这种优化的求解称为线性优化问题。如果我们之间取中的元素为待优化变量,则如ch4所述会变成一个有约束优化问题。如果取相机的方位角为待优化参数,则因的存在,式(1)和(3)表征的是一个非线性优化问题。因此下面主要讨论非线性优化方法。
二、非线性优化方法
1.优化的总体框架
将和路标组合起来视为一个新的变量。再令,其中,则式(3)右端可改写为,其中是由所有所构成的列阵。根据这些符号,求式(3)的最小值可用下面更一般的形式来表示
(4)
如果的形式很简单,则这种最小值问题可通过求驻点来解决。实际应用中,的表达式往往非常复杂。此外,我们往往还需要给乘上核函数(在程序调试部分会讲解),使得进一步复杂化,这时可采用如下数值算法来解决。
(a)先猜测某个初始值。
(b)在第步,寻找一个增量使得达到最小值
(c)若足够小,则停止。
(d)否则,令,返回第(b)步。
这样就将非线性优化问题转换为求的最小值问题。由于可以对线性化,增量的计算将会简单很多。
从上面优化步骤可以看出,其核心算法在于(b)步。针对(b)算法的不同,优化方法可分为如下几种。
2.一阶和二阶梯度法(牛顿法)
在第 步,将在附近进行泰勒级数展开可得
(5)
其中是关于的一阶导数,称为雅可比矩阵;是关于的二阶导数,称为海塞矩阵。如果略去二阶小量,则从式(5)可明显看出在时可保证变小。这样我们只要合适地选择一个比例常数就可能使得取得最小值。这种确定的方法称为最速下降法。
如果不略去二阶小量,直接根据式(4)也可确定使最优的。根据驻点法有
(6)
求解此线性方程组即可得到,这种确定的方法称为牛顿法。
这两种方法的原理都非常直观,但在实际应用时都存在一些问题,例如最速下降法要确定的值,牛顿法要计算海塞矩阵。下面介绍两种更为实用的方法。
3.高斯牛顿法
牛顿法将式(4)中进行泰勒级数展开,高斯牛顿法则是将式(4)中的进行泰勒级数展开并取线性近似
(7)
这里雅可比矩阵是关于的一阶导数。根据前面的非线性优化算法步骤(b),需要求使达到最小。这本质上是一个线性最小二乘问题
(8)
利用驻点法不难证明这个问题的求解可转化为求解如下关于的线性方程组
(9)
和式(6)对比可以发现,高斯牛顿法只需要计算雅可比矩阵而不需要海塞矩阵,因而使用更方便。
4.列文伯格-马夸尔特法
可以证明高斯牛顿法中的是半正定的。当为奇异矩阵或病态矩阵(即特征根为零或很小)时,根据线性方程组(9)计算得到的就会很大甚至趋于无穷,使优化不收敛。为了解决这个问题就产生了列文伯格-马夸尔特法。它比高斯牛顿法更健壮,但收敛速度可能更慢,又称阻尼牛顿法。其思想是给计算得到的添加一个范围或信赖区域。若计算得到的落在信赖区域内,则继续按高斯牛顿法进行,否则就需要用改进的方法计算。具体说,列文伯格-马夸尔特法将高斯牛顿法中的式(8)改写成
(10)
其中取矩阵对角元素的平方根。那么如何确定的值呢?很显然,如果越正定,计算得到的就会越容易使式(7)成立。因此式
(11)
是一个衡量值是否合理的判据。越大说明计算得到的越合理,这时候可以适当增大;否则越小说明计算得到的越不合理,这时候就需要减小。
根据以上分析,第二、1节中的优化总体框架需要相应地修改为
(a)给定初始值和初始优化半径。
(b)在第步,寻找一个增量以满足式(10)。
(c)按式(11)计算,若则令;若则令,并返回第(b)步;若,记录增量。
(d)判断是否足够小,是则停止。
(d)否则,令,返回第(b)步。
从上面步骤可以看出,其核心在于求解方程(10)。对于此有约束的线性优化问题,根据拉格朗日函数法不难证明其解为如下线性方程组的解
(11)
求解此方程组即可得到。
三、小结
本章主要介绍非线性问题的优化方法。在实际应用中,我们是采用库函数来进行优化。然而,为了使用这些库函数,首先要了解参数优化的基本方法和概念,这也就构成了本章的主要内容。本篇在原著的基础上,更详细地展示了非线性优化问题的求解框架,更简略地阐述了几种常用优化方法的推导过程,希望对初学者有帮助。
高博书上的式(6.24)说为标量函数,但在式(6.31)下面那个式子中又对进行了转置运算。本篇清晰地展示了是一个坐标列阵或向量函数,应写为。