前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文详解非线性优化算法:保姆级教程-基础理论

一文详解非线性优化算法:保姆级教程-基础理论

作者头像
计算机视觉
发布2021-05-20 10:02:45
7450
发布2021-05-20 10:02:45
举报

不论是刚入门SLAM的小白,还是导航相关专业的同学,都对“非线性优化”这个词不陌生,如果你说你没听过这个词,那“因子图”一词总该略有耳闻吧,如果还是不知道,那就只能拿SLAM14讲敲你了。

自我进入SLAM领域以来,就再也没有逃出非线性优化的魔掌了,业界神书SLAM十四讲上还单独分出来一章对非线性优化进行了基础且详细的讲解,不过上了这么多年学的我们,早已经看透了这一切,书上写着“1+1=2”,实际操作中就开始解N个参数的方程组了。[一脸苦笑.gif]。如果你想耍滑头溜过非线性优化的大门,也可以,但你们会重逢的,在第七章重逢,第八章重逢,第九章重逢……在第十四章重逢。是的,非线性优化占据了SLAM的大半壁江山,于是,便有了这个专题——《非线性优化系列讲解》。

这个专题主要分为两大部分:Ceres和g2o,这两个是用于非线性优化的C++库,很常用,每个部分我都会由浅入深,结合代码逐行讲解,并在后续录制讲解视频供大家深度掌握,敬请关注。

非线性优化之G2O:基础理论知识

在这部分主要进行SLAM14讲中的基础知识讲解,若已熟读过的同学可以绕道下一步,在后续部分推导用到的公式我都会再次给出,并标记。

★问题一:什么是非线性最小二乘?

先举个简单的例子,在大家考试过程中,会有一个理想目标分数和实际分数以及满分,每次考试后,我们会得到实际分数,然后对实际分数和目标分数之间的差值进行评估,再对相应的学科进行难关攻克,以争取在下次考试中得到更好的成绩。

这便构成了最简单的最小二乘问题。可以想到,要使得有最小值,即找到函数极值点,而极值点往往在导数为零的点,对于易求解的,使用求导的方式,但在SLAM中,往往导数不易求解,无法找到极值点。

因此,选择使用一种很原始的方法,迭代试验法:

★问题二:高斯牛顿法求解非线性最小二乘

SLAM中更多用到列文伯格-马夸尔特方法,也被称为阻尼牛顿法,其收敛速度比高斯牛顿法慢但比高斯牛顿法更加健壮。

★问题三:列文伯格-马夸尔特法求解非线性最小二乘

Levenberg-Marquardt算法是使用最广泛的非线性最小二乘算法,同时具备梯度法和牛顿法的优点。

于是构建一个改良版的非线性优化框架:

对于[2]中的式子,用拉格朗日乘子将其转化为一个无约束问题:

这个方程在SLAM计算中会多次用到。

理论部分就到这里结束了,我不得不说一句,这些公式看起来都很有逼格,但怎么使用是真的搞不懂,因此,接下来的部分我会从浅入深依次推进讲解非线性优化。

本系列主要介绍两个非线性优化库ceres和g2o,g2o是结合SLAM十四讲的代码和ORB-SLAM3的优化代码进行详细讲解,ceres是结合SLAM十四讲的代码和PL-VINS的优化代码进行详细讲解,后续会逐步推出,敬请期待。

【Lesson 1 如何对一个简单的函数进行优化?】

(代码来自SLAM14讲第六讲)

先介绍两个很常见的非线性优化库:ceres和g2o。

方便大家使用,前辈们已经为我们封装好了基本的非线性优化库相关函数,我们需要做的就是在读懂基本库的同时,根据程序需要对基类函数进行派生,构造符合我们需求的类函数。Ceres和g2o对于我们大多数基本用户来说,都是一个用于非线性优化的基本函数库,其实没有太大的偏好,当然,大神都是自建库,这和我就没太大关系了。现在的很多开源代码,大多也是基于这两种优化库进行的,比如ORB-SLAM系列使用的是g2o优化库,VINS系列使用的是ceres库,这个就是一个使用偏好的问题,没有特别推荐的。

对于ceres和g2o的安装,推荐两个文档,网上还有其他参考,我只是随意挑选了两个,供大家参考。

Ceres:

https://blog.csdn.net/weixin_39373577/article/details/81285420

g2o:

https://blog.csdn.net/Qzx9059/article/details/88681998

具体安装请大家根据自己的环境自行配置,这里就不多说了。

更多的重点放在库的使用,首先我们通过一个简单的非线性最小二乘函数,引出最基本的使用方法。

再看信息矩阵,信息矩阵在书中没有非常详细的说明其来源,但在实际应用中,却起到了极大地作用,因此我在这里对其进行详细的分析。

提到信息矩阵,需要提到和他很接近的一个矩阵:协方差矩阵。

首先我们看什么是协方差矩阵,大家都知道方差,对于单个随意变量来说,方差是用来形容单个随机变量的离散程度,通俗一些讲,就是数据稳定程度。而协方差是来刻画两个随机变量的相似程度。

这两个式子进行对比,可以发现,单个随机变量的方差,可以视为随机变量与其自身的协方差。定义一群随机变量,两两随机变量之间的协方差为:

协方差矩阵的实际应用会在接下来的每一段代码中进行分析,因此,这里没看太懂的同学也不要慌,慢慢来,后面更精彩。

备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉工坊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档