视觉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集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成