劉超強(qiáng) 葉坤 李鶴喜
摘 ?要:本文采用YOLOv2深度學(xué)習(xí)模型對雙足機(jī)器人拍攝到的第一幀圖像進(jìn)行目標(biāo)定位檢測,接著通過傳統(tǒng)的Camshift算法對后續(xù)圖像中的目標(biāo)進(jìn)行跟蹤,直到逼近目標(biāo)后利用機(jī)器人關(guān)節(jié)運動控制程序拾起目標(biāo)。該方法的優(yōu)點是:將深度學(xué)習(xí)算法與傳統(tǒng)圖像跟蹤技術(shù)相結(jié)合,增強(qiáng)了系統(tǒng)的魯棒性和實時性。
關(guān)鍵詞:YOLOv2;Camshift;目標(biāo)檢測
中圖分類號:TP391.41;TP242 ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2019)18-0137-04
Abstract:In this paper,we use YOLOv2 deep learning model to detect a target location through the first frame image captured by biped robot. Then we use traditional Camshift algorithm to track the target in the follow-up image until the target is approached and the robot joint motion control program is used to pick up the target. The advantage of this method is that the combination of deep learning algorithm and traditional image tracking technology enhances the robustness and real-time performance of the system.
Keywords:YOLOv2;Camsift;target detection
0 ?引 ?言
視覺感知是智能機(jī)器人的核心技術(shù),特別是雙足行走的機(jī)器人,更需要靠視覺來感知環(huán)境、發(fā)現(xiàn)目標(biāo)與規(guī)劃行走路線,從而實現(xiàn)自主導(dǎo)航。雙足機(jī)器人視覺任務(wù)中主要涉及到目標(biāo)檢測和目標(biāo)跟蹤。目標(biāo)檢測與識別是當(dāng)前計算機(jī)視覺領(lǐng)域中一個重要的研究方向,早期的目標(biāo)檢測系統(tǒng)主要采用尺度不變特征變換(SIFT)和方向梯度直方圖(HOG)等傳統(tǒng)的特征提取方法[1],將提取到的特征輸入至分類器中進(jìn)行分類識別。這一時期的系統(tǒng)一般都是針對某個特定的目標(biāo)并且數(shù)據(jù)規(guī)模不大的任務(wù),對于復(fù)雜環(huán)境下目標(biāo)識別能力的泛化性較差。本文將采用深度學(xué)習(xí)的方法解決雙足機(jī)器人運動過程中的目標(biāo)檢測與定位問題,其中,YOLOv2是深度學(xué)習(xí)中目標(biāo)檢測的有效方法之一[2]。運動目標(biāo)跟蹤也一直是計算機(jī)視覺研究領(lǐng)域的熱門課題之一,在進(jìn)行目標(biāo)跟蹤時,利用簡單的模板匹配方法難以達(dá)到理想的效果,且容易出現(xiàn)誤匹配和目標(biāo)跟蹤丟失等情況,Camshift算法可以較好地解決上述問題,故本文將YOLOv2與Camshift兩種方法結(jié)合起來實現(xiàn)雙足機(jī)器人對目標(biāo)的自動檢測、跟蹤和拾取。
1 ?目標(biāo)檢測與拾取系統(tǒng)的設(shè)計
系統(tǒng)可分為三大模塊:目標(biāo)檢測模塊、目標(biāo)跟蹤模塊、雙足機(jī)器人的運動控制模塊。目標(biāo)檢測模塊的核心是YOLOv2,目標(biāo)跟蹤模塊的核心是Camshift算法。具體流程如圖1所示。
1.1 ?目標(biāo)檢測模塊
目標(biāo)檢測模塊是整個系統(tǒng)中第一個起作用的模塊,該模塊的核心是YOLOv2。所以,訓(xùn)練出一個適用于本文的YOLOv2神經(jīng)網(wǎng)絡(luò)是關(guān)鍵的一步。在這一步中,面臨的問題有兩個。其一是用于訓(xùn)練的樣本數(shù)據(jù)量的不足,要增加訓(xùn)練樣本,可以采用數(shù)據(jù)增強(qiáng)的方法;第二個問題是,因YOLOv2的結(jié)構(gòu)較深,有20多層,整個網(wǎng)絡(luò)的訓(xùn)練耗時較長。要縮短訓(xùn)練時間,本文采用遷移學(xué)習(xí)的方法。
1.1.1 ?數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng)是常見的增加樣本量的手段。具體的方法有空間幾何變換、像素顏色變換、隨機(jī)裁剪等。聯(lián)系到數(shù)據(jù)增強(qiáng)的要求:增加的樣本(圖像)應(yīng)是有可能出現(xiàn)在場景中的樣本,故應(yīng)選擇合適的增強(qiáng)方法。因為本文機(jī)器人操作的目標(biāo)是小物件,如抓起的球或端起的杯子,在通常情況下,鎖定目標(biāo)的整體都在雙足機(jī)器人的攝像頭視野里,故我們可采用鏡像翻轉(zhuǎn)來進(jìn)行數(shù)據(jù)增強(qiáng)。設(shè)圖像高度、寬度分別為height和width,則圖像水平與垂直翻轉(zhuǎn)按式(1)計算:
對機(jī)器人攝像機(jī)拍攝的目標(biāo)杯子的原圖像如圖2(a)所示,下面是幾種典型的圖像數(shù)據(jù)增強(qiáng)實例,垂直翻轉(zhuǎn)后的圖像如圖2(b)所示,采用小半徑模糊的原圖像變換后如圖2(c)所示,采用大半徑高斯模糊處理的圖像如圖2(d)所示。
1.1.2 ?遷移學(xué)習(xí)
遷移學(xué)習(xí)是深度學(xué)習(xí)中被廣泛使用的學(xué)習(xí)策略,其重要性在于當(dāng)數(shù)據(jù)樣本數(shù)量較小時可明顯改進(jìn)學(xué)習(xí)效果。遷移學(xué)習(xí)的另一個更重要的作用是可以利用別人的學(xué)習(xí)成果來縮短自己的訓(xùn)練時間。其基本思想是:遷移一個已有分類問題的信息源頭到另一個目標(biāo)任務(wù)上去,從而增加網(wǎng)絡(luò)見過的數(shù)據(jù)量[3],圖3給出了一個遷移學(xué)習(xí)的實例。
一般被遷移的是一些低級的特征信息,比如點、直線、曲線等。這些低級特征在不同的場景下,都能夠正常使用。因為即使是不同的場景,其低級特征也都是點、線。而這些低級特征通常保留在一個網(wǎng)絡(luò)的前面幾層甚至十余層。而高級特征,比如具體的顏色,以及低級特征的多種組合及其構(gòu)成的不同的形狀,則因具體的場景而異,遷移高級特征意義不大,高級特征的信息,要通過對具體的數(shù)據(jù)進(jìn)行學(xué)習(xí),才能獲得。除非數(shù)據(jù)源相似,任務(wù)相似,否則不應(yīng)該遷移高級特征。所以通常的具體做法是凍結(jié)網(wǎng)絡(luò)前面某些層,只訓(xùn)練最后面的數(shù)層。在本項目中,訓(xùn)練的是最后數(shù)層,其余的層均被凍結(jié)(參數(shù)不變)。由于只需訓(xùn)練數(shù)層,故能有效縮短訓(xùn)練時間。遷移的權(quán)重來源于YOLOv2在VOC數(shù)據(jù)集上的訓(xùn)練(VOC數(shù)據(jù)集較為龐大,通過基于它的訓(xùn)練能得到足夠多的低級特征)。
1.2 ?目標(biāo)跟蹤模塊
目標(biāo)跟蹤依賴于檢測模塊的輸出和Camshift算法。Camshift算法是對Mean-shift算法的改進(jìn)。Camshift算法能夠根據(jù)目標(biāo)的形變大小自動調(diào)節(jié)搜索窗口大小來適應(yīng)目標(biāo)尺寸的變化,從而在一定程度上有效地避免物體形變導(dǎo)致的目標(biāo)丟失情況,Camshift算法主要包括反向投影、Mean-shift算法、自適應(yīng)迭代過程。
1.2.1 ?反向投影
反向投影(Back Projection)是一種通過給定目標(biāo)的像素分布直方圖模型計算圖像中目標(biāo)概率的方式,即在圖像中利用目標(biāo)顏色直方圖模型查找目標(biāo)。RGB顏色空間對光照亮度變化敏感,在目標(biāo)跟蹤任務(wù)中,為了減少光照強(qiáng)度變化對目標(biāo)跟蹤的影響,將目標(biāo)對象由RGB顏色空間映射到HSV顏色空間進(jìn)行處理。H表示色調(diào)(Hue),S表示飽和度(Saturation),V代表亮度(Value)。我們利用Hue的值,建立關(guān)于Hue的顏色直方圖模型。Hue值的求取與RGB空間的顏色分量R,G和B的關(guān)系如下[4]:
得到目標(biāo)對象的Hue之后,將[0,255]區(qū)間劃分成多個等長子區(qū)間,統(tǒng)計落在各個子區(qū)間的像素的個數(shù)Mk,將其與目標(biāo)對象的總的像素個數(shù)TOTAL的比值(Mk/TOTAL)作為概率(以頻率代替概率),建立直方圖。接著以整幅圖像的Hue通道中的各個像素值所在區(qū)間對應(yīng)的概率值代替像素值,得顏色概率分布圖,將其歸一化到[0,255],得到新的圖像,稱該圖像為Back。
1.2.2 ?Mean-shift算法
Mean-shift算法是一種非參數(shù)密度梯度估計算法,它根據(jù)搜索框的樣本點反復(fù)迭代搜索目標(biāo)圖像特征空間中樣本點最密集的區(qū)域,搜索點沿著樣本點密度增加最快的方向“漂移”到局部密度極大值點處,Mean-shift算法設(shè)立1個“漂移”閾值和最大迭代次數(shù),設(shè)I(x,y)是Back的搜索窗中位于(x,y)處的像素值,其實現(xiàn)過程如下。
步驟1:在Back中設(shè)置搜索窗的初始大小和位置。
步驟2:按式(5)—(8)計算搜索窗的質(zhì)心。
步驟4:移動搜索窗的中心到質(zhì)心,如搜索窗的中心與質(zhì)心間的移動距離小于預(yù)設(shè)的固定閾值,或者循環(huán)運算的次數(shù)達(dá)到某一最大值,停止計算;否則重復(fù)步驟2、3、4。
在本項目中,第一幀的搜索窗(主要包含目標(biāo)物)由YOLOv2經(jīng)過前向傳導(dǎo)輸出。YOLOv2的輸出為(x,y,w,h),其中(x,y)表示搜索窗的中心坐標(biāo),而w表示搜索窗的寬度,h表示搜索窗的高度。根據(jù)這個區(qū)域建立直方圖,對后續(xù)的每一幀進(jìn)行反向投影。
1.2.3 ?自適應(yīng)迭代過程
Camshift算法是對視頻序列中每幀圖像分別作Mean-shift運算,將位置結(jié)果和目標(biāo)大小作為下一幀Mean-shift算法搜索窗位置的中心和搜索框大小的初始化值[5]。
Camshift算法在實際應(yīng)用中要求幀率較高,實際上是希望前后兩幀中的同一目標(biāo)物有重疊。而在本文中,目標(biāo)物不動,雙足機(jī)器人移動,接著拍攝,如此反復(fù)。此時,通過設(shè)置比較慢的步速和較小的位移,可使相鄰兩幀中的同一目標(biāo)物在位置上有一定的重疊。這是本文能夠使用Camshift的原因。
1.3 ?運動控制模塊
1.3.1 ?拾取動作
構(gòu)建運動模塊的第一步是設(shè)計機(jī)器人可靠的操作目標(biāo)物的動作。比如取杯子、撿球,要參考廠家給出的機(jī)器人各個關(guān)節(jié)的運動API參數(shù)的范圍,大致確定關(guān)節(jié)的運動幅度,確定運動順序,根據(jù)視覺反饋,按機(jī)器人關(guān)節(jié)運動的正向解,控制雙足機(jī)器人做出移動、端杯或撿球的動作。
1.3.2 ?目標(biāo)物的中心區(qū)域
這里以撿球為例,當(dāng)球落在圖像上的某個區(qū)域,機(jī)器人就執(zhí)行撿球動作。故這個區(qū)域的確定,也是不可或缺的一個環(huán)節(jié)。確定該區(qū)域的方法較為簡單,將球置于不同的位置,并先調(diào)用攝像頭API拍照,并保存。然后撿球。如果能撿起來,則保留該位置對應(yīng)的圖片,否則去掉。當(dāng)保留足夠的照片,用標(biāo)注工具Labeling對圖片中的小球做標(biāo)注,然后從對應(yīng)的位置數(shù)據(jù)中,得到一系列的中心點。這個中心點區(qū)域用一個矩形來描述。這個矩形用左上角頂點(Node1)和右下角頂點(Node2)來表示:Node1(x1,y1),Node2(x2,y2)。
1.3.3 ?機(jī)器人運動控制算法
結(jié)合一套設(shè)計好的撿球動作,和預(yù)先確定的一個關(guān)于球的中心的區(qū)域,判斷每一幀中的由Mean-shift得到的最終的移動搜索窗的中心點是否落在區(qū)域內(nèi),是則停止;否則,進(jìn)行相應(yīng)的移動。具體的步驟用偽代碼描述如下:
(1)得到搜索窗的中心(xc,yc)。
(2)如果xc
(3)得到搜索窗的中心(xc,yc)。
(4)如果yc
(5)執(zhí)行撿球操作。
2 ?實驗結(jié)果與分析
本文設(shè)計的系統(tǒng)圖像處理采用了OpenCV,深度學(xué)習(xí)采用了TensorFlow框架,雙足機(jī)器人運動控制采用自帶的SDK,下面以撿起地面上小球為目標(biāo)考查系統(tǒng)軟件的有效性。雙足機(jī)器人的攝像頭的分辨率為640*480,拍到第一張圖片后,傳輸?shù)絇C機(jī),將尺寸修改為416*416,經(jīng)過YOLOv2的前向傳播,得到關(guān)于目標(biāo)物的位置信息和大小信息,通過判斷由Mean-shift算法得到的搜索窗中心與區(qū)域的關(guān)系來決定移動與否。若移動,則PC機(jī)通過SDK的接口,發(fā)送移動相關(guān)的信息,否則發(fā)送撿球的信息。
2.1 ?目標(biāo)檢測的結(jié)果
機(jī)器人攝像機(jī)拍攝獲取當(dāng)前場景信息,輸入YOLOv2前向傳播后,獲取當(dāng)前目標(biāo)小球的結(jié)果如圖4所示。
2.2 ?目標(biāo)跟蹤的結(jié)果
以YOLOv2輸出的(x,y,w,h),作為Camshift算法需要的第一個搜索窗,得到的下一幀的跟蹤結(jié)果如圖5所示。
2.3 ?運動模塊的結(jié)果
雙足機(jī)器人鎖定目標(biāo)后,利用Camshift跟蹤算法和機(jī)器人運動控制,進(jìn)行對目標(biāo)的逼近,整個小球目標(biāo)檢測與拾取過程如圖6所示。
3 ?結(jié) ?論
本文將流行的YOLOv2目標(biāo)檢測算法和經(jīng)典的目標(biāo)跟蹤算法結(jié)合起來應(yīng)用到雙足機(jī)器人的目標(biāo)視覺檢測與跟蹤系統(tǒng)中,實現(xiàn)了對預(yù)定目標(biāo)的定位與拾取。其中,針對YOLOv2的訓(xùn)練集數(shù)據(jù)不足的問題,采用數(shù)據(jù)增強(qiáng)的方法來獲得更多的數(shù)據(jù);針對訓(xùn)練完整的網(wǎng)絡(luò)耗時長的問題,采用遷移學(xué)習(xí)的手段來縮短訓(xùn)練時間。
參考文獻(xiàn):
[1] 李英豪,王華軍,汪緒彪,等.SIFT算法研究及在目標(biāo)識別中的應(yīng)用 [J].艦船科學(xué)技術(shù),2016,38(10):172-174.
[2] 雷維卓.基于YOLOv2的實時目標(biāo)檢測研究 [D].重慶:重慶大學(xué),2018.
[3] 莊福振,羅平,何清,等.遷移學(xué)習(xí)研究進(jìn)展 [J].軟件學(xué)報,2015,26(1):26-39.
[4] Gonzalez R. C. 數(shù)字圖像處理 [M].阮秋琦,等譯.北京:電子工業(yè)出版社,2009.
[5] 師慶敏.基于Camshift算法的目標(biāo)跟蹤問題研究 [D].合肥:安徽大學(xué),2013.
作者簡介:劉超強(qiáng)(1994.10-),男,漢族,廣東恩平人,本
科,學(xué)士學(xué)位,研究方向:圖像分析與機(jī)器學(xué)習(xí);葉坤(1997.03-),男,漢族,廣東江門人,本科,學(xué)士學(xué)位,研究方向:圖像分析與機(jī)器學(xué)習(xí);通訊作者:李鶴喜(1961.11-),男,漢族,遼寧昌圖人,教授,博士,研究方向:人工智能與機(jī)器視覺。