林粵偉,牟 森
1(青島科技大學 信息科學技術學院,青島 266061)
2(海爾集團博士后工作站,青島 266000)
智能機器人的開發是科學研究、大學生科技創新大賽的熱點,基于計算機視覺的目標檢測技術在智能小車、無人機、機械臂等領域得到了廣泛應用.在企業界,零度智控公司開發了Dobby (多比)、大疆公司開發了Mavic 等,研發出了具有視覺人體追蹤與拍攝功能的家用小四軸自拍無人機.在學術界,文獻[1] 從檢測、跟蹤與識別三方面對基于計算機視覺的手勢識別的發展現狀進行了梳理與總結;文獻[2]基于傳統的機器學習方法-半監督學習和路威機器人平臺實現了視覺追蹤智能小車;文獻[3]基于微軟Kinect 平臺完成了視覺追蹤移動機器人控制系統的設計;文獻[4]對服務機器人視覺追蹤過程中的運動目標檢測與跟蹤算法進行研究并在ROS (Robot Operating System,機器人操作系統)機器人平臺進行實現.
上述視覺追蹤功能的實現大多采用傳統的目標檢測方法,基于圖像特征和機器學習,且所采用平臺成本相對較高.近年隨著大數據與人工智能技術的興起,利用深度學習直接將分類標記好的圖像數據集輸入深度卷積神經網絡大大提升了圖像分類、目標檢測的精確度.國內外基于Faster R-CNN (Faster Region-Convolutional Neural Network,更快的區域卷積神經網絡)、YOLO (You Only Look Once,一種single-stage 目標檢測算法)、SSD (Single Shot multibox Detector,單步多框檢測器)等模型的深度學習算法得到廣泛應用,如文獻[5]將改進的深度學習算法應用于中國手語識別.本文基于深度學習[6]技術,在低成本樹莓派[7]平臺上設計實現了視覺追蹤智能機器人(小車),小車能夠通過攝像頭識別人手并自動追蹤跟隨人手.與現有研究的主要不同之處在于使用了更為經濟的低成本樹莓派作為機器人平臺,并且在目標檢測的算法上使用了基于TensorFlow[8]深度學習框架的SSD 模型,而不是基于傳統的圖像特征和機器學習算法.
如圖1,整個系統分為機器人小車(下位機)和主控電腦(上位機)兩部分.上位機基于深度學習卷積神經網絡做出預測,下位機負責機器人的行進以及視頻數據采集與傳輸,兩者之間通過WiFi 通信.其中,小車主控板為開源的樹莓派3 代B 開發板,CPU (ARM 芯片)主頻1.2 GHz,運行有樹莓派定制的嵌入式Linux操作系統,配以板載WiFi 模塊、CSI 接口攝像頭、底盤構成下位機部分.上位機操作運行事先訓練好的SSD 模型[9].小車攝像頭采集圖像數據,將其通過WiFi傳輸給上位機,并作為SSD 模型的輸入.SSD 模型如果從輸入的圖像中檢測到人手,會得到人手在圖像中的位置,據此決定小車的運動方向和距離(需要保持人手在圖像中央),進而向小車發送控制命令,指示運動方向和距離.小車收到上位機發來的遠程控制命令后,做出前進、轉向等跟蹤人手的動作.智能小車和主控電腦兩端皆運行用Python[10]編寫的腳本程序.
SSD 模型全名為Single Shot multibox Detector[9],是一種基于深度學習的one stage (一次)目標檢測模型.SSD 模型由一個基礎網絡(base network)的輸出級后串行連接幾種不同的輔助網絡構成,如圖2所示.不同于之前two stage 的Region CNN[11],SSD 模型是一個one stage 模型,即只需在一個網絡中即可完成目標檢測,效率更高.

圖1 智能機器人系統架構

圖2 SSD 模型
SSD 模型采用多尺度特征預測的方法得到多個不同尺寸的特征圖[9].假設模型檢測時采用m層特征圖,則得到第k個特征圖的默認框比例公式如式(1):

其中,Sk表示特征圖上的默認框大小相對于輸入原圖的比例(scale).一般取Smin=0.2,Smax=0.9.m為特征圖個數.
SSD 模型的損失函數定義為位置損失與置信度損失的加權和[9],如式(2)所示:

其中,N表示與真實物體框相匹配的默認框數量;c是預測框的置信度;l為預測框的位置信息;g是真實框的位置信息;α是一個權重參數,將它設為1;Lloc(x,l,g)位置損失是預測框與真實框的Smooth L1 損失函數;Lconf(x,c)是置信度損失,這里采用交叉熵損失函數.
使用谷歌TensorFlow 深度學習框架對SSD 模型進行訓練.TensorFlow 能夠將復雜的數據結構傳輸至人工智能神經網絡中進行學習和預測,近年廣泛應用于圖像分類、機器翻譯等領域.TensorFlow 有著強大的Python API 函數,而本文實現的智能小車和主控電腦端運行的程序皆為Python 腳本,可以方便的調用Python API 函數.
系統主程序軟件流程如圖3所示.上位機運行自行編寫的Python 腳本作為主程序,接收下位機發來的圖像,并將其輸入到事先訓練好的深度學習SSD 模型中,以檢測人手目標.若檢測到人手,則產生、發送控制命令至下位機.下位機運行兩個自行編寫的Python腳本,其中一個腳本基于開源的mjpg-streamer 軟件采集、傳輸圖像至上位機,另一個接收來自上位機的控制命令并通過GPIO 端口控制車輪運動.

圖3 主程序軟件流程
上位機電腦和CPU 型號為聯想Thinkpad E540 酷睿i5 (第4 代),操作系統為Ubuntu 16.04 LTS 64 位,TensorFlow 版本為v1.4.0,采用TensorFlow Object Detection API 的SSD MobileNet V1 模型.訓練數據直接使用了美國印第安納大學計算機視覺實驗室公開的EgoHands 數據集,該數據集是一個向外界開放下載的1.2 GB 的已經標注好的數據集,用谷歌眼鏡采集第一視角下的人手圖像數據,例如玩牌、下棋等場景下人手的姿態.首先對數據集進行數據整理,將其轉換為TensorFlow 專有的TF Record 數據集格式文件,然后修改TensorFlow 目標檢測訓練配置文件ssd_mobilenet_v1_coco.config.訓練全程在電腦上由通用CPU 運行,共運行26 小時.結束訓練后將protobuf 格式的二進制文件(真正的SSD 模型)保存下來以便下文介紹的上位機Python 主程序調用.
考慮到小車回傳視頻的幀數比較高,且深度學習神經網絡的計算也是一件耗時的任務,在上位機主程序(Python 腳本)中建立了兩個隊列,一個輸入隊列用來存儲下位機傳來的原始圖像,一個輸出隊列用來存儲經神經網絡運算處理之后帶有標注結果的圖像.上位機通過開源軟件OpenCV 的cv2.videoCapture 類用文件的方式讀取視頻信息.運行SSD 目標檢測模型進行人手識別時,會得到目標的標注矩形框中心,當中心落到整幅圖像的左側并超出一定距離時,產生turnleft左轉指令;當中心落到整幅圖像右側且超出一定距離的時,產生turnright 右轉指令;當中心落到圖像的上半部分并超過一定距離時,產生forward 前進指令.距離值默認設定為60 個像素,該參數可修改.預測小車行進方向功能的偽代碼如算法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
下位機基于低成本樹莓派平臺實現,使用開源軟件Bottle 部署了一個多線程的HTTP 服務器,該服務器接收上位機發出的HTTP POST 請求,提取其中的控制命令進行運動控制.使用開源軟件mjpg-streamer 控制網絡攝像頭采集圖像,并將圖像數據以視頻流的方式通過IP 網絡傳輸到上位機客戶端.
搭建局域網環境(也支持廣域網),使上位機和下位機接入同一無線路由器.當攝像頭采集到的畫面右側出現人手時,如圖4所示的實時圖像中,標注方框標記出了檢測到的人手的位置,同時控制臺輸出turnright(右轉)控制命令,此時小車向右側做出移動.當屏幕中沒有人手時,畫面上面沒有用彩色畫出的區域,上位機的終端也不打印輸出任何控制命令.

圖4 人手目標檢測功能測試結果
功能方面,針對人手在小車視野的不同位置情況進行所研制小車人手視覺追蹤的功能測試.比如,當人手在小車前方且完整出現時,上位機應發出forward(前進)命令,進而小車收到該命令后向前行進.當小車視野里沒有或只有部分人手時,應當無命令輸出,小車原地不動.功能測試用例如表1所示,測試結果均為預期的正常結果.性能方面,所采用基于深度學習SSD模型的人手目標檢測算法的準確性與實時性較好,算法的mAP (平均精準度) 為74%,檢測速率40 fps 左右,可以較好的滿足系統要求.

表1 人手視覺功能測試結果
小車(機器人平臺)外觀如圖5所示.另外,由于動態視頻文件無法在論文中展示,這里展示的是錄制好的測試視頻中2 個幀的截圖,如圖6所示,從小車的位置變化可以看出其可以追蹤人手.

圖5 機器人外觀

圖6 追蹤人手
本文利用深度學習SSD 目標檢測模型對目標進行識別,將識別的結果用于修正智能小車機器人的行進路線,滿足了智能機器人的視覺追蹤功能需求.其特色主要在于采用了低成本樹莓派,以及深度學習而非傳統的神經網絡識別算法,省去了設置特征的步驟.系統暫時只能用來識別人手,小車能夠跟隨人手移動,功能穩定性與性能良好.若要識別追蹤其他物體,可以使用其他自己制作或第三方數據集對SSD 模型進行訓練,以把網絡的識別對象訓練成擬追蹤的目標類型.未來也可應用5G 通信模塊,進行更為穩定低時延的視頻傳輸與控制.