田宇
摘? 要:根據(jù)目前常見目標(biāo)識(shí)別算法檢測(cè)較為復(fù)雜、識(shí)別時(shí)間較長(zhǎng)并容易出現(xiàn)錯(cuò)檢漏檢等方面的不足,利用目前機(jī)器視覺技術(shù),提出一種適用智能移動(dòng)小車系統(tǒng)的目標(biāo)識(shí)別算法YOLOv3(一種深度學(xué)習(xí)目標(biāo)檢測(cè)方法),并搭建智能移動(dòng)小車的目標(biāo)識(shí)別仿真系統(tǒng)。其目的是研究目標(biāo)識(shí)別算法在ROS(機(jī)器人操作系統(tǒng))中結(jié)合智能小車運(yùn)動(dòng)控制功能進(jìn)行正確實(shí)現(xiàn),改善目標(biāo)檢測(cè)算法的漏檢率、錯(cuò)誤率等。分析目標(biāo)識(shí)別算法在ROS系統(tǒng)中的精確度,使用數(shù)據(jù)集進(jìn)行檢測(cè)實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,運(yùn)用YOLOv3深度學(xué)習(xí)目標(biāo)識(shí)別算法在提高識(shí)別目標(biāo)速度的同時(shí)有較高的檢測(cè)精度,當(dāng)目標(biāo)丟失在視野中時(shí)利用ROS系統(tǒng)控制移動(dòng)機(jī)器人重新使目標(biāo)快速識(shí)別,降低了識(shí)別目標(biāo)的時(shí)間,提高了移動(dòng)機(jī)器人運(yùn)動(dòng)識(shí)別的效率。
關(guān)鍵詞:ROS系統(tǒng);深度學(xué)習(xí);YOLOv3識(shí)別算法;運(yùn)動(dòng)控制
中圖分類號(hào):TP391.4? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Research on Target Recognition of Intelligent Mobile
Car based on Robot Operating System
TIAN Yu
(School of Mechanical Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
893570276@qq.com
Abstract: Currently, common target recognition algorithms have shortcomings of complex detection, long recognition time and being prone to error detection and missed detection. In order to solve these problems, this paper proposes a target recognition algorithm YOLOv3 (A deep learning target detection method) that is suitable for intelligent mobile car system by using the current machine vision technology. Meanwhile, target recognition simulation system of the intelligent mobile car is built in order to study the correct implementation of target recognition algorithm in ROS (Robot Operating System) combined with intelligent car motion control function, thus reducing miss detection rate and error rate of target detection algorithm. Accuracy of target recognition algorithm in ROS system is analyzed and data set is used for detection experiment. Experimental results show that the proposed YOLOv3 deep learning target recognition algorithm can improve target recognition speed and detection accuracy. When a target is lost in the field of vision, ROS system is used to control the mobile robot to recognize the target quickly again, which reduces target recognition time and improves the efficiency of mobile robot motion recognition.
Keywords: ROS system; deep learning; YOLOv3 recognition algorithm; motion control
1? ?引言(Introduction)
隨著人工智能和機(jī)器人技術(shù)的發(fā)展,機(jī)器視覺成為機(jī)器和計(jì)算機(jī)領(lǐng)域新興的應(yīng)用[1],而基于深度學(xué)習(xí)的視覺識(shí)別也成為目標(biāo)識(shí)別中的主流,特別是利用移動(dòng)式、腿足式機(jī)器人進(jìn)行動(dòng)態(tài)識(shí)別成為當(dāng)前的研究重點(diǎn),但腿足式機(jī)器人研究要結(jié)合復(fù)雜步態(tài)進(jìn)行,較為困難,故現(xiàn)對(duì)移動(dòng)式智能機(jī)器人小車進(jìn)行研究。在持續(xù)識(shí)別檢測(cè)目標(biāo)的過程中,機(jī)器人與目標(biāo)需要進(jìn)行實(shí)時(shí)交互,所以需要構(gòu)建實(shí)時(shí)準(zhǔn)確的機(jī)器人識(shí)別系統(tǒng)。而ROS能夠提高機(jī)器人的功能開發(fā)效率,受到機(jī)器人科研人員和開發(fā)人員的青睞,在國(guó)內(nèi)機(jī)器人研究中,利用ROS對(duì)地圖建設(shè)、路徑計(jì)劃、導(dǎo)航和模擬、運(yùn)動(dòng)控制和定位等進(jìn)行了研究。使用ROS進(jìn)行移動(dòng)機(jī)器人的交互在檢測(cè)跟蹤方面具有重要的研究意義,將基于深度學(xué)習(xí)的目標(biāo)識(shí)別算法和ROS系統(tǒng)進(jìn)行有效的結(jié)合,形成高效的實(shí)時(shí)仿真環(huán)境是值得研究的熱門課題。
2? ROS平臺(tái)簡(jiǎn)介(A brief introduction of ROS platform)
機(jī)器人操作系統(tǒng)(ROS)是一個(gè)基于機(jī)器人應(yīng)用的開源系統(tǒng)框架,它包含大量工具軟件、庫代碼和約定協(xié)議。使用ROS平臺(tái)是為了提高機(jī)器人軟件開發(fā)中的軟件復(fù)用率,為機(jī)器人開發(fā)者提供底層驅(qū)動(dòng)和控制、節(jié)點(diǎn)間的通信等功能,同時(shí)還包括獲取、編譯、封裝運(yùn)行程序所使用的工具和API(操作系統(tǒng)的應(yīng)用程序接口)[2]。它的五個(gè)特點(diǎn)為:(1)多語言的支撐;(2)框架簡(jiǎn)單,高集成度;(3)功能包、工具包種類多樣;(4)點(diǎn)對(duì)點(diǎn)的通信;(5)免費(fèi)且開源。
ROS的節(jié)點(diǎn)控制:節(jié)點(diǎn)是機(jī)器人實(shí)現(xiàn)應(yīng)用的載體,各節(jié)點(diǎn)實(shí)現(xiàn)不同的目的,它們互相通過節(jié)點(diǎn)控制器進(jìn)行連接通信。節(jié)點(diǎn)控制器通過管理如目標(biāo)識(shí)別節(jié)點(diǎn)、傳感器控制節(jié)點(diǎn)、鍵盤控制節(jié)點(diǎn)、運(yùn)動(dòng)控制節(jié)點(diǎn)等實(shí)現(xiàn)整個(gè)系統(tǒng)的實(shí)際應(yīng)用,如圖1所示。
3? 基于深度學(xué)習(xí)的目標(biāo)識(shí)別(Target recognition based on deep learning)
3.1? ?目標(biāo)識(shí)別算法對(duì)比
比較流行的深度學(xué)習(xí)方法主要分為One-stage(SSD、YOLO系列)和Two-stage(R-CNN系列)。Two-stage包括:(1)R-CNN算法:①給出一張圖片;②從圖片中隨機(jī)生成1,000多個(gè)方框;③對(duì)搜索到的每一個(gè)方框進(jìn)行特征提取;④使用分類器對(duì)搜索到的方框進(jìn)行分類;⑤通過回歸的方法定義新的目標(biāo)方框。但此方法有很明顯的不確定性,它的特征提取有很大的冗余和重疊。(2)Fast R-CNN算法:在R-CNN的基礎(chǔ)上進(jìn)行深度研究,但選擇性搜索仍然比較慢,計(jì)算量還是很大。(3)Faster R-CNN算法:在Fast R-CNN的基礎(chǔ)上再進(jìn)行改進(jìn)[3]。此時(shí)該方法把識(shí)別檢測(cè)分為四個(gè)步驟:候選框選擇、提取特征、提取后分類、Bounding Box(預(yù)測(cè)框)預(yù)測(cè)回歸,但其缺陷是還需要花費(fèi)不少的時(shí)間來訓(xùn)練。
VOC2007數(shù)據(jù)集上給出Faster R-CNN和YOLOv3的檢測(cè)模型,F(xiàn)aster R-CNN和YOLOv3在mPA(平均精度)和FPS(每秒所能達(dá)到的幀數(shù))上的評(píng)估結(jié)果如表1所示。
結(jié)果表明,YOLO方法解決了CNN(卷積神經(jīng)網(wǎng)絡(luò))系列算法速度慢的問題,而且能保證平均精度在一定高度的范圍內(nèi)。它主要使用了回歸的思想,通過對(duì)一張圖片的整體進(jìn)行研究,在一張圖片的多個(gè)位置上回歸出它的目標(biāo)方框以及反映出目標(biāo)的類別。由于在簡(jiǎn)單環(huán)境內(nèi)需要檢測(cè)的目標(biāo)很少,因此在評(píng)估結(jié)果和保證實(shí)時(shí)方面,我們使用YOLOv3結(jié)合ROS進(jìn)行此系統(tǒng)的目標(biāo)識(shí)別實(shí)現(xiàn)。
3.2? ?YOLOv3算法網(wǎng)絡(luò)框架
YOLO算法將所需檢測(cè)的圖片進(jìn)行的柵格化[4](這是一種非常具有創(chuàng)新性的想法),然后將圖片中一個(gè)目標(biāo)的預(yù)測(cè)位置與目標(biāo)中心位置所在最小單元格的Bounding Box進(jìn)行相交。該算法大大減少了模型在圖片中搜索的冗余和復(fù)雜度,將位置識(shí)別和類型檢測(cè)封裝到一個(gè)CNN網(wǎng)絡(luò)中進(jìn)行預(yù)測(cè),判斷圖片中幾種目標(biāo)的所屬類型和位置信息。CNN網(wǎng)絡(luò)是一種深層次的網(wǎng)絡(luò)結(jié)構(gòu)[5],CNN網(wǎng)絡(luò)結(jié)構(gòu)從輸入層到輸出層中間包含兩個(gè)隱藏層,隱藏層里包含卷積層、池化層、全連接層,如圖2所示。
YOLOv3的主干特征提取網(wǎng)絡(luò)的部分叫作Darknet-53[6]。YOLOv3輸入一個(gè)圖片,主干特征提取網(wǎng)絡(luò)就會(huì)對(duì)輸入的圖片不斷地進(jìn)行特征提取,從下到上為一系列卷積的過程。其中底層三個(gè)方向使用殘差網(wǎng)絡(luò),Darknet-53中的殘差卷積就是首先進(jìn)行一次的步長(zhǎng)為2的卷積,然后保留該卷積層,再進(jìn)行一次的卷積和一次的卷積,并把這個(gè)結(jié)果加上Layer作為輸出的結(jié)果,在輸出的三個(gè)方向上再進(jìn)行殘差網(wǎng)絡(luò)(Residual)處理。YOLOv3尺度輸出網(wǎng)絡(luò)架構(gòu)如圖3(a)所示,可視化模型預(yù)測(cè)對(duì)網(wǎng)絡(luò)的三個(gè)方向上的Box進(jìn)行質(zhì)心預(yù)測(cè)架構(gòu)如圖3(b)所示。
(a)YOLOv3尺度輸出網(wǎng)絡(luò)架構(gòu)
(b)YOLOv3可視化網(wǎng)絡(luò)模型預(yù)測(cè)架構(gòu)
殘差網(wǎng)絡(luò)最初是用在ResNet上,把殘差網(wǎng)絡(luò)分作一個(gè)個(gè)Block,每一個(gè)Block可以有輸入也可以有輸出,殘差網(wǎng)絡(luò)塊對(duì)輸入進(jìn)行兩部分的處理結(jié)構(gòu)如圖4所示。
3.3? ?YOLOv3算法的實(shí)現(xiàn)
YOLO的方法并非直接預(yù)測(cè)實(shí)際框架的寬度和高度,而是將預(yù)測(cè)的寬度和高度分為Anchor Box(Faster R-CNN中提出的預(yù)測(cè)錨框,后來演變?yōu)轭A(yù)測(cè)Bounding Box)的寬度和高度來連接。經(jīng)過多次迭代訓(xùn)練,每個(gè)Bounding Box都會(huì)知道它是在預(yù)測(cè)什么樣的Box。Bounding Box預(yù)測(cè)用式(1)和式(2)求得預(yù)測(cè)框的寬和高:
(1)
(2)
其中,和為Anchor Box的寬和高,和為Bounding Box直接預(yù)測(cè)出的寬和高,和為轉(zhuǎn)換后預(yù)測(cè)的實(shí)際寬和高,也就是最終預(yù)測(cè)中輸出的寬和高。置信度如式(3)所示:
(3)
其中,表示第i 個(gè)最小單元格的第j 個(gè)Bounding Box的置信度。的求解如下:
當(dāng)Bounding Box認(rèn)為當(dāng)前邊框內(nèi)有目標(biāo)時(shí),要檢測(cè)的所有類型中每種類型的概率為對(duì)象條件類別概率(Conditional Class Probabilities),YOLOv3的對(duì)象條件類別概率中對(duì)背景的預(yù)測(cè)通過置信度來分類識(shí)別,所以它的輸出是在置信度表示邊框有目標(biāo)時(shí)的前提下,而它的條件概率為,所以置信度評(píng)測(cè)由給出。
若一張圖片被分為個(gè)單元格,并且有個(gè)Bounding Box,根據(jù)圖3(b)預(yù)測(cè)的三個(gè)方向的Box,即每個(gè)Bounding Box內(nèi)有5 個(gè)位置參數(shù)含有1 個(gè)置信度和個(gè)類別概率,那么得到最終的輸出維數(shù)如式(4)所示:
(4)
根據(jù)YOLOv3算法進(jìn)行直觀檢測(cè),該算法的檢測(cè)在圖中能精確快速地識(shí)別。在單目標(biāo)識(shí)別中有較精確的效果,如圖5(a)所示;在多目標(biāo)識(shí)別中存在極少數(shù)漏檢情況,但識(shí)別精度仍然保持一定的高度,如圖5(b)所示,而且有較快的識(shí)別速度。故將在該算法下研究ROS智能移動(dòng)小車識(shí)別系統(tǒng)實(shí)驗(yàn),為移動(dòng)小車的智能應(yīng)用提供基礎(chǔ),搭載YOLO識(shí)別功能包與ROS進(jìn)行通信,達(dá)到準(zhǔn)確高效的識(shí)別效果。
4 目標(biāo)識(shí)別移動(dòng)小車實(shí)驗(yàn)系統(tǒng)架構(gòu)搭建(Construction of experiment system architecture for target recognition mobile car)
此目標(biāo)識(shí)別系統(tǒng)的功能包架構(gòu)如圖6所示。
robot_gazebo為小車三維仿真環(huán)境及其Gazebo(可視化仿真環(huán)境)世界的建模功能包;Motion_control為移動(dòng)機(jī)器人小車運(yùn)動(dòng)控制功能包;target_recognition為封裝的YOLOv3目標(biāo)識(shí)別功能包,三者相互通信,形成一個(gè)以移動(dòng)機(jī)器人小車為仿真實(shí)驗(yàn)平臺(tái)的目標(biāo)識(shí)別系統(tǒng)。
4.1? ?搭建仿真智能小車環(huán)境
該模型采用XACRO,是優(yōu)化后的URDF模型,是一種精簡(jiǎn)化、可復(fù)用、模塊化的描述形式。模型文件的后綴名由.urdf變?yōu)?xacro,而且在模型標(biāo)簽中需要加入XACRO的聲明,使模型與ROS進(jìn)行連接:
<?xml version="1.0"?>
搭載簡(jiǎn)要移動(dòng)機(jī)器人小車模型和其他外部環(huán)境需要定義各種參數(shù),例如定義車身顏色、慣性矩陣、傳動(dòng)系統(tǒng)的關(guān)節(jié)連接,等等[7]。此處利用mrobot_gazebo模型小車,如圖7所示。
此環(huán)境搭建好后可以加入其他外部models搭建整體的world環(huán)境,為后續(xù)識(shí)別更多目標(biāo)提供模型。此環(huán)境封裝為robot_gazebo功能包。此環(huán)境加載攝像頭插件camera.xacro,便于搭載視覺系統(tǒng)。
4.2? ?運(yùn)動(dòng)控制平臺(tái)搭建
移動(dòng)小車模型中已經(jīng)加入了libgazebo_ros_diff_drive.so插件,可以使用差速控制器實(shí)現(xiàn)機(jī)器人運(yùn)動(dòng),由于和控制運(yùn)動(dòng)有關(guān)的話題是/cmd_vel,故在終端輸入roslaunch robot_control以便執(zhí)行鍵盤運(yùn)動(dòng)控制節(jié)點(diǎn),同時(shí)執(zhí)行rostopic echo/cmd_vel來查詢小車運(yùn)動(dòng)信息,此時(shí)控制鍵盤即可控制仿真小車的速度、方向等。小車的運(yùn)動(dòng)控制界面如圖8所示。
由于小車為兩驅(qū)輪式驅(qū)動(dòng),以直角坐標(biāo)系XOY為基礎(chǔ),小車運(yùn)動(dòng)學(xué)方程[8]如式(5)所示:
(5)
左右兩輪角速度如式(6)和式(7)所示:
(6)
(7)
在t時(shí)刻姿態(tài)位置變化如式(8)所示,姿態(tài)位置隨時(shí)間變化如式(9)和式(10)所示:
(8)
(9)
(10)
其中,為移動(dòng)小車質(zhì)心線速度,為小車轉(zhuǎn)動(dòng)角速度,為兩驅(qū)動(dòng)輪的距離,為小車轉(zhuǎn)彎的角度,和分別為小車左右驅(qū)動(dòng)輪的線速度,為小車某時(shí)刻回轉(zhuǎn)半徑。啟動(dòng)rostopic相關(guān)話題查詢?nèi)鐖D9所示的移動(dòng)小車運(yùn)動(dòng)信息顯示界面。
了解到小車運(yùn)動(dòng)方位和姿態(tài)的位置信息,將此環(huán)境封裝為Motion_contorl功能包。搭建移動(dòng)小車仿真平臺(tái)后進(jìn)行目標(biāo)識(shí)別模塊的連接和通信,運(yùn)動(dòng)識(shí)別整體流程框架如圖10所示。首先初始化移動(dòng)小車,隨后訂閱小車運(yùn)動(dòng)的/cmd_vel節(jié)點(diǎn)來獲得小車的速度、角度、方向等信息,若小車視野內(nèi)存在要識(shí)別的目標(biāo)則小車位置不發(fā)生改變,只獲取識(shí)別到的信息;若小車視野內(nèi)目標(biāo)位置偏移或者不存在目標(biāo),則調(diào)整小車速度、方向等進(jìn)行小車的運(yùn)動(dòng)控制,直至識(shí)別到目標(biāo)重新出現(xiàn)在視野范圍內(nèi)。
4.3? ?目標(biāo)識(shí)別在ROS中的實(shí)現(xiàn)
將YOLO算法與ROS進(jìn)行通信,需要建立移動(dòng)小車仿真環(huán)境、運(yùn)動(dòng)控制和目標(biāo)識(shí)別間的節(jié)點(diǎn)通信[9],使用數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)。將目標(biāo)識(shí)別封裝為target_recognition功能包,通過Gazebo節(jié)點(diǎn)進(jìn)行三類節(jié)點(diǎn)的控制通信,利用/cmd_vel進(jìn)行運(yùn)動(dòng)控制節(jié)點(diǎn)連接,利用camera/image_raw進(jìn)行ROS中目標(biāo)識(shí)別算法節(jié)點(diǎn)連接,利用/joint_states進(jìn)行移動(dòng)小車仿真環(huán)境節(jié)點(diǎn)連接,三者構(gòu)成基于ROS移動(dòng)小車的目標(biāo)識(shí)別系統(tǒng)[10]。目標(biāo)識(shí)別小車系統(tǒng)節(jié)點(diǎn)通信如圖11所示。
通過虛擬機(jī)的Ubuntu系統(tǒng)中ROS各個(gè)節(jié)點(diǎn)控制,完成仿真系統(tǒng)的研究,以YOLOv3和ROS結(jié)合為主要識(shí)別算法進(jìn)行實(shí)驗(yàn),與R-CNN系列算法進(jìn)行比對(duì),得出實(shí)驗(yàn)結(jié)果。雖然在虛擬機(jī)下實(shí)現(xiàn)識(shí)別有一定的不確定性,但是在簡(jiǎn)單識(shí)別目標(biāo)的前提下有很好的效果,在錯(cuò)檢、漏檢和速度方面有較大改善。在ROS中的識(shí)別實(shí)驗(yàn)效果如圖12所示。
5? ?結(jié)論(Conclusion)
本文以虛擬機(jī)Ubuntu 18.04系統(tǒng)的ROS平臺(tái),創(chuàng)建移動(dòng)小車XACRO模型,封裝運(yùn)動(dòng)控制、鍵盤驅(qū)動(dòng)功能包,以YOLOv3為識(shí)別算法,分析算法的優(yōu)點(diǎn),搭建相機(jī)插件,進(jìn)行仿真移動(dòng)小車目標(biāo)識(shí)別實(shí)驗(yàn)。該深度學(xué)習(xí)算法在ROS中錯(cuò)誤識(shí)別、遺漏識(shí)別的情況很少出現(xiàn),表現(xiàn)出較好的精度和速度。后續(xù)將在高效的GPU平臺(tái)上針對(duì)復(fù)雜環(huán)境,對(duì)檢測(cè)實(shí)時(shí)性開展進(jìn)一步的研究。
參考文獻(xiàn)(References)
[1] 高娟娟,渠中豪,宋亞青.機(jī)器視覺技術(shù)研究和應(yīng)用現(xiàn)狀及發(fā)展趨勢(shì)[J].中國(guó)傳媒科技,2020(07):21-22.
[2] 詹潤(rùn)哲,姜飛.基于ROS與深度學(xué)習(xí)的移動(dòng)機(jī)器人目標(biāo)識(shí)別系統(tǒng)[J].電子測(cè)試,2018(15):70-71,64.
[3] 曹之君,張良.基于Faster-RCNN的快速目標(biāo)檢測(cè)算法[J].航天控制,2020,38(04):49-55.
[4] REDMON J, FARHADI A. YOLOv3: An incremental improvement[J]. IEEE Conference on Computer Vision and Pattern Recognition, 2018(04):89-95.
[5] 王琦.卷積核相關(guān)性與CNN網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化的關(guān)系研究[D].蘭州:蘭州大學(xué),2019.
[6] 王輝,張帆,劉曉鳳,等.基于DarkNet-53和YOLOv3的水果圖像識(shí)別[J].東北師大學(xué)報(bào)(自然科學(xué)版),2020,52(04):65-70.
[7] 張玉林,陳勇林.基于ROS平臺(tái)的移動(dòng)機(jī)器人運(yùn)動(dòng)分析與仿真[J].機(jī)器人技術(shù)與應(yīng)用,2018,185(05):37-40.
[8] 許松清,吳海彬,楊興裕.兩輪驅(qū)動(dòng)移動(dòng)機(jī)器人的運(yùn)動(dòng)學(xué)研究[J].電子機(jī)械工程,2005,21(06):31-34.
[9] 張亞斌.基于ROS的輪式移動(dòng)機(jī)器人行人目標(biāo)視覺感知與跟隨系統(tǒng)研究[D].徐州:中國(guó)礦業(yè)大學(xué)(江蘇),2019.
[10] 賈浩東.基于ROS平臺(tái)的機(jī)器人目標(biāo)識(shí)別系統(tǒng)的設(shè)計(jì)[J].電子測(cè)試,2018(02):49-50,59.
作者簡(jiǎn)介:
田? ?宇(1994-),男,碩士生.研究領(lǐng)域:機(jī)器視覺.