王迪迪,候嘉豪,王富全,朱志恒,童旭茂,秦偉
(陜西理工大學 物理與電信工程學院,陜西漢中,723000)
目標識別和測距是人工智能領域的一個重要研究方向,近年來,隨著機器視覺的迅速發展,基于雙目攝像頭的視覺障礙檢測和定位被廣泛應用于工業機器人領域。過去幾年,采用深度學習的神經網絡目標識別與定位技術飛速發展,一方面,以RCNN、Faster RCNN為代表的神經網絡識別精度越來越高;而另一方面,SSD、YOLO等識別速度越來越快[1]。在機器人障礙物定位測距方式中,視覺測距以其豐富的圖像信息,能實現采集多目標距離信息受到廣泛研究。本文提出采用雙目攝像頭基于yolov3目標檢測識別、分類,通過對攝像頭標定,圖像校正、匹配后利用三角形成像原理完成障礙物的準確識別和測距。
雙目攝像頭的測距原理類似于人眼,人們通過眼睛能夠感知物體的遠近不同是因為兩只眼睛對同一個物體呈現的圖像存在差異,這種差異稱為“視差”,物體距離越遠視差越小,反之視差越大,即視差的大小對應著物體與眼睛之間的距離遠近[2]。雙目攝像頭利用這個原理,將視差量化,可以測量出物體與攝像頭之間的距離。
如圖1所示,P是待測物體上的某一點,雙目攝像頭的兩個光心分別是OR與OT,待測物體上的一點P在雙目攝像頭的兩個相機感光器上的成像點分別是P'和P",f為雙目相機左右攝像頭的焦距,B為兩相機光心之間的距離,Z為需要的深度信息,設點P'到點P"的距離為dis,則有:

圖1 雙目測距原理圖

公式中焦距f和攝像頭光心距B可通過標定過程得到,因此,只要獲得了XR-XT(即視差d)的值即可求得待測物上點P的深度信息Z。
雙目相機目標檢測及測距的流程如圖2所示,將相機采集到的圖像經過預處理后輸出,通過目標檢測算法處理檢測出目標物,然后將RGB圖與深度圖進行匹配,對滿足閾值條件的目標進行測距與坐標計算。

圖2 算法流程
2.2.1 傳統算法
目前目標檢測的傳統算法較多,大致上分為兩類:目標實例檢測與傳統目標類別檢測。
(1)目標實例檢測方法是通過找出圖像中較為穩定的特征點然后與特征模板進行對應來找出目標實例的。該方法在檢測目標過程中,只需要找出具體目標本身,圖像中的其他物體都為無關變量。
(2)傳統目標類別檢測是通過某些算法框架、HOG特征和支持向量機等方法,依據特征和分類器進行檢測[3]。
2.2.2 基于深度學習的目標檢測算法
基于深度學習的目標檢測算法主要分為兩類:基于分類的檢測算法、基于回歸的目標檢測算法。從R-CNN開始,廣大學者將目光集中到目標檢測的分類上,雖然各種基于分類的檢測算法都有所提升,但是效果不盡人意,于是便有了將目標檢測轉化到回歸的新思路,基于此思路有yolo、SSD、yolov2、yolov3等。
2.2.3 Yolo3目標檢測
Yolov3是一種使用卷積神經網絡學習的特征來檢測物體的目標檢測器[4,5]。其主干網絡為Darknet-53,目標檢測尺度數為3個。網絡結構包含主干網絡、特征金字塔(feature pyramid networks,FPN)以及輸出層。
Yolov3的 輸 入 圖 像 經 過Darknet-53后,再 經 過yoloblock生成的特征圖有兩個用處,第一個用處是生成特征圖一,分別經過了3×3卷積層和1×1卷積層;第二個用處是生成特征圖二,分別經過了1×1卷積層、上采樣層與Darknet-53中間層[6-8]。在經過同樣的循環之后會生成特征圖三。在這個過程中的上采樣層所作的工作是通過插值等方法將小尺寸特征圖生成大尺寸圖像,并且經過上采樣層不改變特征圖的通道數[9,10]。
(1) Yolov3的訓練
訓練策略:yolo3是根據預測值去尋找IOU最大的預測框作為正例。
輸出編碼:Yolov3擯棄了之前的softmax,直接使用邏輯回歸對每個類別進行獨立二分類判定,用交叉熵計算損失,這可以適配具有重疊標簽的數據集。
(2) 先驗框(anchor)和檢測框
先驗框:yolov3雖然較之前版本改進了許多,但是先驗框的使用技巧與yolov2相同,并且使用k-means對數據集中的標簽進行聚類,得到類別中心點的9個框,作為先驗框。
另外,還需要進行先驗框的選取,這是因為yolov3需要用先驗框對輸出特征圖的每個網格進行邊界框預測。選取一個合適的先驗框值是十分重要的,這可以使目標識別更加的準確。而先驗框值是通過訓練數據集聚類得到的,在yolov3的網絡模型中,其輸出3組特征圖,并且分別配有通過K-means算法得到的3組不同尺度的先驗框,以實現坐標回歸[11]。
檢測框解碼:檢測框在獲得先驗框與輸出特征圖的基礎上進行解碼[12]。

式中σ(tx),σ(ty)是基于矩形框中心點左上角格點坐標的偏移量,σ是激活函數,pw,ph是先驗框的寬、高,通過上述公式可計算出實際預測框的寬高(bw,bh)。
檢測置信度解碼:置信度由sigmoid函數解碼,并且數值在[0,1]區間內。

(3)Yolov3用法
Yolov3只能檢測屬于訓練集的物體類的目標,因此使用yolov3進行目標檢測之前需要訓練數據集,數據集的訓練直接影響之后的識別范圍與識別效果。
在使用yolov3進行目標檢測時,首先會將輸入圖片的大小進行縮放,改為416×416之后進入主干網絡處理。如果所使用的數據集中有N個不同的目標類別,那么經過網絡之后得到的3個特征圖屬性為(13×13,3×(4+1+N)),(26×26,3×(4+1+N)),與(52×52,3×(4+1+N))。意思就是分別劃分了13×13、26×26、52×52的網格,每個網格預測3個邊界框,邊界框的中心點坐標、高度、寬度是4,目標檢測的可信度是1。則一個單獨的網格擁有3個先驗框,當檢測到其內部存在目標時,就會對其進行類別檢測與邊框預測。把所有的網格都預測過之后獲取所有預測框的類別信息以及位置信息,最終通過非極大值處理后得到目標邊界框,實現對目標的檢測。
相較于其他系列目標檢測方法,Yolov3算法識別目標具有快速、背景誤檢率低、通用性強等優點,但是其識別目標位置精確性較差、召回率低。
雙目相機測距操作總共分為四個部分:相機標定-雙目校正-雙目匹配-計算深度信息[8]。
2.3.1 相機標定
相機成像一般都會產生畸變,這是因為相機生產過程中裝配、原料等多方面因素導致的。產生的畸變有兩種:
(1)徑向畸變
這種畸變主要是由相機所使用的透鏡產生的,徑向畸變的主要參數為k1,k2,k3。
(2)切向畸變
這種畸變主要是由于相機裝配的位置誤差產生的,切向畸變的主要參數為p1,p2。
另外相機參數還分為兩部分:
(1)內參
這是相機本身所固有的參數,不受外界因素的影響,主要有相機焦距f、成像原點(cx,cy)以及五個畸變參數(k1、k2、k3、p1、p2)。
(2)外參
外參即相機與目標所在空間的世界坐標。因為雙目相機會產生這些畸變,所以需要對雙目相機進行標定。標定即是通過獲得以上所介紹的各種參數再加上兩個相機的相對位置,然后經過計算對雙目相機進行修正以獲得更加準確的圖像以及深度信息。
2.3.2 雙目校正
雙目校正是我們分別根據左右相機定標后獲得的內參數據和雙目位置關系,對左右視圖消除畸變影響以及行對準的操作。這樣做的效果就是兩幅圖像上相對應點的行號相同。所以想找到另一幅圖像中所對應的點,只要在該行內進行一維搜索就可以找到。
2.3.3 雙目匹配
雙目匹配目的就是得到深度信息,這首先需要找出兩幅圖像上相對應的像素點,然后利用測距原理以及參數通過大量運算便可得到整幅圖像上所有像素點的深度信息。
本實驗使用Jetson nano作為運算平臺,在Ubuntu系統下進行開發,搭建ROS開發環境。編程語言采用Python以及C++。
Jetson nano是一款功能強大的小型計算機,硬件配置為四核 ARM? Cortex?-A57 MPCore處理器,顯存為4GB 64位 LPDDR4。它可以在圖像分類、目標檢測、分割和語音處理等應用并行運行多個神經網絡,同時處理多個高分辨率的傳感器。
目標檢測系統需要系統及時、準確的檢測出目標,以供應智能駕駛或者機器人的需要。本文使用yolov3算法進行目標檢測,相比其他算法處理速度更快、穩定性更高。
yolov3識別目標類型的范圍更加廣泛,這是因為該算法的目標匹配機制,可以通過更改權重來使用自己的數據集。
數據集的制作步驟概括為采集圖片、圖片標定、訓練。
采集圖片:采用在網上下載的方式,獲取大量數據圖片,然后經過刪選、隨機抽取100張圖片作為訓練素材。
圖片標定、訓練:在yolo訓練功能包中修改yaml文件,修改文件中類的個數以及類的名稱。隨機抽取采集圖片集中90%的圖片進行訓練,其余圖片集圖片用于驗證。訓練文件生成權重文件,權重文件包含best.pt以及last.pt文件。
圖3為訓練結果的PR曲線,其中precision代表精確率,recall代表召回率。該曲線波動不大,證明訓練結果較好。檢測結果如圖4所示,測試結果表明經訓練后的yolov3方法能準確分類目標。

圖3 PR曲線

圖4 目標檢測識別效果圖
測距之前首先需要對相機進行標定,標定的本質是借助一個已知確定的空間關系(標定板),通過分析拍照的圖片像素,逆向推出相機固有且真實的參數(內參)。
標定首先需要啟動相機,打開標定節點,設置標定板的參數(size以及square),然后通過移動標定板來獲取更多圖像信息,獲取完成后通過處理可獲得相機參數。
測距通過處理雙目相機獲取的左右圖像之間的視差信息,可以得到深度信息如圖5所示。將深度圖與yolo識別出的目標圖進行匹配可以得到相機與目標物之間的距離以及目標物的坐標,結果如圖6,圖7所示。

圖5 深度圖

圖6 目標識別圖

圖7 目標坐標以及距離輸出
測量結果如表1所示,測量障礙物選擇為人體,表中x,y為障礙物空間坐標,dis為目標檢測的距離。測距實驗結果表明目標與相機距離在0.80~5m內測量距離最大誤差為0.15m,距離測量誤差在5%內。

表1 障礙物位置
本文利用雙目相機獲取圖像,經過訓練數據集,對雙目相機進行標定后通過yolov3算法快速準確識別出目標,并生成目標圖像副本,再通過三角測距精確計算得到目標與相機的距離。實驗結果表明,該方法能夠較快且準確的識別目標,對目標進行分類,測量攝像頭與目標之間的距離。