由于不方便放链接,更好的阅读体验请查看:自动化专业如何转SLAM或机器学习岗?
本文来自知乎上的同名问题,原文链接:
https://www.zhihu.com/question/266685012/answer/336327001
题主是北京某985理工类高校自动化专业本硕(硕士专业是控制工程),刚刚毕业半年左右,第一份工作是在一家创业型机器人小公司做控制工程师。工作内容很杂,主要是一些stm32开发和信号处理之类的工作,这家公司管理混乱,而且公司缺乏技术上经验丰富的老员工,作为一个刚刚毕业的新人,感觉完全学不到什么东西,成长性不足,而且分配的工作也不是自己兴趣所在,于是我工作了半年不到就辞职了,打算趁着过年准备一下换一个靠谱点的工作。主要想转到slam方向和机器学习方向。
我自己本身的情况是这样的:
项目经历:
没有实习经历,自己在实验室的项目基本上和slam和机器学习没关系,主要是调PID什么的,纯工程任务。本科毕设是用支持向量机做信号识别,但是本科毕设非常简单。
个人知识储备:
1、机器学习这块我是一直从本科就在学,吴恩达的课看过前面一半,《统计学习方法》全部看过一遍,里面的算法也大都推过一遍。周志华的西瓜书也看过。但是没有实际的项目经历(不知道泰坦尼克幸存者预测和TensorFlow手写数字识别算不算)。
2、slam这一块我是自学的《视觉slam十四讲》一书,原理都看懂了,书上的代码的大约70%都自己亲手敲过一遍,orb-slam2论文看过,代码细细读过。
请slam和机器学习行业的职场老司机解答一下我的问题:
我这样没有实习经历和项目支撑的情况下,转去slam或机器学习岗位,是否能够被公司接受呢?或者说我要达到什么样的程度,才能被相关公司接受?会有公司愿意接受从0培养新人吗?(我算从0.5吧)
职场老司机可否给一些转行的可操作的建议呢?
本文对几个优秀的回答进行了整理,解释权归答主所有。如有侵权,请联系删除
以下观点并不代表计算机视觉life观点,仅作为参考。
半闲居士:
在下也是自动化系毕业,好像并不存在转行一说,自动化搞控制、搞机器学习或者slam都很正常。
机器学习应用范围宽,门槛低,目前学习资料很丰富,学起来并不费劲。相比来说slam资料少很多,书籍还都是大部头的书,学起来还是挺花时间的。slam背后牵扯到的数学知识比较广,能吃透并不容易(deep learning除了梯度下降之外还有别的数学吗)。
slam岗位目前看来还是不太招的到人的阶段。虽然有人觉得Slam在理论上已经解决了,然而现实是:
大部分人从零开始写一个slam程序,多半写不到现在开源方案的水平;
开源方案不满足需求的情况下,大部分也不会改(对方案的了解并不深入);
slam应用主要在自动驾驶、机器人、AR/VR上。国内自动驾驶近年很活跃,BAT和各车厂都有布局,创业公司有名一点的都可以数出30多家。机器人的话,园区物流需求也比较明显,京东、菜鸟以及许多创业公司都在做,ARVR不太好说,内容和生态能不能起来还是个问题。在你有硕士学位情况下,应该不难找到对应岗位。如果你自己能够写出完整一套slam,或者对某个开源方案有很深入的理解(看的懂,改的动),多数公司都应该会要你(据我了解许多公司里的人员对slam了解也是这个深度)。如果你的理论基础再扎实一些就更好。
作为建议,你可以尝试自己写个简单的slam project,在kitti,euroc等数据集上与开源方案对比测试后,把结果放到简历里,会让你找到合适岗位的几率增加不少。
Pickles Husky:
SLAM方向的博士生,最近也在找工作,简单说两句。
首先澄清一点,SLAM和机器学习完全不是一个量级的领域。机器学习对于很多公司和业务都是非常基础的工具,而且这一趋势越来越明显,以后非常多的岗位都需要掌握机器学习的技术。机器学习跟很多领域都有交叉,比如现在在SLAM中应用机器学习的地方也越来越多。不客气的说,掌握机器学习和数据处理技能的重要性,等同于掌握领域内的重要编程语言,比如C++。
而SLAM的应用面窄的多。SLAM的主要需求现在在机器人、自动驾驶和ARVR领域,如果SLAM是你的focus的话,你的就业面仅限这些行业。
而且说的不客气一点,就算在以上这些领域,SLAM也不是驱动这些应用的最核心技术,SLAM仅仅作为一个提供定位与建图的子模块而已。当前很多应用中的SLAM问题尚未完全解决好,大家在SLAM上花很多精力解决问题;而一旦SLAM问题得到比较好的解决,SLAM将只是系统中提供定位以及建图的工具而已,大家的精力将更多的放在更重要的问题上,比如自动驾驶中的perception、semantic information以及behavior prediction问题、机器人领域中的manipulation问题,等等。虽然我自己是做SLAM的,但是不负责任预测SLAM领域的热度很难长时间持续下去,至少以十年量级来看以后衰落是必然的。而机器学习与数据科学现在的机会以及未来的潜力都是很难限量的。
讨论完SLAM这个行业,再来看一下题主的背景。SLAM技能掌握上的特点与机器学习有点像,就是这个领域显性门槛比较低,但是隐形门槛比较高。down一些opensource的code下来大家都可以跑比较好的demo,就像机器学习里面大家顺着tutorial去跑mnist的example非常简单一样。但是opensource的东西没有应用背景,在真实的应用场景下出现一定比例、甚至大面积不work是非常常见的。当你真正到了企业里面,企业需要你做能够在应用场景下稳定工作的SLAM模块,这时候无论是自己从零写,还是改opensource,你都需要有很好的对SLAM原理及系统的理解,来调整系统去处理一些fail的cases。能够为企业处理这样的问题,一两年的实际项目经验加上相当量的阅读(经典的大部头比如MVG和paper,至少是传统的paper)是必须的。
我非常不看好题主在家里自行修炼。家里能做的SLAM项目一般都没有业界背景(这一点比机器学习条件更恶劣,机器学习起码存在kaggle这样“接近于”业界的项目可以做,SLAM除了kitti外别的和业界完全不沾边),而业界非常看重实际相关的项目背景。而且企业从零培养新人的意愿非常低,首先公司招你就是希望你有实际产出,而不是花钱培养你;其次如之前所说SLAM方向培养时间还是偏长的。
如果题主执意要走以SLAM为核心的技能路线,有两条可能的路题主可以考虑:1. 读相关方向的硕士后者博士,毕竟研究生招零基础学生的概率远高于企业。2. 走开发线路,需要题主有很强的C++背景(SLAM开发中C++目前是绝对主流),然后以软件开发的身份进入相关公司SLAM的团队,在有经验的人指导下进行SLAM的软件开发,这是我能想到的能在企业里面学习SLAM的唯一渠道吧。。。
CLEMENT HUANG:
我司正在找一名自动化背景, 愿意学习SLAM,编程能力强的工程师。坐标上海。所以看到这个问题, 忍不住来回答几句。
先介绍本人, 自动化专业本硕,学校都是985,在国企呆过三年, 外企12年,创业2年半。所以对于控制专业的学生的困惑应该是很有切身的体会的。控制专业的学生学的东西很多,但是到了工作中总有一种有力使不出来的感觉,关键是自动控制的应用是太广泛了, 运动控制, 拖动, 过程控制, 微机原理,DSP或者算是Soc(System on Chip), 电力电子, 各种编程语言,软件工程,到了研究生还要学数字信号处理, 各种优化控制算法, 甚至统筹学, 包括最近火起来的机器人, SLAM, 人工智能, 博弈论。你说一个在学校学校的学生,或者刚毕业三年的新人到哪里摸得到门,行业里的随便一个小障碍就可以阻挡住一个信心满满的年青人,更别说如果单拿出一项武器来, 我们还干不过别的专业。比如电力电子功率电路, 肯定干不过学电力系统的, 软件干不过计算机的,算法没应用数学的强, 搞通信和通信工程的也有差距。即使是电机控制, 要知道高校也有专门的电机系。控制专业的学生可能学了一年的电力拖动没见过真正的电机,更分不清直流,交流, 直流无刷, 交流永磁,交流同步。然我见过无数自动化的大牛,后来在选择的方向(非自动化)上都干成了最优秀,那是在开始的三年甚至整个职业生涯花了更多的时间, 精力,伤了无数的脑细胞才取得的成就。
回到正题, 我能给的建议是, 找到一个适合自己的方向和平台, 保持旺盛的学习欲望,扎下来干个三年,短期的职业空窗期是可以接受的,但超过半年以上,基本上很难得到面试机会,公司评估一个这样的候选人风险太高。并且你在家里学习和在工作中学习完全是两回事, 读了多少书不代表你已经入了行。
不要给自己太窄的定位, 真正研究算法的人在一个公司里是少之又少的, 算法需要自己去用代码实现吧。要会测试吧,要能理解底层给你的接口吧。还要懂一些行业背景应用吧, 我只能说学习才刚刚开始。
刘畅:
知乎小透明首答,想借贵宝地写下给新进入SLAM 领域或者犹豫是否进入SLAM 领域的在读研究生(注意,是研究生,为什么?因为其实研究生做SLAM 时间还是挺紧的)一些忠告:
1.能不碰实体机器人就不碰实体机器人
2.找好部分开始做
因为SLAM 范围太广,涉及内容也很深,学校又是一个要求创新点的地方,所以在读完十四讲(已被圈内封为SLAM 圣经,感谢高灯塔)之后,跑完全书的大部分代码的时候,不要说,啊~好兴奋~我已经全部掌握SLAM 啦~而是冷静下来,仔细想一想,我想研究哪部分,是基于多视图几何的前端?还是对优化问题比较感兴趣,想从概率机器人和凸优化两本书入手?又或者是我想用机器学习做做回环?还是说我要摒弃现有的一套方案直接用深度学习来个端对端的VO(这个已经有了,一个比较出名的大学做的,但是想做深入的研究应该也是可以的吧),带着问题做研究,把问题抽象。如果你只是要优化下定位精度,真的不用非要找个实体机器人,学好使用数据集测试自己的方案,将更多的精力放在C++上和优化的方法上(尤其是对于答主这种本来是机械的,编程也就是C++ primer 第一章的水平~).今天先答这些吧,太晚了,以后有时间接着答。
slamer:
本人恰好也是自动化,刚毕业就进入一家机器人公司,做定位制图相关工作,机器学习稍微了解,主要说说slam。以上背景
slam方向是工程与科研相结合学科,在有很好的数学基础前提下也需要很强的工程(尤其是c++)能力。如果题主想从事slam方向,首先可以先了解目前比较流行的slam解决方案,阅读相关开源项目,比如激光slam中gmapping、cartographer,开源项目不仅能让你对slam有一个宏观的了解,也能够学习好的代码风格和代码技巧。其次,学习相关理论知识,像非线性最小二乘法、卡尔曼滤波、粒子滤波、数值优化、自动求导等,有了这些基础,slam入门才刚刚开始。如果想要进阶,尝试结合自己学到的理论知识,写一个slam,这个时候对这些理论知识会有比较深刻的认识,写工程的同时,你可能会发现有些书本中学不到的东西,比如调参,掌握调参技巧,好的参数就像整容手术,能让机器人很好的work,后面要跟紧时代步伐,多阅读slam相关paper。最后做slam不要急躁,在slam工程中会有很多小问题,保持好心态,祝你好运。
欢迎关注公众号:计算机视觉life,一起探索计算机视觉新世界~早就是优势,学习切忌单打独斗,这里有教程资料、练习作业、答疑解惑等,优质学习圈帮你少走弯路,快速入门!