学习记录-视觉SLAM十四讲第2版(八)

文章目录

  • 前言
  • 一、6.3实践部分
    • 1.安装Ceres和g2o库
    • 2.gaussewton项目
    • 3.ceresCurveFitting项目
    • 4.g2oCurveFitting项目
  • 二、第6讲的普通习题
    • 1.证明式子
    • 2.调研各种方法
    • 3.高斯牛顿法的细节
    • 4.DogLeg细节
    • 5.阅读Ceres的细节
    • 6.阅读g2o的文档
  • 总结


前言

系统环境:ubuntu20.04
这几天又抽了时间看了SLAM十四讲的第6讲非线性优化,前面6.1和6.2都是数学,我看得都有些晕等第2次重温时再来补充好了,这里讲一下6.3的实践部分,以及后面的普通习题部分。


一、6.3实践部分

三个项目共用一个cmakelist.txt,如果不采用注释的方式的话,就必须先安装Ceres和g2o库,没法按照高博书上的顺序先运行其中的某一个。

1.安装Ceres和g2o库

按照高博书上写的安装Ceres库对应的依赖,如下

sudo apt install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev

然后去网上git clone Ceres库,接着cmake和make就好了。
make的过程会稍微久一点,按照高博的说法,最后要记得安装,即执行下面这条指令

sudo make install

同样的操作安装g2o库,只是依赖不大一样,其他都一样。

sudo apt install qt5-qmake qt5-default libqglviewer-dev-qt5 libsuitesparse-dev libcxsparse3 libcholmod3

这样下面三个项目的准备工作就做好了。

2.gaussewton项目

这个比较简单,基本上就是按照公式直接敲的。
学习记录-视觉SLAM十四讲第2版(八)_第1张图片

3.ceresCurveFitting项目

用库函数来做,但是需要进行配置,大体上还不难理解。
学习记录-视觉SLAM十四讲第2版(八)_第2张图片

4.g2oCurveFitting项目

图优化的方式看上去就有些头疼了,把问题转化到图里面来解决,具体还是得读代码才行。
学习记录-视觉SLAM十四讲第2版(八)_第3张图片

二、第6讲的普通习题

1.证明式子

题目:证明线性方程Ax=b当系数矩阵A超定时,最小二乘解为 x = ( A T A ) − 1 A T b x=(A^TA)^{-1}A^Tb x=(ATA)1ATb
这里超定矩阵是指行数大于列数的矩阵,因此不存在可逆矩阵。此时求解x不能通过 A − 1 b A^{-1}b A1b来进行,只能通过最小二乘法进行。根据题目要求,列出式子并求解如下:
学习记录-视觉SLAM十四讲第2版(八)_第4张图片
参考资料
1、超定矩阵
2、最小二乘法求解线性方程组

2.调研各种方法

题目:调研最速下降法、牛顿法、高斯牛顿法和列文伯格-马夸尔特方法各有什么优缺点?除了Ceres和g2o库还有什么常用的优化库?
最速下降法
优点:方便直观,便于理解。
缺点:下降速度慢,有时参数会震荡在最优解附近无法终止,即增加了迭代次数
牛顿法
优点:对于正定二次函数,迭代一次,就可以得到极小值点。下降的目的性更强。
缺点:要求二阶可微分;收敛性对初始点的选取依赖性很大;每次迭代都要计算Hessian矩阵,计算量大;计算Dk时,方程组有时奇异或者病态,无法求解Dk或者Dk不是下降方向。
高斯牛顿法
优点:利用近似的方式避免了求二阶Hessian矩阵的步骤。
缺点:如果近似出来的二阶矩阵为奇异矩阵或病态,则增量稳定性较差,算法不收敛;步长太大时也会可能引起不收敛。
列文伯格-马夸尔特法
优点:克服了牛顿法的奇异和病态方程无解,Dk非下降的缺点。
缺点:要求二阶可微分;收敛性对初始点的选取依赖性很大;每次迭代都要计算Hessian矩阵,计算量大;
除了Ceres和g2o的库,的确找来找去都是matlab的方法。
参考资料
1、优化方法比较
2、优化的库

3.高斯牛顿法的细节

奇异矩阵是指矩阵行列式为0的情况,病态矩阵是指轻微的扰动会引起结果发生很大变化的矩阵。
因为这里我们使用 J J T JJ^T JJT来近似表示H,而 J J T JJ^T JJT只有半正定性,那么就有可能出现奇异矩阵或病态矩阵的情况,此时H无法求逆,无法继续,此时对 f ( x 0 ) f(x_0) f(x0)近似是一条水平的直线,无法给出下一次迭代的下降方向,因此增量的稳定性较差,算法不收敛。
参考资料:高斯牛顿法

4.DogLeg细节

dogleg属于二阶梯度法,为了解决高斯牛顿法在使用一阶导数平方近似计算hessian矩阵时可能不准确的问题,它结合了高斯牛顿法与最速下降法,通过定义近似半径来限制近似的可执行范围。本质上与列文伯格-马夸尔特法算法类似,不过实现细节大有不同。
参考资料:dogleg算法

5.阅读Ceres的细节

读了一下,但是觉得这个还是得正经用起来印象比较深刻。

6.阅读g2o的文档

表示我还是直接等阅读了第10讲和第11讲后再回来看吧。


总结

本文对第6讲的实践部分进行了总结,并对第6讲的普通习题进行了处理和归纳。

你可能感兴趣的:(学习记录,学习,计算机视觉,ubuntu)