計算機視覺學習經驗總結

2021-09-02 15:01:09 字數 3367 閱讀 3018

剛接觸cv(computer vision)(注:本文偏向於影象學而非圖形學)時,大家一般都會不假思索地選擇使用c++:裝個vs(visual studio),配置下opencv,擼起袖子就上了。這樣做非常合理,幾乎所有人都是這麼入門的。 不過,當你知識面擴充套件開後,你會感覺到很多時候c++都顯得有些力不從心。比如:當你要畫一些圖表或做一些分析,就還得把資料匯入matlab裡做進一步處理;當你要非常快捷方便地學習或測試乙個演算法,c++會是你最糟糕的選擇;或者當你要學習深度學習時,你絕對不會再選擇使用c++….總之,有太多理由會促使你再學習一門程式語言,最好的選擇沒有之一:python。

順便說一句也有人使用matlab等做影象方面的研究,如果你只是偶爾用影象處理輔助一下你的研究,可以這麼做,一般情況下不建議使用。

最實用

python: 

基礎部分看廖雪峰的python教程就可以了,然後就是用哪一塊學哪一塊了。python學起來很簡單,看別人**的過程就是學習的過程。對於不熟悉的用法多搜下官方文件,如python, numpy,pandas, matplot, scikit-learn。這裡有幾張python各種庫的小抄表其實直接在網上搜這幾張表也都比較方便。課程的話,我之前上過一些七月演算法的課程,講得不好,多少會給你一些知識體系和各種學習資料,總體不推薦或跳著看。python的開發環境值得說一下,因為有太多選擇,這裡比較建議使用pycharm和jupyter notebook吧,具體參考python入門環境搭建。下面,推薦一些入門和高階的書籍 

新手肯定都用windows了,學習過程中發現在windows上搞不定了,先忍幾次,然後掉頭就去學linux了。一定是這樣。 哪些在windows上真的搞不定呢?比如:deeplearning,或最新**中提出的視覺開源演算法。 不過對我們而言,linux並不需要了解太深。裝個ubuntu系統,常用的檔案操作、程式編譯等知道就ok了。我完全是在使用的過程中現用現學,手邊常備一本書《鳥哥的linux私房菜》。

計算機視覺實在很廣了,目前比較熱門的方向總體上分為兩大塊:一塊是深度學習,一塊做slam。它們的研究點區別在哪呢?深度學習這一群體側重於解決識別感知(是什麼)問題,slam側重於解決幾何測量(在**)問題iccv研討會:實時slam的未來以及深度學習與slam的比較。拿機械人來說,如果你想要它走到你的冰箱面前而不撞到牆壁,那就需要使用 slam;如果你想要它能識別並拿起冰箱中的物品,那就需要用到深度學習機械人抓取時怎麼定位的?用什麼感測器來檢測?。當然這兩方面在research上也有互相交叉融合的趨勢。 不過在學習這些之前,一般都會先掌握下傳統的計算機視覺知識,也就是影象處理這一部分了。我之前大致總結過一次: 

計算機視覺初級部分知識體系。這些基礎知識的理解還是挺有必要的,有助於你理解更高層知識的本質,比如為什麼會出現deeplearning等這些新的理論知識(感覺有點像讀史了,給你智慧型和自由)。這一部分學習資料的話還是挺推薦淺墨的《opencv3程式設計入門》 也可以看他的部落格。當然他的書有乙個問題就是涉及理論知識太少,所以推薦自己再另備一本偏理論一點的影象處理相關的書,我手邊放的是《數字影象處理:原理與實踐》,差強人意吧。個人之前看淺墨書的時候做了乙份《opencv3程式設計入門》學習筆記,裡邊包含一些理論知識和個人見解。 

下面說一下兩個大的方向:基於深度學習的視覺和slam技術。

基於深度學習的視覺:機器學習包括深度學習裡的大部分演算法本質上都是用來做「分類」的。具體到計算機視覺領域一般就是物體分類(object classification)、目標檢測(object detection)、語義分割(image semantic segmentation)等,當然也有一些很酷又好玩的東西比如edges2cats、deepart。本人主要做一些object detection相關的東西。其實一般是直接跑別人的**了,稍微做一些修改和引數調整,前期的預處理才是主要工作。這些程式基本都是在linux下跑的。好,深度學習為什麼這麼強?它主要解決了什麼問題呢?我比較認同以下三點:學習特徵的能力很強,通用性強,開發優化維護成本低 參見為什麼深度學習幾乎成了計算機視覺研究的標配?。 

關於這一部分的學習,主要就是deeplearning了。關於deeplearning,漫天飛的各種資源。可以看一看李巨集毅的一天搞懂深度學習課件 youtube上有乙個一天搞懂深度學習–學習心得;李飛飛的cs231n課程,網易雲課堂有大資料文摘翻譯的中文字幕版課程,知乎專欄智慧型單元有cs231n課程翻譯(非常好);三巨頭之一yoshua bengio的新作《deep learning》,目前已有中譯版本 。 

slam技術:這一部分了解不多,不做太多評價,有興趣的可以自己谷歌一下

計算機視覺中使用的機器學習方法個人感覺不算多,早期的時候會用svm做分類,現在基本都用深度學習選特徵+分類。原因在於統計機器學習這一塊雖然方法不少,但是基本都無法應對影象這麼大的資料量。 不過大家在學習過程中很容易接觸到各種機器學習方法的名字因為現在大資料分析、機器學習、語音識別、計算機視覺等這些其實分得不是很開,然後不自覺地就會去了解和學習。這樣我感覺總體來說是好的。不過在學習一些暫時用不著的演算法時,個人感覺沒必要做的太深:重在理解其思想,抓住問題本質,了解其應用方向。 

下面分開介紹一下傳統機器學習演算法和深度神經網路

一切工程問題歸根結底都是數學問題,這裡說說計算機視覺和機器學習所涉及的數學問題。

微積分:比如影象找邊緣即求微分在數字影象裡是做差分(離散化)啦,光流演算法裡用到泰勒級數啦,空間域轉頻域的傅利葉變換啦,還有牛頓法、梯度下降、最小二乘等等這些都用的特別普遍了。 

概率論與統計:這個比較高深,是應用在機器學習領域裡最重要的數序分支。應用比如:條件概率、相關係數、最大似然、大數定律、馬爾可夫鏈等等。 浙大的《概率論與數理統計》感覺還行,夠用。 

線性代數與矩陣:數字影象本身就是以矩陣的形式呈現的,多個向量組成的樣本也是矩陣這種形式非常常見,大多機器學習演算法裡每個樣本都是以向量的形式存在的,多個矩陣疊加則是以張量(tensor)的形式存在google深度學習庫tensorflow的字面意思之一。具體應用,比如:世界座標系->相機座標系->影象座標系之間的轉換,特徵值、特徵向量,範數等。 推薦國外的上課教材《線性代數》。因為浙大的那本教材感覺實在不太行,買過之後還是又買了這本。 

凸優化:這個需要單獨拎出來說一下。因為太多問題(尤其機器學習領域)都是優化問題(求最優),凸優化是裡面最簡單的形式,所以大家都在想辦法怎麼把一般的優化問題轉化為凸優化問題。至於單純的凸優化理論,好像已經比較成熟了。在機器學習裡,經常會看到什麼求對偶問題、kkt條件等,潛下心花兩天學一學。 建議備乙份高校關於凸優化的教學課件,大家對這一塊畢竟比較生,缺乏系統感。比如北大的《凸優化》課程。這些數學知識沒必要系統學習,效率低又耗時。畢竟大家都有本科的基礎,夠了。一般用到的時候學,學完之後總結一下。

原文:

計算機視覺學習總結

計算機視覺 工具 opencv caffe tensorflow python c opencv演算法精解 基於python與c 關注 斯坦福李飛飛 深度學習計算機視覺 計算機視覺領域的一些牛人部落格,超有實力的研究機構等的 鏈結 annotated computer vision bibliogr...

計算機專業權威期刊投稿經驗總結

一 電腦科學期刊介紹 電腦科學的publication最大特點在於 極度重視會議,而期刊則通常只用來做re publication。大部分期刊文章都是會議 的擴充套件版,首發就在期刊上的相對較少。也正因為如此,計算機期刊的影響因子都低到驚人的程度,頂級刊物往往也只有1到2左右 被引的通常都是會議版 ...

2016 清華 計算機 考研 經驗 總結

2016清華計算機考研經驗總結 各位親 說一下我的背景 我是鐘哲,本科北航電子資訊工程專業2015屆,保研保的本校,但是可能還是想來top2生活一段時間,再加之對計算機還是很情有獨鍾,因此考研。現在是清華計算機系研究生。光榮的給自己新增了貴系 6字班兩個標籤 成績如下 政治一 68 英語一 73 數...