姜立志,楊慕升,鞏曉丹
(山東理工大學機械工程學院,山東 淄博 255000)
機器人的目標識別[1]問題在機器人的智能化研究中有著十分重要的作用。目前幼兒園教師資源短缺、年輕父母工作繁忙,在生活中使用智能看護機器人是一種趨勢,智能看護機器人通過獲得的圖像信息對兒童及周圍環(huán)境目標進行精準定位,獲得目標狀態(tài)以確保兒童的安全。傳統(tǒng)的目標檢測方法主要利用手工設計的特征(如SHIFT、Haar、HOG)并結合分類器(如SVM、Adaboost),根據提取的特征進行分類得到檢測結果。例如,文獻[2]提出了利用HOG 特征和SVM 分類器相結合的行人檢測方法,文獻[3]提出的DPM 模型,用部件之間的關系來描述物體,對物體遮擋問題有很好的檢測效果。近些年來,卷積神經網絡(ConvolutionalNeuralNetwork,CNN)在機器人目標檢測領域取得了重大進展,CNN 可以通過對圖像進行卷積操作,自動學到有效的深層特征,從而提高目標檢測的準確率。目前基于卷積神經網絡的目標檢測方法分為兩種,一種是two stage 的目標檢測算法,先由算法生成一系列作為樣本的候選框,然后通過CNN 網絡進行分類檢測,比如RCNN(Region CNN)[4],SPP-Net[5],Fast-RCNN[6],Faster-RCNN[7]等;另一種是one stage 的目標檢測算法,直接將目標的定位問題轉化成回歸問題,比如YOLO(You Only Look Once)[8],SSD(Single Shot Detector)[9]。對比發(fā)現,基于two stage 的方法檢測精度高,但檢測速度低,而one stage 的檢測算法檢測速度高卻對小目標的檢測效果差。結合實際情況,智能看護機器人在對室內的兒童進行檢測時對速度有較高要求,因此選擇實時性好的SSD 模型對目標進行檢測。
智能看護機器人產品是嵌入式終端系統(tǒng),硬件資源有限,沒有像Titan X 這樣高效的GPU,對于大型網絡,如ResNet[10]等,并不利于部署在這種產品上。針對上述情況,基于深度學習的方法,選用輕量型分類網絡MobileNets[11]作為SSD 模型的基礎網絡,同時加入抑制類別不均衡的Focal Loss[12]函數對原算法進行改進以提高檢測精度。實驗表明,結合簡易智能看護機器人平臺在對兒童等室內目標進行檢測時,改進后的算法模型檢測速度快,體積小且精度高。
仿人機器人是生活中容易讓人接受的一種機器人類型,智能看護機器人外形與仿人機器人相似,內部由機械部分、傳感部分、控制部分組成,這三大部分可分成驅動系統(tǒng)、機械結構系統(tǒng)、機器人--環(huán)境交互系統(tǒng)、感受系統(tǒng)、控制系統(tǒng)、人機交互系統(tǒng)六個子系統(tǒng),各部分相互聯(lián)系,完成運動的協(xié)調控制。智能看護機器人是機器人技術與人工智能技術相結合,面向家庭服務的智能服務機器人,是目前最先進且前景光明的一種,可以實現送飯、夜間陪護兒童、拿放操作等簡單任務。實物智能看護機器人ASIMO,如圖1 所示。
圖1 智能護理機器人實物圖Fig.1 Actual Structure of Intelligent Care Robot
ASIMO 服務機器人身高1.3m,體重48kg,體內安裝有大量傳感器,能快速了解復雜的周圍環(huán)境。聽力感應器:接收聲波,顯示聲音的振動圖象,視覺感應器:眼部攝像機通過連續(xù)拍攝圖片并與數據庫內容進行對比實現目標識別,水平感應器:由紅外線感應器和CCD 攝像機共同協(xié)作,避開障礙物,觸覺感應器:在拿取物體時模仿人的觸覺功能,軸力感應器:可以同時測量多個力和力矩的多軸測量或隨時間改變位置和方向。ASIMO 整體有57個關節(jié)自由度,頸關節(jié)有3 個實現頭部360°旋轉,臂部包括肩肘腕有7 個,手部模仿人的手關節(jié)有13 個,腰部2 個,腿部包括髖膝踝有6 個,如此多的自由度使機器人更好的適應環(huán)境,實現順暢移動。
MobileNets 是Google 公司針對移動端和嵌入式設備提出的一種輕量級深層卷積神經網絡模型,對網絡模型延遲進行優(yōu)化,同時兼顧模型大小。MobileNets 采用深度級可分離卷積[13](Depthwise Separable Convolution,DSC)的思想,在用3×3(或更大尺寸)卷積的時候并不對通道進行融合,而是采用深度級卷積和點卷積對卷積進行分解,有效降低了計算量,加快了運算速度。在實際訓練中還會加入BatchNorm 加快模型收斂,并使用ReLU 激活函數。
圖2 標準卷積層與DSC 層Fig.2 Standard Convolutional Layer and DSC Layer
深度級卷積與標準卷積不同,標準卷積的卷積核作用在所有通道,而深度級卷積針對每個輸入通道采用不同卷積核。標準卷積的計算量:
MobileNets 網絡模型參數數量大幅減少,改善了傳統(tǒng)卷積神經網絡的冗余問題。為了得到更小更快的模型,在不重新設計模型的情況下,引入了寬度因子和分辨率因子兩個超參數來減少通道數以及降低特征圖大小,記α∈(0,1],ρ∈(0,1],加入超參數后的計算量為:
MobileNets 卷積神經網絡模型主要由輸入層、卷積層、平均池化層以及全連接層等共28 層組成。
圖3 SSD 模型結構圖Fig.3 SSD Model Structure
SSD(Single Shot MultiBox Detector)結合了YOLO 的回歸思想和Faster RCNN 的anchors 機制,其核心[8]是利用小卷積核來預測特征圖上固定的一組默認邊界框的類別置信度和位置偏移,同時模型從大小不同的特征圖上產生不同尺度的預測框,并通過寬高比產生不同的默認框以對不同大小的目標進行預測。
SSD 模型是一種前饋卷積網絡,采用VGG-16[14]圖像分類網絡進行特征提取,之后又加入額外卷積層以獲得更多的特征圖來進行多尺度預測,最后通過NMS(Non-Maximum-Suppression)保留置信度最高的檢測結果進行輸出。其中,添加的卷積層尺寸逐層減小以產生不同大小的特征圖,同時不同層的特征圖上都有一個特定大小的參照框[6],并根據它計算出各自的默認框。SSD 模型輸入(300×300)的圖像時,在Nvidia Titan X 顯卡上對VOC2007測試時速度達到了58FPS,精度達到了72.1%。
SSD 選取了六種不同的多尺度特征映射層進行檢測,通過與3×3 大小的的卷積核做卷積后得到兩個輸出,即作為分類時使用的類別置信度信息以及回歸時使用的位置信息。SSD 訓練的同時對位置和目標種類進行回歸,其目標損失函數是置信度損失與位置損失之和,總的損失函數表達式為:
式中:N—與ground truth 物體匹配的默認框個數;Lconf(z,c)—置信度損失;Lloc(z,l,g)—位置損失,采用的是Smooth L1 Loss;z—默認框與不同類別的ground truth 物體框的匹配結果;c—預測物體框的置信度;l—預測物體框的位置信息;g—ground truth 物體框的位置信息;α—權衡置信損失和位置損失的加權系數,一般設置為1。
目標損失函數在訓練中對網絡結構進行評估,通過減小目標損失函數值,提高預測框的類別置信度和位置準確度,進而優(yōu)化目標檢測模型。
SSD 模型進行訓練時,一張圖片可能會生成千上萬的候選位置,模型利用交并比(IOU)把這些侯選位置分成正負樣本。首先將標注好的目標的GT(Ground Truth)與具有最大IOU 的默認框進行匹配,保證每個GT 都有對應的默認框,同時將每個默認框與任意GT 配對,選取IOU 值大于0.5 的作為正樣本,這樣一個GT 框可能對應多個默認框。經過這樣的匹配策略后,很多默認框是負樣本,這將導致正負樣本不均衡,訓練難以收斂。因此,SSD 采用Hard Negative Mining[8]方法根據置信度大小對負樣本進行排序,保留置信度高的負樣本進行訓練以確保正負樣本比例為1:3。
訓練時不僅有正負樣本不均衡的現象,還會有難易分類樣本問題。大多數的樣本是簡單易分的負樣本,僅含有背景信息并沒有目標,使得訓練過程中不能充分學習到目標的特征,其次這樣的簡單負樣本太多,產生的損失值會主導梯度的更新方向,掩蓋其它樣本信息。為解決該問題,引入Focal Loss 損失函數對每個樣本進行考慮,并提高難分樣本對損失的貢獻,使網絡模型更傾向于在這些困難樣本上學習特征。Focal Loss 是在標準交叉熵的基礎上修改得到的,表達式為:
其中,加權因子αt∈[0,1],用以調整正負樣本的權重,解決正負樣本不平衡的問題;調制系數(1-pt)γ,用以控制難易分類樣本的權重,pt∈[0,1]表示樣本的預測值,γ≥0,稱為聚焦參數,來改變調制系數的大小,通過減少易分類樣本的權重,使得模型在訓練時更加專注于難分類樣本。這里通過α 和γ 兩個參數協(xié)調控制,解決類別不均衡問題。在對多個類別進行分類預測時,選用softmax 函數預測概率,設預測k 個類別,則:
對大批量幼兒園環(huán)境下的圖片進行標注,分成訓練集和測試集。數據集中的行人姿態(tài)豐富,外觀服飾變化多樣,圖像光照變化明顯,背景復雜且有不同程度的遮擋。除了主要對兒童進行標注外,為了增強智能看護機器人在實際中的適應性,對一些諸如桌子、椅子、瓶子等簡單物體進行了標注。TensorFlow 訓練模型時,需要把標記的數據集轉換成VOC 格式并重新劃分訓練集與測試集,再轉換成TFRecord 格式進行模型訓練與測試。
采用mAP(mean average precision)對模型的精度進行評價。mAP 是目標檢測精度最重要的評價指標,值越大則精度越高。計算流程為:
首先計算每類目標的精度:
式中:R—數據集中一種類別的所有標注目標總個數;n—數據集中目標對象的數量,如果第j 個目標對象相關,Ij為1,否則Ij為0;Rj—當前j 個目標對象中相關對象的個數;然后對同一類別的所有精度求平均值;最后對所有類別的平均精度再求平均值得到mAP。
雖然卷積神經網絡具有很強的特征提取能力,但是對于特定場景而言,數據集并不充足,需要選擇在相對完備的COCO 數據集上進行模型的預訓練,然后在自己所標注的數據集上進行微調(Fine-Tune),以增強訓練模型的魯棒性,提高模型檢測性能,同時也能大量節(jié)省訓練網絡所消耗的時間。COCO 數據集有91類,每一類都有大量圖像數據,易于學習到特定場景的目標特征。
采用在COCO 數據集上預訓練的MobileNets 進行微調,使用Adam(Adaptive Moment Estimation)模型優(yōu)化算法。初始學習率為0.001,正則化權重衰減系數為0.0005,學習率衰減因子為0.94,批大小為32。訓練時,根據目標邊框與預測目標邊框標定分類的正負樣本,采用IOU 閾值為0.5。
為了驗證算法的有效性,把目前最先進的深度學習模型應用在智能看護機器人上,先在Ubuntu16.04,GPU 顯卡Tesla K80并結合Google 的深度學習框架TensorFlow 上完成模型訓練,再把訓練好的模型移植到ODVS 移動機器人[15]平臺完成目標識別。實驗裝置,如圖4 所示。上部分為一個全方位視覺傳感器采集圖像信息,下部分為機器人本體,兩部分由長短可變的支撐桿連接。主機CPU 型號為T2350,主頻為1.87GHz,內存為0.99GB,搭載移動設備Android 系統(tǒng)。
圖4 簡易實驗平臺Fig.4 Simple Experimental Platform
分類正確、定位準確是模型所期望的,通過速度和精度對模型性能進行評估。考慮到硬件環(huán)境的不穩(wěn)定性,對模型進行三次訓練,選取其中最好的一次實驗結果作分析。在對比實驗中,引入Focal Loss 改進的模型用“*”作區(qū)分。訓練的損失圖,通過對網絡微調可以大幅加快收斂速度,如圖5 所示。
圖5 avg_loss 訓練損失曲線圖Fig.5 Avg_loss Training Loss Curve
MobileNets 在獲得相同結果的情況下比VGG16 小32 倍,速度快10 倍[10]。改進后的模型完全繼承了MobileNets 網絡參數少、速度快的特點,改進后的方法與原模型檢測一張圖片的速度對比發(fā)現,使用MobileNets 作為基礎網絡比原SSD 模型的檢測速度提高了7 倍。改進后的網絡模型在智能看護機器人搭載的Android 系統(tǒng)下檢測一張圖片的速度僅50ms 左右,使得卷積神經網絡模型可以部署在硬件資源有限的機器人等終端系統(tǒng)上。目標檢測速度對比(ms),如表1 所示。
表1 目標檢測速度對比(ms)Tab.1 Compare of Target Detection Speed(ms)
各方法中每類目標的檢測精度以及平均檢測精度mAP,如和diningtable 的精度要高一些,這是由于這兩個目標體積大,在訓練過程中易于學到目標特征;而bottle 目標較小,chair 目標部分遮擋嚴重,目標特征不明顯致使檢測精度偏低,需要加大數據集數量,提高檢測精度。
表2 目標檢測精度對比(%)Tab.2 Compare of Target Detection Accuracy(%)
結合智能看護機器人簡易平臺進行實驗,對室內目標進行檢測,選取幾張具有代表性的實際檢測效果圖對精度作對比,分別為MobileNets_SSD 效果圖6(a)、圖6(c),引入Focal Loss 函數改進后的MobileNets_SSD*效果圖6(b)、圖6(d)。改進后的網絡模型可以檢測到更多的遠處小目標以及遮擋目標。
圖6 檢測結果Fig.6 Detection Results
通過對原SSD 網絡模型的改進,引入輕量型卷積神經網絡MobileNets 代替VGG16 網絡模型,以便于應用在智能看護機器人等終端系統(tǒng)上。為了提高模型的檢測精度,引入了Focal Loss損失函數提高網絡性能。結合簡易智能看護機器人操作平臺進行目標檢測的實驗表明,改進后的網絡模型具有更強的魯棒性,加快了檢測速度,提高了檢測精度,對智能看護機器人的研究有了更廣闊的應用前景與經濟價值。為了進一步提高精度還可以通過引入反卷積神經網絡加入上下文信息以加強位置信息與語義信息的聯(lián)系,如何提高對遮擋目標的檢測精度是算法接下來的研究方向。