視覺算法崗秋招總結

前言

  • 本人最開始對基於自動駕駛的計算機視覺十分感興趣,因此希望在讀研期間做自動駕駛感知算法研究相關的工作,但是無奈事與願違去做了與之毫不相關的計算機仿真。今年秋招的時候,還是希望做一些計算機視覺相關的工作,因此找的工作大多是計算機視覺算法工程師
  • 在找實習和秋招的過程中,其實還面了很多其他的公司,但是有的印象不是特別深刻了,這裏主要舉了自己印象比較深的例子,僅代表個人體驗和情況,僅供參考。
  • 在這裏順便推銷一波自己的github:https://github.com/littletomatodonkey和個人博客:https://littletomatodonkey.github.io/,歡迎關注和討論。

個人的準備與經驗

  • 因爲課題不是計算機視覺相關,因此我在3月份的時候就開始刷題和準備找實習了。

數據結構和算法

  • 我主要是用C++的,因此強推C++ primer,工具一般的書,主要是全,可以隨意查找,當時從頭到尾瀏覽一遍也是必不可少的;此外,Essential C++Effective C++More Effective C++都是很好的書籍,建議儘量都看一看。
  • 刷題的話,我主要是在LeetCode上刷題,最開始沒有定語言,所以用C#、java和C++都刷過,但是後來基本確定了用C++(還是希望自己的想法能和硬件結合並落地),一開始基本上都是不會,就不斷地看題解,去理解,後來就慢慢能習慣了(知道了題目的大概套路)。我建議在刷題的過程中,一開始毫無頭緒的時候可以看題解,但是同一類型的看了一些之後,就需要自己去嘗試解決,但是對於很難的問題,比如說可能半天或者一天都沒解決,那可以看看題解(不然太耽誤時間了…)。這方面的書籍的話,推薦劍指offer編程珠璣,都是非常經典的書籍。
  • 看書的話,建議還是算法導論,看起來內容和公式都很多,但是不管看不看懂,個人認爲還是需要有個大概的瞭解的,之後再刷題的時候遇到對應的算法,再去具體翻對應的章節,一遍看不懂就找博客看,然後再去看書上的描述,多看幾遍一般沒問題(我動態規劃那一塊好像看了10來遍…自己太菜了)。

CV相關

  • 最開始我找的是機器學習算法工程師,所以西瓜書看了兩遍(有些公式也是一直沒搞懂),後來發現雖然轉到了cv,但是像LR、SVM、RF這些很常用的機器學習算法在視覺中應用的也非常廣泛,對於面試也很有幫助,包括李航老師的統計學習方法,因爲比較精簡,我在面試之前也基本都是翻一翻。
  • CV方面的話,特別是CNN相關的,首推還是花書,很全面系統,雖然公式也是很多。
  • CV從分類、檢測、識別到分割、跟蹤、場景理解任務,都有很多經典的論文,建議先看一下經典論文,對一些有源碼的,建議跑一下源碼,看一下具體的代碼結構和實現細節,稍微有一些經驗之後,可以嘗試去復現一些比較經典的模型結構或者論文,一方面可以讓自己增加對論文的理解,另一方面也可以更熟悉編程語言和工具。數據集一開始可能有的比較難下載,可以從mnist或者cifar入手,之後再去跑Pascal VOC或者cityscapes等數據集。當然,如果在自己的項目中可以找到一些結合的點,還是建議自己實踐一下,給自己定個小目標,比如說發一篇論文或者專利等,這樣一方面可以對整個流程更加熟悉,從問題分析與模型構建,再到數據採集和處理、模型編程實現、調試、優化,到最後的成文,感覺對問題分析能力、代碼能力和論文撰寫能力都會有很大的提升,同時給自己定個目標也可以不斷push自己。
  • 關於工具和開發流程的話,建議還是選一套自己最熟悉和喜歡的,我個人對於開發的話,平時調試和快速實現時,用python和matlab比較多,到最後需要部署或者上線的話,一般還是會轉成C++;對於編程工具的話,jupyter notebooksublime textVS這些還是用的比較多的;對於常用庫的話,python一些常用的數值分析庫、opencv、mxnet、tensorflow這些都是比較常用的;關於編程的平臺,個人還是建議在linux下開展。
  • 關於機器學習和計算機視覺方面的書籍,其實感覺還是多翻翻,可能是自己不是科班的,總覺得缺點什麼,秋招準備過程中翻了:機器學習實戰python機器學習tensorflow實戰視覺機器學習20講python計算機視覺編程caffe深度學習等,最後發現其實大多都很類似。

項目

  • 如果課題與工作方向相關,建議定個小目標,比如說完成某個任務,然後發一篇論文或者專利之類的;如果無關的話,建議可以去kaggle或者天池上找一些比賽做一下,但是重點在學習,自己做之後,再和別人的思路和方法做一些對比,豐富自己的項目經驗。

實習面經

大疆

  • 這是我最開始投的公司,投的是機器學習算法工程師,但是因爲自己當時還沒有怎麼準備秋招,筆試就掛了,所以之後又補了大量關於深度學習和CV相關的基礎知識,發現以前真的是看的太粗淺了,很多細節都忽略了。

阿里(一面掛)

  • 阿里是當時找實習的時候投的,後來面試跪了,在秋招的時候筆試就沒過2333。下面主要是實習的時候的面經。
  • LR瞭解嗎?說一下它的loss function,使用極大似然估計說明一下loss function。
  • 說一下自己的天池的項目,用到的隨機森林,說一下工作原理,怎麼選擇分支的節點的,loss function是什麼,RF有哪些超參數需要調節,怎麼選擇RF中的樣本特徵,超參數怎麼調節的,怎麼將LSTM/RNN與RF中得到的特徵進行結合的
  • 還有沒有其他改進預測效果的思路
  • 結構化道路提取的過程中,怎麼結合多種機器學習方法的?怎麼處理圖像噪聲干擾的?
  • 體驗:感覺很在意細節,主要還是希望面試者對做過的東西非常熟悉吧,當時我也很清楚自己沒有達到他們的要求。。。

騰訊(一面掛)

  • 做一下自我簡介(項目等)
  • 說一下結構化道路提取的整個過程,怎麼將各種機器學習算法結合在一起的
  • 結構化道路提取時,圖像噪聲怎麼去除的,同時怎麼去除去除噪聲的?有沒有考慮使用邊緣信息?
  • 寫一道編程題:把一個二叉樹按照中序遍歷的方式轉化爲雙鏈表。
  • 總結:這也是找實習的時候面試的,感覺項目方面回答的還不錯,但是編程題沒寫出來,直接就掛了,後來秋招筆試也掛了。。

京東

  • 這也是找實習的時候面試的,連續面了2個半小時,猝不及防,也是掛了。
  • 感覺京東當時在C/C++基礎方面問的比較多,面試官說項目比較缺人,希望面試通過的話可以立即入職輸出。

一面

  • 自我介紹
  • 說一下C/C++中static的用法
  • 定義一個函數指針的數組
  • 做幾道編程題:鏈表的順序變換,貪心算法

二面

  • 說一下對機器學習的理解(宏觀的理解)
  • 其實還有半監督學習,DL、RL等,(翻了我的博客)說一下對RL和auto-encoder的理解(我只是記過筆記,沒有深入研究。。。)
  • 說一下你理解的隨機森林
  • 推導一下LR的loss function
  • bagging的全稱是什麼,除了SGD,還有哪些迭代優化的方法?(牛頓法之類的,我又沒答上來。。。

三面

  • 介紹hashmap,在用戶和開發人員之間怎麼去定義接口。
  • 定義並實現鏈表的基本操作。

地平線

  • 這是當時找實習的時候面的,後來給了轉正offer,也算是秋招第一個offer吧,感激。
  • 推導KCF。
  • 推導SVM與BP,寫一下LR的loss function。
  • 說一下自己對目標檢測與跟蹤這方面的理解,自己使用過哪些算法等。
  • 算法題:排序,找到數組中的重複數字。

秋招面經

roadstar.ai

  • 體驗:問的問題很有深度,在寫代碼時,也會非常注重細節。

一面

  • 說一下KCF項目裏面主要用的平臺,有哪些硬件設備,自己做的這個部分的輸入輸出是什麼,檢測用的模型是什麼。
  • 針對跟蹤丟失的問題,目前有什麼比較好的解決方案
  • 項目中多目標跟蹤過程中主要算法流程和使用的方法,運動估計說一下。
  • 怎麼去解決遠場景中的物體的跟蹤不準確、噪聲較大的問題。
  • 多目標跟蹤使用的算法平臺。

二面

  • 說一下語義分割的key factor:我自己說了data augmentation、轉置卷積、孔洞卷積、encoder-decoder,面試官說他做過這個,主要有以下幾個key factor:data augmentation、batch size要設置得大一些(resize或者crop減少一張圖像的大小)、OHEM(我自己用的focal loss,但是他說focal loss效果不明顯)。
  • 說一下KCF
  • 說一下SVM、KKT條件。
  • 有什麼想要了解的

三面四面

  • 這是兩輪coding,主要也是dfs+剪枝相關的思路,包括雙向鏈表類的實現、不使用虛函數實現多態等,感覺網上都找不到類似的例子。

依圖科技

  • 體驗:依圖科技的面試真的很難。。。但是面試官給人的印象還是很好的。

一面

  • 主要是說項目相關的,因爲面試官在cv方向做得稍微少一些,所以寫了一道編程題,就是生成一個有規律的矩陣,如下圖,就不做解釋了。

    1 2 6 7
    3 5 8 11
    4 9 10 12

  • 分析了一個關於數論的題目,題目太長,有點記不太清了,反正最後沒寫出來。。

  • 項目的話,因爲面試官沒做過,所以問了指標相關的問題,然而我的項目裏面並沒有groundtruth。。。。感覺之後這一輪很迷,我好多都沒答上來,竟然還過了。。。

二面

  • 項目,主要是多目標跟蹤的流程介紹。
  • 視頻分割加速的原因和做法(單幀估計的跳變以及速度較慢)
    8 寫了2道編程題,有一道是找到一個樹中的沒有直接父子節點關係的一個集合,求滿足這樣條件的集合的節點和(每個節點都有一個值)的最大值,還有一道忘了。。。

三面

  • 手推一下kcf(還好提前看了一下。。。)
  • 說一下基於檢測的多目標跟蹤和kcf的一些異同點
  • 介紹一下其他的項目
  • 代碼題:先說思路,再開始寫,具體的題目給忘了。。。
  • 介紹一下自己做項目的時候主要用到的框架和開發環境等。
  • C++容器和時間複雜度、繼承和多態、虛函數。
  • 說一下自己感興趣的方向。

百度

一面

  • 說一下目標檢測的基本框架,爲什麼RPN是有用的,one stage與two stage的區別。
  • 編程:字符串解析,寫了3道題,感覺主要是考察hashmap和C++的使用。
  • 語義分割常用模型,語義分割應該怎麼做才能提升效果。

二面

  • 2道編程題,也是字符串解析,主要還是hashmap+細心即可。
  • hashmap在設計和使用的過程中需要注意些什麼。
  • 推導一下?卡爾曼濾波(項目中用到的)和SVM,說一下SVM中對偶問題和KKT條件。

三面

  • 這一面主要是說一下宏觀的東西,從自動駕駛的方案到自己做過的一些項目,自己負責的主要部分,都說的比較多,感覺面試官主要還是想知道自己有沒有負責過完整的項目。

美團

一面

  • 說一下語義分割的基本模型,然後寫了2道算法題,感覺面試官對語義分割不太瞭解,可能他更偏向於自動駕駛的定位方向吧,所以沒有問太多時間。

二面

  • 推導KCF,說一下匈牙利算法是怎麼匹配的,寫了1道編程題,數組相關的。

三面

  • 手寫連通區域分析算法,寫完之後問有沒有改進方法,我沒有答上來(之前覺得兩遍掃描法是最優解來着)。
  • 說一下多目標跟蹤在誤匹配、跟丟等異常情況下的處理。

海康

  • 海康總共就一輪技術面試,沒想到比較幸運,第二天又加面了一輪。

一面

  • 語義分割模型,說一下fcn、segnet、unet、deeplab。
  • 矩形IOU計算,任意旋轉的矩形的IOU計算(這個當時沒有想出來)。

加面

  • 主要就是偏宏觀的東西,自己做過的項目現在重新做,有什麼可以改進的地方,自己之前做過的沒在簡歷上寫的東西等。

虹軟

一面

  • 各種邏輯題和代碼題,代碼主要是堆棧之類的使用。

二面

  • 推導SVM。
  • 說一下RCNN流派物體檢測,訓練方法以及一些細節。
  • deeplab系列都介紹一下。
  • 多目標跟蹤中針對異常情況的解決方案。
  • 項目中多線程的模塊設計方案。

圖森

總結

  • 做過的東西一定要非常清楚,從公式到優缺點,到改進方案等。
  • 簡歷很重要,一定要花心思去做,可以找靠譜的師兄師姐幫忙把關。
  • 千萬不能浮躁,很多算法我第一遍沒看懂,後來多看幾遍好像也都差不多理解了(當然也都是一些比較常用的算法)。
  • 自己最心儀的公司一定不要貿然去面試,一定要做好充足的準備,可以先拿不太想去的公司練練手(雖然好像有些不厚道)。
  • 基礎知識很重要,基本知識的公式推導和概念一定要知道,常用的模型及其優缺點要了解。
  • 建議在準備秋招的時候多看看一些新的比較好的論文,對一些前沿性的工作要有一些瞭解,有些面試官如果對你很感興趣,會問的比較多,在簡歷上的東西已經十分熟悉的情況下(保證深度),自己的知識體系也要儘量廣一些。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章