2017年10月7日 星期六

UMich Robotics #06: Perception in Self-Driving Car 面試經驗分享

今年2017暑假的時候,我去了Q公司實習,實習內容與無人車無關,但是我的興趣在computer vision和perception,所以我一直有在看公司裡面有甚麼我有興趣的部門,結果幸運的獲得了面試無人車部門的機會,所以想記錄一下面試過程。我面試的部門在research lab下,所以面試內容可能會跟一般部門稍有不同,然後職稱是system engineer,不是software也不是hardware,其實同部門下還有software engineer,但是做得事情不一樣,system engineer是著重在演算法部分,可能寫python或是matlab就好。Software engineer是負責把system engineer決定要用的演算法用C++ implement出來,所以software engineer在面試時問的問題會偏向coding(不過這裡僅供參考,因為我沒有面試software engineer)。System engineer的問題則會偏向你做過的project,project裡面用到的數學公式可能會叫你推導。

Phone Interview
當初我以為會直接onsite interview,畢竟我人都在公司了XD,但沒想到還是先有一關phone interview,我想可能是想先過濾一次,如果不適合就也不用浪費時間onsite interview了,其實phone interview是直接打公司內部分機過來面試,面試時間大約45min~60min,一開始先叫我稍微自我介紹一下,還有講一下目前Intern在做甚麼?但我實習的部門其實跟無人車一點關係都沒有哈哈,所以就只有簡單帶過。我履歷上列了4個projects,都是和computer vision或是perception相關的,面試官就叫我一個一個講一下project內容,這時候他還不會問太多技術上的問題,主要問題都是就他不清楚的地方提問,然後最後問我有沒有問題要問,到這邊就結束了。其實算是蠻輕鬆的,只要把自己的履歷講清楚就可以了。

Onsite Interview
因為intern快結束了,所以很有效率的隔一星期馬上就onsite interview了,面試時間是我離職前一天和離職當天XD,我離職當天識別證都繳回去了還跑回公司去面試。Onsite interview原本要面試4個人,但是有一個人好像出差了所以變成面試3個人。

1st Run (~60min)
第一天面試了兩個人,第一位面試官一樣叫我簡單自我介紹一下後就直接進入主題,因為他看我履歷上有用deep learning做image segmentation,就問我如果他現在有一個簡單的場景要辨識,只要區分街道跟不是街道就好(classification problem),我會怎麼設計neural network,我就開始在白板上畫出neural network,並講解每一層分別用甚麼還有每一層的output number,不過這邊有被他糾正說我用的output number太大了,後來發現他說的沒錯,因為他要辨別的場景很簡單,不需要用到這麼大的output number。他接下來就針對deep learning的很多觀念提問,這部分我覺得我回答得還可以,最後他問我用甚麼tool寫,我說Caffe,他說他都用Tensorflow,很想知道PyCaffe怎麼寫的,就叫我在白板上用PyCaffe寫出怎麼train neural network,我一聽到就囧了,一方面是過了有點久,一方面是誰會記得PyCaffe這麼多function的名稱......,我就只有寫pseudo code,然後跟他說我真的忘記那些function名稱了,最後他也因為還有meeting,所以就到這邊結束了,出來後很懊悔沒有去複習PyCaffe......。

2nd Run (~70min)
隔了一個小時左右又接著第二位面試官,原來他和上一位面試官是同個team,所以他們有分工好分別要問的部分,一樣先簡單自我介紹後,他先問了我如何從兩張不同角度拍的照片中算出depth,我之前沒做過這個,但我嘗試講一些我的想法,最後他說沒關係可以回去再想想這個問題XD。由於我project有做visual odometry,所以他叫我解釋一下流程,然後在白板推導公式,還好我知道這裡可能會考(因為前幾次經驗發現大家很愛問這個),所以我事先有準備。接著他就拋出一個題目:要如何判斷一個點在rectangular bounding box裡?一開始我以為是正的bounding box,我就說可以用座標判斷是否在中間,但他說這個bounding box是可以任意旋轉的,我現場想了一下後,提出可以用那個點到bounding box四點所圍出面積來判斷,接著就這個問題一直延伸,這真的是考臨場反應,因為我之前沒在做detection的問題,還好現場有想出來。最後閒聊了一下還發現他知道我mentor lol。

3rd Run (~75min)
隔了一天終於來到最後一輪,他其實就是一開始跟我電面的人,一樣簡單自我介紹後,又問了我visual odometry的東西,哈哈昨天才剛推導過記憶猶新。接著看到我之前做3D voxel semantic segmentation,叫我在白板上畫一下流程,把neural network大概畫出來,然後跟我討論了一下3D環境會遇到的問題,例如voxel表示法會有大部分區域都是空的問題,其實花了很多computation在算一些沒意義的區域。結束前他說要考一題coding problem,聽到時我內心大驚!如果有看我上一篇文章就知道我根本沒準備刷題......(UMich Robotics #05: 大CS時代我是否要轉CS?之我找到Full-Time Job了!),不過還好題目蠻簡單的:output all of the prime numbers from 1 to 100,他問我平常用甚麼語言,我說python,於是就在白板上邊講解思路邊寫,其實我的code應該不是100% bug free,但是他理解後就說可以了。之後就邊聊天邊送我出去,到這邊終於解脫了XD

最後
因為在準備面試前,常常上網都找不到相關領域的面經,所以想把自己的經驗分享出去,希望在這個大CS時代下,能幫助到一些跟我一樣對computer vision和perception有興趣的人。

沒有留言:

張貼留言