歡迎登錄中國視覺網!
應用案例頻道
APPLICATION OF CASE
位置導航:首頁 >> 應用案例 >> 應用案例 >> 如何入門計算機視覺,10條你不能不看的總結

如何入門計算機視覺,10條你不能不看的總結


時間:2020-01-08

應用領域:機器視覺


導讀

   目前,人工智能,機器學習,深度學習,計算機視覺等已經成為新時代的風向標。這篇文章主要介紹了下面幾點:

   第一點,如果說你要入門計算機視覺,需要了解哪一些基礎知識?

   第二點,既然你要往這方面學習,你要了解的參考書籍,可以學習的一些公開課有哪些?

   第三點,可能是大家都比較感興趣的,就是計算機視覺作為人工智能的一個分支,它不可避免的要跟深度學習做結合,而深 度學習也可以說是融合到了計算機視覺、圖像處理,包括我們說的自然語言處理,所以本文也會簡單介紹一下計算機視覺與深度學習的結合。

   第四點,身處計算機領域,我們不可避免的會去做開源的工作,所以本文會給大家介紹一些開源的軟件。

   第五點,要學習或者研究計算機視覺,肯定是需要去閱讀一些文獻的,那么我們如何開始閱讀文獻,以及慢慢的找到自己在這個領域的方向,這些都會在本文理進行簡單的介紹。

1.基礎知識

   接下來要介紹的,第一點是計算機視覺是什么意思,其次是圖像、視頻的一些基礎知識。包括攝像機的硬件,以及 CPU 和 GPU 的運算。

   在計算機視覺里面,我們也不可避免的會涉及到考慮去使用 CPU 還是使用 GPU 去做運算。然后就是它跟其他學科的交叉,因為計算機視覺可以和很多的學科做交叉,而且在做學科交叉的時候,能夠發揮的意義和使用價值也會更大。另外,對于以前并不是做人工智能的朋友,可能是做軟件開發的,想去轉型做計算機視覺,該如何轉型?需要學習哪些編程語言以及數學基???這些都會在第一小節給大家介紹。

2.什么是計算機視覺

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

   更進一步的說,就是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,并進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給一起檢測的圖像 ,作為一個科學學科,計算機視覺研究相關的理論和技術,視圖建立能夠從圖像或者多維數據中獲取“信息”的人工智能系統。

   目前,非?;鸕腣R、AR,3D處理等方向,都是計算機視覺的一部分。

計算機視覺的應用

   無人駕駛、無人安防、人臉識別、車輛車牌識別、以圖搜圖、VR/AR、3D重構、醫學圖像分析、無人機、其他。

   了解了計算機視覺是什么之后,給大家列了一下當前計算機視覺領域的一些應用,幾乎可以說是無處不在,而且當前最火的所有創業的方向都涵蓋在里面了。其中包括我們經常提到的無人駕駛、無人安防、人臉識別。人臉識別相對來說已經是一個最成熟的應用領域了,然后還有文字識別、車輛車牌識別,還有以圖搜圖、 VR/AR,還包括 3D 重構,以及當下很有前景的領域–醫學圖像分析。

   醫學圖像分析他在很早就被提出來了,已經研究了很久,但是現在得到了一個重新的發展,更多的研究人員包括無論是做圖像的研究人員,還是本身就在醫療領域的研究人員,都越來越關注計算機視覺、人工智能跟醫學圖像的分析。而且在當下,醫學圖像分析也孕育了不少的創業公司,這個方向的未來前景還是很值得期待的。然后除此之外還包括無人機,無人駕駛等,都應用到了計算機視覺的技術。

3.圖像和視頻,你要知道的概念

   圖像 ,一張圖片包含了:維數、高度、寬度、深度、通道數、顏色格式、數據首地址、結束地址、數據量等等。

舉例:JPEG壓縮

1、將原始圖像分為8*8的小塊,每個block里有64pixels。

2、將圖像中每個8*8的block進行DCT變換(越是復雜的圖像,越不容易被壓縮)

3、不同的圖像被分割后,每個小塊的復雜度不一樣,所以最終的壓縮結果也不一樣

   當一個像素占用的位數越多時,它所能表現的顏色就更多,更豐富。

   舉例:一張400*400的8位圖,這張圖的原始數據量是多少?像素值如果是整型的話,取值范圍是多少?

1,原始數據量計算:400 * 400 * ( 8/8 )=160,000Bytes

(約為160K)

2,取值范圍:2的8次方,0~255

   圖像深度:存儲每個像素所用的位數(bits)

   圖片格式與壓縮:常見的圖片格式JPEG,PNG,BMP等本質上都是圖片的一種壓縮編碼方式

視頻

   原始視頻=圖片序列。

   視頻中的每張有序圖片稱為“?。╢rame)”。壓縮后的視頻,會采取各種算法減少數據的容量,其中IPB就是最常見的。

   I?。罕硎竟丶?,可以理解為這一幅畫面的完整保留;解碼時只需要本幀數據就可以完成(因為包含完整畫面)

   P?。罕硎鏡氖欽庖恢「暗囊桓齬丶。ɑ騊?。┑牟畋?,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀畫面差別的數據)

   B幀表示雙向差別幀,記錄的本幀與前后幀的差別(具體比較復雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,要通過前后畫面與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼比較麻煩。

   碼率:碼率越大,體積越大;碼率越小,體積越小。

   碼率就是數據傳輸時單位時間傳送的數據位數,一般我們用的單位是kbps即千位每秒。也就是取樣率(并不等同于采樣率,采樣率用的單位是Hz,表示每秒采樣的次數),單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真,圍繞這個核心衍生出來cbr(固定碼率)與vbr(可變碼率),碼率越高越清晰,反之則畫面粗糙而且多馬賽克。

幀率

   影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果碼率為變量,則幀率也會影響體積,幀率越高,每秒鐘經過的畫面就越多,需要的碼率也越高,體積也越大。

   幀率就是在一秒鐘時間里傳輸的圖片的幀數,也可以理解為圖形處理器每秒鐘刷新的次數。

分辨率

   影響圖像大小,與圖像大小成正比;分辨率越高,圖像越大;分辨率越低,圖像越小。

清晰度

   在碼率一定的情況下,分辨率與清晰度成反比關系:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰

   在分辨率一定的情況下,碼率與清晰度成正比關系:碼率越高,圖像越清晰;碼率越低,圖像越不清晰

帶寬、幀率

   例如在ADSL線路上傳輸圖像,上行帶寬只有512Kbps,但要傳輸4路CIF分辨率的圖像。按照常規,CIF分辨率建議碼率是512Kbps,那么照此計算就只能傳一路,降低碼率勢必會影響圖像質量。那么為了確保圖像質量,就必須降低幀率,這樣一來,即便降低碼率也不會影響圖像質量,但在圖像的連貫性上會有影響。

4.攝像機

   攝像機的分類:監控攝像機(網絡攝像機和摸你攝像機)、不同行業需求的攝像機(超寬動態攝像機、紅外攝像機、熱成像攝像機等)、智能攝像機、工業攝像機。

   當前的攝像機硬件我們可以分為監控攝像機、專業行業應用的攝像機、智能攝像機和工業攝像機。而在監控攝像機里面,當前用的比較多的兩個類型一個叫做網絡攝像機,一個叫做模擬攝相機,他們主要是成像的原理不太一樣。

   網絡攝像機一般比傳統模擬攝相機的清晰度要高一些,模擬攝像機當前應該說是慢慢處于一個淘汰的狀態,它可以理解為是上一代的監控攝像機,而網絡攝像機是當前的一個主流的攝相機,大概在 13 年的時候,可能市場上 70% 到 80% 多都是模擬攝像機,而現在可能 60% 到 70% 都是的網絡攝像機。

   除此之外,不同的行業其時會有特定的相機,想超寬動態攝像機以及紅外攝像機、熱成像攝像機,都是在專用的特定的領域里面可能用到的,而且他獲得的畫面跟圖像是完全不一樣的。如果我們要做圖像處理跟計算機視覺分析,什么樣的相機對你更有利,我們要學會利用硬件的優勢。

   如果是做研究的話一般是可以控制我們用什么樣的攝相機,但如果是在實際的應用場景,這個把控的可能性會稍微小一點,但是在這里你要知道,有些問題可能你換一種硬件,它就能夠很好的被解決,這是一個思路。

   還有些問題你可能用算法弄了很久也沒能解決,甚至是你的效率非常差,成本非常高,但是稍稍換一換硬件,你會發現原來的問 題都不存在了,都被很好的解決了,這個就是硬件對你的一個新的處境了。

   包括現在還有智能攝像機、工業攝像機,工業攝像機一般的價格也會比較貴,因為他專用于各種工業領域,或者是做一些精密儀器,高精度高清晰度要求的攝像機。

5.CPU和GPU

   接下來給大家講一下 CPU 跟 GPU,如果說你要做計算機視覺跟圖像處理,那么肯定跳不過 GPU 運算,GPU 運算這一塊可能也是接下來需要學習或者自學的一個知識點。

   因為可以看到,當前大部分關于計算機視覺的論文,很多實現起來都是用 GPU 去實現的,但是在應用領域,因為 GPU 的價格比較昂貴,所以 CPU 的應用場景相對來說還是占大部分。

   而 CPU 跟 GPU 的差別主要在哪里呢?它們的差別主要可以在兩個方面去對比,第一個叫性能,第二個叫做吞吐量。

   性能,換言之,性能會換成另外一個單詞叫做 Latency(低延時性)。低延時性就是當你的性能越好,你處理分析的效率越高,相當于你的延時性就越低,這個是性能。另外一個叫做吞吐量,吞吐量的意思就是你同時能夠處理的數據量。

   而 CPU 跟 GPU 的差別在哪里呢?主要就在于這兩個地方,CPU 它是一個高性能,就是超低延時性的,他能夠快速的去做復雜運算,并且能達到一個很好的性能要求。而 GPU是以一個叫做運算單元為格式的,所以他的優點不在于低延時性,因為他確實不善于做復雜運算,他每一個處理器都非常的小,相對來說會很弱,但是它可以讓它所有的弱處理器,同時去做處理,那相當于他就能夠同時處理大量的數據,那這個就意味著它的吞吐量非常大,所以 CPU重視的是性能,GPU重視的是吞吐量。

   所以大部分時候,GPU 他會跟另外一個詞語聯系在一起,叫做并行計算,意思就是它可以同時做大量的線程運算,為什么圖像會特別適合用 GPU 運算呢?這是因為 GPU 它最開始的設計就是叫做圖形處理單元,它的意思就是我可以把每一個像素,分割為一個線程去運算,每一個像素只做一些簡單的運算,這個就是最開始圖形處理器出現的原理。

   它要做圖形渲染的時候,要計算的是每一個像素的變換。所以每一個像素變換的計算量是很小很小的,可能就是一個公式的計算,計算量很少,它可以放在一個簡單的計算單元里面去做計算,那這個就是 CPU 跟 GPU 的差別。

   基于這樣的差別,我們才會去設計什么時候用 CPU,什么時候用 GPU。如果你當前設計的算法,它的并行能力不是很強,從頭到尾從上到下都是一個復雜的計算,沒有太多可并性的地方,那么即使你用了 GPU,也不能幫助你很好提升計算性能。

   所以,不要說別人都在用 GPU 那你就用 GPU,我們要了解的是為什么要用 GPU ,以及什么樣的情況下用 GPU,它效果能夠發揮出來最好。

6.計算機視覺與其他學科的關系

   計算機視覺目前跟其他學科的關系非常的多,包括機器人,以及剛才提到的醫療、物理、圖像、衛星圖片的處理,這些都會經常使用到計算機視覺,那這里呢,最常問到的問題無非就是有三個概念,一個叫做計算機視覺,一個叫做機器視覺,一個叫做圖像處理,那這三個東西有什么區別呢?

   這三個東西的區別還是挺因人而異的,每一個研究人員對它的理解都不一樣。

   首先,Image Processing更多的是圖形圖像的一些處理,圖像像素級別的一些處理,包括 3D 的處理,更多的會理解為是一個圖像的處理;而機器視覺呢,更多的是它還結合到了硬件層面的處理,就是軟硬件結合的圖形計算的能力,跟圖形智能化的能力,我們一般會理解為他就是所謂的機器視覺。

   而我們今天所說的計算機視覺,更多的是偏向于軟件層面的計算機處理,而且不是說做圖像的識別這么簡單,更多的還包括了對圖像的理解,甚至是對圖像的一些變換處理,當前我們涉及到的一些圖像的生成,也是可以歸類到這個計算機視覺領域里面的。

   所以說計算機視覺它本身的也是一個很基礎的學科,可以跟各個學科做交叉,同時,它自己內部也會分的比較細,包括機器視覺、圖像處理。

7.參考書籍和公開課

參考書

   第一本叫《Computer Vision:Models, Learning and Inference》written by Simon J.D. prince,這個主要講的更適合入門級別的,因為這本書里面配套了非常多的代碼,Matlab 代碼,C 的代碼都有,配套了非常多的學習代碼,以及參考資料、文獻,都配得非常詳細,所以它很適合入門級別的同學去看。

   第二本《Computer Vision:Algorithms and Applications》written by Richard Szeliski,這是一本非常經典,非常權威的參考資料,這本書不是用來看的,是用來查的,類似于一本工具書,它是涵蓋面最廣的一本參考書籍,所以一般會可以當成工具書去看,去查閱。

   第三本《OpenCV3編程入門》作者:毛星云,冷雪飛 ,如果想快速的上手去實現一些項目,可以看看這本書,它可以教你動手實現一些例子,并且學習到 OpenCV 最經典、最廣泛的計算機視覺開源庫。

公開課:

Stanford CS223B

   比較適合基礎,適合剛剛入門的同學,跟深度學習的結合相對來說會少一點,不會整門課講深度學習,而是主要講計算機視覺,方方面面都會講到。

Stanford CS231N

   這個應該不用介紹了,一般很多人都知道,這個是計算機視覺和深度學習結合的一門課,我們上 YouTube 就能夠看到,這門課的授課老師就是李飛飛老師,如果說不知道的話可以查一下,做計算機視覺的話,此人算是業界和學術界的“執牛耳”了。

8.需要了解的深度學習知識

   深度學習沒有太多的要講的,不是說內容不多,是非常多,這里只推薦一本書給大家,這本書是去年年底才出的,是最新的一本深度學習的書,它講得非常全面,從基礎的數學,到剛才說的概率學、統計學、機器學習以及微積分、線性幾何的知識點,非常的全面。

9.需要了解和學習的開源框架

OpenCV

   它是一個很經典的計算機視覺庫,實現了很多計算機視覺的常用算法??梢園鎦蠹銥燜偕鮮?。

Caffe

   如果是做計算機視覺的話,比較建議 Caffe。Caffe 更擅長做的是卷積神經網絡,卷積神經網絡在計算機視覺里面用的是最多的。

   所以無論你后面學什么樣其它的開源軟件, Caffe 是必不可免的,因為學完 Caffe 之后你會發現,如果你理解了 Caffe,會用 Caffe,甚至是有能力去改它的源代碼,你就會發現你對深度學習有了一個質的飛躍的理解。

TensorFlow

   TensorFlow 最近很火,但是它的入門門檻不低,你要學會使用它需要的時間遠比其他所有的軟件都要多,其次就是它當前還不是特別的成熟穩定,所以版本之間的更新迭代非常的多,兼容性并不好,運行效率還有非常大的提升空間。

10.如何閱讀相關文獻

   先熟悉所在方向的發展歷程,然后精讀歷程中的里程碑式的文獻。

   例如:深度學習做目標檢測,RCNN,Fast RCNN,Faster RCNN,SPPNET,SSD和YOLO這些模型肯定是要知道的。又例如,深度學習做目標跟蹤,DLT,SO-DLT等。

計算機視覺的頂會:

ICCV:International Conference on Computer Vision,國際計算機視覺大會

CVPR:International Conference on Computer Vision and Pattern Recognition,國際計算機視覺與模式識別大會

ECCV:European Conference on Computer Vision,歐洲計算機視覺大會

除了頂會之外呢,還有頂刊。像 PAMI、IJCV,這些都是頂刊,它代表著這個領域里面最尖端最前沿以及當下的研究方向。