1. 程式人生 > >計算機視覺新手入門:大佬推薦我這樣學習 計算機視覺新手入門:大佬推薦我這樣學習

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

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

2018年03月21日 14:29:22 閱讀數:14174

計算機視覺從入門到放肆

一、基礎知識

1.1 計算機視覺到底是什麼?

計算機視覺是一門研究如何讓機器“看”的科學

更進一步的說,就是使用攝像機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的影象。

作為一門科學學科,計算機視覺研究相關的理論和技術,檢視建立能夠從影象或者多維資料中獲取’資訊’的人工智慧系統。

1.2 影象
當程式在讀取一張圖片時,需要考慮以下資料:

  • 高度、寬度

假如一張照片的解析度為:1920*1080(單位為dpi,全稱為 dot per inch),1920 就是照片的寬度,1080 就是圖片的高度。

  • 深度

  • 儲存每個畫素所用的位數,比如正常RGB的深度就是 2^8 * 3 = 256 * 3 = 768 , 那麼此類圖片中的深度為768,每個畫素點都能夠代表768中顏色。

  • 通道數

  • RGB圖片就是有三通道,RGBA類圖片就是有四通道

  • 顏色格式

  • 是將某種顏色表現為數字形式的模型,或者說是一種記錄影象顏色的方式。比較常見的有:RGB模式、RGBA模式、CMYK模式、點陣圖模式、灰度模式、索引顏色模式、雙色調模式和多通道模式。

  • more
    影象中的知識點太多,做基本影象處理,瞭解以上知識個人感覺可以了。等到以後如果做深入研究,或許有機會做更多的學習

  • 1.3 視訊

    原始視訊 = 圖片序列,視訊中的每張有序圖片被稱為“幀(frame)”。壓縮後的視訊,會採取各種演算法減少資料的容量,其中IPB就是最常見的。

    • 位元速率

    資料傳輸時單位時間傳送的資料位數,通俗一點的理解就是取樣率,單位時間取樣率越大,精度就越高,即解析度越高

  • 幀率

  • 每秒傳輸的幀數,fps(有沒有一種似曾相識的感覺~~~),全稱為 frames per second

  • 解析度

  • 每幀圖片的解析度

  • 清晰度

  • 平常看片中,有不同清晰度,實際上就對應著不同的解析度

  • IPB

  • 在網路視訊流中,並不是把每一幀圖片全部發送到客戶端來展示,而是傳輸每一幀的差別資料(IPB),客戶端然後對其進行解析,最終補充每一幀完整圖片

    1.4 攝像機

    在實際應用當中,基本上都是通過不同種類的攝像機來獲取資料,然後傳送給服務端(AI Server)進行處理,分類有:

    • 監控攝像機(網路攝像機和模擬攝像機)
    • 行業攝像機(超快動態攝像機、紅外攝像機、熱成像攝像機等)
    • 智慧攝像機
    • 工業攝像機

    1.5 CPU和GPU

    我想大家肯定是知道,目前很多人工智慧計算都遷移到GPU上進行,tensorflow甚至還有cpu和gpu版本,所以其兩者的差別和使用方法,這是繞不開的問題。

    廢話少說,先來上圖:

    • 架構上的對比

    這裡寫圖片描述

    • 綠色:計算單元
    • 橙紅色:儲存單元
    • 橙黃色:控制單元
  • 整體對比
    這裡寫圖片描述

    • Cache、Local Memory : CPU > GPU
    • Threads(執行緒數):GPU > CPU
    • Registers(暫存器):GPU > CPU
    • SIMD Unit(單指令多資料流):GPU > CPU

    CPU在設計上,低延遲,可是低吞吐量,CPU的ALU(算數運算單元)雖然少,可是很強大,可以在很少的時鐘週期內完成算數計算,或許數量少,就可以任性的減少時鐘週期,所以其頻率非常高,能夠達到1.532 ~ 3 (千兆,10的9次方)。
    大快取容量、複雜的邏輯控制單元也可以減低延遲。

    GPU在設計上,高延遲,可是高吞吐量。GPU的特點是有很多的ALU和很少的cache. 快取的目的不是儲存後面需要訪問的資料的,這點和CPU不同,而是為thread提高服務的。如果有很多執行緒需要訪問同一個相同的資料,快取會合並這些訪問,然後再去訪問dram(因為需要訪問的資料儲存在dram中而不是cache裡面),獲取資料後cache會轉發這個資料給對應的執行緒,這個時候是資料轉發的角色。但是由於需要訪問dram,自然會帶來延時的問題。

    參考連結

    • Cuda (Compute Unified Device Architecture)

    是顯示卡廠商NVIDIA推出的運算平臺,採用平行計算架構,是GPU能夠解決複雜的計算問題。包含了CUDA指令集架構以及GPU內部的平行計算引擎。

    安裝教程自行搜尋腦補就行。

    1.6 程式語言 + 數學基礎

    • python

    推薦作為入門語言,簡單容易上手,需要了解一些庫:numpy、pandas、matplotlib等。

  • C++

  • 作為深入瞭解並嘗試進行優化,C++必不可少,也是編寫並修改的最佳語言。當然,如果你瞭解C、Matlab等語言那也是甚好的。

  • 線性代數

  • 可以把重點放在矩陣運算上。

  • 概率統計

  • 瞭解基本概率統計知識、高斯分佈、中值、標準差和方差等概念。

  • MachineLearning

  • 能夠用公式表示代價函式、使用低度下降法來優化模型。當然機器學習內容實在是很多,建議能夠完整走一遍,也可以看斯坦福的CS229課程

    1.7 計算機視覺的應用

    計算機視覺之於未來人工智慧,就好比眼睛之於人的重要性一樣。是未來很多領域自動化獲取資料的主要渠道之一,也是處理資料的重要工具之一。目前可以預想到的應用主要有如下:
    - 無人駕駛
    - 無人安防
    - 人臉識別
    - 文字識別
    - 車輛車牌識別
    - 以圖搜圖
    - VR/AR
    - 3D重構
    - 醫學影象分析
    - 無人機
    - more ……

    二、推薦參考書和公開課

    2.1 參考書籍

    理論入門書籍

  • 《Learning OpenCV》

  • 計算機視覺必備工具

  • 《Computer Vision : Algorithms and Applications》

  • 計算機視覺演算法和應用,屬於進階篇,這樣的書一般都有中文譯本。本人也是幾經周折,找到了一些資料,供大家下載學習。

    2.2 公開課

    這個課程作為入門非常合適,裡面也會分享一些乾貨

  • Stanford CS231N

  • B站資源連結

    這兩門課我覺得經典的課程,如果認真學完的話,基本上是已經入門了,找一般的工作工作應該是沒有問題。

    2.3 網站

    這個網站是國外大佬從1994年開始專注於計算機視覺研究,上面收錄了很多與此相關文獻,大家可以看一些里程碑文獻,讓自己能夠更好地理解視覺發展歷程。

  • vision.stanford

  • 沒事上斯坦福大學計算機視覺研究團隊官網看看,大佬們有沒有發表一些研究成果文章,學習一番之後,將其翻譯成blog也不失為一個好的學習方法(裝逼方法)。

    這兩個網站已經足夠了,不要太多,學好才是最關鍵的。

    三、你還是需要學習一些深度學習知識

    關於深度學習,評價最高的莫過於:《Deep Learning》Written by lan Goodfellow and YoshuaBengio

    這裡寫圖片描述

    購買連結,這本AI聖經我就不多廢話了,攢錢買回去好好修煉吧!

    四、開源框架必不可少

    關於開源框架,仁者見仁智者見智,我也免得引起戰爭,所以就羅列給一下個人不成熟的小建議。

    • Caffe

    深度學習卷積神經網路開源框架。

  • Tensorflow

  • 開源機器學習深度學習框架。

  • (Torch and Maxnet)

  • 其他深度學習開源框架

  • ffmpeg

  • 強大的視訊處理工具

    流行框架的對比圖:

    這裡寫圖片描述

    參考連結

    五、深入,則必須閱讀相關文獻

    當我們需要學習各種經典模型的時候,到哪裡去找資料呢?一般大家都會直接wikipedia,可是我只想說,上面的也只是英文版漢譯過來的,最好還是找一手資料,不然你吸收的知識,就不知道是被多少人消化過多少遍後得來的。當然也是有好的,不過那些大牛都是直接看原版才能得出更加深刻的結論,所以看原版文獻是一件很重要的學習途徑,不然就永遠裝不了*(學習不到最純正的knowledge)。

    5.1 里程碑式的文獻

    先熟悉所在方向的發展歷程,歷程中的里程碑式的文獻必須要精讀。
    
    例如,深度學習做目標檢測,RCNN、Fast RCNN、Fater RCNN、SPPNET、SSD和YOLO等模型;又例如,深度學習做目標跟蹤,DLT、SO-DLT等等;再例如,對抗網路GAN、CGAN、DCGAN、LAPGAN等等。
    
      
    • 1
    • 2
    • 3

    5.2 文獻網站

    [arxiv](https://arxiv.org/list/cs.CV/recent) :每天去更新一下別人最新的工作
    
      
    • 1

    5.3 計算視覺的頂會

    • ICCV:國際計算機視覺大會
    • CVPR:國際計算機視覺與模式識別大會
    • ECCV:歐洲計算機視覺大會

    5.4 計算機視覺的頂刊

    • PAMI:IEEE 模式分析與機器智慧雜誌
    • IJCV:國際計算機視覺雜誌

    六:總結

    無論別人給出多好的資料,最終還是要靠自己踏實下來,對各種知識點細嚼慢嚥。AI 不易,且行且珍惜


    ~_~


    我個人對計算機視覺非常感興趣,接下來會不斷的分享各種關於CV的學習心得和乾貨。小白上路,大家如果能施捨一些star或者follow將會是給我最大的動力。
    - Blog
    - Github

    計算機視覺從入門到放肆