林粵偉,牟 森
1(青島科技大學 信息科學技術(shù)學院,青島 266061)
2(海爾集團博士后工作站,青島 266000)
智能機器人的開發(fā)是科學研究、大學生科技創(chuàng)新大賽的熱點,基于計算機視覺的目標檢測技術(shù)在智能小車、無人機、機械臂等領(lǐng)域得到了廣泛應用.在企業(yè)界,零度智控公司開發(fā)了Dobby (多比)、大疆公司開發(fā)了Mavic 等,研發(fā)出了具有視覺人體追蹤與拍攝功能的家用小四軸自拍無人機.在學術(shù)界,文獻[1] 從檢測、跟蹤與識別三方面對基于計算機視覺的手勢識別的發(fā)展現(xiàn)狀進行了梳理與總結(jié);文獻[2]基于傳統(tǒng)的機器學習方法-半監(jiān)督學習和路威機器人平臺實現(xiàn)了視覺追蹤智能小車;文獻[3]基于微軟Kinect 平臺完成了視覺追蹤移動機器人控制系統(tǒng)的設(shè)計;文獻[4]對服務機器人視覺追蹤過程中的運動目標檢測與跟蹤算法進行研究并在ROS (Robot Operating System,機器人操作系統(tǒng))機器人平臺進行實現(xiàn).
上述視覺追蹤功能的實現(xiàn)大多采用傳統(tǒng)的目標檢測方法,基于圖像特征和機器學習,且所采用平臺成本相對較高.近年隨著大數(shù)據(jù)與人工智能技術(shù)的興起,利用深度學習直接將分類標記好的圖像數(shù)據(jù)集輸入深度卷積神經(jīng)網(wǎng)絡(luò)大大提升了圖像分類、目標檢測的精確度.國內(nèi)外基于Faster R-CNN (Faster Region-Convolutional Neural Network,更快的區(qū)域卷積神經(jīng)網(wǎng)絡(luò))、YOLO (You Only Look Once,一種single-stage 目標檢測算法)、SSD (Single Shot multibox Detector,單步多框檢測器)等模型的深度學習算法得到廣泛應用,如文獻[5]將改進的深度學習算法應用于中國手語識別.本文基于深度學習[6]技術(shù),在低成本樹莓派[7]平臺上設(shè)計實現(xiàn)了視覺追蹤智能機器人(小車),小車能夠通過攝像頭識別人手并自動追蹤跟隨人手.與現(xiàn)有研究的主要不同之處在于使用了更為經(jīng)濟的低成本樹莓派作為機器人平臺,并且在目標檢測的算法上使用了基于TensorFlow[8]深度學習框架的SSD 模型,而不是基于傳統(tǒng)的圖像特征和機器學習算法.
如圖1,整個系統(tǒng)分為機器人小車(下位機)和主控電腦(上位機)兩部分.上位機基于深度學習卷積神經(jīng)網(wǎng)絡(luò)做出預測,下位機負責機器人的行進以及視頻數(shù)據(jù)采集與傳輸,兩者之間通過WiFi 通信.其中,小車主控板為開源的樹莓派3 代B 開發(fā)板,CPU (ARM 芯片)主頻1.2 GHz,運行有樹莓派定制的嵌入式Linux操作系統(tǒng),配以板載WiFi 模塊、CSI 接口攝像頭、底盤構(gòu)成下位機部分.上位機操作運行事先訓練好的SSD 模型[9].小車攝像頭采集圖像數(shù)據(jù),將其通過WiFi傳輸給上位機,并作為SSD 模型的輸入.SSD 模型如果從輸入的圖像中檢測到人手,會得到人手在圖像中的位置,據(jù)此決定小車的運動方向和距離(需要保持人手在圖像中央),進而向小車發(fā)送控制命令,指示運動方向和距離.小車收到上位機發(fā)來的遠程控制命令后,做出前進、轉(zhuǎn)向等跟蹤人手的動作.智能小車和主控電腦兩端皆運行用Python[10]編寫的腳本程序.
SSD 模型全名為Single Shot multibox Detector[9],是一種基于深度學習的one stage (一次)目標檢測模型.SSD 模型由一個基礎(chǔ)網(wǎng)絡(luò)(base network)的輸出級后串行連接幾種不同的輔助網(wǎng)絡(luò)構(gòu)成,如圖2所示.不同于之前two stage 的Region CNN[11],SSD 模型是一個one stage 模型,即只需在一個網(wǎng)絡(luò)中即可完成目標檢測,效率更高.
圖1 智能機器人系統(tǒng)架構(gòu)
圖2 SSD 模型
SSD 模型采用多尺度特征預測的方法得到多個不同尺寸的特征圖[9].假設(shè)模型檢測時采用m層特征圖,則得到第k個特征圖的默認框比例公式如式(1):
其中,Sk表示特征圖上的默認框大小相對于輸入原圖的比例(scale).一般取Smin=0.2,Smax=0.9.m為特征圖個數(shù).
SSD 模型的損失函數(shù)定義為位置損失與置信度損失的加權(quán)和[9],如式(2)所示:
其中,N表示與真實物體框相匹配的默認框數(shù)量;c是預測框的置信度;l為預測框的位置信息;g是真實框的位置信息;α是一個權(quán)重參數(shù),將它設(shè)為1;Lloc(x,l,g)位置損失是預測框與真實框的Smooth L1 損失函數(shù);Lconf(x,c)是置信度損失,這里采用交叉熵損失函數(shù).
使用谷歌TensorFlow 深度學習框架對SSD 模型進行訓練.TensorFlow 能夠?qū)碗s的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)絡(luò)中進行學習和預測,近年廣泛應用于圖像分類、機器翻譯等領(lǐng)域.TensorFlow 有著強大的Python API 函數(shù),而本文實現(xiàn)的智能小車和主控電腦端運行的程序皆為Python 腳本,可以方便的調(diào)用Python API 函數(shù).
系統(tǒng)主程序軟件流程如圖3所示.上位機運行自行編寫的Python 腳本作為主程序,接收下位機發(fā)來的圖像,并將其輸入到事先訓練好的深度學習SSD 模型中,以檢測人手目標.若檢測到人手,則產(chǎn)生、發(fā)送控制命令至下位機.下位機運行兩個自行編寫的Python腳本,其中一個腳本基于開源的mjpg-streamer 軟件采集、傳輸圖像至上位機,另一個接收來自上位機的控制命令并通過GPIO 端口控制車輪運動.
圖3 主程序軟件流程
上位機電腦和CPU 型號為聯(lián)想Thinkpad E540 酷睿i5 (第4 代),操作系統(tǒng)為Ubuntu 16.04 LTS 64 位,TensorFlow 版本為v1.4.0,采用TensorFlow Object Detection API 的SSD MobileNet V1 模型.訓練數(shù)據(jù)直接使用了美國印第安納大學計算機視覺實驗室公開的EgoHands 數(shù)據(jù)集,該數(shù)據(jù)集是一個向外界開放下載的1.2 GB 的已經(jīng)標注好的數(shù)據(jù)集,用谷歌眼鏡采集第一視角下的人手圖像數(shù)據(jù),例如玩牌、下棋等場景下人手的姿態(tài).首先對數(shù)據(jù)集進行數(shù)據(jù)整理,將其轉(zhuǎn)換為TensorFlow 專有的TF Record 數(shù)據(jù)集格式文件,然后修改TensorFlow 目標檢測訓練配置文件ssd_mobilenet_v1_coco.config.訓練全程在電腦上由通用CPU 運行,共運行26 小時.結(jié)束訓練后將protobuf 格式的二進制文件(真正的SSD 模型)保存下來以便下文介紹的上位機Python 主程序調(diào)用.
考慮到小車回傳視頻的幀數(shù)比較高,且深度學習神經(jīng)網(wǎng)絡(luò)的計算也是一件耗時的任務,在上位機主程序(Python 腳本)中建立了兩個隊列,一個輸入隊列用來存儲下位機傳來的原始圖像,一個輸出隊列用來存儲經(jīng)神經(jīng)網(wǎng)絡(luò)運算處理之后帶有標注結(jié)果的圖像.上位機通過開源軟件OpenCV 的cv2.videoCapture 類用文件的方式讀取視頻信息.運行SSD 目標檢測模型進行人手識別時,會得到目標的標注矩形框中心,當中心落到整幅圖像的左側(cè)并超出一定距離時,產(chǎn)生turnleft左轉(zhuǎn)指令;當中心落到整幅圖像右側(cè)且超出一定距離的時,產(chǎn)生turnright 右轉(zhuǎn)指令;當中心落到圖像的上半部分并超過一定距離時,產(chǎn)生forward 前進指令.距離值默認設(shè)定為60 個像素,該參數(shù)可修改.預測小車行進方向功能的偽代碼如算法1 所示.
算法1.上位機預測行進方向偽代碼Require:距離閾值(默認為60 像素)while 全部程序就緒 do if 沒有識別到目標:Continue;else if 識別到目標:if 識別到目標面積過大,目標離攝像頭太近:Send(“stop”);else:if 目標中心 x<640/2-距離閾值:Send(“turnleft”);if 目標中心 x>640/2+距離閾值:Send(“turnright”);else:Send(“forward”);end while
下位機基于低成本樹莓派平臺實現(xiàn),使用開源軟件Bottle 部署了一個多線程的HTTP 服務器,該服務器接收上位機發(fā)出的HTTP POST 請求,提取其中的控制命令進行運動控制.使用開源軟件mjpg-streamer 控制網(wǎng)絡(luò)攝像頭采集圖像,并將圖像數(shù)據(jù)以視頻流的方式通過IP 網(wǎng)絡(luò)傳輸?shù)缴衔粰C客戶端.
搭建局域網(wǎng)環(huán)境(也支持廣域網(wǎng)),使上位機和下位機接入同一無線路由器.當攝像頭采集到的畫面右側(cè)出現(xiàn)人手時,如圖4所示的實時圖像中,標注方框標記出了檢測到的人手的位置,同時控制臺輸出turnright(右轉(zhuǎn))控制命令,此時小車向右側(cè)做出移動.當屏幕中沒有人手時,畫面上面沒有用彩色畫出的區(qū)域,上位機的終端也不打印輸出任何控制命令.
圖4 人手目標檢測功能測試結(jié)果
功能方面,針對人手在小車視野的不同位置情況進行所研制小車人手視覺追蹤的功能測試.比如,當人手在小車前方且完整出現(xiàn)時,上位機應發(fā)出forward(前進)命令,進而小車收到該命令后向前行進.當小車視野里沒有或只有部分人手時,應當無命令輸出,小車原地不動.功能測試用例如表1所示,測試結(jié)果均為預期的正常結(jié)果.性能方面,所采用基于深度學習SSD模型的人手目標檢測算法的準確性與實時性較好,算法的mAP (平均精準度) 為74%,檢測速率40 fps 左右,可以較好的滿足系統(tǒng)要求.
表1 人手視覺功能測試結(jié)果
小車(機器人平臺)外觀如圖5所示.另外,由于動態(tài)視頻文件無法在論文中展示,這里展示的是錄制好的測試視頻中2 個幀的截圖,如圖6所示,從小車的位置變化可以看出其可以追蹤人手.
圖5 機器人外觀
圖6 追蹤人手
本文利用深度學習SSD 目標檢測模型對目標進行識別,將識別的結(jié)果用于修正智能小車機器人的行進路線,滿足了智能機器人的視覺追蹤功能需求.其特色主要在于采用了低成本樹莓派,以及深度學習而非傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)識別算法,省去了設(shè)置特征的步驟.系統(tǒng)暫時只能用來識別人手,小車能夠跟隨人手移動,功能穩(wěn)定性與性能良好.若要識別追蹤其他物體,可以使用其他自己制作或第三方數(shù)據(jù)集對SSD 模型進行訓練,以把網(wǎng)絡(luò)的識別對象訓練成擬追蹤的目標類型.未來也可應用5G 通信模塊,進行更為穩(wěn)定低時延的視頻傳輸與控制.