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

2024-05-27 21:12

本文主要是介绍视觉SLAM十四讲:从理论到实践(Chapter6:非线性优化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

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

一、目标

  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等;
与线性规划不同,非线性需要针对具体问题具体分析;
问题非凸时,对初值敏感,会陷入局部最优,目前没有非凸问题的通用最优值的寻找办法;

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

这篇关于视觉SLAM十四讲:从理论到实践(Chapter6:非线性优化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008603

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项