1. 程式人生 > >零基礎小白,如何入門計算機視覺?

零基礎小白,如何入門計算機視覺?

計算機視覺是人工智慧技術的一個重要領域,打個比方(不一定恰當),我認為計算機視覺是人工智慧時代的眼睛,可見其重要程度。計算機視覺其實是一個很巨集大的概念,下圖是有人總結的計算機視覺所需要的技能樹。
這裡寫圖片描述
如果你是一個對計算機視覺一無所知的小白,千萬不要被這棵技能樹嚇到。沒有哪個人能夠同時掌握以上所有的技能,這棵樹只是讓你對計算機視覺有個粗淺的認識。

以下是我站在一個小白的視角給出一個入門計算機視覺的相對輕鬆的姿勢。

一、巨集觀認識

小白通常看到這麼多的細分方向大腦一片茫然,到底是學習人臉識別、物體跟蹤,又或者是計算攝影,三維重建呢?不知道該怎麼下手。其實這些細分方向有很多共通的知識,我的建議是心急吃不了熱豆腐,只有對計算機視覺這個領域有了一個初步的全面瞭解,你才能夠結合實際問題找到自己感興趣的研究方向,而興趣能夠支援一個自學的小白克服困難持續走下去。

1、入門書籍

既然說是入門,這裡就不推薦類似《 Multiple View Geometry in Computer Vision》這種雖然經典但是小白看了容易放棄的書了。

畫素級的影象處理知識是計算機視覺的底層基礎知識。不管你以後從事計算機視覺的哪個細分領域,這些基礎知識都是必須要了解的。即使一個急切入門的小白,這一關也必須走的踏實。看到網上有人說直接從某個專案開始,邊做邊學,這樣學的快。對此我表示部分贊成,原因是他忽略了基礎知識的重要性,腦子裡沒有基本的術語概念知識打底,很多問題他根本不知道如何恰當的表達,遇到問題也沒有思路,不知道如何搜尋,這會嚴重拖慢進度,也無法做較深入的研究,欲速則不達。

入門影象處理的基礎知識也不是直接去啃死書,否則幾個公式和術語可能就會把小白打翻在地。這裡推薦兩條途徑,都是從實踐出發並與理論結合:一個是OpenCV,一個是MATLAB。

OpenCV以C++為基礎,需要具備一定的程式設計基礎,可移植性強,執行速度比較快,比較適合實際的工程專案,在公司裡用的較多;MATLAB只需要非常簡單的程式設計基礎就可以很快上手,實現方便,程式碼比較簡潔,可參考的資料非常豐富,方便快速嘗試某個演算法效果,適合做學術研究。當然兩者搭配起來用更好啦。下面分別介紹一下。

用MATLAB學習影象處理

推薦使用岡薩雷斯的《數字影象處理(MATLAB版)》(英文原版2001年出版,中譯版2005年)。不需要一上來就全部過一遍,只需要結合MATLAB學習一下基本原理、影象變換、形態學處理、影象分割,以上章節強烈建議按照書上手動敲一遍程式碼(和看一遍的效果完全不同),其他章節可快速掃描一遍即可。但這本書比較注重實踐,對理論的解釋不多,理論部分不明白的可以在配套的岡薩雷斯的《數字影象處理(第二版)》這本書裡查詢,這本書主要是作為工具書使用,以後遇到相關術語知道去哪裡查就好。
這裡寫圖片描述

用OpenCV學習影象處理

OpenCV(Open Source Computer Vision Library)是一個開源跨平臺計算機視覺程式庫,主要有C++預研編寫,包含了500多個用於影象/視訊處理和計算機視覺的通用演算法。

學習OpenCV參考《學習OpenCV》或者《OpenCV 2 計算機視覺程式設計手冊》都可以。這兩本都是偏實踐的書,理論知識較少,按照書上的步驟敲程式碼,可以快速瞭解到OpenCV的強大,想要實現某個功能,只要學會查函式(在https://www.docs.opencv.org/查詢對應版本),調函式就可以輕鬆搞定。由於每個例子都有非常直觀的視覺化影象輸出,所以學起來比較輕鬆有趣。
這裡寫圖片描述

2、進階書籍

經過前面對影象處理的基本學習,小白已經瞭解了影象處理的基礎知識,並且會使用OpenCV或MATLAB來實現某個簡單的功能。但是這些知識太單薄了,並且比較陳舊,計算機視覺領域還有大量的新知識在等你。

同樣給你兩種選擇,當然兩個都選更佳。一本書是2010年出版的美國華盛頓大學Richard Szeliski寫的《Computer Vision: Algorithms and Application》;一本是2012年出版的,加拿大多倫多大學Simon J.D. Prince寫的《Computer Vision: Models, Learning, and Inference》。兩本書側重點不同,前者側重視覺和幾何知識,後者側重機器學習模型。當然兩本書也有互相交叉的部分。雖然都有中文版,但是如果有一定的英語閱讀基礎,推薦看英文原版(見文末獲取方式)。老外寫的書,圖和示例還是挺豐富的,比較利於 理解。
這裡寫圖片描述

《Computer Vision: Algorithms and Application》

這本書圖文並茂地介紹了計算機視覺這門學科的諸多大方向,有了前面《數字影象處理》的基礎,這本書裡有些內容你已經熟悉了,沒有那麼強的畏懼感。相對前面的影象處理基礎本書增加了許多新的內容,比如特徵檢測匹配、運動恢復結構、稠密運動估計、影象拼接、計算攝影、立體匹配、三維重建等,這些都是目前比較火非常實用的方向。如果有時間可以全書瀏覽,如果時間不夠,你可以根據興趣,選擇性的看一些感興趣的方向。這本書的中文版翻譯的不太好,可以結合英文原版看。

《Computer Vision: Models, Learning, and Inference》

該書從基礎的概率模型講起,涵蓋了計算機視覺領域常用的概率模型、迴歸分類模型、圖模型、優化方法等,以及偏底層的影象處理、多視角幾何知識,圖文並茂,並輔以非常多的例子和應用,非常適合入門。在其主頁:
http://www.computervisionmodels.com/
上可以免費下載電子書。此外還有非常豐富的學習資源,包括給教師用的PPT、每章節對應的開源專案、程式碼、資料集連結等,非常有用。
這裡寫圖片描述


二、深入實踐

當你對計算機視覺領域有了比較巨集觀的瞭解,下一步就是選一個感興趣的具體的領域去深耕。這個時期就是具體程式設計實踐環節啦,實踐過程中有疑問,根據相關術語去書裡查詢,結合Google,基本能夠解決你大部分問題。

那麼具體選擇什麼方向呢?

如果你實驗室或者公司有實際的專案,最好選擇當前專案方向深耕下去。如果沒有具體方向,那麼繼續往下看。

我個人認為計算機視覺可以分為兩大方向:基於學習的方法和基於幾何的方法。其中基於學習的方法最火的就是深度學習,而基於幾何方法最火的就是視覺SLAM。下面就這兩個方向給出一個相對輕鬆的入門姿勢。

1、深度學習

深度學習(Deep Learning)的概念是Hinton等人於2006年提出的,最早最成功的應用領域就是計算機視覺,經典的卷積神經網路就是為專門處理圖片資料而生。目前深度學習已經廣泛應用在計算機視覺、語音識別、自然語言處理、智慧推薦等領域。

學習深度學習需要一定的數學基礎,包括微積分、線性代數,很多小白一聽到這些課程就想起了大學時的噩夢,其實只用了非常基礎的概念,完全不用擔心。不過如果一上來就啃書本,可能會有強烈的畏難情緒,很容易早早的放棄。

Andrew Ng (吳恩達)的深度學習視訊課程我覺得是一個非常好的入門資料。首先他本人就是斯坦福大學的教授,所以很瞭解學生,可以很清晰形象、深入淺出的從最基本的導數開始講起,真的非常難得。
這裡寫圖片描述
該課程可以在網易雲課程上免費觀看,有中文字幕,但沒有配套習題。也可以在吳恩達自己創辦的線上教育平臺Coursera上學習,有配套習題,限時免費,結業通過後有相應證書。

該課程非常火爆,不用擔心聽不懂,網上有數不清的學習筆記可以參考。簡直小白入門必備佳餚。

2、視覺SLAM

SLAM(Simultaneous Localization and Mapping)(詳見《SLAM初識》),中文譯作同時定位與地圖建立。視覺SLAM就是用攝像頭作為主感測器,用拍攝的視訊流作為輸入來實現SLAM。視覺SLAM廣泛應用於VR/AR、自動駕駛、智慧機器人、無人機等前沿領域。

視覺SLAM最好的入門資料是高翔(清華博士,慕尼黑理工博後)的《視覺SLAM十四講-從理論到實踐》。該書每章節都涵蓋了基礎理論和程式碼示例,深入淺出,非常注重理論與實踐結合,大大降低了小白的學習門檻。
這裡寫圖片描述

好了,入門介紹到此為止,你可以開始你的計算機視覺學習之旅了!
這裡寫圖片描述
溫馨提示:本文提到的部分書籍資料,公眾號:“計算機視覺life” 已經為你準備好了,公眾號下方回覆“入門”即可獲取。