1. 程式人生 > >計算機視覺-計算機視覺入坑(一):計算機視覺入坑前的資訊採集和了解

計算機視覺-計算機視覺入坑(一):計算機視覺入坑前的資訊採集和了解

之前一直覺得自己學的雜而不專,在之後的學習和幹活歷程中也不斷髮現自己確實需要靜下心來鑽研,讓自己像身邊的師兄一樣能有一技之長,能在社會上有自己的立足之地。

講真在計算機這個龐大的體系下挑選出一個方向來確實蠻難,自己挑來挑去,有種亂花漸欲迷人眼的感覺,不過就目前自己的興趣、性格和學習能力,遠景規劃來看,計算機視覺這個方向目前來看對我自己來說確實是一個十分不錯的選擇。

通過這篇文章希望可以在整理自己蒐集的資訊的同時,理清自己的思路,搞清楚計算機視覺大致是個什麼東西,入坑後要學,要做些什麼東西,它的前(錢)景怎麼樣?(這個說明一下啊,做任何事沒有錢是萬萬不能的,錢代表了它的價值,如果研究出來的東西一文不值,那.....微笑

目錄:  

一、計算機視覺是什麼:

        計算機視覺(Computer Vision)又稱為機器視覺(Machine Vision),顧名思義是一門“教”會計算機如何去“看”世界的學科。在機器學習大熱的前景之下,計算機視覺與自然語言處理(Natural Language Process, NLP)及語音識別(Speech Recognition)並列為機器學習方向的三大熱點方向。而計算機視覺也由諸如梯度方向直方圖(Histogram of Gradient, HOG)以及尺度不變特徵變換(Scale-Invariant Feature Transform, SIFT)等傳統的手辦特徵(Hand-Crafted Feature)與淺層模型的組合逐漸轉向了以卷積神經網路(Convolutional Neural Network, CNN)為代表的深度學習模型。

計算機視覺的理念其實與很多概念有部分重疊,包括:人工智慧、數字影象處理、機器學習、深度學習、模式識別、概率圖模型、科學計算以及一系列的數學計算等。

                                                

二、計算機視覺裡的一些應用方向(現在認識有限,以後遇到了再新增):

(一)、物體識別和檢測:

                物體檢測一直是計算機視覺中非常基礎且重要的一個研究方向,物體識別和檢測,顧名思義,即給定一張輸入圖片,演算法能夠自動找出圖片中的常見物體,並將其所屬類別及位置輸出出來。當然也就衍生出了諸如人臉檢測(Face Detection),車輛檢測(Viechle Detection)等細分類的檢測演算法。

 

                                  

(二)語義分割:

                影象語義分割(semantic segmentation),從字面意思上理解就是讓計算機根據影象的語義來進行分割,語義在語音識別中指的是語音的意思,在影象領域,語義指的是影象的內容,對圖片意思的理解。

                                                               

目前語義分割的應用領域主要有:地理資訊系統、無人車駕駛、醫療影像分析、機器人等領域,詳細見:計算機視覺之語義分割

(三)運動和跟蹤:

                跟蹤也屬於計算機視覺領域內的基礎問題之一,在近年來也得到了非常充足的發展,方法也由過去的非深度演算法跨越向了深度學習演算法,精度也越來越高,不過實時的深度學習跟蹤演算法精度一直難以提升,而精度非常高的跟蹤演算法的速度又十分之慢,因此在實際應用中也很難派上用場。 視覺跟蹤是指對影象序列中的運動目標進行檢測、提取、識別和跟蹤,獲得運動目標的運動引數,如位置、速度、加速度和運動軌跡等,從而進行下一步的處理與分析,實現對運動目標的行為理解,以完成更高一級的檢測任務。跟蹤演算法需要從視訊中去尋找到被跟蹤物體的位置,並適應各類光照變換,運動模糊以及表觀的變化等。但實際上跟蹤是一個不適定問題(ill posed problem),比如跟蹤一輛車,如果從車的尾部開始跟蹤,若是車輛在行進過程中表觀發生了非常大的變化,如旋轉了180度變成了側面,那麼現有的跟蹤演算法很大的可能性是跟蹤不到的,因為它們的模型大多基於第一幀的學習,雖然在隨後的跟蹤過程中也會更新,但受限於訓練樣本過少,所以難以得到一個良好的跟蹤模型,在被跟蹤物體的表觀發生巨大變化時,就難以適應了。所以,就目前而言,跟蹤算不上是計算機視覺內特別熱門的一個研究方向,很多演算法都改進自檢測或識別演算法。 

                                           

(四)視覺問答:

               視覺問答也簡稱VQA(Visual Question Answering),是近年來非常熱門的一個方向,一般來說,VQA系統需要將圖片和問題作為輸入,結合這兩部分資訊,產生一條人類語言作為輸出。針對一張特定的圖片,如果想要機器以自然語言處理(NLP)來回答關於該圖片的某一個特定問題,我們需要讓機器對圖片的內容、問題的含義和意圖以及相關的常識有一定的理解。就其本性而言,這是一個多學科研究問題。

                                 這裡寫圖片描述

(五)三維重建:

           基於視覺的三維重建,指的是通過攝像機獲取場景物體的資料影象,並對此影象進行分析處理,再結合計算機視覺知識推匯出現實環境中物體的三維資訊。三維重建技術的重點在於如何獲取目標場景或物體的深度資訊。在景物深度資訊已知的條件下,只需要經過點雲資料[4]的配準及融合,即可實現景物的三維重建。基於三維重建模型的深層次應用研究也可以隨即展開。學習影象處理的人會接觸到更廣泛更多元的技術,而三維重建背景的會非常專注於細分的演算法,因為三維重建本身還有更細分的技術,所以在做研究生階段的學習的時候,會有很具體的專業方向,比如說就是做航拍地形的三維重建,或者是佛像的三維重建,這裡面因為場景的區別運用到的拍攝技術和重建技術都是不一樣的,而且有一些不同技術之間也沒有關係(當然三維重建本身的概念是相同的)。關於三維重建未來的熱點和難度,這個領域可以做的很專,場景也有很多,每個場景都有不同的挑戰,深入的我也不懂就不說了。

                                 這裡寫圖片描述

三、影象處理和計算機視覺的分類:

按照當前流行的分類方法,可以分為以下三部分:

  • A.影象處理:對輸入的影象做某種變換,輸出仍然是影象,基本不涉及或者很少涉及影象內容的分析。比較典型的有影象變換,影象增強,影象去噪,影象壓      縮,影象恢復,二值影象處理等等。基於閾值的影象分割也屬於影象處理的範疇。一般處理的是單幅影象。
  • B.影象分析:對影象的內容進行分析,提取有意義的特徵,以便於後續的處理。處理的仍然是單幅影象。
  • C.計算機視覺:對影象分析得到的特徵進行分析,提取場景的語義表示,讓計算機具有人眼和人腦的能力。這時處理的是多幅影象或者序列影象,當然也包括部分單幅影象。
      關於影象處理,影象分析和計算機視覺的劃分並沒有一個很統一的標準。一般的來說,影象處理的書籍總會或多或少的介紹一些影象分析和計算機視覺的知識,比如岡薩雷斯的數字影象處理。而計算機視覺的書籍基本上都會包括影象處理和影象分析,只是不會介紹的太詳細。其實影象處理,影象分析和計算機視覺都可以納入到計算機視覺的範疇:影象處理->低層視覺(low level vision),影象分析->中間層視覺(middle level vision),計算機視覺->高層視覺(high level vision)。這是一般的計算機視覺或者機器視覺的劃分方法。在本文中,仍然按照傳統的方法把這個領域劃分為影象處理,影象分析和計算機視覺。

四、影象處理與計算機視覺涉及的知識和相關的書籍(太深入的就不說了,這裡只淺顯的介紹一下(歡迎批評指正~)):

(一)、數學知識:

               我們所說的影象處理實際上就是數字影象處理,是把真實世界中的連續三維隨機訊號投影到感測器的二維平面上,取樣並量化後得到二維矩陣。數字影象處理就是二維矩陣的處理,而從二維影象中恢復出三維場景就是計算機視覺的主要任務之一。這裡面就涉及到了影象處理所涉及到的三個重要屬性:連續性,二維矩陣,隨機性。所對應的數學知識是高等數學(微積分),線性代數(矩陣論),概率論和隨機過程。這三門課也是考研數學的三個組成部分,構成了影象處理和計算機視覺最基礎的數學基礎。如果想要更進一步,就要到網上搜搜林達華推薦的數學書目了。

                CV是一個涉及面非常廣的學科,目前主流的依據視覺的學習,涉及到概率統計,各類優化方法,圖論;一些研究方向(比如涉及到物體運動的)還會涉及拓撲學,群論,矩陣優化;一些影象分割演算法,比如level-set,會涉及到微分方程等等。這些也都不是絕對區分的,現在的state-of-art的問題各方面可能都會有所涉及,依據問題本身而已。涉及面太廣但是計算機的研究大多隻是涉及,並不一定需要像數學系那樣嚴密的推導。

(二)、訊號處理

    影象處理其實就是二維和三維訊號處理,而處理的訊號又有一定的隨機性,因此經典訊號處理和隨機訊號處理都是影象處理和計算機視覺中必備的理論基礎。

2.1經典訊號處理

訊號與系統(第2版) Alan V.Oppenheim等著 劉樹棠譯

離散時間訊號處理(第2版) A.V.奧本海姆等著 劉樹棠譯

數字訊號處理:理論演算法與實現 胡廣書 (編者)

2.2隨機訊號處理

現代訊號處理 張賢達著

統計訊號處理基礎:估計與檢測理論 Steven M.Kay等著 羅鵬飛等譯

自適應濾波器原理(第4版) Simon Haykin著 鄭寶玉等譯

2.3 小波變換

訊號處理的小波導引:稀疏方法(原書第3版) tephane Malla著, 戴道清等譯

2.4 資訊理論

資訊理論基礎(原書第2版) Thomas M.Cover等著 阮吉壽等譯


(三)、模式識別

Pattern Recognition and Machine Learning Bishop, Christopher M. Springer

模式識別(英文版)(第4版) 西奧多裡德斯著

Pattern Classification (2nd Edition) Richard O. Duda等著

Statistical Pattern Recognition, 3rd Edition Andrew R. Webb等著

模式識別(第3版) 張學工著

(四)、 影象處理與計算機視覺的書籍推薦

影象處理,分析與機器視覺 第三版 Sonka等著 艾海舟等譯

Image Processing, Analysis and Machine Vision

                ( 附:這本書是影象處理與計算機視覺裡面比較全的一本書了,幾乎涵蓋了影象視覺領域的各個方面。中文版的個人感覺也還可以,值得一看。)

數字影象處理 第三版 岡薩雷斯等著

Digital Image Processing

(附:數字影象處理永遠的經典,現在已經出到了第三版,相當給力。我的導師曾經說過,這本書寫的很優美,對寫英文論文也很有幫助,建議購買英文版的。)

計算機視覺:理論與演算法 Richard Szeliski著

Computer Vision: Theory and Algorithm

                (附:微軟的Szeliski寫的一本最新的計算機視覺著作。內容非常豐富,尤其包括了作者的研究興趣,比如一般的書裡面都沒有的Image Stitching和                       Image Matting等。這也從另一個側面說明這本書的通用性不如Sonka的那本。不過作者開放了這本書的電子版,可以有選擇性的閱讀。
                  http://szeliski.org/Book/
                  Multiple View Geometry in Computer Vision 第二版Harley等著
                 引用達一萬多次的經典書籍了。第二版到處都有電子版的。第一版曾出過中文版的,後來絕版了。網上也可以找到中英文版的電子版。)

計算機視覺:一種現代方法 DA Forsyth等著

Computer Vision: A Modern Approach

MIT的經典教材。雖然已經過去十年了,還是值得一讀。期待第二版

Machine vision: theory, algorithms, practicalities 第三版 Davies著

(附:為數不多的英國人寫的書,偏向於工業應用。)

數字影象處理 第四版 Pratt著

Digital Image Processing

(附:寫作風格獨樹一幟,也是影象處理領域很不錯的一本書。網上也可以找到非常清晰的電子版。)

(五)、小結

羅嗦了這麼多,實際上就是幾個建議:
(1)基礎書千萬不可以扔,也不能低價處理給同學或者師弟師妹。不然到時候還得一本本從書店再買回來的。錢是一方面的問題,對著全新的書看完全沒有看自己當年上過的課本有感覺。
(2)遇到有相關的課,果斷選修或者蹭之,比如隨機過程,小波分析,模式識別,機器學習,資料探勘,現代訊號處理甚至泛函。多一些理論積累對將來科研和工作都有好處。
(3)資金允許的話可以多囤一些經典的書,有的時候從牙縫裡面省一點都可以買一本好書。不過千萬不要像我一樣只囤不看。

五、影象處理繞不開的工具--OpenCV:

        OpenCV的全稱,是Open source Computer Vision Library,開放原始碼計算機視覺庫。也就是說,它是一套關於計算機視覺的開放原始碼的API函式庫。這也就意味著,(1)不管是科學研究,還是商業應用,都可以利用它來作開發;(2)所有API函式的原始碼都是公開的,你可以看到其內部實現的程式步驟;(3)你可以修改OpenCV的原始碼,編譯生成你需要的特定API函式。但是,作為一個庫,它所提供的,僅僅是一些常用的,經典的,大眾化的演算法的API。一個典型的計算機視覺演算法,應該包含以下一些步驟:(1)資料獲取(對OpenCV來說,就是圖片);(2)預處理;(3)特徵提取;(4)特徵選擇;(5)分類器設計與訓練;(6)分類判別;而OpenCV對這六個部分,分別(記住這個詞)提供了API。

        你可以將它理解為幼兒園小朋友過家家玩的積木,而OpenCV中的函式,則可以理解為一個一個的積木塊,利用所有或者部分積木塊,你可以快速的搭建起來具體的計算機視覺方面的應用(比如,字元識別,車牌識別,遺留物檢測)。想必你也已經發現,在利用OpenCV這個積木來搭建具體的計算機視覺應用的時候,真正核心的,應該是這些積木塊,如果你明白了積木塊的工作原理,那麼,是不是就可以不用這些積木塊了呢?完全正確!不過,一般部分情況下,我們不需要這麼做,因為,OpenCV已經幫你做好了一些工作(已經幫你做好了一些積木塊,直接拿來用就是了)。但是,諸如前面提到的特徵提取模組,很多情況下,OpenCV就無能為力了。這個時候,你就需要翻閱計算機視覺、模式識別、機器學習領域頂級會議、期刊、雜誌上面發表的文章了。然後,根據這些文章中闡述的原理和方法,來程式設計實現你要的東西。實際上,也就等於搭建一個屬於你私有的積木塊。其實,OpenCV中的每一個API函式,也就是這麼來的。

         如今,來自世界各地的各大公司、科研機構的研究人員,共同維護支援著opencv的開源庫開發。這些公司和機構包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋........

六、結語:

        隨著深度學習的大舉侵入,現在幾乎所有人工智慧方向的研究論文幾乎都被深度學習佔領了,傳統方法已經很難見到了。有時候在深度網路上改進一個非常小的地方,就可以發一篇還不錯的論文。並且,隨著深度學習的發展,很多領域的現有資料集內的記錄都在不斷重新整理,已經向人類記錄步步緊逼,有的方面甚至已經超越了人類的識別能力。

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

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

參考文件:

        https://www.zhihu.com/question/26836846

        https://blog.csdn.net/carson2005/article/details/6979806

        https://blog.csdn.net/wangss9566/article/details/54618507

        https://blog.csdn.net/qq_26499769/article/details/78989088

        http://blog.csdn.net/dcraw