「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

dicksonjyl560101發表於2019-07-20


https://www.toutiao.com/a6695518937334940174/



「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

文/編輯 | 言有三

一直有同學希望我寫寫面試相關的東西,一直沒寫。我們不會開相關的板塊,因為沒有標準,容易引起爭議,而且可能會加重大家的浮躁和焦慮。

不過關於面試,有三還是有一些話可以說的,下面分兩部分道來。

1 老闆喜歡什麼人

假如我是老闆或者誠心為公司招聘優秀人才的面試官,我會喜歡擁有以下特質的人。這裡說的是招聘一個演算法工程師,一個能夠為公司創造收益的人,簡單起見就不分社招校招。

1、忠誠度,這很重要。一個不忠誠的員工,能力再大,也不能要。所以如果看到一份簡歷滿滿當當的都是跳槽和實習簡歷,兩個月換一個實習,半年換一份工作,除非你說出很充分客觀的理由,否則我可能不會通過這份簡歷。

2、編碼能力,這是一切的前提。前面說了,我們這裡要招聘的是一個計算機視覺領域(CV)演算法工程師,招進來是要幹活的。公司不會招聘一個只會Matlab或者python都用不熟的人來做專案開發,做純演算法研究都不行,一個不能實現自己想法的牛人我還沒見過。見過的牛人不僅演算法好,程式設計能力也強大。

說起程式設計能力,有幾點基本要求:

(1) linux得熟。

現在不是若干年前開源專案還不多的時代,大家還在Windows下面吭哧吭哧用Matlab和VS模擬,都9102年了,Linux都不熟,效率如何讓老大放心。

(2) python得熟,c++得會。

如果連python這樣簡單的語言還用不熟,那真是無話可說。c/c++ 這是一門基礎課吧,理工科的學校沒開過應該很罕見,CV領域的工業界部署和演算法優化都離不開C++。

(3) 程式設計習慣得好。

雖然說程式碼寫的爛,不會真有同事拿gun突突突你,但是好的程式設計習慣不僅僅提高效率,而且看著也舒服,不會被別人鄙視。

這裡說的習慣包括: 多寫寫類和函式封裝,組織好專案目錄結構,好好命名 等等。可以不會寫多麼牛逼炫酷的程式碼,但是要 保證程式碼具有良好的可擴充性,方便他人閱讀移植 ,具體要求以後再說。

3、演算法基礎,這決定了潛力。沒做過檢測?沒事,沒做過分割?沒事。邊做邊學,快速跟進就是了,這本就是公司開發的常態。

人的精力有限,沒做過的多了去了。但是如果CNN的一些基礎傻傻說不清楚,影象的基礎概念一問三不知,這就有事了。因為你交給他一個專案,可能會犯一些低階錯誤而不自知,老大心裡也慌,還要陪著檢查和普及基礎知識。

以上就是三個基本要求,每一家公司肯定都是這樣要求的,我覺得如果通過了這三個考驗,那至少就是一個可以培養的候選人,我會願意給他機會進入下一輪的PK。

踏實(基礎好),靠譜(穩定),能幹活(能寫程式碼),這3個基本前提比什麼都重要,其他的都可以在專案學習。

2 準備哪些知識

接下來就該說說具體怎麼辦了,這就是我開 《AI修行之路》 這個專欄的原因了,如果你有耐心,不妨接著看下去,我們也是再重新回顧總結一下之前的文章,每一篇文章的開設都有充分的理由。

1、為什麼要用Linux

在以前,你可能覺得Linux並非剛需,用著自己的Windows電腦,也不需要與人共享作業系統,硬體和磁碟。但是如果你們團隊一起使用伺服器,不可能不用Linux。

所以這是對還沒有在Linux上面真正進行日常開發工作的小朋友說的,要正式進入AI行業發展,Linux是必備和唯一的作業系統,“軟”兵器,我還沒有聽過哪家公司在Windows或者Mac上面訓練模型的。

「AI白身境」深度學習從棄用windows開始

2、使用shell,vim,git提高開發效率

程式設計習慣,工作效率很重要,很重要!Linux下一個熟練的工程師,會比Windows下工作效率高很多,提高寫程式碼效率可以從終端多工管理,熟練使用shell命令,熟練使用vim等開發環境,熟練使用git命令等地方入手。

shell命令是Linux的操作基礎 ,也是學習使用Linux的開始,而慢慢熟悉高階的shell命令在將來的工作中會帶來很大的效率提升。

vim是Linux下最常用的編輯器,從小白到高手都可以使用,而它的 列編輯,查詢替換,自動補全 等功能都是效率的保證,或許從visual studio等環境切換過來的同學剛開始會有些許不適應,但是時間久了就會越來越明白VIM的好。

git是程式設計師必備的素養 ,慢慢學會維護幾個自己的程式碼庫,等到將來出問題的時候就明白了。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」Linux幹活三板斧,shell、vim和git

3、python基礎和程式設計習慣

在機器學習領域,python可謂是一騎絕塵,學習python需要掌握好基礎的語法包括函式,類設計,掌握大量的開源矩陣庫Numpy等。

python簡單嗎?簡單。真的簡單嗎?看看大神們寫的專案吧。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」學AI必備的python基礎

4、影象基礎

深度學習有一個最大的問題,就是太好用了。導致什麼影象基礎和傳統演算法都不需要懂,也能專案做的風生水起。

但是如果沒有好的影象基礎,總有一天遇到CNN解決不了的問題,或者無法單獨解決的問題,就不知所措了。很多的新技術都是從傳統演算法中獲得靈感或者相互結合的,不懂影象基礎,就彷彿埋了一顆定 時  炸 彈 ,一般沒事,炸了就炸了。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」深度學習必備影象基礎

5、OpenCV基礎

如果說影象處理領域有什麼庫是繞不過去的,那一定是OpenCV,這一個開源計算機視覺庫堪稱最優秀的計算機視覺庫,不僅可以學術和商業免費使用,而且跨平臺,高效能。需要掌握的基礎內容包括:如何部署,基本資料結構的熟悉與使用,基本模組的瞭解。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」搞計算機視覺必備的OpenCV入門基礎

6、CMake編譯

python是指令碼語言,而當前大量的AI演算法都部署在移動端嵌入式平臺,需要使用c/c++/java語言,g++,CMake和Makefile正是Linux下編譯C系程式碼的工具。

實際上一些python,matlab開源專案也需要預編譯,更多的等到了工作崗位自然懂。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」只會用Python?g++,CMake和Makefile瞭解一下

7、爬蟲基礎

深度學習專案開發中最重要的是什麼,當然是資料!實際的專案你經常沒有足夠多的資料,這個時候就需要自己去想辦法獲取了。

網際網路是一個什麼資源都有的大寶庫,學會使用好爬蟲,你將可能成為時代裡最有“資源”的人,這也很可能是專案成功的開始。

本文最後的一個實際專案就需要用到。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」學深度學習你不得不知的爬蟲基礎

8、資料視覺化

爬取完資料之後就應該進行處理了,一個很常用的手段是資料視覺化。在深度學習專案中,常需要的資料視覺化操作包括原始圖片資料的視覺化,損失和精度的視覺化等。

除了對資料視覺化,我們還需要對模型進行視覺化,方便除錯和感知。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」深度學習中的資料視覺化

9、數學基礎

雖然對於大部分來說,做專案不需要多麼強悍的數學基礎,但是你會需要看懂別人論文,也會經常需要進行簡單的推導和演算法改進。

從線性代數,概率論與統計學到微積分和最優化,都是需要掌握的。不過數學的學習是一個非常漫長的過程,不要急於求成,也不是靠跟著視訊或者書本就能完全學會的,重要的是用起來。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」入行AI需要什麼數學基礎:左手矩陣論,右手微積分

10、計算機視覺研究方向

學習和做專案都需要一個方向,在前面這些基礎都掌握好了,就要好好了解一下計算機視覺的各大研究方向及其特點,方便自己選題和專案方案定型了。

從影象分類,分割,目標檢測,跟蹤,到影象濾波與降噪,增強,風格化,三維重建,影象檢索,GANs,相信總有你喜歡或者專案涉及的。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」一文覽盡計算機視覺研究方向

11、應用方向

學習最終是為了解決實際問題,AI已經滲入到了我們生活的方方面面。從自動駕駛汽車、影象美顏,到聊天機器人,金融支付等,因此好好了解下當前AI在各大領域的應用沒錯的,這次就不僅僅限於計算機視覺了。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

https://dwz.cn/Gj18HPHd

12、認識學術大咖

要想真正融入行業圈子,緊跟技術發展,就必須要時刻了解大佬們的狀態,他們就是行業發展的風向標。

不管是學術界還是工業界,不管是老師傅還是青年才俊,讓我們一起見賢思齊吧。

我們開源了大佬研究方向的專案,歡迎follow。


https://github.com/longpeng2008/Awesome_DNN_Researchers

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI白身境」究竟誰是paper之王,全球前10的電腦科學家

13、人工智慧簡史

基礎打好了,接下來就是正式學習AI相關的知識,不管是在哪個課堂或者教材,都是讓大家先了解先賢們。

從圖靈與機器智慧,馮諾伊曼與類腦計算引發的人工智慧啟蒙,到三次浪潮的曲折和技術的成長史,值得每一個從事該行業的人閱讀。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」從3次人工智慧潮起潮落說起

14、神經網路基礎

深度學習研究問題的方法就是仿造大腦,根基是神經網路。從感受野,到MP模型,到感知機,到反向傳播,要很熟悉全連線神經網路的劣勢,卷積神經網路的特點,核心技術和優勢,這是學習深度學習最重要的基礎。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」從頭理解神經網路-內行與外行的分水嶺

15、瞭解領域的突破

既然學深度學習,就必須要了解深度學習的重要進展。

在前深度學習時代,視覺機制的發現,第一個卷積神經網路Neocognitron的提出,反向傳播演算法的流行,促進了LeNet5和MNIST資料集的誕生。

隨著新理論的成熟,大資料的積累,GPU的普世,以卷積神經網路為代表的技術在影象分類,目標檢測等基礎領域取得重大突破,隨著AlphaGo的成功同時在業內和業外人士的心目中種下了深度學習/人工智慧技術的種子,從此煥發勃勃生機。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」近20年深度學習在影象領域的重要進展節點

16、啟用函式

深度學習的機制模仿於人腦,人腦的細胞接受刺激從而產生活動需要一定的閾值,這便是啟用函式根本性的由來。

啟用函式肩負著網路非線性表達能力的提升,從早期平滑的sigmoid和tanh啟用函式,到後來的ReLU和各類ReLU的變種(LReLU,PReLU,RReLU,ELU,SELU,GELU等等),Maxout,研究者一直試圖讓網路擁有更好的表達能力。

隨著技術的發展,利用增強學習等演算法從函式池中學習新的啟用函式如swish等,成為了當下的研究主流,啟用函式也走上了資料驅動的道路。

啟用機制看似簡單,實則不易,大家一定多跟進了解了解。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」啟用函式:從人工設計到自動搜尋

17、引數初始化

引數初始化,一個看似很簡單的問題,卻實實在在地困住了神經網路的優化很久,2006年Hinton等人在science期刊上發表了論文“Reducing the dimensionality of data with neural networks”,揭開了新的訓練深層神經網路演算法的序幕,仍舊被認為是當前第三次人工智慧熱潮的紀元。

從全零初始化和隨機初始化,到標準初始化,Xavier初始化,He初始化,時至今日上千層網路的訓練都已經成為了現實,初始化似乎已經不再是那麼重要的課題了,但是誰說就沒有思考的空間了呢。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」什麼是深度學習成功的開始?引數初始化

18、歸一化

我們總是希望所研究的統計問題能夠滿足固定的分佈,而且這樣也的確會降低問題的難度。

在深度學習中,因為網路的層數非常多,如果資料分佈在某一層開始有明顯的偏移,隨著網路的加深這一問題會加劇,進而導致模型優化的難度增加。

歸一化便是致力於解決這個問題,從資料到權重,從限定在同一樣本的一個特徵通道到不同樣本的所有通道,各類歸一化方法以簡單的方式,優雅地解決了深度學習模型訓練容易陷入區域性解的難題,順帶提升訓練速度提高泛化能力,這是一定要掌握的理論和工程技巧。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」深度學習模型中的Normalization,你懂了多少?

19、池化

大腦學習知識靠抽象,從影象中抽象知識是一個“從大到小”過濾提煉資訊的過程。從視覺機制中來的pooling即池化,正是對資訊進行抽象的過程。

池化增加了網路對於平移的不變性,提升了網路的泛化能力,大家已經習慣了使用均值池化mean pooling和最大池化(max pooling),雖然可以用帶步長的卷積進行替代。

儘管池化究竟起到了多大的作用開始被研究者懷疑,但是池化機制仍然是網路中必備的結構,所以你一定要熟悉它,而且基於資料驅動的池化機制值得研究。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」被Hinton,DeepMind和史丹佛嫌棄的池化到底是什麼?

20、最優化

模型的學習需要通過優化方法才能具體實現。深度學習模型的優化是一個非凸優化問題,儘管一階二階方法都可以拿來解決它,但是當前隨機梯度下降SGD及其各類變種仍然是首選。

從SGD開始,有的致力於提高它的優化速度如Momentum動量法和Nesterov accelerated gradient法,有的致力於讓不同的引數擁有不同的學習率如Adagrad,Adadelta與Rmsprop法,有的希望大家從調參中解脫如Adam方法及其變種,有的致力於讓收斂過程更加穩定如Adafactor方法和Adabound方法。

沒有一個方法是完美的,訓練的時候總歸要試試。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」為了圍剿SGD大家這些年想過的那十幾招

21、泛化能力

如果一個模型只能在訓練集上起作用,那是沒有用的。

因此我們總是希望模型不僅僅是對於已知的資料(訓練集)效能表現良好,對於未知的資料(測試集)也表現良好,即具有良好的泛化能力,通過新增正則項來實現。

從直接提供正則化約束的引數正則化方法如L1/L2正則化,工程上的技巧如訓練提前終止和模型整合,以及隱式的正則化方法如資料增強等,研究人員在這方面投入的精力非常多,大家一定要時刻關注。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」如何增加深度學習模型的泛化能力

22、模型評估

口說無憑,用資料說話才是研究者們進行PK的正確姿態。計算機視覺的任務何其多,從分類,迴歸,質量評估到生成模型,我們當然需要掌握科學的評估方法。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」深度學習模型評估,從影象分類到生成模型

23、損失目標

模型的學習需要指導,這正是損失函式的責任,它往往對模型最終表現如何影響巨大。

這一篇文章就重點總結分類問題,迴歸問題,生成對抗網路中使用的損失目標,為大家設計更好的優化目標奠定理論基礎。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」深度學習中常用的損失函式有哪些?

24、如何開始訓練你的模型

磨刀不誤砍柴工,當我們開始訓練自己的模型的時候,總歸要想清楚一些事兒再動手。

第一步知道你要做的任務是一個什麼任務,找到競爭對手做好預期,想好你需要什麼樣的資料。第二步確定好框架,基準模型,準備好資料。然後才是第三步開始訓練,從輸入輸出,資料的預處理到維持正確地訓練姿勢。

這是我總結出來的經驗,想必總是有點用的。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

「AI初識境」給深度學習新手做專案的10個建議

25、認真做一個專案

到了最後,相信大家都擁有了基本技能了,那我們就來開始一個真正的專案吧,實現形色識花App的部分功能。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

在這裡不會教大家如何完成,因為這個專案一點都不簡單,是個很難的分類專案,不是給一個現有的資料集和一個模型就能解決的,至少有以下問題需要考慮,每一個都有很多工程細節需要解決。

「完結」CV演算法工程師從入門到初級面試有多遠,大概是25篇文章

如果你能獨立將這個任務的整個流程完成,識別20種包含遠近景的花,做到95%的精度,那麼我相信你完全有能力去應聘計算機視覺演算法工程師了。

如果在框架上有什麼問題,可以參考我們開源的12個主流的開源框架在各類任務中的使用git專案。


https://github.com/longpeng2008/yousan.ai


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2651204/,如需轉載,請註明出處,否則將追究法律責任。

相關文章