自動化專業如何轉SLAM或機器學習崗?

題主是北京某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,一起探索計算機視覺新世界~早就是優勢,學習切忌單打獨鬥,這裡有教程資料、練習作業、答疑解惑等,優質學習圈幫你少走彎路,快速入門!


分享到:


相關文章: