边缘化你必须知道的一件事!(FEJ知识点总结)

news2024/9/23 11:28:38

vins和g2o边缘化的异同:(已经做到ppt里面了,简单回顾一下)

1.《视觉slam14讲》中提及的边缘化(G2O边缘化)是在计算求解过程中,先消去路标点变量,实现先求解相机位姿,然后再利用求解出来的相机位姿反过来计算路标点的过程,目的是为了加速求解,并非真的将路标点给边缘化掉。(补充:G2O是在BA之后提出的,BA就是优化路标点和相机位姿)

2.VINS的边缘化则真正需要边缘化掉滑动窗口中的最老帧和次新帧,目的是希望不再计算这一帧的位姿或者与其相关的路标点,但是希望保留该帧对窗口内其他帧的约束关系。

一个知识点:marg掉以后会使得之后的矩阵失去稀疏性的特点,也即矩阵会变得稠密起来,就是说非零元素的个数会增加。

编辑

添加图片注释,不超过 140 字(可选)

vins的边缘化策略第二点,当次新帧不是关键帧的时候直接丢弃次新帧,但是次新帧的IMU数据需要保留,这是为了保证IMU预积分的连贯性。

单目+imuj系统是4自由度不可观,yaw角+3自由度位置不可观。其中尺度因子由于加速度计的存在而可观。

编辑

添加图片注释,不超过 140 字(可选)

上面四幅图对应能量函数,上面的图告诉我们,能量函数为0的解由以前的一条曲线变成了一个点,不确定性的东西变得确定了,也即不可观的状态变量变得可观了。说明我们人为地引入了错误的信息。在不同的点线性化后,强行加起来,实际上引入了一些人为的约束,或者说引入了人为的错误观测,导致整个系统的崩溃。

编辑

添加图片注释,不超过 140 字(可选)

通过上面能量函数的例子可以说明,在marg的时候,不要在marg之后进行线性化,因为此时的状态和marg之前是不一样的。如果这时候再进行吸纳行话,会引入人为观测,导致整个优化过程崩溃。

因此,marg时,被marg的那些变量的雅可比已经不更新了,而此时留在滑动窗口里的其他变量的雅可比要用和marg时一样的线性点,就是FEJ进行计算,不要用新的线性点了。否则会导致整个问题的零空间被降维,意思即是引入了错误的人为观测约束,使得问题的零空间加入了错误的约束,因此被降维了。

编辑

添加图片注释,不超过 140 字(可选)

根据最后一句话 可能FEJ也不是很必要,但是是一个考点。

在边缘化的过程中,状态变量会被不断更新,计算边缘化相关的雅可比时需要注意固定线性化点,也就是计算雅可比时求导变量的值要固定,而不是用每次迭代更新以后的x去求雅可比,这就是FEJ(First Estimate Jacobians)。同时这样被称为是系统的一致性问题。

系统的不可观的状态维数是这个矩阵零空间的维数。(之所以说零空间维数降低,就是说不可观的状态维数降低了,也即不可观变得可观了。)

编辑

添加图片注释,不超过 140 字(可选)

就是说计算雅可比矩阵的时候要选择第一次的线性点来进行计算。

编辑

添加图片注释,不超过 140 字(可选)

使用FEJ的意义:为了保证系统的一致性,对于有边缘化信息的非线性优化问题,所有优化变量的雅可比都应该使用优化迭代开始前的雅可比,在优化迭代的过程中不发生变化。就是说在进行边缘化以后,线性化使用的线性点要保持一致,使用同一个线性点来进行Taylor展开,这样才能保证系统不可观的维度。否则,便引入了人为观测误差,这样会使得系统由不可观变成可观,求解出来的结果是不对的!

关于第一估计雅可比(FEJ, First Estimate Jacobians)先进行一个简单的描述,在Marginalize的时候,求解滑动窗口估计器的迭代过程中,会不断迭代计算H矩阵和残差b,而在迭代过程中,状态变量会不断更新,计算雅可比的时候需要固定线性化点(fix the linearization point)。换言之,就是计算雅可比时候求导变量要固定,而不是用每一次迭代更新以后的状态量x去求雅可比。

编辑

添加图片注释,不超过 140 字(可选)

感觉FEJ就是在讲计算雅可比矩阵时的线性化点的选择问题。

编辑

添加图片注释,不超过 140 字(可选)

上面这个图做到ppt里面就行了,就讲两个能量函数,在不同线性点展开,然后相加,最后发现结果从一条直线变成了一个点,也即下系统状态由不可观变得可观起来。(这种现象对slam系统是非常不利的。)

编辑

添加图片注释,不超过 140 字(可选)

上面讲了那么多的可观性,这里对可观性的定义进行一个阐述。就是说当系统可观的时候,那个h函数是一个单射函数,也即一个site对应唯一一个函数值。就是说可以理解成单调递增函数或者单调递减函数即可。

总结:滑动窗口算法中,对于同一变量,不同残差对其计算雅可比矩阵时线性化点可能不一致,导致信息矩阵分成两部分,相当于在信息矩阵中多加了一些信息,使得其零空间出现了变化。FEJ算法:不同残差对同一个状态求雅可比时,线性化点必须一致,这样就能避免零空间退化,也即可以避免不可观变量变得可观。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt creator添加build步骤删除某个文件

参考:https://blog.csdn.net/weixin_44436546/article/details/113587115 1. windows下配置: 添加build步骤;在commad栏输入cmd,会弹出C:\Windows\system32\cmd.exe;在Arguments栏输入/c release\upgrade.o;Working …

【数据结构】C语言实现双向链表(带头结点、循环)

C语言实现双向链表(带头结点、循环) 一、带头结点的循环双向链表二、结点与接口定义三、实现3.1 申请节点3.2 初始化3.3 打印3.4 尾插3.5 头插3.6 尾删3.7 判断链表为空断言3.8 头删3.9 查找find3.10 插入insert-在pos之前插入3.11 头插尾插复用insert3.…

机器学习算法实战(scikit-learn版本)---线性回归

目录 文章目标: 1,导入库 2,导入数据集 3,缩放/归一化训练数据 4,创建并拟合回归模型 5,查看参数 6,预测 7,可视化 有一个开源的、商业上可用的机器学习工具包,叫做[scikit-learn](https://scik…

阿里、京东等大厂年薪50w的测试都是什么水平?

各位做测试的朋友,但凡经历过几次面试,那么你一定曾被问到过以下问题: 1、在Linux环境下,怎么执行web自动化测试? 2、Shell如何,Docker熟悉吗? 3、全链路的压测实操过吗,如何推进与开…

【Linux】基本权限

😁作者:日出等日落 🔔专栏:Linux 任何值得到达的地方,都没有捷径。 目录 Linux权限: 权限的概念: Linux上面的用户分类: Linux权限管理 文件访问者的分类(人) 文件…

小心白蛇!PyPI仓库被持续投放White Snake后门组件

背景 墨菲安全实验室在持续监测开源软件仓库中的投毒行为,4 月 14 日起陆续发现至少 41 个包含白蛇(White Snake)后门的 Python 包被发布到 PyPI 仓库,目前相关的后门包仍在持续发布。 事件简述 白蛇 (WhiteSnake&a…

三种方法教你让模糊照片秒变高清图

现在随着数字相机和智能手机的普及,我们拍摄的照片数量越来越多,但是有些照片可能因为环境或技术等原因导致模糊不清,这时候我们就需要使用一些软件或工具来让照片变得清晰,以满足我们的需求。 下面介绍三种常用的照片变清晰的方…

专科生学习云计算的就业前景如何?

作为专科学历学习云计算,就业前景肯定是有的。因为目前开设云计算这门专业主要也是专科院校,目前入行的学历要求也是专科为起点,更加侧重技术技能水平,技术过关了才能找到合适的工作。 云计算作为一种新兴的IT技术方向&#xff0…

AI别来搅局,chatGPT的世界不懂低代码

ChatGPT单月访问量再创新高 根据SimilarWeb统计,ChatGPT上月全球访问量17.6亿次,已超越必应、鸭鸭走DuckDuckGo等其他国际搜索引擎,并达到谷歌的2%,百度的60%。 这会,程序员失业的段子又得再来一遍了: 拖…

Qt+WebRTC学习笔记(七)ubuntu22.04下搭建coturn(STUN/TURN)

前言 因工作原因,很长时间没更新相关文档了,笔者之前测试时,一直使用示例自带的公网中转服务器。考虑到后期项目需要,笔者在线搭建一个coturn服务器测试,供有需要的小伙伴使用 一、安装coturn 若需要最新版本的cotu…

Linux修改文件权限

目录 1、常用操作 2、文件属性 3、chmod命令详解 1.修改文件属主,也可以修改文件属组 2.修改文件权限 4.chgrp命令详解 1、常用操作 查看权限操作命令:# ls -l 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限: chown (change ownerp)…

[python] Python类型提示指北

Python3.5 版本引入了类型提示(Type Hints),它允许开发者在代码中显式地声明变量、函数、方法等的类型信息。这种类型声明不会影响 Python 解释器的运行,但可以让 IDE 和静态分析工具更好地理解代码,同时提高代码的可读…

《Netty》从零开始学netty源码(五十六)之MessageSizeEstimator

MessageSizeEstimator 在channel的配置类中有一个属性msgSizeEstimator,它的功能就是用来预估消息的大小,它的赋值过程如下: 接口MessageSizeEstimator只有一个方法newHandle(),它返回的接口handle是MessageSizeEstimator的内部类…

SpringBoot基础篇1(搭建环境+基础配置)

一、SpingBoot入门案例 SpringBoot是用来简化Spring应用的初始搭建以及开发过程。 先快速搭建一个SpringBoot: 创建一个空project,再创建SpringBoot模块。 点击Create,出现以下页面配置成功 创建一个控制器测试一下: RestCo…

Centos8搭建SMB服务

这里以Centos8为例,搭建简易的SMB服务。虚拟机配置:内存8G、存储64G、CPU单核四线程、网络NAT模式跳过虚拟机与系统配置部分,不清楚虚拟机配置以及创建的请查阅其他文档此文章只用于练习用,商业和个人用可以见解Truenas系统 更新…

改进YOLOv5 | C3模块改动篇 | 轻量化设计 |骨干引入高效卷积运算 DSConv: Efficient Convolution Operator

论文地址:https://arxiv.org/pdf/1901.01928v1.pdf 引入了一种卷积层的变体,称为DSConv(分布偏移卷积),其可以容易地替换进标准神经网络体系结构并且实现较低的存储器使用和较高的计算速度。 DSConv将传统的卷积内核分解为两个组件:可变量化内核(VQK)和分布偏移。 通过…

C 高级 /Day 2

#include<stdio.h> int Max_arr(int (*arr)[5],int row,int hang) {int max0;//最大值int k1;//循环行for(int i0;i<hang;i){int k1;//循环列for(int j0;j<row;j){//控制行和列for(int m0;m<hang;m){for(int n0;n<row;n){//如果是第m行的其他的元素&#xf…

MySQL原理(一):逻辑存储结构

前言 从本文开始&#xff0c;我将分享一下近期学习 MySQL 的笔记&#xff0c;其中大部分来源于极客时间的《MySQL实战45讲》、小林coding、以及部分其他博客和书籍。 这次系列文章着重讲 MySQL 的原理部分&#xff0c;主要是用于面试&#xff0c;也就是我们常说的八股&#x…

华为OD机试 - 有效的括号(Java)

一、题目描述 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。…

力扣习题+——单链表

宝子&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…