Flag 随风飘扬-------
我从研一开始入门slam,到目前为止仍感觉时间太太太不够用了,要学的知识太太太太多了。。 。(来自一枚渣渣的呐喊)
然而,与其自怨自艾,不如拿起笔来!与其临渊羡鱼,不如退而结网!!
接下来的一段时间,我会做两个专题的博客:
第一个关于slam求职经历和笔试面试问题的合集,包含问题和解答(可以一直更新);
第二个是关于2018年网易3D视觉岗位笔试题的全解析。 https://www.nowcoder.com/test/10780247/summary
感觉还是要花很长时间的,先在这做个记录,激励自己能在今年秋招前完成。对自己而言是相关知识的总结整理(不枉读了个盐…),对入门或求职slam的伙伴而言也是不错的参考。
其中部分文章首发于知乎,由公众号计算机视觉life授权转载,本文在参考这些优秀回答的同时对问题进行了解答扩展。如有侵权,请联系楼主。文中所涉及到的解析内容不一定都准确,如果如有不对请联系。
求职经历篇
1. 视觉SLAM方向找工作经历
https://www.cnblogs.com/xtl9/p/8053331.html
2017年一位博主的求职经历,其中也包括一些面试问题,简短清楚。从中你可以看到四个关键词,贯穿研究生阶段: 论文,项目,实习,秋招。 读研最好的时间规划,私以为是研二上的时候发了论文或者做了点项目,然后研二下的时候准备春招找实习(其中要准备算法与数据结构,以及slam专业知识)。如果论文写的慢那就是血和泪了……
2. 【泡泡机器人成员原创-SLAM求职宝典】SLAM求职经验帖
https://zhuanlan.zhihu.com/p/28565563
最早的一篇求职经验帖,是谢晓佳写的。硕士毕业于浙江大学,目前可能是在360做计算机视觉工程师吧。为啥这么熟悉,因为他和高博主要翻译了《机器人状态估计》一书,当然参与者还有很多。二来是因为浙江大学做slam相对有名。另一个原因是他的硕士论文——关于点线结合的双目视觉里程计写的很不错!
3. SLAM、3D vision求职经历
https://zhuanlan.zhihu.com/p/56617825
最新的求职经验帖,去年找工作的哈工大硕士,最后去了DJI吧。给了很多相关的公司,他的后续一篇知乎专栏见下面的问题合集,整理了很多题目,但是没有解答。
笔试面试问题合集
这一部分本来是想按照上述三位大佬的求职篇整理所遇到的笔试面试题目,但是考虑到有重复的问题,所有我就统一整理到一起了。 算是大杂烩吧,有些题目不是很具有代表性,算是普通的数学或者算法题,但还是有帮助的。 以下共分为A B C D E 五章,每一章有题号。
A 程序基础
涉及C++,算法与数据结构等
- 多线程的了解
- stl有什么?
- vector扩充方式,size与capacity区别
- 顺序存储结构有哪些?
- 左值引用与右值引用
- map与unordered map区别
- const与static、const在函数前与函数后区别
- 虚函数与纯虚函数区别,虚函数关键字
- 函数memcpy 、memset的实现,手撕代码
- 一行代码求平方根
- 各种排序时间空间复杂度(快排,归并,桶排,堆排),手撕代码
- 二叉树排序、堆排序、希尔排序、桶排序时间复杂度(重要!因此重复)
- 最长公共子串、最长公共子序列,手撕代码
- 树的DFS与BFS、树的遍历,手撕代码
- 对于n个实例的k维数据,建立kd tree的时间复杂度
- 哈夫曼树带权路径长度、哈夫曼编码
- 长度为n的list,删除、插入与随机访问的计算复杂度
- 在有序表中二分查找关键字所需进行的关键字比较次数是多少?
- 字符串子串数目
- 三维空间最近邻搜索的常用数据结构(八叉树、kd tree)
- HashMap和Hashtable的比较
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
B 数学
涉及概率,矩阵,数值计算,优化等
- 一层楼共有n级台阶,一次可以上至少一级但不超过m级台阶,求有多少种不同的上楼方案数。由于结果可能很大,你只需要输出结果对10007取模的值即可
- 拟合二维平面中的带噪声直线,其中有不超过20%的样本点远离了直线,另外80%的样本点可能有高斯噪声的偏移,要求输出为ax+by+c=0的形式,其中a>0且a^2+b^2=1
- 切比雪夫不等式、协方差与相关系数、各种分布、多元高斯分布
- 线性回归推导回归系数(y=kx,y=kx+b)
- 甲乙两人约好在某地碰面,时间段为10点到11点。若甲先到,最多会等待10分钟,10分钟内乙未出现则离开;若乙先到,最多会等待15分钟,15分钟内甲未出现则离开,请问两人见面的概率是多少?
- ABCDE5个人互相传球,由A开始第一次传球,经5次传球最后回到A的手上,其中A与B不会互相传球,C只会传给D,E不会传给C,共有多少种传球方法?
- 平均要取多少个(0,1)中的随机数才能让和超过1
- MLE、MAP和贝叶斯估计
- MLE,MAP,EM 和 point estimation 之间的关系是怎样的?
- 如何求解Ax=b (非迭代Cholesky分解、QR分解,迭代)
- 最小二乘封闭解与迭代解的取舍
- 梯度下降法、牛顿法、GN、LM,推导、优缺点
- 如何判断点在多边形内
- 一阶、二阶优化,Jacobian、hessian矩阵
- 1000个数的阶乘,求有多少个0
- 递推法求数学期望,反证法,数学归纳法等
C 图像处理
- 图像平滑算子、边缘检测算子
- 图像去噪滤波算法(高斯、均值、双边、Guide filter)
- 三个度量patch相似度的方法(SSD、SAD、NCC)
- 二进制描述子
- 计算描述子距离函数
- 描述一下SIFT或者SURF特征检测、匹配
- SIFT的4个不变性
- 特征点、描述子ORB、SIFT、SURF、BRIEF等等 。geometric invariance:平移,旋转,尺度……; photometric invariance:亮度,曝光……
- Mat实现、Mat类指针引用复制函数
- 颜色直方图统计,手撕代码
- 形态学操作,手撕代码
- 积分图,手撕代码
- 连通区域算法,给二值图,求出最大联通区域(用深度优先和广度优先算法,手撕代码)
- Mser、Swt检测
- 图像分割(Grabcut)
- 目标跟踪(相关滤波KCF)
D SLAM知识
这部分是本博客的重点,涉及到的也比较多,慢慢整理吧。
D1
- landmark参数化方式、对比,逆深度参数化;点线面因子图优化
- 滤波+回环(Trifo-VIO)
- outlier+鲁棒核、RANSAC
- EKF更新方程
- AR系统如何实现
- 介绍下VO
- Gridmap(网格标0、1)给定起点和终点,求最优路径(A*或其他路径规划算法)
- 相似变换、仿射变换、射影变换的区别
- E和F的区别,自由度计算
- 单应矩阵H的求取
- PNP算法、ICP算法(二维码、手眼标定)
- 闭环检测常用方法(orb、lsd、深度学习)
- 单目的初始化(拓展:双目,RGBD,VIO的初始化及传感器标定),其他:https://github.com/frobelbest/GSLAM
- 简述一下Bundle Adjustment的过程
- SVO、LSD中深度滤波器原理
- 说一说某个SLAM框架的工作原理(svo、orb、lsd)及其优缺点,如何改进?
- RANSAC的框架
- 位姿不同表示间的相互转化、旋转矩阵特征值和特征向量物理意义
- 真实世界到相机照片的变换可看成射影变换
- 直接法与特征点法的优缺点对比
- 常见滤波方法的对比(KF、EKF、IEKF、UKF、PF)
- 双目测距范围Z=fb/d。问题: 640*480,fov=90°,zmax=10m,最小视差为2,求使zmax稳定的最小基线长度(6.25cm)
- 特征点法与直接法误差模型、Jacobian推导
- 光流的假设、仿射变换、4种方法,svo采取的方法,优势何在
- MSCKF与ROVIO、MSCKF与预积分(structureless factor)
- 边缘化方式原理
- grid_map https://github.com/ANYbotics/grid_map
D2
- 相似变换、仿射变换、射影变换的区别
- Homography和Fundamental Matrix的区别,包括二者区别,几个自由度,为什么是这么多自由度,怎么计算,这些在多视图几何那本书中都有
- 视差与深度的关系。在相机完成校正后,则有d/b=f/z,其中d表示视差,b表示基线,f是焦距,z是深度
- PNP算法
- 闭环检测常用方法
- 给一个二值图,求出最大联通区域(可以用深度优先和广度优先算法,现场手写代码)
- 说一说梯度下降法、牛顿法、高斯-牛顿法区别
- 边缘检测算子
- BA算法
- SVO中的深度滤波器原理
- 说一说某个SLAM的工作原理(orb,lsd,svo,ptam)及其优缺点,如何改进
D3
- 连通区域算法(可以将 图像简化为二值图来考虑http://blog.csdn.net/icvpr/article/details/10259577)
- 实现RANSAC的框架(MRPT写得是比较好的,注意每次此迭代后需要更新
- 迭代次数。见libs/base/src/math/ransac.cpp)
- Homography和Fundamentalmatrix的性质与区别
- 简单实现cv::Mat()
- 简述一下GN、LM等优化方法的区别
- 推导一下卡尔曼滤波,描述一下粒子滤(http://blog.csdn.net/heyijia0327)
- 描述一下SIFT或者SURF特征检测,匹配
- 如何求解Ax=b (非迭代、迭代,其中非迭代的方法可以参考eigen手册,上面 列了一些(http://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html)
- 简述一下Bundle Adjustment的过程
- 对熟悉的某一个开源SLAM,简述其流程
E 机器学习/深度学习
可能会根据项目来问吧,slam的传统框架还没有改变,更多涉及到几何,优化,滤波,传感器融合等知识,目前和深度学习有些关联,比如语义地图/特征提取/单目深度估计等等,如果懂深度学习最好不过。 以下问题来自第三位同学的回答,选择性整理。
- IOU、NMS,手撕代码
- Kmeans伪代码
- SVM的优缺点
- 随机森林的训练过程
- 优化方法SGD、Batch GD、Adadelta、Momentum对超参数的敏感程度
- CNN中feature map维度计算、图中每一个特征点在原图的感受野大小
- Segmatch
- 目标分割、目标检测(one stage、two stage),YOLO三代的发展,小目标检测
- 模型压缩与加速 mobilenet v1、mobilenet v2、shufflenet
好了,这一篇记流水账,之后慢慢来回答。 真是多啊