學習了哪些知識,計算機視覺才算入門?

需要哪些數學 編程 工具 等知識?

本題已收錄至知乎圓桌:人工智慧 · 機器感知,更多「人工智慧」相關話題歡迎關注討論


謝邀,針對這個問題,我們邀請了微軟亞洲研究院視覺計算組的高級主管研究員華剛為大家進行解讀。

有感於大家對計算機視覺研究的熱情,同時對計算機視覺研究認知的局限性,或者說是基本研究方法和思路上的局限性。華剛博士根據最近計算機視覺領域國際權威、加州大學洛杉磯分校的朱松純老師發表的一篇關於計算視覺的三個起源和人工智慧的評論,結合他在計算及視覺領域15年的研究經歷,和大家分享如何做好計算機視覺的研究,希望對領域內的學生和年青的研究員能有所幫助。

————這裡是正式回答的分割線————

「如何做好計算機視覺的研究?」

要回答這個問題,我們先要對這個問題的關鍵詞進行分析:如果去掉「計算機視覺」這個限定詞,這問題就變成了「如何做好研究?」那麼,要回答這個問題,我們就要知道「什麼是好的研究?」而要定義什麼是好的研究,必須回到根本,先要知道「什麼是研究?」

我們的討論就從這個問題開始。

什麼是研究?

一個被普遍接受的對研究的廣義定義為:研究是為了產生新的知識或者是為已有的知識設計新的應用的系統性的工作。因為我們今天的討論其實更多集中在科學研究上,先確定狹義的研究的定義為:利用科學的方法來調查解釋一個現象或者獲取新的知識。

綜合這兩個定義,可以看到科學研究從本質上是由三個基本的要素構成:

· 目的:產生新的知識或者是設計出新的應用;

· 手段:科學的方法。缺少這兩個要素任何之一都不構成科學研究;

· 成果:新的知識。所謂新的知識,必須是前人不知道的東西。

我們很多同學和年輕的研究員認為研究就是寫論文、研究成果就是論文,這其實是在觀念上走進了一個誤區。論文是系統闡述新的知識、新的應用,以及闡述獲取這個新知識或者新應用用到了什麼樣的科學方法的一個載體。論文,作為闡述研究成果的主要手段,必須經過同行的評議通過才能正式發表和被認可。

在人工智慧進入第三個熱潮之際,我們看到各種各樣關於AI的各種媒體報道層出不窮,一方面,這對大眾普及了AI各方面的知識,是積極的。但從另一個方面講,很多觀點沒有經過仔細的推敲,也沒有同行的評議,一些謬誤或者是誇大的觀點可能因為廣泛傳播而被大眾接受,結果產生負面的社會影響。這就提醒我們相關領域的研究人員,在對大眾媒體去做一些評論的時候,必須仔細斟酌,盡量不傳播沒有得到檢驗的觀點。

這就談到第二個問題:

什麼是好的研究?

不同領域的研究員對這個問題可能會有不同的看法。

從計算機科學的角度來講,尤其是計算機視覺的研究,無論是理論的還是實踐的,我們的研究成果最終是要解決現實世界的問題的。在這個方面,我印象比較深刻的還是我在西安交通大學讀研究生的時候,沈向洋博士2001年在西安交大做報告提到的一個觀點:最好的研究員發現新問題;好的研究員創造新方法解好問題;一般的研究員跟隨別人的方法解問題——大家在多次這裡看到「新」這個關鍵詞,創新是研究的本質。

有了這些鋪墊,我們首先定義什麼是最好的研究。通常認為一個領域中對於某一個問題最好的研究工作有三種:第一篇論文 (The First Paper),最好的一篇論文 (The Best Paper),以及最後一篇論文(The Last Paper)。這第一篇論文的含義是說這篇論文率先提出了一個好的問題和方向。最好的一篇論文是什麼?那一定是開創性地提出了一種解法,啟發了最終解決這個問題的途徑。至於最後一篇論文,那一定是徹底把這個問題解決了,從此以後這個問題不再需要繼續做進一步的研究。

從計算機視覺領域舉一個具體的例子來講,Harris Corner Detector屬於最早的一批在圖像中檢測角點的論文,可以歸為第一篇之列。David Lowe博士的SIFT特徵檢測和局部描述子,可以歸為在這個方向上最好的論文之列。那麼這個方向的最後一篇呢? 我認為可能還沒有出現。具體到我自己的研究工作,在局部描述子這個方向上,我跟我的同事Matthew Brown和Simon Winder在2007年到2009年之間所做的一系列用機器學習的方法來建立描述子的工作,也實際上為提高局部描述子的性能提供了一個新的思路和方法。

對於我們很多研究員和學生來講,一輩子可能都做不到這三種最好的研究工作之一。那是不是就等於說你不能做好的研究工作或者根本不用考慮做研究了呢?肯定不是這樣。科學研究是一個共同體。這些最好的研究工作也是在前面很多很多非常紮實(solid)的研究工作的基礎上發展出來的。因此,對於年青的研究員和學生而言,應該胸懷大志,去追求做最好的研究工作,但從實際執行上來講,還是要把一項一項具體的工作先做紮實了。

怎麼做到把研究工作做紮實了?首先,你必須對你要解的問題有一個全面深刻的了解,包括為什麼要解這個問題、解這個問題有什麼意義呢、以前有沒有試圖解決同樣或者類似問題的先例,如果有,你就要全面了解前人都提出了什麼樣的解法、他們的解法都有什麼樣的優勢和缺陷……最後,你的解法解決了前面這些解法不能解決的問題呢,或者是你的解法處理了什麼樣的他們不能處理的缺陷了?這些問題的答案如果都有了,那麼,在寫論文的過程中要注意的就是:你的假設是什麼?你怎麼驗證了你的假設?這個驗證既可以是理論上的證明,也可以是實驗的驗證。我們很多學生和年青的研究員,寫論文的時候沒有找到內在的邏輯關係,很多觀點都是似是而非。或者說重一點,在論文撰寫方面的訓練嚴重不足。你的研究如果到了寫論文的階段,那就必須要有明確的觀點提出來。這個觀點必須明確無誤,只有這樣你才能被稱為形成了新的知識。你的每一個觀點都必須在理論上或者是實驗中得到驗證。另外,論文的撰寫是為了讓人看懂,不是讓人看不懂,所以我們在撰寫過程中必須盡量保證不去假設讀者已經擁有了某些方面的知識。做好了這些,基本上你就有很大的可能性能夠做出紮實(solid)的研究工作。

然後回到我們討論的主題:

如何做好計算機視覺的研究工作?

其實,要回答這個問題,將我上面講的所有觀點加上「計算機視覺領域」這個限定詞就行了。我這兒結合計算機視覺研究的一些現狀及朱松純老師的一些觀點來進一步談談我的觀點。

首先談談我觀察到的一些現象。很多年輕的學生,現在討論問題的時候都用這樣的談話:我發現用FC6層的特徵,比用FC7層的特徵,在某個圖像數據集上比現在最好的演算法提高了1.5%的識別精度,老師我們可以寫論文了(如果大家不能理解這句話,FC6和FC7是表示AlexNet的兩個中間輸出層)。我想請問,你在這個過程中發現了什麼樣的普適的新的知識嗎,又或者,在不是普適的情況下,你在什麼限定條件下一定能夠看到這樣的識別精度提高了?

不錯,提高識別精度是一個很好的目標,但要注意,計算機視覺的研究是要解決識別的問題,不是解某一個圖像數據集。這些圖像數據集提供了很好的驗證你的假設和方法的手段,但如果你沒有遵循科學的方法和和手段去設計你的演算法和實驗,你也不可能得到一個科學的結論,從而也不能產生新的知識,更不用談對這個領域做出貢獻。朱松純老師在他的評論中提到,很多學生認為,計算機視覺現在就是調深度神經網路的參數,也就是說的這個問題。

所以,具體到對於剛開始從事計算機視覺研究的學生來講,要做好這方面的研究,我覺得第一步還是要系統學習一下計算機視覺的課程,全面了解一下計算機視覺這個領域的來龍去脈、這個領域都有哪些基本的問題、哪些問題已經解得比較成熟而哪些問題還在初級階段……

這裡,推薦所有的學生學習兩本經典教材《Computer Vision: A Modern Approach》和《Computer Vision: Algorithms and Applications》,可以先讀完第一本再讀第二本。

只有對這個領域有了一個初步的全面了解,你才能夠找到自己感興趣的那個問題。在眾多的問題當中,你是希望做三維重建,還是做圖像識別、物體跟蹤,又或是做計算攝影呢?做研究其實不是一個完全享樂的的過程,你必須要有足夠的興趣來保證你能持續地走下去,這在你感覺自己當前研究的思路走不下去的時候尤其具有重要意義。當你確定你感興趣的問題,你應該首先全面調研一下這個問題的來龍去脈。這就意味著你不能只讀過去五年的論文。你可以從過去一年的論文開始,慢慢追溯回到過去很久的相關的論文。有些時候,你會驚訝地發現前人想問題的深度。研究的英文單詞是Research,拆開是Re-Search,用中文直譯就是重新搜索和發現,而不是直接發現,其實就是說你要首先對這個問題做追本溯源。朱松純老師提到的我們很多學生現在不讀五年以前的論文,說的也是這個道理。

當你做好了這些,你必須鑽進計算視覺的一個小的領域。人的精力是有限的,這就意味著你不可能把很多事情同時做好,所以在你選好方向之後,就要把你的精力集中在你感興趣的一個問題上, 努力成為這個方面的專家。研究是一項長跑,很多時候,你在一個方向上比別人堅持久一點, 你就有機會超越他而成為某個方面的專家。

最後,我也來談談深度學習對計算機視覺的影響。在這裡,我對馬里蘭大學Rama Chellapa教授在Tom Huang教授80歲生日論壇上表達的觀點非常認可,他認為,深度學習網路就像一個Pasta Machine:你把該放的東西放進去,它能給你產生好吃的Pasta。同時它也是一個Equalizer:無論你在計算機視覺領域有40年的經驗還是0年的經驗,只要你會用Caffee,你在一些問題,比方說圖像識別上,都能產生差不多的結果。他開玩笑說這有點傷自尊 (It hurts my ego!),但我們還是應該把它作為一個好的工具擁抱它。我想,他的言外之意,是我們的研究應該做得更深,要去理解這個工具為什麼能夠工作得比較好,從而產生新的知識去指導將來的研究和應用。

我認為,對於年輕的學生來講,從深度學習的方法開始學習沒有什麼問題,但必須要進一步去了解一下其他的數學和演算法工具,像統計貝葉斯的方法、優化的方法、信號處理的方法等等等的。計算機視覺的問題,其本質是不適定的反問題,解這一類問題需要多種方法的結合。這裡面有深度學習解得比較好的問題,像圖像識別,也有深度學習解不了的問題,像三維重建和識別。

任何研究領域包括計算機視覺的研究,對處在研究初期的學生而言, 更重要的是掌握足夠的數學工具,培養一種正式思維(Formal Thinking)的能力,這樣,遇到實際的問題就能以一種理論上正確的思路去解決這個問題。

作為結束語,我想對在從事或者有志於從事計算機視覺研究的學生說,計算機視覺的研究處在一個非常好的時期,有很多我們原來解不了的問題現在能夠解得比較好了,像人臉識別,儘管我們其實還沒有從真正意義上達到人類視覺系統對人臉識別的魯棒程度。但我們離真正讓計算機能夠像人看和感知這個世界還有很遠的距離。在我們達到這個目標之前,深度學習的方法可能是這個過程中一個重要的墊腳石,同時我們還要將更多的新的方法和工具帶入這個領域來進一步推動這個領域的發展。

————這裡是回答結束的分割線————

感謝大家的閱讀。

本賬號為微軟亞洲研究院的官方知乎賬號。本賬號立足於計算機領域,特別是人工智慧相關的前沿研究,旨在為人工智慧的相關研究提供範例,從專業的角度促進公眾對人工智慧的理解,並為研究人員提供討論和參與的開放平台,從而共建計算機領域的未來。

微軟亞洲研究院的每一位專家都是我們的智囊團,你在這個賬號可以閱讀到來自計算機科學領域各個不同方向的專家們的見解。請大家不要吝惜手裡的「邀請」,讓我們在分享中共同進步。

也歡迎大家關注我們的微博和微信賬號(搜索:微軟亞洲研究院AI頭條),了解更多我們研究。

http://weixin.qq.com/r/PUliejrEzWeyrX4Z9xwv (二維碼自動識別)


請將下面的網站的slides看完,輔助slides中提到的書的章節,應該可以入門了,1-2個月時間即可,我現在就在看,大四,有相應的數學和圖像基礎,有機器學習,深度學習基礎(除了CS231n外不怎麼涉及,CS231n本身就是講cNNs在視覺方面的應用的,當然有一定基礎可以更容易理解)。

以下課程都是斯坦福計算機視覺實驗室的。

實驗室主頁:http://vision.stanford.edu/

CS 131 Computer Vision: Foundations and Applications:

http://vision.stanford.edu/teaching/cs131_fall1415/schedule.html

CS231A Computer Vision: from 3D reconstruction to recognition:

http://cvgl.stanford.edu/teaching/cs231a_winter1415/schedule.html

CS231n: Convolutional Neural Networks for Visual Recognition

http://vision.stanford.edu/teaching/cs231n/

以上三門課就可以入門了,當然還有很多其他高等級的課,可以去實驗室主頁看看。

資料不宜貪多,謝絕其他資料干擾,安心的把這些lectures看完。然後就可以上手做項目和看論文了。論文才是王道。


計算機視覺是一個很大的範疇的總和,有兩種學習方式,一種是閱讀基礎書,搞懂它的每一部分;另一種是找一個問題,看文獻,編程實現,不斷往深走。這兩種學習方式是互補的,如果你看了好幾年書還不能上手解決問題,或者只會解決某些很特殊的問題,對其他問題束手無策都不算成功。因此你需要把看書掌握一般知識和編程實驗解決具體問題齊頭並進。下面說你要幹什麼:

  • 下載安裝OpenCV2

OpenCV是一個非常強大的計算機視覺庫,包括了圖像處理、計算機視覺、模式識別、多視圖幾何的許多基本演算法,有c++和Python兩種介面。學習的材料首先是安裝目錄下doc文件夾里的幫助文檔,提供所有函數的用法,任何時候對任何函數有疑問請查閱幫助文檔,安裝目錄下還提供一大堆寫好的演示程序供參考;《OpenCV_2 Computer Vision Application Programming Cookbook》是一本比較基礎的介紹材料,它的缺點是沒有介紹分類器(模式識別)方面的函數怎麼用。

雖然網上還有其他很多流行的庫,比如處理特徵點的VLfeat,處理點雲的PCL,處理GPU運算的CUDA,處理機器人問題的ROS和MRPT,但是這些都是你在解決具體問題時才會考慮去用的東西,如果你想快速讀取視頻、做個屏幕交互程序、使用流行的分類器、提取特徵點、對圖像做處理、進行雙目重建,OpenCV都提供相應函數,因此在你不知道該把餘生用來幹什麼的時候,先裝OpenCV學習。

  • 讀綜述

Computer Vision: Algorithms and Application。這本書用1000頁篇幅圖文並茂地瀏覽了計算機視覺這門學科的諸多大方向,如果你不知道計算機視覺是一門搞什麼的學科,這本書是你絕佳的選擇。它的優點是涉獵了大量文獻,缺點是缺乏細節,因此很顯然只讀這本書你根本沒法上手工作,因為它講的實在是太粗糙了。如果你對其中的某一部分感興趣,就請去讀相關文獻,繼續往下走,這就是這本書的意義。有中文版,但是翻譯的不好,也不建議你細細去讀,看看裡面的圖片即可。

Computer Vision: Models, Learning, and Inference:這本書是我認為研究生和高年級本科生入門計算機視覺最好的教材。它內容豐富,難度適中,推導翔實,語言流暢,強烈推薦你花2個月時間把這本書讀完。

  • 多視圖幾何

Multiple View Geometry in Computer Vision:這本書是多視圖幾何的聖經,意思就是說想搞三維重建或者圖像測量之類的項目,這本書是必讀的。它需要你有線性代數的基本知識,會SVD分解即可。第一版有中文版,翻譯的非常好,但是已經絕版了,可以上淘寶高價買一本,第二版添加的內容很少,在網上可以下載到。

  • 模式識別

模式識別核心就是訓練一個函數來擬合手頭的數據,如果數據的標籤是離散的,稱為分類問題,如數據的標籤是連續的,稱為回歸問題;分類又分有監督分類和無監督分類,有監督分類器有神經網路、支持向量機、AdaBoost、隨機場、樹模型等等。當你拿到一大堆數據,需要從裡面找關係的時候,一般都需要使用模式識別演算法來訓練一個函數/分類器/模型,因此模式識別是機器學習的核心。

《模式分類(第二版)》:這是一本適合普通讀者閱讀的教材,介紹了模式識別中經典的分類器,講解細緻,語言生動,難度適中,每一個演算法都有偽代碼。

The Elements of Statistical Learning:這本書使用嚴謹的數學工具分析模式識別演算法,它比較難,但是非常深刻。每拿到一個模型它都會分析這個模型在數學上是如何構造的,並且推導模型的分類錯誤率。分析和推導是這本書的精髓。

Pattern Recognition and Machine Learning:這是一本從貝葉斯學派的角度分析模式識別模型的書,它使用的工具主要是概率論,比較難,非常深刻,內容非常豐富。

雖然這兩本書很難,但是它們用到的數學知識不過是基本的概率論和線性代數,只是用的比較活,計算機視覺這個學科需要的數學知識也是這個水平。

  • 圖形學

圖形學教材首先推薦《計算機圖形學與幾何造型導論》,這本書用流暢的語言介紹了圖形學的基礎知識,選材有趣,推導簡潔但是絕不跳步走,保證你能看懂而且不會看煩。

光線追蹤器我看過一本薄的《Realistic Ray Tracing》和一本厚的《Ray Tracing from the Ground Up》,兩本書都有代碼。後一本內容極其豐富,有中文版,翻譯尚可。後一本唯一的缺點就是講不清楚BRDF,但這恰恰是前一本的亮點。

還有一些比較偏的書,比如偏微分方程在圖像處理中的應用、細分、壓縮感知、馬爾科夫隨機場、超解析度分析,概率機器人、多尺度幾何分析,這些領域都有各自的名著,你在某個領域深挖的時候,類似這樣的書可能會出現在參考文獻中,那時再看不遲。

  • 讀文獻

寫到書里的知識基本上都有些過時,你得通過看文獻掌握各個領域最新的發展動態。計算機視覺的頂級期刊有兩個PAMI和IJCV,頂級會議有ICCV和CVPR,在科學網—[轉載]計算機視覺方向的一些頂級會議和期刊有更加詳細的介紹。

你可以通過大量瀏覽會議文章合集和期刊的文章尋找一個自己感興趣的文章,先看圖,再讀摘要,最後有必要再看正文。從一兩篇文章開始細讀,肯定會有很多讀不懂的東西,這個時候就需要去看參考文獻列出的文章,看不懂再去看參考文獻的參考文獻。不斷走下去,你對一個領域的了解就加深了。

看文章的時候注意上網搜索,作者可能在網上公布了代碼,你可以把代碼下載下來深入研究而不用自己重新發明輪子。


謝邀

其實我沒有系統地學過計算機視覺。所以現在的知識結構在行內算是很偏科的。所以我的經驗未必做得了准。

數學:

我平時用得最多的幾門數學課的知識是1.線性代數 2.概率論 3.隨機過程 4.微積分,按常用程度排序。

編程:

我大概是90%的matlab+10%的C++。代碼量大約是平均每天200行左右吧。

嗯,其實我覺得每天花半小時閱讀paper的時間,遍歷CVPR+ICCV+ECCV+ICML+NIPS+PAMI+JMLR的paper,90%看摘要、9%看introduction、1%精讀,半年以後肯定就入門了……


計算機視覺菜鳥回答求輕拍

我猜測題主的問題是如何快速入計算機視覺的門,針對這個問題我更推薦跟著教材和講座成體系地,由淺入深地系統學習,而不是一開始自己一個人單打獨鬥地去學習一些孤立的知識點。因為私以為把只是實現串聯起來比學習知識點本身更重要,如果對計算機視覺沒有一個系統性了解的話是無法有一個穩固基礎的。

然後等到自己對計算機視覺有一個成體系的了解了之後再去追尋自己感興趣的方向不遲。

入門教材與講座

教材我推薦Richard Szeliski的Computer Vision: Algorithms and Application。英文版鏈接:http://szeliski.org/Book/drafts/SzeliskiBook_20100903_draft.pdf 國內淘寶上面有中文版可以買。

講座我推薦我導師12年的計算機視覺課程錄像(需翻牆),基本覆蓋了計算機視覺的絕大多數基本領域:https://www.youtube.com/playlist?list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm 最近14年的新版錄像會在年底放出。

作業和幻燈片在:CRCV | Center for Research in Computer Vision at the University of Central Florida

14年的課程稍稍改變了下,加入了DPM等等,我也推薦你看一下:http://crcv.ucf.edu/courses/CAP5415/Fall2014/index.php

(待補充)


機器視覺包含很多東西,我覺得結合具體的某一塊去看比較好


關注這個問題很久了,簡單說一下自己的見解.

計算機視覺分很多方向,個人比較熟悉的是圖像方面的,包括:圖像分類、目標檢測、圖像分割、視頻處理等,這些小的方面每一個也學要很長的一段時間去學習.

入門這個東西很難定義,如果只是對一個方向看一下,了解一點東西,有一點談資的話不算入門,我認為入門至少代表你對這個領域的某些東西進行過處理實踐才可以,所以我比較喜歡的一種學習新知識的方式就是:先找一個綜述的書隨便翻一翻,對目錄有個印象就行,然後針對自己喜歡的部分,去查資料,做實例,看論文,一段時間後,自然就會有自己的理解了.

---------- 半年後更新

需要哪些數學 編程 工具 等知識?

數學知識的話,大概基礎的就是概率論、數理統計、矩陣論

編程基礎的是python、matlab

工具上,現在一般是用框架,我常用caffe,還有一些其他常用的框架tensorflow、pytorch、mxnet等

入門的話,本科的數學知識基本就夠了,然後開始看論文吧。基本現在搞計算機視覺(Computer Vision, CV)都是基於深度學習的。第一篇推薦alexnet,算是深度學習搞CV的開山之作,接著基本就是需要先把分類的看一看,現在的CV大多數任務都是基於分類任務的深度網路進行擴展的。

列一些個人感覺必看的論文(只寫出名字,鏈接自己去找吧):

AlexNet

ZFNet

VGGNet

GoogLeNet

ResNet

SeNet

DenseNet

上述論文每一篇都精讀,看一篇論文之後跑一下作者提供的source code,大概就對使用深度學習搞計算機視覺了解個大概了。

之後就是根據自己的興趣,detection、tracking、semantic segmentation、visual QA、image captioning等,自己去找相應的論文去看吧。

入手一個新的領域,先找那些著名的論文,精度10篇,基本就入門了。


學再多的東西計算機視覺都入不了門

因為計算機視覺的門太多了

學習OpenCV 這本書看完直接該入哪個入哪個門去


如果是我,

第一階段: 下一篇權威論文,或者網接一計算機視覺類的活,然後開始動手實現,期間會遇到各類很多問題,一點點的通過查閱資料或者請教師長尋找答案。

第二階段: 看一本計算機視覺類聖經,不需要全看懂,理解個大概就行,看完就可以放到柜子裡面了,等待下一次被看。

第三階段: 重複第一和第二階段,直至有一天你找到興趣並發現他人之言也有偏頗。

算是半監督學習吧。


數字圖像處理+模式識別+機器學習,工具opencv。


建議從數字圖像處理開始看,慢慢就入門了吧(說得我好像入門了一樣)


上網找一下網頁。machine learning books suggested by Michael I.Jorden數學的話這些就夠了,不過我現在一本還沒看完!T^T


本人接觸機器視覺行業已經五年,也是一路慢慢摸索過來的。和大家推薦一個公眾號,平時空閑的時候都可以看看。共勉。

http://weixin.qq.com/r/UkRwaPvEr6bQrb8L9xFA (二維碼自動識別)

二維碼識別不了,請關注公眾號「機器視覺助手」


每個人都有每個人的學習方法,別人說那麼多都還是別人的。只能作為參考。最終還是需要自己摸索出屬於自己的一套學習方法。


推薦閱讀:

ECCV 2016 有什麼值得關注的亮點?
計算機視覺一般都用什麼語言實現?有什麼好的平台?
圖像超解析度就業前景如何?
計算機視覺的前沿理論有哪些?
有哪些有趣的圖形學(CG)和計算機視覺(CV)相結合的應用的例子?

TAG:圖形圖像 | 計算機視覺 | 機器視覺 |