当前位置: 首页 > news >正文

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI 谈“浔川AI翻译机”
  • 基于Android Studio记事本系统
  • vue-封装上下(垂直方向)轮播
  • 【XR806开发板试用】SPI驱动数码管显示
  • 语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(一)音频数据编码与预处理
  • 搭建CMS系统
  • MyBatis的基础操作
  • PHP身份证真伪验证、身份证二、三要素核验、身份证ocr接口
  • 【Redis】 关于列表类型
  • 【论文解读】Performance of AV1 Real-Time Mode
  • 软件测试面试题(七)
  • 【ES6】ECMAS6新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
  • 代码随想录算法训练营day35 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
  • Unity中使Main Camera显示Canvas的区域
  • NL6621 实现获取天气情况
  • 0基础学习移动端适配
  • interface和setter,getter
  • maya建模与骨骼动画快速实现人工鱼
  • MD5加密原理解析及OC版原理实现
  • Meteor的表单提交:Form
  • mysql innodb 索引使用指南
  • redis学习笔记(三):列表、集合、有序集合
  • vue中实现单选
  • 测试如何在敏捷团队中工作?
  • 二维平面内的碰撞检测【一】
  • 后端_ThinkPHP5
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 软件开发学习的5大技巧,你知道吗?
  • 数组的操作
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • gunicorn工作原理
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 湖北分布式智能数据采集方法有哪些?
  • ​Redis 实现计数器和限速器的
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #laravel 通过手动安装依赖PHPExcel#
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)c52学习之旅-独立按键
  • (十八)SpringBoot之发送QQ邮件
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法)大数的进制转换
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转) Face-Resources
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .NET : 在VS2008中计算代码度量值
  • .NET 8.0 发布到 IIS
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?