1. 程式人生 > >怎麼學習計算機視覺?

怎麼學習計算機視覺?

本文的內容主要借鑑CSDN博主NodYoung的一篇文章,但是不知道什麼原因,該博主的文章現已刪除,這裡,我根據自己的理解大致說明一下,對於一個初學小白來說,該如何學習計算機視覺。(有關計算機視覺入門的其它知識,可以閱讀另一篇文章計算機視覺入門必讀)

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

1.1.1 簡單介紹一下C++和python的各自特點:
C++:偏底層,執行效率高,適合嵌入式等平臺上使用;在視覺領域,C++生態好,用的人多,網上找資源很方便。 缺點是開發效率實在太低了,關於這一點如果你只是專注於影象處理的話可能感受不是那麼真切,因為opencv庫做得足夠好。但是當你做到機器學習後,opencv就顯得有些力不從心了,雖然它也包含一些SVM、神經網路等的簡單實現,但畢竟不擅長。

python:全能語言,幹啥都行,並且都相對擅長。影象處理,opencv支援有python介面;科學計算,其功能類似於matlab了:機器學習及深度學習,python是最好用的,沒有之一;爬蟲等網路應用,豆瓣就是用python寫的;簡而言之,方便,實在太方便了。
當然python也有自己的另一面。執行效率不高,這一點做嵌入式開發的可能比較忌諱。但如今手機的記憶體都升到6G了,tensorflow都可以在移動端跑了,Python也都可以用來控制STM32了,未來很難說。

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

1.1.2 C++和python學習資源推薦
C++:
初級入門
如果你是一個無程式設計經驗的C++初學者,或者有其它語言經驗的C++初學者,那強烈推薦下面的書籍。
C++ Primer作者:Stanley Lippman, Josée Lajoie, and Barbara E. Moo (更新到C++11) (不要和 C++ Primer Plus–Stephen Prata搞混了)近1千頁,本書透徹的介紹了C++,以淺顯和詳細的方式講到C++語言差不多所有內容。2012年8月發行的第五版包含C++11的內容
電子書:第三版(中文)、第四版(中文)、第五版(英文版)
Accelerated C++ 作者:Andrew Koenig and Barbara Moo 這本書覆蓋了和C++ Primer一樣的內容,但厚度只有C++ Primer的四分之一。這主要是因為本書面向的不是程式設計的初學者,而是有其它語言經驗的C++初學者。對於初學者,本書學習曲線稍顯陡峭,但對於能克服這一點的學習者而言,它確實非常緊湊的介紹了C++這門語言。
電子書:中文版,英文版
C++程式設計思想(Thinking in C++) 作者:Bruce Eckel 共兩卷,第二卷主要將標準庫,但還是不錯的。
電子書:第二版V2(英文版)、第二版V2(中文版)
最實用
Effective C++ 作者:Scott Meyers 本書以瞄準成為C++程式設計師必讀的第二本書籍而寫,Scott Meyers成功了。早期的版本面向從C語言轉過來的程式設計師。第三版修改為面向從類似Jave等語言轉來的程式設計師。內容覆蓋了50多個很容易記住的條款,每個條款深入淺出(並且有趣)講到了你可能沒有考慮過的C++規則。
電子書:第三版(英文)、第三版(中文)
C++程式設計原理與實踐 (Programming: Principles and Practice Using C++ )作者:Bjarne Stroustrup C++之父寫的C++入門書籍。本書面向沒有程式設計經驗的初學者,但相信有程式設計經驗的人也能從本書中學到不少東西。
電子書:中文版
python:
  基礎部分看廖雪峰的python教程就可以了,然後就是用哪一塊學哪一塊了。python學起來很簡單,看別人程式碼的過程就是學習的過程。對於不熟悉的用法多搜下官方文件,如python, numpy,pandas, matplot, scikit-learn。這裡有幾張python各種庫的小抄表其實直接在網上搜這幾張表也都比較方便。課程的話,我之前上過一些七月演算法的課程,講得不好,多少會給你一些知識體系和各種學習資料,總體不推薦或跳著看。python的開發環境值得說一下,因為有太多選擇,這裡比較建議使用pycharm和jupyter notebook吧,具體參考python入門環境搭建。下面,推薦一些入門和進階的書籍
初級入門
《簡明Python教程》
《父與子的程式設計之旅》
《笨辦法學Python》
《深入淺出Python》
《像電腦科學家一樣思考python》
《Python程式設計:入門到實踐》
《廖雪峰Python教程》
《Python 入門指南》
進階
《Python學習手冊》
《Python核心程式設計第3版》
《Python進階》
《編寫高質量Python程式碼的59個有效方法》
《Python CookBook》
《流暢的Python》
《Python原始碼剖析》
1.2 程式設計平臺(windows, linux)
  新手肯定都用windows了,學習過程中發現在windows上搞不定了,先忍幾次,然後掉頭就去學linux了。一定是這樣。 哪些在windows上真的搞不定呢?比如:deeplearning,或最新論文中提出的視覺開源演算法。 不過對我們而言,linux並不需要了解太深。裝個ubuntu系統,常用的檔案操作、程式編譯等知道就OK了。我完全是在使用的過程中現用現學,手邊常備一本書《鳥哥的linux私房菜》。

2.視覺知識
  計算機視覺實在很廣了,目前比較熱門的方向總體上分為兩大塊:一塊是深度學習,一塊做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技術:這一部分了解不多,不做太多評價,有興趣的可以自己谷歌一下

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

傳統機器學習一般也就決策樹、神經網路、支援向量機、boosting、貝葉斯網等等吧。方法挺多的,同一類方法不同的變形更多。除了這些監督式學習,還有非監督學習、半監督學習、強化學習。當然還有一些降維演算法(如PCA)等。對這些個人整體把握的也不是特別好,太多了。
學習資料,吳恩達的coursera課程《Machine Learning》,他正在出一本新書《MACHINE LEARNING YEARNING》,說好陸續更新的,剛更新一點就沒了,本來想翻譯學習一下。個人比較喜歡他的課程風格話說今天中午傳出新聞,吳恩達從百度離職了。——執筆於2017.03.22,簡單易懂。還有李航的《統計學習方法》和周志華的《機器學習》,兩本在國內機器學習界成為經典的書。
  深度學習主要的發展就是CNN、RNN;從去年起GAN火起來了,現在如日中天;增強學習現在發展也非常快,有些名校如CMU都開這方面課程了。
資料上面說過就不說了喜歡高雅的人也可以看看這個深度學習論文閱讀路線圖 ,說說在使用deeplearning時用哪個庫吧。目前為止還沒有大一統的趨勢,連各個大公司都是自己用自己開發的,一塊大肥肉大家都不捨得放棄。感覺在這方面沒必要太計較,用相對簡單的和大家都用的(生態好) 。

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

微積分:比如影象找邊緣即求微分在數字影象裡是做差分(離散化)啦,光流演算法裡用到泰勒級數啦,空間域轉頻域的傅立葉變換啦,還有牛頓法、梯度下降、最小二乘等等這些都用的特別普遍了。
  概率論與統計:這個比較高深,是應用在機器學習領域裡最重要的數序分支。應用比如:條件概率、相關係數、最大似然、大數定律、馬爾可夫鏈等等。 浙大的《概率論與數理統計》感覺還行,夠用。
  線性代數與矩陣:數字影象本身就是以矩陣的形式呈現的,多個向量組成的樣本也是矩陣這種形式非常常見,大多機器學習演算法裡每個樣本都是以向量的形式存在的,多個矩陣疊加則是以張量(tensor)的形式存在google深度學習庫tensorflow的字面意思之一。具體應用,比如:世界座標系->相機座標系->影象座標系之間的轉換,特徵值、特徵向量,範數等。 推薦國外的上課教材《線性代數》。因為浙大的那本教材感覺實在不太行,買過之後還是又買了這本。
  凸優化:這個需要單獨拎出來說一下。因為太多問題(尤其機器學習領域)都是優化問題(求最優),凸優化是裡面最簡單的形式,所以大家都在想辦法怎麼把一般的優化問題轉化為凸優化問題。至於單純的凸優化理論,好像已經比較成熟了。在機器學習裡,經常會看到什麼求對偶問題、KKT條件等,潛下心花兩天學一學。 建議備一份高校關於凸優化的教學課件,大家對這一塊畢竟比較生,缺乏系統感。比如北大的《凸優化》課程。這些數學知識沒必要系統學習,效率低又耗時。畢竟大家都有本科的基礎,夠了。一般用到的時候學,學完之後總結一下。

相關推薦

深度學習計算機視覺崗位 面試問題總結

1. 超引數和引數 參考這篇部落格 引數是模型自己學習的部分,比如卷積核的weight以及bias 超引數是根據經驗設定使得模型具有好的效果的引數,CNN中常見的超引數有: 1卷積層層數 2全連線層層數 3 卷積核size 4卷積核數目 5 learning rate 6正則化引數

計算機視覺新手入門:大佬推薦我這樣學習 計算機視覺新手入門:大佬推薦我這樣學習

原 計算機視覺新手入門:大佬推薦我這樣學習 2018年03月21日 14:29:22 貓神戰之貓膩 閱讀數:14174

從零到一學習計算機視覺:朋友圈爆款背後的計算機視覺技術與應用 | 公開課筆記...

分享人 | 葉聰(騰訊雲 AI 和大資料中心高階研發工程師)整    理 | Leo出    品 | 人工智

如何高效的學習計算機視覺

從工業和學術界分析 一、學術方向 計算機視覺和傳統機器學習一樣只是一個子類,所以理論上計算機視覺的演算法都能用在機器學習上,但是計算機視覺的 特點是影象的本身屬性,影象成像原理和表示方式更加抽象。這樣將問題歸結到幾個點上: 學派體系 機器學習的七大學派 七大學派個人理解在計算機中扮演的角

PyTorch深度學習計算機視覺框架

Taylor Guo @ Shanghai - 2018.10.22 - 星期一 影象分類 VGG ResNet DenseNet MobileNetV2 ResNeXt SqueezeNet ShuffleNet ShuffleNet V2 位姿估計 CPM: Convolutional Po

【收藏】2018年不容錯過的20大人工智慧/機器學習/計算機視覺等頂會時間表

點選有驚喜 目錄 人工智慧/機器學習計算機視覺/模式識別自然語言處理/計算語言學體系結構資料探勘/資訊檢索計算機圖形學 人工智慧/機器學習 1. AAAI 2018 會議時間:2月2日~7日 會議地點: 新奧爾良市,美國 AAAI是人工智慧領域的主要學術

CS231n: 深度學習計算機視覺(中文版)

CS231n官方筆記授權翻譯總集篇釋出 - 智慧單元 - 知乎專欄   CS231n課程筆記翻譯:線性分類筆記(中) - 杜客的文章 - 知乎專欄   CS231n課程筆記翻譯:線性分類筆記(下) - 智慧單元 - 知乎專欄  CS231

學習計算機視覺:(三)深度學習計算機視覺中的應用

1.影象分類:卷積神經網路CNN 影象分類概念 首先,影象分類是解決是什麼的問題? 如下圖,給定一幅圖片,網路能夠給出“最像”什麼的概率: 影象分類使用的技術 •卷積神經網路CNN 它是

怎麼學習計算機視覺

本文的內容主要借鑑CSDN博主NodYoung的一篇文章,但是不知道什麼原因,該博主的文章現已刪除,這裡,我根據自己的理解大致說明一下,對於一個初學小白來說,該如何學習計算機視覺。(有關計算機視覺入門的其它知識,可以閱讀另一篇文章計算機視覺入門必讀) 1.程式設

非計算機,如何學習計算機視覺

這兩年,計算機視覺似乎火了起來。生物醫學、機械自動化、土木建築等好多專業的學生都開始研究其在各自領域的應用,一個視覺交流群裡三分之一以上都不是計算機相關專業的。當然,我也是其中一員。 對於非計算機相關專業的學生而言,學習過程中往往缺少交流機會,不容易把握知識的全貌。這裡僅

機器學習-計算機視覺和卷積網路CNN

概述 對於計算機視覺的應用現在是非常廣泛的,但是它背後的原理其實非常簡單,就是將每一個畫素的值pixel輸入到一個DNN中,然後讓這個神經網路去學習這個模型,最後去應用這個模型就可以了。聽起來是不是很簡單,其實如果大家深入研究的話,這裡面還是有很多內容去學習的,例如:咱們的圖片大小可能不一樣,同一張圖片不

常用牛人主頁鏈接(計算機視覺、模式識別、機器學習相關方向,陸續更新。。。。)【轉】

short psu works charles 貝葉斯 learning 數學 ocr 相關 轉自:http://blog.csdn.net/goodshot/article/details/53214935 目錄(?)[-] The Kalman

常用牛人主頁鏈接(計算機視覺、模式識別、機器學習相關方向,陸續更新

bject detail ebo abi err 技術 arch college eoj 牛人主頁(主頁有很多論文代碼) Serge Belongie at UC San Diego Antonio Torralba at MIT Alexei Ffros at CMU C

計算機視覺---初級學習

計算機 圖像 png 視覺 com 證書 分享 工程目錄 http opencv免配置方法: 工程目錄下多出倆文件 Mat M(3,2,CV_8UC3,Scalar(0,0,225)); 高度 寬度 每個位置是占3字節,如果是圖像,是rgb, 元素是8

計算機視覺、機器學習相關領域論文和源代碼小集合

resource ecs kit ide ipo -s 特征提取 sensor iss 一、特征提取Feature Extraction: · SIFT [1] [Demo program][SIFT Library] [VLFeat] &

計算機視覺』SSD源碼學習_基於TensorFlow(待續)

ID 使用 結構 odi AS pap pts blank sets 原項目地址:SSD-Tensorflow 根據README的介紹,該項目收到了tf-slim項目中包含了多種經典網絡結構(分類用)的啟發,使用了模塊化的編程思想,可以替換檢查網絡的結構,其模塊組織如下:

網易筆試題——計算機視覺_深度學習方向

選擇題 策略 空間 線性 對比 jks rbo 數字圖像處理 計算 選擇題知識點: 【1】大津法(OSTU算法)閾值分割中,閾值自動選擇的思路是: C:最大化類間方差法選擇閾值 解析:大津法(OTSU)是一種確定圖像分割閾值的算法,由日本學者大津於1979年提出;原理上

計算機視覺』RCNN學習_其二:Mask-RCNN

參考 檢測 語義 tail font 技術 src spa sta 參考資料 Mask R-CNN Mask R-CNN詳解 開源代碼: Tensorflow版本代碼鏈接; Keras and TensorFlow版本代碼鏈接; MxNet版本代碼鏈接

計算機視覺學習記錄 - Implementing a Neural Network from Scratch - An Introduction

dict 實踐 {} ann gen lua tps rst 損失函數 0 - 學習目標   我們將實現一個簡單的3層神經網絡,我們不會仔細推到所需要的數學公式,但我們會給出我們這樣做的直觀解釋。註意,此次代碼並不能達到非常好的效果,可以自己進一步調整或者完成課後練習來進行

【逐夢AI】深度學習計算機視覺應用實戰課程(BAT工程師主講,無人汽車,機器人,神經網絡)

bat 神經網絡 深度學習 深度學習框架 0基礎 http 提取 框架 以及 【逐夢AI】深度學習與計算機視覺應用實戰課程(BAT工程師主講,無人汽車,機器人,神經網絡)網盤地址:https://pan.baidu.com/s/1G0_WS-uHeSyVvvl_4bQnlA