第六章 非线性优化

主要目标

  1. 理解最小二乘法的含义和处理方式。
  2. 理解高斯牛顿法(Gauss-Newton)、列文伯格—马夸尔特方法(LevenburgMarquadt)等下降策略。
  3. 学习 Ceres 库和 g2o 库的基本使用方法。
    一、状态估计问题
    1)批量状态估计与最大后验估计
    经典 SLAM 模型由一个运动方程和一个观测方程构成:

    在运动和观测方程中,我们通常假设两个噪声项 wk, vk,j 满足零均值的高斯分布,像这样:

    其中 N 表示高斯分布,0 表示零均值,Rk, Qk,j 为协方差矩阵。在这些噪声的影响下,我们希望通过带噪声的数据 z 和 u 推断位姿 x 和地图 y(以及它们的概率分布),这构成了一个状态估计问题。
    处理这个状态估计问题的方法大致分成两种:
    1)增量式:有一个当前时刻的估计状态,然后用新的数据来更新它。
    2)批量式:把数据“攒”起来一并处理它。
    接下来讨论一下批量方法:
    考虑从 1 到 N 的所有时刻,并假设有 M 个路标点。定义所有时刻的机器人位姿和路标点坐标为:

    用不带下标的 u 表示所有时刻的输入,z 表示所有时刻的观测数据。那么我们说,对机器人状态的估计,从概率学的观点来看,就是已知输入数据 u 和观测数据 z 的条件下,求状态 x, y 的条件概率分布:

    为了估计状态变量的条件分布,利用贝叶斯法则,有:

    贝叶斯法则左侧称为后验概率,右侧的 P(z|x) 称为似然(Likehood),另一部分 P(x) 称为先验(Prior)。直接求后验分布是困难的,但是求一个状态最优估计,使得在该状态下后验概率最大化(Maximize a Posterior,MAP),则是可行的:

    进一步,我们当然也可以说,对不起,我不知道机器人位姿或路标大概在什么地方,此时就没有了先验。那么,可以求解最大似然估计(MaximizeLikelihood Estimation,MLE):

    直观讲,似然是指“在现在的位姿下,可能产生怎样的观测数据”。由于我们知道观测数据,所以最大似然估计可以理解成:“在什么样的状态下,最可能产生现在观测到的数据”。这就是最大似然估计的直观意义。
    2)最小二乘的引入
    最小二乘法可以由最大似然估计进行导出
    对于某一次观测:

    假设噪声项 vk ∼ N (0, Qk,j ),所以观测数据的条件概率为:

考虑任意高维高斯分布 x ∼ N (µ, Σ),它的概率密度函数展开形式为:

对其取负对数,则变为:

因为对数函数是单调递增的,所以对原函数求最大化相当于对负对数求最小化。在最小化上式的 x时,第一项与 x 无关,可以略去。于是,只要最小化右侧的二次型项,就得到了对状态的最大似然估计。代入 SLAM 的观测模型,相当于在求:

该式等价于最小化噪声项(即误差)的平方( Σ 范数意义下)。
二、非线性最小二乘
1)最小二乘问题:

1、给定某个初始值 x0。
2、 对于第 k 次迭代,寻找一个增量 ∆xk,使得 ∥f (xk + ∆xk)∥22 达到极小值。
3、若 ∆xk 足够小,则停止。
4、否则,令 xk+1 = xk + ∆xk,返回第 2 步。
注:非线性优化问题关键是求解增量 ∆xk
2)一阶和二阶梯度法
将最小二乘函数在x附近进行二阶泰勒展开:
注:J 是 ∥f(x)∥2 关于 x 的导数(雅可比矩阵),而 H 则是二阶导数(海塞( Hessian)矩阵)

如果保留一阶梯度,这为最速下降法:
如果保留二阶梯度,这为牛顿法:

求右侧等式关于 ∆x 的导数并令它为零,就得到了增量的解:

注:最速下降法过于贪心,容易走出锯齿路线,反而增加了迭代次数。而牛顿法则需要计算目标函数的 H 矩阵,这在问题规模较大时非常困难,我们通常倾向于避免 H 的计算。

3)Gauss-Newton
将 f(x) 进行一阶的泰勒展开(请注意不是目标函数 f(x)2)

注:对比牛顿法可见, Gauss-Newton 用 J T J 作为牛顿法中二阶 Hessian 矩阵的近似,从而省略了计算 H 的过程。

原则上,它要求我们所用的近似 H 矩阵是可逆的(而且是正定的),但实际数据中计算得到的 J T J 却只有半正定性。
也就是说,在使用 Gauss Newton 方法时,可能出现 J T J 为奇异矩阵或者病态 (illcondition) 的情况,此时增量的稳定性较差,导致算法不收敛。

4)Levenberg-Marquadt
Levenberg-Marquadt 方法在一定程度上修正了这些问题,一般认为它比 Gauss Newton 更为鲁棒。尽管它的收敛速度可能会比 Gauss Newton 更慢,被称之为阻尼牛顿法(Damped Newton Method)

给 ∆x 添加一个信赖区域( Trust Region),不能让它太大而使得近似不准确。一个比较好的方法是根据我们的近似模型跟实际函数之间的差异来确定这个范围:如果差异小,我们就让范围尽可能大;如果差异大,我们就缩小这个近似范围。

注:ρ 的分子是实际函数下降的值,分母是近似模型下降的值。如果 ρ 接近于 1,则近似是好的。如果 ρ 太小,说明实际减小的值远少于近似减小的值,则认为近似比较差,需要缩小近似范围。反之,如果 ρ 比较大,则说明实际下降的比预计的更大,我们可以放大近似范围。

算法步骤

注:这里 λ 为 Lagrange 乘子。

多了一项 λDT D。如果考虑它的简化形式,即 D = I,那么相当于求解:

当参数 λ 比较小时, H 占主要地位,这说明二次近似模型在该范围内是比较好的, L-M 方法更接近于 G-N 法。

另一方面,当 λ 比较大时, λI 占据主要地位, L-M更接近于一阶梯度下降法(即最速下降),这说明附近的二次近似不够好。

L-M 的求解方式,可在一定程度上避免线性方程组的系数矩阵的非奇异和病态问题,提供更稳定更准确的增量 ∆x。

视觉SLAM十四讲第六讲相关推荐

  1. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  2. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  3. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  4. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  5. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  6. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  8. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  9. 视觉SLAM十四讲学习笔记专栏汇总

    专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二 ...

  10. 视觉SLAM十四讲学习笔记-第二讲-初识SLAM

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 "定位"和"建图",可以看成感知的"内外之分". ...

最新文章

  1. python可以做什么系统-用python做推荐系统(一)
  2. 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针
  3. ftp put 550 Access is denied
  4. HTML试题及答案(总结)
  5. Auto type deducing
  6. EditText常用属性总结
  7. 福建省计算机中职类高考400分多少名,重要参考!福建高职分类各院校近两年招生计划及分数线汇总来了,快收藏...
  8. linux命令:linux集群系列之一---LVS类型解析
  9. 使用spring的aop监听所有controller或者action日志
  10. 显示upnp服务器 sonos,Kodi启用UPnP/DLNA及AirPlay 串流投屏设置教程
  11. 服务器增加cpu图,Intel服务器路线图:14nm再战两年 上胶水封装
  12. 自己忙碌十年,发现空空的,该填满了
  13. CentOS 7 从本地 ISO 映像文件安装 Gnome GUI
  14. Excel快速核对两张表格
  15. BCD码指令 AAA DAA AAS DAS AAM AAD
  16. Android相机开发和遇到的坑
  17. 二项分布期望和方差的推导及推广
  18. Cesium调用高德地图服务实现搜索地点定位详解
  19. gz, bz2, bz, Z, tgz, zip, rar, lha, rpm等格式的解压
  20. 案例:知乎是怎么落地Istio的?

热门文章

  1. [ZZ]测试阶段及类型(Testing Phases Types)
  2. 芦荟的种类和价值,你都了解吗?
  3. 刺激战场测试fps软件,绝地求生刺激战场怎么查看帧率?查看帧率方法一览
  4. 安信可TG-12F模组学习笔记 ① 在AliOS-Thing架构上快速开发实现一个天猫精灵插座。
  5. win 修改注册表维护浏览器主页
  6. 谜题21:我的类是什么?
  7. 泛微E9二次开发资料完整总结版
  8. 中间件-------activityMQ整合springboot
  9. win7下安装配置Tomcat 7.0
  10. 图书管理开题报告php,基于PHP+SqlServer的图书管理系统,毕业论文设计,答辩ppt,开题报告,外文翻译,苹果,硕士研究生,iphone...