王迪迪,候嘉豪,王富全,朱志恒,童旭茂,秦偉
(陜西理工大學(xué) 物理與電信工程學(xué)院,陜西漢中,723000)
目標(biāo)識(shí)別和測(cè)距是人工智能領(lǐng)域的一個(gè)重要研究方向,近年來,隨著機(jī)器視覺的迅速發(fā)展,基于雙目攝像頭的視覺障礙檢測(cè)和定位被廣泛應(yīng)用于工業(yè)機(jī)器人領(lǐng)域。過去幾年,采用深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)目標(biāo)識(shí)別與定位技術(shù)飛速發(fā)展,一方面,以RCNN、Faster RCNN為代表的神經(jīng)網(wǎng)絡(luò)識(shí)別精度越來越高;而另一方面,SSD、YOLO等識(shí)別速度越來越快[1]。在機(jī)器人障礙物定位測(cè)距方式中,視覺測(cè)距以其豐富的圖像信息,能實(shí)現(xiàn)采集多目標(biāo)距離信息受到廣泛研究。本文提出采用雙目攝像頭基于yolov3目標(biāo)檢測(cè)識(shí)別、分類,通過對(duì)攝像頭標(biāo)定,圖像校正、匹配后利用三角形成像原理完成障礙物的準(zhǔn)確識(shí)別和測(cè)距。
雙目攝像頭的測(cè)距原理類似于人眼,人們通過眼睛能夠感知物體的遠(yuǎn)近不同是因?yàn)閮芍谎劬?duì)同一個(gè)物體呈現(xiàn)的圖像存在差異,這種差異稱為“視差”,物體距離越遠(yuǎn)視差越小,反之視差越大,即視差的大小對(duì)應(yīng)著物體與眼睛之間的距離遠(yuǎn)近[2]。雙目攝像頭利用這個(gè)原理,將視差量化,可以測(cè)量出物體與攝像頭之間的距離。
如圖1所示,P是待測(cè)物體上的某一點(diǎn),雙目攝像頭的兩個(gè)光心分別是OR與OT,待測(cè)物體上的一點(diǎn)P在雙目攝像頭的兩個(gè)相機(jī)感光器上的成像點(diǎn)分別是P'和P",f為雙目相機(jī)左右攝像頭的焦距,B為兩相機(jī)光心之間的距離,Z為需要的深度信息,設(shè)點(diǎn)P'到點(diǎn)P"的距離為dis,則有:
圖1 雙目測(cè)距原理圖
公式中焦距f和攝像頭光心距B可通過標(biāo)定過程得到,因此,只要獲得了XR-XT(即視差d)的值即可求得待測(cè)物上點(diǎn)P的深度信息Z。
雙目相機(jī)目標(biāo)檢測(cè)及測(cè)距的流程如圖2所示,將相機(jī)采集到的圖像經(jīng)過預(yù)處理后輸出,通過目標(biāo)檢測(cè)算法處理檢測(cè)出目標(biāo)物,然后將RGB圖與深度圖進(jìn)行匹配,對(duì)滿足閾值條件的目標(biāo)進(jìn)行測(cè)距與坐標(biāo)計(jì)算。
圖2 算法流程
2.2.1 傳統(tǒng)算法
目前目標(biāo)檢測(cè)的傳統(tǒng)算法較多,大致上分為兩類:目標(biāo)實(shí)例檢測(cè)與傳統(tǒng)目標(biāo)類別檢測(cè)。
(1)目標(biāo)實(shí)例檢測(cè)方法是通過找出圖像中較為穩(wěn)定的特征點(diǎn)然后與特征模板進(jìn)行對(duì)應(yīng)來找出目標(biāo)實(shí)例的。該方法在檢測(cè)目標(biāo)過程中,只需要找出具體目標(biāo)本身,圖像中的其他物體都為無(wú)關(guān)變量。
(2)傳統(tǒng)目標(biāo)類別檢測(cè)是通過某些算法框架、HOG特征和支持向量機(jī)等方法,依據(jù)特征和分類器進(jìn)行檢測(cè)[3]。
2.2.2 基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法主要分為兩類:基于分類的檢測(cè)算法、基于回歸的目標(biāo)檢測(cè)算法。從R-CNN開始,廣大學(xué)者將目光集中到目標(biāo)檢測(cè)的分類上,雖然各種基于分類的檢測(cè)算法都有所提升,但是效果不盡人意,于是便有了將目標(biāo)檢測(cè)轉(zhuǎn)化到回歸的新思路,基于此思路有yolo、SSD、yolov2、yolov3等。
2.2.3 Yolo3目標(biāo)檢測(cè)
Yolov3是一種使用卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的特征來檢測(cè)物體的目標(biāo)檢測(cè)器[4,5]。其主干網(wǎng)絡(luò)為Darknet-53,目標(biāo)檢測(cè)尺度數(shù)為3個(gè)。網(wǎng)絡(luò)結(jié)構(gòu)包含主干網(wǎng)絡(luò)、特征金字塔(feature pyramid networks,FPN)以及輸出層。
Yolov3的 輸 入 圖 像 經(jīng) 過Darknet-53后,再 經(jīng) 過yoloblock生成的特征圖有兩個(gè)用處,第一個(gè)用處是生成特征圖一,分別經(jīng)過了3×3卷積層和1×1卷積層;第二個(gè)用處是生成特征圖二,分別經(jīng)過了1×1卷積層、上采樣層與Darknet-53中間層[6-8]。在經(jīng)過同樣的循環(huán)之后會(huì)生成特征圖三。在這個(gè)過程中的上采樣層所作的工作是通過插值等方法將小尺寸特征圖生成大尺寸圖像,并且經(jīng)過上采樣層不改變特征圖的通道數(shù)[9,10]。
(1) Yolov3的訓(xùn)練
訓(xùn)練策略:yolo3是根據(jù)預(yù)測(cè)值去尋找IOU最大的預(yù)測(cè)框作為正例。
輸出編碼:Yolov3擯棄了之前的softmax,直接使用邏輯回歸對(duì)每個(gè)類別進(jìn)行獨(dú)立二分類判定,用交叉熵計(jì)算損失,這可以適配具有重疊標(biāo)簽的數(shù)據(jù)集。
(2) 先驗(yàn)框(anchor)和檢測(cè)框
先驗(yàn)框:yolov3雖然較之前版本改進(jìn)了許多,但是先驗(yàn)框的使用技巧與yolov2相同,并且使用k-means對(duì)數(shù)據(jù)集中的標(biāo)簽進(jìn)行聚類,得到類別中心點(diǎn)的9個(gè)框,作為先驗(yàn)框。
另外,還需要進(jìn)行先驗(yàn)框的選取,這是因?yàn)閥olov3需要用先驗(yàn)框?qū)敵鎏卣鲌D的每個(gè)網(wǎng)格進(jìn)行邊界框預(yù)測(cè)。選取一個(gè)合適的先驗(yàn)框值是十分重要的,這可以使目標(biāo)識(shí)別更加的準(zhǔn)確。而先驗(yàn)框值是通過訓(xùn)練數(shù)據(jù)集聚類得到的,在yolov3的網(wǎng)絡(luò)模型中,其輸出3組特征圖,并且分別配有通過K-means算法得到的3組不同尺度的先驗(yàn)框,以實(shí)現(xiàn)坐標(biāo)回歸[11]。
檢測(cè)框解碼:檢測(cè)框在獲得先驗(yàn)框與輸出特征圖的基礎(chǔ)上進(jìn)行解碼[12]。
式中σ(tx),σ(ty)是基于矩形框中心點(diǎn)左上角格點(diǎn)坐標(biāo)的偏移量,σ是激活函數(shù),pw,ph是先驗(yàn)框的寬、高,通過上述公式可計(jì)算出實(shí)際預(yù)測(cè)框的寬高(bw,bh)。
檢測(cè)置信度解碼:置信度由sigmoid函數(shù)解碼,并且數(shù)值在[0,1]區(qū)間內(nèi)。
(3)Yolov3用法
Yolov3只能檢測(cè)屬于訓(xùn)練集的物體類的目標(biāo),因此使用yolov3進(jìn)行目標(biāo)檢測(cè)之前需要訓(xùn)練數(shù)據(jù)集,數(shù)據(jù)集的訓(xùn)練直接影響之后的識(shí)別范圍與識(shí)別效果。
在使用yolov3進(jìn)行目標(biāo)檢測(cè)時(shí),首先會(huì)將輸入圖片的大小進(jìn)行縮放,改為416×416之后進(jìn)入主干網(wǎng)絡(luò)處理。如果所使用的數(shù)據(jù)集中有N個(gè)不同的目標(biāo)類別,那么經(jīng)過網(wǎng)絡(luò)之后得到的3個(gè)特征圖屬性為(13×13,3×(4+1+N)),(26×26,3×(4+1+N)),與(52×52,3×(4+1+N))。意思就是分別劃分了13×13、26×26、52×52的網(wǎng)格,每個(gè)網(wǎng)格預(yù)測(cè)3個(gè)邊界框,邊界框的中心點(diǎn)坐標(biāo)、高度、寬度是4,目標(biāo)檢測(cè)的可信度是1。則一個(gè)單獨(dú)的網(wǎng)格擁有3個(gè)先驗(yàn)框,當(dāng)檢測(cè)到其內(nèi)部存在目標(biāo)時(shí),就會(huì)對(duì)其進(jìn)行類別檢測(cè)與邊框預(yù)測(cè)。把所有的網(wǎng)格都預(yù)測(cè)過之后獲取所有預(yù)測(cè)框的類別信息以及位置信息,最終通過非極大值處理后得到目標(biāo)邊界框,實(shí)現(xiàn)對(duì)目標(biāo)的檢測(cè)。
相較于其他系列目標(biāo)檢測(cè)方法,Yolov3算法識(shí)別目標(biāo)具有快速、背景誤檢率低、通用性強(qiáng)等優(yōu)點(diǎn),但是其識(shí)別目標(biāo)位置精確性較差、召回率低。
雙目相機(jī)測(cè)距操作總共分為四個(gè)部分:相機(jī)標(biāo)定-雙目校正-雙目匹配-計(jì)算深度信息[8]。
2.3.1 相機(jī)標(biāo)定
相機(jī)成像一般都會(huì)產(chǎn)生畸變,這是因?yàn)橄鄼C(jī)生產(chǎn)過程中裝配、原料等多方面因素導(dǎo)致的。產(chǎn)生的畸變有兩種:
(1)徑向畸變
這種畸變主要是由相機(jī)所使用的透鏡產(chǎn)生的,徑向畸變的主要參數(shù)為k1,k2,k3。
(2)切向畸變
這種畸變主要是由于相機(jī)裝配的位置誤差產(chǎn)生的,切向畸變的主要參數(shù)為p1,p2。
另外相機(jī)參數(shù)還分為兩部分:
(1)內(nèi)參
這是相機(jī)本身所固有的參數(shù),不受外界因素的影響,主要有相機(jī)焦距f、成像原點(diǎn)(cx,cy)以及五個(gè)畸變參數(shù)(k1、k2、k3、p1、p2)。
(2)外參
外參即相機(jī)與目標(biāo)所在空間的世界坐標(biāo)。因?yàn)殡p目相機(jī)會(huì)產(chǎn)生這些畸變,所以需要對(duì)雙目相機(jī)進(jìn)行標(biāo)定。標(biāo)定即是通過獲得以上所介紹的各種參數(shù)再加上兩個(gè)相機(jī)的相對(duì)位置,然后經(jīng)過計(jì)算對(duì)雙目相機(jī)進(jìn)行修正以獲得更加準(zhǔn)確的圖像以及深度信息。
2.3.2 雙目校正
雙目校正是我們分別根據(jù)左右相機(jī)定標(biāo)后獲得的內(nèi)參數(shù)據(jù)和雙目位置關(guān)系,對(duì)左右視圖消除畸變影響以及行對(duì)準(zhǔn)的操作。這樣做的效果就是兩幅圖像上相對(duì)應(yīng)點(diǎn)的行號(hào)相同。所以想找到另一幅圖像中所對(duì)應(yīng)的點(diǎn),只要在該行內(nèi)進(jìn)行一維搜索就可以找到。
2.3.3 雙目匹配
雙目匹配目的就是得到深度信息,這首先需要找出兩幅圖像上相對(duì)應(yīng)的像素點(diǎn),然后利用測(cè)距原理以及參數(shù)通過大量運(yùn)算便可得到整幅圖像上所有像素點(diǎn)的深度信息。
本實(shí)驗(yàn)使用Jetson nano作為運(yùn)算平臺(tái),在Ubuntu系統(tǒng)下進(jìn)行開發(fā),搭建ROS開發(fā)環(huán)境。編程語(yǔ)言采用Python以及C++。
Jetson nano是一款功能強(qiáng)大的小型計(jì)算機(jī),硬件配置為四核 ARM? Cortex?-A57 MPCore處理器,顯存為4GB 64位 LPDDR4。它可以在圖像分類、目標(biāo)檢測(cè)、分割和語(yǔ)音處理等應(yīng)用并行運(yùn)行多個(gè)神經(jīng)網(wǎng)絡(luò),同時(shí)處理多個(gè)高分辨率的傳感器。
目標(biāo)檢測(cè)系統(tǒng)需要系統(tǒng)及時(shí)、準(zhǔn)確的檢測(cè)出目標(biāo),以供應(yīng)智能駕駛或者機(jī)器人的需要。本文使用yolov3算法進(jìn)行目標(biāo)檢測(cè),相比其他算法處理速度更快、穩(wěn)定性更高。
yolov3識(shí)別目標(biāo)類型的范圍更加廣泛,這是因?yàn)樵撍惴ǖ哪繕?biāo)匹配機(jī)制,可以通過更改權(quán)重來使用自己的數(shù)據(jù)集。
數(shù)據(jù)集的制作步驟概括為采集圖片、圖片標(biāo)定、訓(xùn)練。
采集圖片:采用在網(wǎng)上下載的方式,獲取大量數(shù)據(jù)圖片,然后經(jīng)過刪選、隨機(jī)抽取100張圖片作為訓(xùn)練素材。
圖片標(biāo)定、訓(xùn)練:在yolo訓(xùn)練功能包中修改yaml文件,修改文件中類的個(gè)數(shù)以及類的名稱。隨機(jī)抽取采集圖片集中90%的圖片進(jìn)行訓(xùn)練,其余圖片集圖片用于驗(yàn)證。訓(xùn)練文件生成權(quán)重文件,權(quán)重文件包含best.pt以及l(fā)ast.pt文件。
圖3為訓(xùn)練結(jié)果的PR曲線,其中precision代表精確率,recall代表召回率。該曲線波動(dòng)不大,證明訓(xùn)練結(jié)果較好。檢測(cè)結(jié)果如圖4所示,測(cè)試結(jié)果表明經(jīng)訓(xùn)練后的yolov3方法能準(zhǔn)確分類目標(biāo)。
圖3 PR曲線
圖4 目標(biāo)檢測(cè)識(shí)別效果圖
測(cè)距之前首先需要對(duì)相機(jī)進(jìn)行標(biāo)定,標(biāo)定的本質(zhì)是借助一個(gè)已知確定的空間關(guān)系(標(biāo)定板),通過分析拍照的圖片像素,逆向推出相機(jī)固有且真實(shí)的參數(shù)(內(nèi)參)。
標(biāo)定首先需要啟動(dòng)相機(jī),打開標(biāo)定節(jié)點(diǎn),設(shè)置標(biāo)定板的參數(shù)(size以及square),然后通過移動(dòng)標(biāo)定板來獲取更多圖像信息,獲取完成后通過處理可獲得相機(jī)參數(shù)。
測(cè)距通過處理雙目相機(jī)獲取的左右圖像之間的視差信息,可以得到深度信息如圖5所示。將深度圖與yolo識(shí)別出的目標(biāo)圖進(jìn)行匹配可以得到相機(jī)與目標(biāo)物之間的距離以及目標(biāo)物的坐標(biāo),結(jié)果如圖6,圖7所示。
圖5 深度圖
圖6 目標(biāo)識(shí)別圖
圖7 目標(biāo)坐標(biāo)以及距離輸出
測(cè)量結(jié)果如表1所示,測(cè)量障礙物選擇為人體,表中x,y為障礙物空間坐標(biāo),dis為目標(biāo)檢測(cè)的距離。測(cè)距實(shí)驗(yàn)結(jié)果表明目標(biāo)與相機(jī)距離在0.80~5m內(nèi)測(cè)量距離最大誤差為0.15m,距離測(cè)量誤差在5%內(nèi)。
表1 障礙物位置
本文利用雙目相機(jī)獲取圖像,經(jīng)過訓(xùn)練數(shù)據(jù)集,對(duì)雙目相機(jī)進(jìn)行標(biāo)定后通過yolov3算法快速準(zhǔn)確識(shí)別出目標(biāo),并生成目標(biāo)圖像副本,再通過三角測(cè)距精確計(jì)算得到目標(biāo)與相機(jī)的距離。實(shí)驗(yàn)結(jié)果表明,該方法能夠較快且準(zhǔn)確的識(shí)別目標(biāo),對(duì)目標(biāo)進(jìn)行分類,測(cè)量攝像頭與目標(biāo)之間的距離。