目前,人工智能,機(jī)器學(xué)習(xí),深度學(xué)習(xí),計(jì)算機(jī)視覺等已經(jīng)成為新時(shí)代的風(fēng)向標(biāo)。
這篇文章主要介紹了下面幾點(diǎn):
第一點(diǎn),如果說你要入門計(jì)算機(jī)視覺,需要了解哪一些基礎(chǔ)知識?
第二點(diǎn),既然你要往這方面學(xué)習(xí),你要了解的參考書籍,可以學(xué)習(xí)的一些公開課有哪些?
第三點(diǎn),可能是大家都比較感興趣的,就是計(jì)算機(jī)視覺作為人工智能的一個(gè)分支,它不可避免的要跟深度學(xué)習(xí)做結(jié)合,而深度學(xué)習(xí)也可以說是融合到了計(jì)算機(jī)視覺、圖像處理,包括我們說的自然語言處理,所以本文也會(huì)簡單介紹一下計(jì)算機(jī)視覺與深度學(xué)習(xí)的結(jié)合。
第四點(diǎn),身處計(jì)算機(jī)領(lǐng)域,我們不可避免的會(huì)去做開源的工作,所以本文會(huì)給大家介紹一些開源的軟件。
第五點(diǎn),要學(xué)習(xí)或者研究計(jì)算機(jī)視覺,肯定是需要去閱讀一些文獻(xiàn)的,那么我們?nèi)绾伍_始閱讀文獻(xiàn),以及慢慢的找到自己在這個(gè)領(lǐng)域的方向,這些都會(huì)在本文理進(jìn)行簡單的介紹。
1. 基礎(chǔ)知識
接下來要介紹的,第一點(diǎn)是計(jì)算機(jī)視覺是什么意思,其次是圖像、視頻的一些基礎(chǔ)知識。包括攝像機(jī)的硬件,以及 CPU 和 GPU 的運(yùn)算。
在計(jì)算機(jī)視覺里面,我們也不可避免的會(huì)涉及到考慮去使用 CPU 還是使用 GPU 去做運(yùn)算。然后就是它跟其他學(xué)科的交叉,因?yàn)橛?jì)算機(jī)視覺可以和很多的學(xué)科做交叉,而且在做學(xué)科交叉的時(shí)候,能夠發(fā)揮的意義和使用價(jià)值也會(huì)更大。另外,對于以前并不是做人工智能的朋友,可能是做軟件開發(fā)的,想去轉(zhuǎn)型做計(jì)算機(jī)視覺,該如何轉(zhuǎn)型?需要學(xué)習(xí)哪些編程語言以及數(shù)學(xué)基礎(chǔ)?這些都會(huì)在第一小節(jié)給大家介紹。
1.0 什么是計(jì)算機(jī)視覺
計(jì)算機(jī)視覺是一門研究如何使機(jī)器“看”的科學(xué)。
更進(jìn)一步的說,就是指用攝影機(jī)和電腦代替人眼對目標(biāo)進(jìn)行識別、跟蹤和測量等機(jī)器視覺,并進(jìn)一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給一起檢測的圖像
作為一個(gè)科學(xué)學(xué)科,計(jì)算機(jī)視覺研究相關(guān)的理論和技術(shù),視圖建立能夠從圖像或者多維數(shù)據(jù)中獲取“信息”的人工智能系統(tǒng)。
目前,非?;鸬?a target="_blank">VR、AR,3D處理等方向,都是計(jì)算機(jī)視覺的一部分。
計(jì)算機(jī)視覺的應(yīng)用
- 無人駕駛
- 無人安防
- 人臉識別
- 車輛車牌識別
- 以圖搜圖
- VR/AR
- 3D重構(gòu)
- 醫(yī)學(xué)圖像分析
- 無人機(jī)
- 其他
了解了計(jì)算機(jī)視覺是什么之后,給大家列了一下當(dāng)前計(jì)算機(jī)視覺領(lǐng)域的一些應(yīng)用,幾乎可以說是無處不在,而且當(dāng)前最火的所有創(chuàng)業(yè)的方向都涵蓋在里面了。其中包括我們經(jīng)常提到的無人駕駛、無人安防、人臉識別。人臉識別相對來說已經(jīng)是一個(gè)最成熟的應(yīng)用領(lǐng)域了,然后還有文字識別、車輛車牌識別,還有以圖搜圖、 VR/AR,還包括 3D 重構(gòu),以及當(dāng)下很有前景的領(lǐng)域–醫(yī)學(xué)圖像分析。
醫(yī)學(xué)圖像分析他在很早就被提出來了,已經(jīng)研究了很久,但是現(xiàn)在得到了一個(gè)重新的發(fā)展,更多的研究人員包括無論是做圖像的研究人員,還是本身就在醫(yī)療領(lǐng)域的研究人員,都越來越關(guān)注計(jì)算機(jī)視覺、人工智能跟醫(yī)學(xué)圖像的分析。而且在當(dāng)下,醫(yī)學(xué)圖像分析也孕育了不少的創(chuàng)業(yè)公司,這個(gè)方向的未來前景還是很值得期待的。然后除此之外還包括無人機(jī),無人駕駛等,都應(yīng)用到了計(jì)算機(jī)視覺的技術(shù)。
1.1 圖像和視頻,你要知道的概念
圖像
一張圖片包含了:維數(shù)、高度、寬度、深度、通道數(shù)、顏色格式、數(shù)據(jù)首地址、結(jié)束地址、數(shù)據(jù)量等等。
? 圖像深度:存儲(chǔ)每個(gè)像素所用的位數(shù)(bits)
當(dāng)一個(gè)像素占用的位數(shù)越多時(shí),它所能表現(xiàn)的顏色就更多,更豐富。
舉例:一張400*400的8位圖,這張圖的原始數(shù)據(jù)量是多少?像素值如果是整型的話,取值范圍是多少?
1,原始數(shù)據(jù)量計(jì)算:400 * 400 * ( 8/8 )=160,000Bytes
(約為160K)
2,取值范圍:2的8次方,0~255
? 圖片格式與壓縮:常見的圖片格式JPEG,PNG,BMP等本質(zhì)上都是圖片的一種壓縮編碼方式
舉例:JPEG壓縮
1,將原始圖像分為8*8的小塊,每個(gè)block里有64pixels。
2,將圖像中每個(gè)8*8的block進(jìn)行DCT變換(越是復(fù)雜的圖像,越不容易被壓縮)
3,不同的圖像被分割后,每個(gè)小塊的復(fù)雜度不一樣,所以最終的壓縮結(jié)果也不一樣
視頻
原始視頻=圖片序列。
視頻中的每張有序圖片稱為“幀(frame)”。壓縮后的視頻,會(huì)采取各種算法減少數(shù)據(jù)的容量,其中IPB就是最常見的。
? I幀:表示關(guān)鍵幀,可以理解為這一幅畫面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾嬅妫?/p>
? P幀:表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀畫面差別的數(shù)據(jù))
? B幀表示雙向差別幀,記錄的本幀與前后幀的差別(具體比較復(fù)雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,要通過前后畫面與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是解碼比較麻煩。
? 碼率:碼率越大,體積越大;碼率越小,體積越小。
碼率就是數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒。也就是取樣率(并不等同于采樣率,采樣率用的單位是Hz,表示每秒采樣的次數(shù)),單位時(shí)間內(nèi)取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達(dá)到最少的失真,圍繞這個(gè)核心衍生出來cbr(固定碼率)與vbr(可變碼率),碼率越高越清晰,反之則畫面粗糙而且多馬賽克。
? 幀率
影響畫面流暢度,與畫面流暢度成正比:幀率越大,畫面越流暢;幀率越小,畫面越有跳動(dòng)感。如果碼率為變量,則幀率也會(huì)影響體積,幀率越高,每秒鐘經(jīng)過的畫面就越多,需要的碼率也越高,體積也越大。
幀率就是在一秒鐘時(shí)間里傳輸?shù)膱D片的幀數(shù),也可以理解為圖形處理器每秒鐘刷新的次數(shù)。
? 分辨率
影響圖像大小,與圖像大小成正比;分辨率越高,圖像越大;分辨率越低,圖像越小。
? 清晰度
在碼率一定的情況下,分辨率與清晰度成反比關(guān)系:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰
在分辨率一定的情況下,碼率與清晰度成正比關(guān)系:碼率越高,圖像越清晰;碼率越低,圖像越不清晰
? 帶寬、幀率
例如在ADSL線路上傳輸圖像,上行帶寬只有512Kbps,但要傳輸4路CIF分辨率的圖像。按照常規(guī),CIF分辨率建議碼率是512Kbps,那么照此計(jì)算就只能傳一路,降低碼率勢必會(huì)影響圖像質(zhì)量。那么為了確保圖像質(zhì)量,就必須降低幀率,這樣一來,即便降低碼率也不會(huì)影響圖像質(zhì)量,但在圖像的連貫性上會(huì)有影響。
1.2 攝像機(jī)
攝像機(jī)的分類:
- 監(jiān)控?cái)z像機(jī)(網(wǎng)絡(luò)攝像機(jī)和摸你攝像機(jī))
- 不同行業(yè)需求的攝像機(jī)(超寬動(dòng)態(tài)攝像機(jī)、紅外攝像機(jī)、熱成像攝像機(jī)等)
- 智能攝像機(jī)
- 工業(yè)攝像機(jī)
當(dāng)前的攝像機(jī)硬件我們可以分為監(jiān)控?cái)z像機(jī)、專業(yè)行業(yè)應(yīng)用的攝像機(jī)、智能攝像機(jī)和工業(yè)攝像機(jī)。而在監(jiān)控?cái)z像機(jī)里面,當(dāng)前用的比較多的兩個(gè)類型一個(gè)叫做網(wǎng)絡(luò)攝像機(jī),一個(gè)叫做模擬攝相機(jī),他們主要是成像的原理不太一樣。
網(wǎng)絡(luò)攝像機(jī)一般比傳統(tǒng)模擬攝相機(jī)的清晰度要高一些,模擬攝像機(jī)當(dāng)前應(yīng)該說是慢慢處于一個(gè)淘汰的狀態(tài),它可以理解為是上一代的監(jiān)控?cái)z像機(jī),而網(wǎng)絡(luò)攝像機(jī)是當(dāng)前的一個(gè)主流的攝相機(jī),大概在 13 年的時(shí)候,可能市場上 70% 到 80% 多都是模擬攝像機(jī),而現(xiàn)在可能 60% 到 70% 都是的網(wǎng)絡(luò)攝像機(jī)。
除此之外,不同的行業(yè)其時(shí)會(huì)有特定的相機(jī),想超寬動(dòng)態(tài)攝像機(jī)以及紅外攝像機(jī)、熱成像攝像機(jī),都是在專用的特定的領(lǐng)域里面可能用到的,而且他獲得的畫面跟圖像是完全不一樣的。如果我們要做圖像處理跟計(jì)算機(jī)視覺分析,什么樣的相機(jī)對你更有利,我們要學(xué)會(huì)利用硬件的優(yōu)勢。
如果是做研究的話一般是可以控制我們用什么樣的攝相機(jī),但如果是在實(shí)際的應(yīng)用場景,這個(gè)把控的可能性會(huì)稍微小一點(diǎn),但是在這里你要知道,有些問題可能你換一種硬件,它就能夠很好的被解決,這是一個(gè)思路。
還有些問題你可能用算法弄了很久也沒能解決,甚至是你的效率非常差,成本非常高,但是稍稍換一換硬件,你會(huì)發(fā)現(xiàn)原來的問題都不存在了,都被很好的解決了,這個(gè)就是硬件對你的一個(gè)新的處境了。
包括現(xiàn)在還有智能攝像機(jī)、工業(yè)攝像機(jī),工業(yè)攝像機(jī)一般的價(jià)格也會(huì)比較貴,因?yàn)樗麑S糜诟鞣N工業(yè)領(lǐng)域,或者是做一些精密儀器,高精度高清晰度要求的攝像機(jī)。
1.3 CPU和GPU
接下來給大家講一下 CPU 跟 GPU,如果說你要做計(jì)算機(jī)視覺跟圖像處理,那么肯定跳不過 GPU 運(yùn)算,GPU 運(yùn)算這一塊可能也是接下來需要學(xué)習(xí)或者自學(xué)的一個(gè)知識點(diǎn)。
因?yàn)榭梢钥吹?,?dāng)前大部分關(guān)于計(jì)算機(jī)視覺的論文,很多實(shí)現(xiàn)起來都是用 GPU 去實(shí)現(xiàn)的,但是在應(yīng)用領(lǐng)域,因?yàn)?GPU 的價(jià)格比較昂貴,所以 CPU 的應(yīng)用場景相對來說還是占大部分。
而 CPU 跟 GPU 的差別主要在哪里呢? 它們的差別主要可以在兩個(gè)方面去對比,第一個(gè)叫性能,第二個(gè)叫做吞吐量。
性能,換言之,性能會(huì)換成另外一個(gè)單詞叫做 Latency(低延時(shí)性)。低延時(shí)性就是當(dāng)你的性能越好,你處理分析的效率越高,相當(dāng)于你的延時(shí)性就越低,這個(gè)是性能。另外一個(gè)叫做吞吐量,吞吐量的意思就是你同時(shí)能夠處理的數(shù)據(jù)量。
而 CPU 跟 GPU 的差別在哪里呢?主要就在于這兩個(gè)地方,CPU 它是一個(gè)高性能,就是超低延時(shí)性的,他能夠快速的去做復(fù)雜運(yùn)算,并且能達(dá)到一個(gè)很好的性能要求。而 GPU是以一個(gè)叫做運(yùn)算單元為格式的,所以他的優(yōu)點(diǎn)不在于低延時(shí)性,因?yàn)樗_實(shí)不善于做復(fù)雜運(yùn)算,他每一個(gè)處理器都非常的小,相對來說會(huì)很弱,但是它可以讓它所有的弱處理器,同時(shí)去做處理,那相當(dāng)于他就能夠同時(shí)處理大量的數(shù)據(jù),那這個(gè)就意味著它的吞吐量非常大,所以 CPU重視的是性能,GPU重視的是吞吐量。
所以大部分時(shí)候,GPU 他會(huì)跟另外一個(gè)詞語聯(lián)系在一起,叫做并行計(jì)算,意思就是它可以同時(shí)做大量的線程運(yùn)算,為什么圖像會(huì)特別適合用 GPU 運(yùn)算呢?這是因?yàn)?GPU 它最開始的設(shè)計(jì)就是叫做圖形處理單元,它的意思就是我可以把每一個(gè)像素,分割為一個(gè)線程去運(yùn)算,每一個(gè)像素只做一些簡單的運(yùn)算,這個(gè)就是最開始圖形處理器出現(xiàn)的原理。
它要做圖形渲染的時(shí)候,要計(jì)算的是每一個(gè)像素的變換。所以每一個(gè)像素變換的計(jì)算量是很小很小的,可能就是一個(gè)公式的計(jì)算,計(jì)算量很少,它可以放在一個(gè)簡單的計(jì)算單元里面去做計(jì)算,那這個(gè)就是 CPU 跟 GPU 的差別。
基于這樣的差別,我們才會(huì)去設(shè)計(jì)什么時(shí)候用 CPU,什么時(shí)候用 GPU。如果你當(dāng)前設(shè)計(jì)的算法,它的并行能力不是很強(qiáng),從頭到尾從上到下都是一個(gè)復(fù)雜的計(jì)算,沒有太多可并性的地方,那么即使你用了 GPU,也不能幫助你很好提升計(jì)算性能。
所以,不要說別人都在用 GPU 那你就用 GPU,我們要了解的是為什么要用 GPU ,以及什么樣的情況下用 GPU,它效果能夠發(fā)揮出來最好。
1.4 計(jì)算機(jī)視覺與其他學(xué)科的關(guān)系
計(jì)算機(jī)視覺目前跟其他學(xué)科的關(guān)系非常的多,包括機(jī)器人,以及剛才提到的醫(yī)療、物理、圖像、衛(wèi)星圖片的處理,這些都會(huì)經(jīng)常使用到計(jì)算機(jī)視覺,那這里呢,最常問到的問題無非就是有三個(gè)概念,一個(gè)叫做計(jì)算機(jī)視覺,一個(gè)叫做機(jī)器視覺,一個(gè)叫做圖像處理,那這三個(gè)東西有什么區(qū)別呢?
這三個(gè)東西的區(qū)別還是挺因人而異的,每一個(gè)研究人員對它的理解都不一樣。
首先,Image Processing更多的是圖形圖像的一些處理,圖像像素級別的一些處理,包括 3D 的處理,更多的會(huì)理解為是一個(gè)圖像的處理;而機(jī)器視覺呢,更多的是它還結(jié)合到了硬件層面的處理,就是軟硬件結(jié)合的圖形計(jì)算的能力,跟圖形智能化的能力,我們一般會(huì)理解為他就是所謂的機(jī)器視覺。
而我們今天所說的計(jì)算機(jī)視覺,更多的是偏向于軟件層面的計(jì)算機(jī)處理,而且不是說做圖像的識別這么簡單,更多的還包括了對圖像的理解,甚至是對圖像的一些變換處理,當(dāng)前我們涉及到的一些圖像的生成,也是可以歸類到這個(gè)計(jì)算機(jī)視覺領(lǐng)域里面的。
所以說計(jì)算機(jī)視覺它本身的也是一個(gè)很基礎(chǔ)的學(xué)科,可以跟各個(gè)學(xué)科做交叉,同時(shí),它自己內(nèi)部也會(huì)分的比較細(xì),包括機(jī)器視覺、圖像處理。
1.5 編程語言AND數(shù)學(xué)基礎(chǔ)
這一部分的內(nèi)容可以參見《非計(jì)算機(jī)專業(yè),如何學(xué)習(xí)計(jì)算機(jī)視覺》
2. 參考書籍和公開課
參考書
第一本叫《Computer Vision:Models, Learning and Inference》written by Simon J.D. prince,這個(gè)主要講的更適合入門級別的,因?yàn)檫@本書里面配套了非常多的代碼,Matlab 代碼,C 的代碼都有,配套了非常多的學(xué)習(xí)代碼,以及參考資料、文獻(xiàn),都配得非常詳細(xì),所以它很適合入門級別的同學(xué)去看。
第二本《Computer Vision:Algorithms and Applications》written by Richard Szeliski,這是一本非常經(jīng)典,非常權(quán)威的參考資料,這本書不是用來看的,是用來查的,類似于一本工具書,它是涵蓋面最廣的一本參考書籍,所以一般會(huì)可以當(dāng)成工具書去看,去查閱。
第三本《OpenCV3編程入門》作者:毛星云,冷雪飛 ,如果想快速的上手去實(shí)現(xiàn)一些項(xiàng)目,可以看看這本書,它可以教你動(dòng)手實(shí)現(xiàn)一些例子,并且學(xué)習(xí)到 OpenCV 最經(jīng)典、最廣泛的計(jì)算機(jī)視覺開源庫。
公開課:
Stanford CS223B
比較適合基礎(chǔ),適合剛剛?cè)腴T的同學(xué),跟深度學(xué)習(xí)的結(jié)合相對來說會(huì)少一點(diǎn),不會(huì)整門課講深度學(xué)習(xí),而是主要講計(jì)算機(jī)視覺,方方面面都會(huì)講到。
Stanford CS231N
這個(gè)應(yīng)該不用介紹了,一般很多人都知道,這個(gè)是計(jì)算機(jī)視覺和深度學(xué)習(xí)結(jié)合的一門課,我們上 YouTube 就能夠看到,這門課的授課老師就是李飛飛老師,如果說不知道的話可以查一下,做計(jì)算機(jī)視覺的話,此人算是業(yè)界和學(xué)術(shù)界的“執(zhí)牛耳”了。
3. 需要了解的深度學(xué)習(xí)知識
深度學(xué)習(xí)沒有太多的要講的,不是說內(nèi)容不多,是非常多,這里只推薦一本書給大家,這本書是去年年底才出的,是最新的一本深度學(xué)習(xí)的書,它講得非常全面,從基礎(chǔ)的數(shù)學(xué),到剛才說的概率學(xué)、統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)以及微積分、線性幾何的知識點(diǎn),非常的全面。
4. 需要了解和學(xué)習(xí)的開源軟件
OpenCV
它是一個(gè)很經(jīng)典的計(jì)算機(jī)視覺庫,實(shí)現(xiàn)了很多計(jì)算機(jī)視覺的常用算法??梢詭椭蠹铱焖偕鲜帧?/p>
Caffe
如果是做計(jì)算機(jī)視覺的話,比較建議 Caffe。Caffe 更擅長做的是卷積神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺里面用的是最多的。
所以無論你后面學(xué)什么樣其它的開源軟件, Caffe 是必不可免的,因?yàn)閷W(xué)完 Caffe 之后你會(huì)發(fā)現(xiàn),如果你理解了 Caffe,會(huì)用 Caffe,甚至是有能力去改它的源代碼,你就會(huì)發(fā)現(xiàn)你對深度學(xué)習(xí)有了一個(gè)質(zhì)的飛躍的理解。
TensorFlow
TensorFlow 最近很火,但是它的入門門檻不低,你要學(xué)會(huì)使用它需要的時(shí)間遠(yuǎn)比其他所有的軟件都要多,其次就是它當(dāng)前還不是特別的成熟穩(wěn)定,所以版本之間的更新迭代非常的多,兼容性并不好,運(yùn)行效率還有非常大的提升空間。
-
gpu
+關(guān)注
關(guān)注
28文章
4673瀏覽量
128594 -
人工智能
+關(guān)注
關(guān)注
1789文章
46660瀏覽量
237094 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5466瀏覽量
120891
發(fā)布評論請先 登錄
相關(guān)推薦
評論