1. 程式人生 > >那些年薪40萬的人,究竟做對了什麼?

那些年薪40萬的人,究竟做對了什麼?

點選上方      藍字關注七月線上實驗室

640?wx_fmt=png

目前,人工智慧,機器學習,深度學習,計算機視覺等已經成為新時代的風向標。

我國計算機視覺的相關行業的發展前景一片大好,計算機視覺在人臉識別、安防監控、金融、無人駕駛、醫療健康等領域都是千億級別以上的市場。其薪資待遇更是不錯,而且現在市場人才方面也是比較空缺的,只要你掌握了這門技術,以後就業不是問題。(文末有具體崗位薪資)

那麼重點來了,如何學習計算機視覺?如何入門?如何拿高薪就業?

今天,主要從以下幾個方面介紹計算機入門方面的知識~

以下內容整理自 2017 年 6 月 29 日由“趣直播–知識直播平臺”邀請的嘉賓實錄。 
分享嘉賓: 羅韻

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

第二點,既然你要往這方面學習,你要了解的參考書籍?

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

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

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

640?wx_fmt=gif

基礎知識

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


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

640?wx_fmt=gif

什麼是計算機視覺

計算機視覺是一門研究如何使機器“看”的科學。 
更進一步的說,就是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給一起檢測的影象 
作為一個科學學科,計算機視覺研究相關的理論和技術,檢視建立能夠從影象或者多維資料中獲取“資訊”的人工智慧系統。 
目前,非常火的VR、AR,3D處理等方向,都是計算機視覺的一部分。 


計算機視覺的應用

  • 無人駕駛

  • 無人安防

  • 人臉識別

  • 車輛車牌識別

  • 以圖搜圖

  • VR/AR

  • 3D重構

  • 醫學影象分析

  • 無人機

  • 其他

瞭解了計算機視覺是什麼之後,給大家列了一下當前計算機視覺領域的一些應用,幾乎可以說是無處不在,而且當前最火的所有創業的方向都涵蓋在裡面了。其中包括我們經常提到的無人駕駛、無人安防、人臉識別。

人臉識別相對來說已經是一個最成熟的應用領域了,然後還有文字識別、車輛車牌識別,還有以圖搜圖、 VR/AR,還包括 3D 重構,以及當下很有前景的領域–醫學影象分析。 


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

640?wx_fmt=gif

影象和視訊,你要知道的概念

影象 

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

• 影象深度:儲存每個畫素所用的位數(bits) 

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

  舉例:一張400*400的8點陣圖,這張圖的原始資料量是多少?畫素值如果是整型的話,取值範圍是多少? 

  1,原始資料量計算:400 * 400 * ( 8/8 )=160,000Bytes 
(約為160K) 
  2,取值範圍:2的8次方,0~255

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

  舉例:JPEG壓縮 

  1,將原始影象分為8*8的小塊,每個block裡有64pixels。 
  2,將影象中每個8*8的block進行DCT變換(越是複雜的影象,越不容易被壓縮) 
  3,不同的影象被分割後,每個小塊的複雜度不一樣,所以最終的壓縮結果也不一樣

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

I幀:表示關鍵幀,可以理解為這一幅畫面的完整保留;解碼時只需要本幀資料就可以完成(因為包含完整畫面)

P幀:表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前快取的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面資料,只有與前一幀畫面差別的資料)

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

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

幀率 
影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動感。如果位元速率為變數,則幀率也會影響體積,幀率越高,每秒鐘經過的畫面就越多,需要的位元速率也越高,體積也越大。 
幀率就是在一秒鐘時間裡傳輸的圖片的幀數,也可以理解為圖形處理器每秒鐘重新整理的次數。

解析度

影響影象大小,與影象大小成正比;解析度越高,影象越大;解析度越低,影象越小。

清晰度 
在位元速率一定的情況下,解析度與清晰度成反比關係:解析度越高,影象越不清晰,解析度越低,影象越清晰 
在解析度一定的情況下,位元速率與清晰度成正比關係:位元速率越高,影象越清晰;位元速率越低,影象越不清晰

頻寬、幀率 
例如在ADSL線路上傳輸影象,上行頻寬只有512Kbps,但要傳輸4路CIF解析度的影象。按照常規,CIF解析度建議位元速率是512Kbps,那麼照此計算就只能傳一路,降低位元速率勢必會影響影象質量。那麼為了確保影象質量,就必須降低幀率,這樣一來,即便降低位元速率也不會影響影象質量,但在影象的連貫性上會有影響。

640?wx_fmt=gif

攝像機

攝像機的分類:

  • 監控攝像機(網路攝像機和摸你攝像機)

  • 不同行業需求的攝像機(超寬動態攝像機、紅外攝像機、熱成像攝像機等)

  • 智慧攝像機

  • 工業攝像機

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


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


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


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


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

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

640?wx_fmt=gif

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,它效果能夠發揮出來最好。

640?wx_fmt=gif

計算機視覺與其他學科的關係

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


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


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


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

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

640?wx_fmt=gif

需要了解的深度學習知識

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

640?wx_fmt=gif

需要了解和學習的開源軟體

OpenCV 
它是一個很經典的計算機視覺庫,實現了很多計算機視覺的常用演算法。可以幫助大家快速上手。 


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

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


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

640?wx_fmt=gif

參考書籍和相關文獻

參考書 

第一本叫《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 最經典、最廣泛的計算機視覺開源庫。

如何閱讀相關的文獻

先熟悉所在方向的發展歷程,然後精讀歷程中的里程碑式的文獻。 
例如:深度學習做目標檢測,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,這些都是頂刊,它代表著這個領域裡面最尖端最前沿以及當下的研究方向。

作者:ZeroZone零域。 

原文連結:https://blog.csdn.net/ksws0292756/article/details/78881839

End

640?wx_fmt=gif

除了以上分享的關於計算機視覺方面的知識書籍等,小編再和大家分享一哈,讓你更好的學習計算機視覺~

我們的【計算機視覺第二期】火熱報名中,本週六(9.22)即將開課,從CV基礎到深度學習實戰,四大課程特色,十大實戰專案,免費送CPU&GPU雙雲平臺。挑戰年薪40萬,甚至更高薪~