來源:古月居
對(duì)于人類來講,90%以上的信息都是通過視覺獲取的,眼睛就是獲取大量視覺信息的傳感器,然后再交給大腦這個(gè)“處理器”進(jìn)行處理,之后我們才能理解外部環(huán)境,建立世界觀。
如何讓機(jī)器人也能理解外部環(huán)境呢,我們首先想到的就是給機(jī)器人也安裝一對(duì)眼睛,是不是就可以和人類一樣來理解世界了呢?但是這個(gè)過程可比人類復(fù)雜的多,本講我們就來學(xué)習(xí)機(jī)器人中的視覺處理技術(shù)。
機(jī)器視覺這么火,那么它的基本原理是什么樣的呢?我們先來了解一下。
機(jī)器視覺原理
?機(jī)器視覺:用計(jì)算機(jī)來模擬人的視覺功能,但并不僅僅是人眼的簡(jiǎn)單延伸,更重要的是具有人腦的一部分功能一一從客觀事物的圖像中提取信息,進(jìn)行處理并加以理解,最終用于實(shí)際檢測(cè)、測(cè)量和控制;
?交叉學(xué)科:涉及人工智能、神經(jīng)生物學(xué)、物理學(xué)、計(jì)算機(jī)科學(xué)、圖像處理、模式識(shí)別等諸多領(lǐng)域;
?關(guān)鍵技術(shù):圖像采集與處理、模式識(shí)別、機(jī)器學(xué)習(xí)…;
?傳感器:?jiǎn)文恳曈X、雙目立體視覺、多目視覺、全景視覺等;
人類視覺擅長(zhǎng)于對(duì)復(fù)雜、非結(jié)構(gòu)化的場(chǎng)景進(jìn)行定性解釋,但機(jī)器視覺憑借速度、精度和可重復(fù)性等優(yōu)勢(shì),非常適合對(duì)結(jié)構(gòu)化場(chǎng)景進(jìn)行定量測(cè)量。
一般來講,典型的機(jī)器視覺系統(tǒng)可以分為如圖1所示的三個(gè)部分:圖像采集、圖像分析和控制輸出。
圖1 典型機(jī)器視覺系統(tǒng)的三個(gè)部分
圖像采集注重對(duì)原始光學(xué)信號(hào)的采樣,是整個(gè)視覺系統(tǒng)的傳感部分,核心是相機(jī)和相關(guān)的配件。
其中光源用于照明待檢測(cè)的物體,并突顯其特征,便于讓相機(jī)能夠更好的捕捉圖像。光源是影響機(jī)器視覺系統(tǒng)成像質(zhì)量的重要因素,好的光源和照明效果對(duì)機(jī)器視覺判斷影響很大。當(dāng)前,機(jī)器視覺的光源已經(jīng)突破人眼的可見光范圍,其光譜范圍跨越紅外光(IR)、可見光、紫外光(UV)乃至X射線波段,可實(shí)現(xiàn)更精細(xì)和更廣泛的檢測(cè)范圍,以及特殊成像需求。
相機(jī)被喻為機(jī)器視覺系統(tǒng)的“眼睛”,承擔(dān)著圖像信息采集的重要任務(wù)。圖像傳感器又是相機(jī)的核心元器件,主要有CCD和CMOS兩種類型,其工作原理是將相機(jī)鏡頭接收到的光學(xué)信號(hào)轉(zhuǎn)化成數(shù)字信號(hào)。選擇合適的相機(jī)是機(jī)器視覺系統(tǒng)設(shè)計(jì)的重要環(huán)節(jié),不僅直接決定了采集圖像的質(zhì)量和速度,同時(shí)也與整個(gè)系統(tǒng)的運(yùn)行模式相關(guān)。
圖像處理系統(tǒng)接收到相機(jī)傳來的數(shù)字圖像之后,通過各種軟件算法進(jìn)行圖像特征提取、特征分析和數(shù)據(jù)標(biāo)定,最后進(jìn)行判斷。這是各種視覺算法研究最為集中的部分,從傳統(tǒng)的模式識(shí)別算法,到當(dāng)前熱門的各種機(jī)器學(xué)習(xí)方法,都是為了更好的讓機(jī)器理解環(huán)境。
對(duì)于人來講,識(shí)別某一個(gè)物體是蘋果似乎理所當(dāng)然,但是對(duì)于機(jī)器人來講,就需要提取各種各樣不同種類、顏色、形狀的蘋果特征,然后訓(xùn)練得到一個(gè)蘋果的“模型”,再通過這個(gè)模型對(duì)實(shí)時(shí)圖像做匹配,從而分析面前這個(gè)東西到底是不是蘋果。
在機(jī)器人系統(tǒng)中,視覺識(shí)別的結(jié)果最終要和機(jī)器人的某些行為綁定,也就是第三個(gè)部分——控制輸出,包含I/O接口、運(yùn)動(dòng)控制、可視化顯示等。當(dāng)圖像處理系統(tǒng)完成圖像分析后,將判斷的結(jié)果發(fā)給機(jī)器人控制系統(tǒng),接下來機(jī)器人完成運(yùn)動(dòng)控制。比如視覺識(shí)別到了抓取目標(biāo)的位置,通過IO口控制夾爪完成抓取和放置,過程中識(shí)別的結(jié)果和運(yùn)動(dòng)的狀態(tài),都可以在上位機(jī)中顯示,方便我們監(jiān)控。
圖2 典型機(jī)器視覺系統(tǒng)的三個(gè)部分
開源軟件或框架
就機(jī)器視覺而言,在這三個(gè)部分中,圖像分析占據(jù)了絕對(duì)的 核心,涉及的方法、使用的各種開源軟件或者框架非常多,我們來了解最為常用的幾個(gè)。
OpenCV
?由英特爾公司于1999年啟動(dòng),致力于CPU密集型的任務(wù);
?推進(jìn)機(jī)器視覺的研究,提供一套開源且優(yōu)化的基礎(chǔ)庫,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法;
?提供一個(gè)共同的基礎(chǔ)庫,使得開發(fā)人員的代碼更容易閱讀和轉(zhuǎn)讓,促進(jìn)了知識(shí)的傳播;
?透過提供不需要開源或免費(fèi)的軟件許可( BSD ),促進(jìn)商業(yè)應(yīng)用軟件的開發(fā);
?由一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供C++、Python、Ruby、MATLAB、C#、GO等語言的接口。
OpenCV這個(gè)名稱很多人應(yīng)該聽說過,這是機(jī)器視覺領(lǐng)域最為知名的開源軟件之一。
OpenCV主要使用C/C++語言編寫,執(zhí)行效率較高,致力于真實(shí)世界的實(shí)時(shí)應(yīng)用。OpenCV實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面很多通用算法,這樣我們?cè)陂_發(fā)視覺應(yīng)用的時(shí)候,就不需要重新去造輪子,而是基于這些基礎(chǔ)庫,專注自己應(yīng)用的優(yōu)化,同時(shí)大家的基礎(chǔ)平臺(tái)一致,在知識(shí)傳播的時(shí)候也更加方便,只要你看得懂OpenCV的函數(shù),就可以很快熟悉別人用OpenCV寫的代碼,大家交流起來非常方便。
和機(jī)器人操作系統(tǒng)一樣,一款可以快速傳播的開源軟件,一般都會(huì)選擇相對(duì)開放的許可證,OpenCV主要采用BSD許可證,我們基于OpenCV寫的代碼,可以對(duì)原生庫做修改,不用開源,還可以商業(yè)化應(yīng)用。OpenCV目前支持的編程語言也非常多,無論你熟悉哪一種,都可以調(diào)用OpenCV快速開始視覺開發(fā),比如C ++,Python,Java、MATLAB等語言,而且還支持Windows,Linux,Android和Mac OS等操作系統(tǒng)。
OpenCV中提供的功能非常多,我們?cè)诤罄m(xù)的內(nèi)容中,會(huì)給大家介紹一些基礎(chǔ)的圖像處理方法,大家如果想要深入研究,還可以網(wǎng)上搜索相關(guān)的內(nèi)容。
?Google在2015年發(fā)布的機(jī)器學(xué)習(xí)平臺(tái),采用數(shù)據(jù)流圖,架構(gòu)靈活,用于數(shù)值計(jì)算的開源軟件庫;
?節(jié)點(diǎn)在圖中表示數(shù)學(xué)操作,線表示在節(jié)點(diǎn)間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量(tensor);
TensorFlow的整體技術(shù)框架為兩個(gè)部分:前端系統(tǒng)提供編程模型,負(fù)責(zé)構(gòu)造計(jì)算圖;后端系統(tǒng)提供運(yùn)行時(shí)環(huán)境,負(fù)責(zé)執(zhí)行計(jì)算圖。
圖4 TensorFlow整體技術(shù)框架
這里的計(jì)算圖大家應(yīng)該似曾相識(shí),沒錯(cuò),機(jī)器人操作系統(tǒng)ROS的技術(shù)框架也是用到了計(jì)算圖。在TensorFlow的計(jì)算圖中,數(shù)據(jù)流是重點(diǎn),數(shù)據(jù)在這個(gè)圖中以張量(tensor)的形式存在,節(jié)點(diǎn)在圖中表示數(shù)學(xué)操作,邊表示節(jié)點(diǎn)間數(shù)據(jù)的流向。在機(jī)器學(xué)習(xí)的訓(xùn)練過程中,張量——也就是數(shù)據(jù),會(huì)不斷從數(shù)據(jù)流圖中的一個(gè)節(jié)點(diǎn)流向(flow)另外一個(gè)節(jié)點(diǎn),從而完成一系列數(shù)學(xué)運(yùn)算,最終得到結(jié)果。這就是TensorFlow名稱的由來,正如如圖5所示的這張圖一樣,它生動(dòng)形象地描述了復(fù)雜數(shù)據(jù)結(jié)構(gòu)在人工神經(jīng)網(wǎng)中的流動(dòng)、傳輸、分析和處理模式。
圖5 TensorFlow整體技術(shù)框架
為了便于數(shù)據(jù)的調(diào)試和可視化,TensorFlow還提供了一套可視化工具——TensorBoard,用戶可以很容易看到數(shù)據(jù)流動(dòng)的每一個(gè)部分,同時(shí)看到數(shù)據(jù)訓(xùn)練或者測(cè)試的效果。比如如圖9-8所示中,經(jīng)過前邊神經(jīng)網(wǎng)絡(luò)的計(jì)算,藍(lán)色和黃色兩種數(shù)據(jù)被逐漸識(shí)別并區(qū)分開來。
圖6 TensorBoard
TensorFlow跨平臺(tái)性好,可以在Linux、MacOS、Windows、Android等系統(tǒng)下運(yùn)行,還可以在眾多計(jì)算機(jī)中分布式運(yùn)行,回想一下多年前戰(zhàn)勝人類的圍棋AI——AlphaGo,其后臺(tái)在上萬臺(tái)計(jì)算機(jī)中、基于TensorFlow搭建的“最強(qiáng)大腦”。
當(dāng)然,TensorFlow也有不足之處,主要表現(xiàn)在它的代碼比較底層,需要用戶編寫大量的應(yīng)用代碼,而且很多相似的功能,用戶還不得不“重新造輪子”。
此外,TensorFlow是Google資深工程師開發(fā)而來,使用了不少高深的技術(shù)和概念,對(duì)于大眾開發(fā)者來講,上手學(xué)習(xí)的門檻就有點(diǎn)高,熟悉的人可以用的爐火純青,做出很炫酷的效果,不熟悉的人上手就得花費(fèi)很長(zhǎng)時(shí)間。對(duì)此,TensorFlow官方也提供了一些開源例程和不少訓(xùn)練好的模型,其中之一就是Tensorflow Object Detection API,實(shí)現(xiàn)了近年來多種優(yōu)秀的深度卷積神經(jīng)網(wǎng)絡(luò),可以幫助開發(fā)者輕松構(gòu)建、訓(xùn)練和部署對(duì)象檢測(cè)模型。
如圖7所示,前兩個(gè)是TensorFlow官方例程中的目標(biāo)檢測(cè)演示,可以在圖片中識(shí)別出小狗、人、風(fēng)箏等目標(biāo),在這套開源的框架中,官方還附帶了80多種已經(jīng)訓(xùn)練好的目標(biāo)模型,包含了我們生活中常見的物品,這兩個(gè)圖片就是使用官方模型識(shí)別的效果,比如這里識(shí)別到的碗、西蘭花,還有這里的杯子、桌子、瓶子等,都可以較為穩(wěn)定的識(shí)別到。不過模型之外的物品就難以識(shí)別了。
圖7 TensorFlow Object Detection API
想要使用這套框架識(shí)別其他目標(biāo)怎么辦,沒問題,我們可以針對(duì)想要識(shí)別的目標(biāo)采樣并標(biāo)注,再放到網(wǎng)絡(luò)中訓(xùn)練,就可以得到自己的模型庫了,接下來就可以完成我們想要的識(shí)別任務(wù)。比如這里識(shí)別兩位明星的效果,就是網(wǎng)友使用TensorFlow目標(biāo)檢測(cè)方法實(shí)現(xiàn)的。
總之Tensorflow Object Detection API,為我們演示了一整套TensorFlow工程應(yīng)用的流程,按照這個(gè)流程,我們就可以快速開發(fā)視覺目標(biāo)檢測(cè)了。
PyTorch
PyTorch:
?Facebook在2017年發(fā)布的一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,底層由C++實(shí)現(xiàn);
?不僅能夠?qū)崿F(xiàn)強(qiáng)大的GPU加速,同時(shí)還支持動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò);
?簡(jiǎn)潔高效,追求最少的封裝,符合人類思維,讓用戶盡可能地專注于實(shí)現(xiàn)自己的想法;
?除了Facebook外,它已經(jīng)被Twitter、CMU和Salesforce等機(jī)構(gòu)采用;
之前我們有提到過TensorFlow入門門檻較高,除此之外,TensorFlow中的計(jì)算圖是靜態(tài)的,也就是說我們要先創(chuàng)建好計(jì)算圖的結(jié)構(gòu),然后才能訓(xùn)練,過程中想要改變網(wǎng)絡(luò)模型是比較困難的。
2017年初,F(xiàn)acebook發(fā)布了另外一個(gè)開源的機(jī)器學(xué)習(xí)庫——PyTorch,雖然底層也是用C++實(shí)現(xiàn)的,但是上層主要支持Python。如果用編程語言做一個(gè)類比,Tensorflow需要先構(gòu)建計(jì)算圖,這就類似C語言,運(yùn)行之前需要先進(jìn)行編譯,但是可以適配不同的硬件平臺(tái),效率較高;而PyTorch類似Python語言,可以動(dòng)態(tài)構(gòu)建圖結(jié)構(gòu),簡(jiǎn)單靈活,但是功能的全面性和跨平臺(tái)性稍差。
除此之外,PyTorch的設(shè)計(jì)追求最少的封裝,盡量符合人類的思維模式,避免重復(fù)造輪子,讓用戶盡可能地專注于實(shí)現(xiàn)自己的想法,所思即所得,不需要考慮太多關(guān)于框架本身的束縛。不像TensorFlow中張量、圖、操作、變量等抽象的概念,PyTorch精簡(jiǎn)了很多,源碼也只有TensorFlow的十分之一左右,更少的抽象、更直觀的設(shè)計(jì),使得PyTorch的源碼十分易于閱讀,也更容易進(jìn)行調(diào)試,就像Python代碼一樣。
總結(jié)而言,TensorFlow和PyTorch都是優(yōu)秀的機(jī)器學(xué)習(xí)開源框架,兩者的功能類似,TensorFlow跨平臺(tái)性能更好,PyTorch靈活易用性更好,兩者都有較為廣泛的應(yīng)用,而且作為機(jī)器學(xué)習(xí)的計(jì)算平臺(tái),兩者不僅都可以用于機(jī)器視覺識(shí)別,還可以用于自然語言理解、運(yùn)動(dòng)控制等諸多領(lǐng)域。
圖8 PyTorch
YOLO
回到具體的目標(biāo)識(shí)別。以自動(dòng)駕駛為例,人們看到圖像以后,可以立即識(shí)別其中的對(duì)象以及所在的位置。這讓我們能夠在幾乎無意識(shí)的情況下完成復(fù)雜的任務(wù),比如躲避行人。
因此,自動(dòng)駕駛的訓(xùn)練需要類似水平的反應(yīng)能力和準(zhǔn)確性。這樣的系統(tǒng)必須能夠分析實(shí)時(shí)視頻中的道路,并且能夠在確定路徑之前,檢測(cè)各種類型的對(duì)象及其在現(xiàn)實(shí)中的位置。
YOLO就是當(dāng)前最為熱門的一種實(shí)時(shí)目標(biāo)檢測(cè)系統(tǒng),在2015年提出,全稱是You only look once,看一眼就能夠識(shí)別出來,可見實(shí)時(shí)性對(duì)YOLO是至關(guān)重要的指標(biāo)。簡(jiǎn)單介紹下YOLO的算法流程,它將對(duì)象檢測(cè)重新定義為一個(gè)回歸問題,運(yùn)用單個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN) ,將圖像分成網(wǎng)格,并預(yù)測(cè)每個(gè)網(wǎng)格的對(duì)象概率和邊界框。
以一個(gè)100x100的圖像為例,Yolo的CNN網(wǎng)絡(luò)將輸入的圖片分割成7x7的網(wǎng)格,然后每個(gè)網(wǎng)格負(fù)責(zé)去檢測(cè)那些中心點(diǎn)落在該格子內(nèi)的目標(biāo),比如如圖9所示,小狗這個(gè)目標(biāo)的中心點(diǎn)在左下角的網(wǎng)格中,那該網(wǎng)格就負(fù)責(zé)預(yù)測(cè)狗這個(gè)對(duì)象。
每個(gè)網(wǎng)格中將有多個(gè)邊界框,在訓(xùn)練時(shí),我們希望每個(gè)對(duì)象只有一個(gè)邊界框,比如最終只有一個(gè)邊界框把這只狗包起來。因此,我們根據(jù)哪個(gè)邊界框與之前標(biāo)注的重疊度最高,預(yù)測(cè)對(duì)象的位置和概率。
最終包圍對(duì)象的邊界框,就是識(shí)別的結(jié)果,使用四個(gè)描述符進(jìn)行說明:
1.邊界框的中心位置
2.邊界框的高度
3.邊界框的寬度
4.識(shí)別到對(duì)象所屬的類
這樣就完成了對(duì)目標(biāo)的實(shí)時(shí)檢測(cè),拿到目標(biāo)的信息之后,就可以進(jìn)行后續(xù)的機(jī)器人行為控制了。YOLO識(shí)別的速度非???,它能夠處理實(shí)時(shí)視頻流,比如車輛行駛的動(dòng)態(tài)監(jiān)測(cè)、自然環(huán)境中的目標(biāo)識(shí)別,有著非常廣泛的應(yīng)用價(jià)值。
以上就是當(dāng)前較為熱門的機(jī)器學(xué)習(xí)和目標(biāo)檢測(cè)框架,用于機(jī)器視覺的開源軟件還有很多,有興趣可以繼續(xù)探索補(bǔ)充。
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2542文章
50260瀏覽量
750147 -
機(jī)器視覺
+關(guān)注
關(guān)注
161文章
4303瀏覽量
119879 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8323瀏覽量
132165 -
OpenCV
+關(guān)注
關(guān)注
29文章
623瀏覽量
41177
原文標(biāo)題:機(jī)器視覺原理及常用工具庫
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論