视觉SLAM十四讲:从理论到实践(Chapter6:非线性优化)

server/2024/9/23 11:15:14/

前言

学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可

一、目标

  1. 理解最小二乘法的含义和处理方式。
  2. 理解高斯牛 顿法(Gauss-Newton's method)、列文伯格一马夸尔特方法(Levenburg-Marquadt's method)等下降策略。
  3. 学习Ceres库和g2o库的基本使用方法。

二、状态估计问题

2.1 批量状态估计和最大后验估计

经典的SLAM系统的观测方程: 

视觉SLAM系统的观测方程:

早期是用滤波的方法进行状态最优估计,现在主流的方法是非线性优化的方法。

与SLAM的损失函数一致的是运动结构重建,但运动结构重建(SfM,Structure from Motion)不是实时的,且是无时间顺序图像,不符合SLAM的需求。

由于条件概率分布很难求,所以对于工程应用方面,转换成求最大值的问题:最大后验估计(MAP),由于视觉SLAM没有先验,所以最后转化为最大似然估计(Maximize Likelihood Estimation, MLE):

最大似然估计——可以理解为——在位姿x,标志点y状态下,最可能产生现在观测到的数据。

2.2 最小二乘法引出

数学方面的推导过程:

对于视觉SLAM系统,结合数学形式的推导,(6.9)式的第一项与位姿无关,所以最大似然变为求第二项的负对数最小化:

最终的目标函数形式转化为:

 

三、非线性最小二乘

通用迭代流程:

3.1 一阶和二阶梯度法

将目标函数在xk附近泰勒展开: 

J:Fx对x的一阶导数,也叫梯度、Jacobian矩阵 

H:二阶导数,Hessian矩阵 

最速下降法:只保留一次项,为了保证函数下降,只需要:

Newton法:保留二次项 , 

3.2 高斯牛顿法

先平方,后展开——最速下降法(存在不稳定的问题)、Newton法(需要求二阶梯度Hessian矩阵)

先展开,后平方——GN算法(用一阶梯度代替二阶梯度),LM算法(在GN的基础上增加了一个范围条件)

对函数fx本身进行一阶展开,不是对目标函数Fx进行一阶展开

在这种情况下,再将目标函数展开:

 

所以有正规方程:

GN步骤:

 但是GN法不能保证H是可逆的

3.3 列文伯格-马夸尔特方法(LM法)

依旧是这个近似模型:

近似程度的描述:

 ρ的分子是实际函数下降的值,分母是近似模型下降的值。ρ越小,表明近似模型过大,要减小Δx,反之同理。

步骤:

即相当于求解:

总结

非线性优化是个很大的主题,研究者们为之奋斗多年;
主要方法:最速下降、牛顿、G-N、L-M、DogLeg等;
与线性规划不同,非线性需要针对具体问题具体分析;
问题非凸时,对初值敏感,会陷入局部最优,目前没有非凸问题的通用最优值的寻找办法;

问题凸时,二阶方法通常一两步就能收敛。


http://www.ppmy.cn/server/43228.html

相关文章

如何彻底搞懂装饰器(Decorator)设计模式?

对于任何一个软件系统而言,往现有对象中添加新功能是一种不可避免的实现场景,但这一实现过程对现有系统的影响可大可小。从架构设计上讲,我们也知道存在一个开闭原则(Open-Closed Principle,OCP)&#xff0…

在64位程序中调用SetWindowLong指定窗口处理过程失效问题排查(附C++编译器数据模型)

C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶(专栏文章,持续更新中...)https://blog.csdn…

基于HTML5和CSS3搭建一个Web网页(二)

倘若代码中有任何问题或疑问,欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏,包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式,包括字体、颜色和背景颜…

python读写二进制文件

需求:将Test文件夹下所有bin文件中凡是出现128的统一替换成129。 import os root rD:\TXB\Y2022\PROJ\S2106\INNER\内部研究\语音信号处理\智能语音处理\test\pattern_0513 for file in os.listdir(root):if file.endswith(.bin):src_path os.path.join(root, fi…

贪心算法简单介绍

贪心算法是一种在每一步选择中都采取当前状态下最优或最优近似的选择,以期望最终得到全局最优解的算法。贪心算法并不总能得到全局最优解,但在某些问题上,它可以得到全局最优解,并且比动态规划等其他方法更为简单和高效。 贪心算…

aws lakeformation跨账号共享数据的两种方式和相关配置

lakeformation授权方式分为 基于tag的授权基于命名资源的授权 先决条件 跨账号共享数据的先决条件(命名资源和tag授权都需要) 分两种情况 如果账户中没有glue data catalog资源策略,则LakeFormation跨账户授予将照常进行 如果存在glue d…

关于 JVM

内存区域划分 像办公楼一样,有办公区休息区吃饭区啥的,JVM 这个应用程序就会在启动的时候就会向操作系统申请一块内存区域,然后把这个区域分成几个部分,每个部分有不同的功能作用。一个 Java 进程就对应一个 JVM。 (虽…

TS 进阶类型

联合类型 | 当 TS 不确定一个联合类型的变量到底是哪个类型的时候,可以定义多种类型,例如,一个变量既支持 number 类型,又支持 string 类型. let num: 类型1 | 类型2 | 类型3 .... 初始值 let num:number | string 1 // 可以写多个类型 /…