当前位置: 首页 > 面试经验 >

蔚来-低速语义slam算法实习生面经

优质
小牛编辑
122浏览
2023-03-28

蔚来-低速语义slam算法实习生面经

开头项目


问在上家公司中orb3的slam框架,如何存储关键帧,地图点及其数据结构;


1. 描述一下关键帧是什么?有什么用?如何选择关键帧?


关键帧相当于slam的骨架,是在局部一系列普通帧中选出一帧作为局部帧的代表,记录局部信息。举例来说,摄像头放在原处不动,普通帧还是要记录的,但关键帧因为总看到原场景,所以不会增加。 三角化需要一定程度的共视区域,所以普通帧每2帧之间会存在大量的信息冗余,如果所有帧全部参与计算,不仅浪费了算力,对内存也是极大的考验,这一点在前端VO递归处理方式中表现不明显,但在后端优化里是一个大问题,所以关键帧主要作用是面向后端优化的算力与精度的折中。此外,关键帧选择时还会对图片质量、特征点质量等进行考察,一定程度上也发挥了滤波的作用,防止无用的或错误的信息进入优化过程而破坏定位建图的准确性。
选择关键帧主要从关键帧自身和关键帧与其他关键帧的关系2方面来考虑。一方面,关键帧自身质量要好,例如不能是非常模糊的图像、特征点数量要充足、特征点分布要尽量均匀等等;另一方面,关键帧与其他关键帧之间的关系,需要和局部地图中的其他关键帧有少量的共视关系,但大部分特征点是新特征点,以达到既存在约束,又尽量少的信息冗余的效果,例如局部地图点投影到此帧的点数低于一个阈值或前一个关键帧的特征点在此帧里已经有90%观测不到等等。
在关键帧的运用上,orbslam做的非常好,尤其是在回环检测中使用了以关键帧为代表的帧“簇”的概念,回环筛选中有一步将关键帧前后10帧为一组,计算组内总分,以最高分的组的0.75为阈值,滤除一些组,再在剩下的组内各自找最高分的一帧作为备选帧,这个方法非常好地诠释了“关键帧代表局部”的这个理念。


2. ORB-SLAM初始化的时候为什么要同时计算H矩阵和F矩阵?


3. 什么是ORB特征,ORB特征的旋转不变性是如何做的,BRIEF算子是怎么提取的。如何均匀化的?


特征点由关键点和描述子组成,关键点是该特征点在图像中的位置,有些还包括方向、大小等信息,描述子是用来描述该关键点周围像素的一种描述方法。
ORB使用Oriented FAST特征点和改进的BRIEF描述子(一种二进制描述子),尺度不变性由构建图像金字塔,并在金字塔每层检测焦点;旋转式用灰度质心描述
ORB使用四叉树均匀分布特征点,保证鲁棒性


4. ORB-SLAM的共视图是什么结构?内部如何存储的?


参考答案链接
共视图和生成树结构。父关键帧和子关键帧,父关键帧为共视程度最高的那个关键帧。增删关键帧采用最小生成树算法中的加边法重新构建生成树结构: 每次循环取权重最高的候选边建立父子连接关系,并将新加入生成树的子节点到加入候选父节点集合


算法与数据结构问题


随便出题(并不,如果多看面经的话这个是经典题目了),问了个最优化方法解开根号,最后用二分法做了。


牛顿法


一阶情况链接 这个是牛顿法,用切线做,每次找切线的x轴点,如果相邻点y差足够小停止迭代。
虽然是求y=根号x,但是可以反过来求f(x) = x² - a,存在x,f(x) < 1-e7,那么x就是开根号后的值。这样目标函数就可以求斜率了,切线公式 y - xi² + a = 2xi * (x - x); 则与x轴交点为(0.5 * (xi + a / xi), 0).
迭代函数初值x0 = a / 2, 停止条件是 abs(f(x)) < 1-e7, 返回值是 xi+1 = 0.5 * (xi + a / xi);
二阶情况链接 海塞矩阵



高斯牛顿法


高斯-牛顿法(Gauss–Newton algorithm)是牛顿法的特例,它是牛顿法的修改版,用于寻找函数的最小值。只能用于解决最小二乘问题。优点是,不需要二阶导数。


感想


居然都没答上来,也没时间准备,但确实是问这些。已经寄了。
每日新,日日新。好好学习呀皮卡!!!

 类似资料: