曾公任,姚劍敏*,嚴 群,林志賢,郭太良,林 暢
(1. 平板顯示技術(shù)國家地方聯(lián)合工程實驗室,福州大學物理與信息工程學院,福建 福州 350108;2. 晉江市博感電子科技有限公司, 福建 晉江362200)
手部追蹤技術(shù)是指對視頻序列檢測是否存在檢測目標手,并能對目標進行持續(xù)跟蹤。近年來,智能人機交互技術(shù)不斷發(fā)展[1],手部追蹤技術(shù)是其中重要的一環(huán)。手部追蹤技術(shù)能夠應(yīng)用在監(jiān)控技術(shù)上,檢測人們是否進行誤操作。動態(tài)的手勢識別包含3個步驟:手部檢測、手部追蹤和手勢識別,其中手部追蹤是中間環(huán)節(jié),手部追蹤的不準確可能會導致最后的手勢識別的錯誤。而在視頻監(jiān)控中,手部追蹤能夠檢測到人們手部的運動軌跡,判斷用戶是否進行必要或異常的操作,大大減少人工檢測的成本和時間。
在進行手部追蹤前,首先要進行手部檢測。要將手從視頻中分辨出來,傳統(tǒng)的方法有:基于YcbCr顏色空間的手部檢測[2]、基于前景提取的手部檢測[3]、基于模型匹配的手部檢測、基于C-means的手部檢測[4]?;赮cbCr顏色空間的手部檢測,在不同光照條件下對膚色檢測有較好的效果,但該方法在場景中有相似色調(diào)、手臂暴露在攝像頭下或者檢測膚色不在檢測區(qū)間內(nèi)的情況下會出現(xiàn)誤檢、多檢測和漏檢情況,并且YcbCr顏色空間的手勢檢測的方法耗費時間多,不適用于實時系統(tǒng)?;谀P推ヅ涞氖植繖z測,是尋找圖像子區(qū)域中與目標模板相似度最大的區(qū)域,該方法適用于目標做剛體運動或檢測目標形變較小的情況,當檢測目標發(fā)生形變與目標模板相差較大時檢測效果不佳?;谇熬疤崛〉氖植繖z測,是將前景檢測目標和背景分離開的方法,若檢測目標在場景中長時間沒有運動,可能會將檢測目標檢測為背景,并且該方法對陰影響應(yīng)敏感,會將視頻中陰影的部分檢測為檢測目標。由于傳統(tǒng)方法中的種種問題,這里采用神經(jīng)網(wǎng)絡(luò)算法進行手部檢測。近年來,深度學習的方法大量應(yīng)用在圖像領(lǐng)域,神經(jīng)網(wǎng)絡(luò)算法已經(jīng)應(yīng)用在目標檢測。對于特定的檢測目標,能夠達到較高檢測正確率,并且,近年提出的網(wǎng)絡(luò)模型相較于早年提出的模型在運算速度上有較大提高,已經(jīng)能夠滿足實時的目標檢測。
對于手部追蹤,由于手勢非剛體,在手部的運動過程中常常會發(fā)生手部變化。當前大多數(shù)動態(tài)手勢追蹤方法有Camshift[5]、粒子濾波[6]、相關(guān)濾波算法、kalman濾波[7]等方法。Camshift算法是以顏色分布圖為基礎(chǔ)進行的目標跟蹤技術(shù),是對Meanshift算法的改進,當目標發(fā)生較大形變或者遇到遮擋后,會出現(xiàn)目標丟失或者追蹤框位置偏移等問題,并且Camshift沒有對目標的運動進行估計,在背景顏色復雜的情況下也會出現(xiàn)目標丟失的情況。粒子濾波算法是基于門特卡洛仿真的最優(yōu)回歸貝葉斯濾波算法,適用于非線性非高斯模型。但是每次進行估計與更新都需要從當前系統(tǒng)狀態(tài)中取出帶權(quán)粒子,計算的過程復雜,雖然每次估計的正確率比較高,但是耗費時間多,不適用于實時較高的系統(tǒng)。相關(guān)濾波算法利用快速傅里葉變換進行濾波器訓練和響應(yīng)圖計算,具有較好的實時性,但是對目標的光照、形變較為敏感,不適用于手部形變較大的情況。Kalman濾波適用于線性高斯模型,由預(yù)測和修正兩部分組成。由于神經(jīng)算法在不同光照和手部形變的情況下都有較好的檢測效果,所以對于Kalman濾波有較好的修正效果。并且Kalman濾波算法相較于粒子濾波算法其計算量較小,適用于實時系統(tǒng)。
圖1展示了本次設(shè)計系統(tǒng)的整體流程圖。首先對視頻輸入進行預(yù)處理,并將每一幀的畫面進行神經(jīng)網(wǎng)絡(luò)目標檢測,在前幾幀時追蹤器為空,檢測到的目標都是新目標,為每個出現(xiàn)的目標生成一個追蹤器,對于后面輸入的每幀圖像,先進行神經(jīng)網(wǎng)絡(luò)目標檢測,再將目標信息輸入追蹤器。如果該目標存在追蹤器,對該目標進行追蹤,并對追蹤器中的參數(shù)進行修正;如果該目標不存在對應(yīng)的追蹤器,則生成對應(yīng)的追蹤器。
圖1 整體流程圖Fig.1 Overall flow chart
近年來,深度神經(jīng)網(wǎng)絡(luò)在計算視覺領(lǐng)域發(fā)揮了重大作用。深度神經(jīng)網(wǎng)絡(luò)已經(jīng)使用在圖像分割、物體檢測、語義分割等領(lǐng)域。對于目標檢測的算法,目前有Faster-RCNN[8]、YOLO[9-11]和SSD[12]等。Faster-RCNN的檢測精度較高,但是檢測時間較長。YOLO檢測速度較快,但是檢測精度較低,并且對多尺度變化的目標檢測效果不理想。SSD網(wǎng)絡(luò)在精度與處理速度上達到了相對的平衡,并且SSD對于不同尺度的目標檢測效果較好。本文的檢測目標會出現(xiàn)在場景中的任意位置,并且檢測目標的尺度也會發(fā)生變化,因而在此選擇SSD為檢測網(wǎng)絡(luò)。
SSD卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)框圖如圖2所示,由圖中能夠看出,SSD卷積神經(jīng)網(wǎng)絡(luò)由特征提取網(wǎng)絡(luò)與檢測識別網(wǎng)絡(luò)組成。
特征提取網(wǎng)絡(luò)是基于VGG-16網(wǎng)絡(luò)[13]修改得到的,VGG-16網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)如表1所示。可以看出VGG-16網(wǎng)絡(luò)由13個卷積層、15個激活函數(shù)層、5個最大池化層、3個全連接層、2個Dropout層和1個Softmax層組成,并且輸入的圖像尺寸為224×224。SSD的特征提取網(wǎng)絡(luò)對VGG-16網(wǎng)絡(luò)進行3方面的修改:首先,將VGG-16的兩個全連接層Fc6和Fc7修改為卷積層Conv6和Conv7,并對Conv6卷積引入空洞卷積[14],能夠在不改變特征圖尺寸的情況下增大感受野;然后將Max Pool5的池化窗口尺寸從2×2修改為3×3,滑動步長由2變?yōu)?;最后,去掉Dropout層、全連接層和Softmax分類層。特征提取網(wǎng)絡(luò)的主要作用是提取不同尺寸的卷積特征圖,能更好地檢測和識別目標并能提高不同尺度目標的檢測與識別效果。
圖2 SSD卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)框圖Fig.2 Block diagram of the SSD convolutional neural network
檢測識別網(wǎng)絡(luò)運用獨立的卷積預(yù)測器進行處理,預(yù)測輸入圖像中目標的類別以及目標所在圖像中的位置,并給出目標的置信度得分以及目標的邊界框位置信息,然后綜合這些在多尺度特征圖上獲得的目標類別以及位置的預(yù)測信息,執(zhí)行非極大值抑制(Non-Maxium Suppression, NMS)算法,去除冗余的目標預(yù)測邊界框,從而得到最終的檢測與識別結(jié)果。
表1 VGG-16網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)Tab.1 VGG-16 network structure parameters
SSD卷積神經(jīng)網(wǎng)絡(luò)采用多任務(wù)學習策略,同時進行目標檢測和目標識別的任務(wù),所以SSD網(wǎng)絡(luò)的損失函數(shù)包含兩部分:置信損失函數(shù)和定位損失函數(shù)。損失函數(shù)的定義如式(1)所示:
(1)
其中:α為置信損失函數(shù)和定位損失函數(shù)的權(quán)重,N為真實框的數(shù)量,c為置信度,l為預(yù)測框,g為真實框,Lconf(x,c)為置信損失函數(shù),其函數(shù)表達式定義如式(2)、(3)所示:
(2)
(3)
(4)
(5)
神經(jīng)網(wǎng)絡(luò)參數(shù)龐大,從頭開始訓練需要大量的時間,采用遷移學習的方法,能夠減少學習時間。使用Tensorflow提供的ssd_mobilenet_v1_coo模型作為訓練的起點,采用EgoHand的數(shù)據(jù)集[15]進行訓練。進行20萬步訓練,總損失在2.5處停止訓練。訓練完成后,當重疊度(IOU)取值為0.5時,手部檢測器的平均精確率(mAP)值為0.96,達到了較好的檢測效果。
卡爾曼濾波是建立一個線性高斯模型,能夠根據(jù)前面時刻的信息推算出后一時刻各個狀態(tài)的可能性。在手部跟蹤中,根據(jù)前面時刻手部的位置與運動速度等信息推算出下一個時刻各個位置出現(xiàn)的可能性,將下一時刻檢測出的手部位置進行可能性判斷,推測出上一時刻畫面中手部位置,對目標進行跟蹤。
卡爾曼濾波器的狀態(tài)方程如式(6)所示,卡爾曼濾波器的觀測方程如式(7)所示:
Zt=AZt-1+B+ε,
(6)
Xt=CZt-1+D+δ,
(7)
式(6)中:Zt是t時刻的狀態(tài)向量,ε表示高斯分布的噪聲,由式(6)能夠看出,t-1時刻的狀態(tài)向量與t時刻的狀態(tài)線性呈線性關(guān)系。式(7)中Xt是t時刻的觀測向量,t表示高斯分布的噪聲,由公式能夠看出,t時刻的觀測量可以由t-1時刻的狀態(tài)向量線性變換得到。
根據(jù)公式(6)與公式(7),能夠?qū)⑹植扛檰栴}變?yōu)榭柭鼮V波器遞推計算的過程,卡爾曼濾波計算的過程分為兩部分:“預(yù)測”與“修正”。預(yù)測過程:根據(jù)當前時刻預(yù)測下一時刻的狀態(tài)向量。修正過程:根據(jù)最新的觀測量對卡爾曼濾波器中的參數(shù)信息進行調(diào)整,修正上次預(yù)測中出現(xiàn)的誤差,以便更好地進行下一次預(yù)測。
對于多目標追蹤,只用卡爾曼濾波追蹤算法存在局限性,當追蹤目標被遮擋或消失在視野中,再次出現(xiàn)時,往往不會繼續(xù)保持追蹤,會認為是新目標重新追蹤。因此,引入了基于深度學習的多目標跟蹤算法。手部重檢測算法是基于行人重檢測(person ReID)算法[16]。行人重檢測算法主要應(yīng)用于跨攝像頭場景下行人識別與檢索,其中一種檢測方法是局部特征學習方法,局部特征檢測方法將人的圖像從上到下進行三等分,輸入模型,動態(tài)調(diào)整不同區(qū)域在圖像中的占比,將3個部分輸入到 網(wǎng)絡(luò),提取特征,最后將3個分信息結(jié)合在一起進行估計。
由于手部追蹤時沒有人體那么多的特征,因此將行人重檢測算法進行簡化,去除將圖像三等分的步驟,將圖像輸入到網(wǎng)絡(luò),提取特征,將特征存儲起來。當卡爾曼濾波沒有找到目標時,將其特征與檢測目標的特征進行匈牙利匹配,找到先前跟蹤目標或檢測到新目標進入畫面。
本文在Intel core i7 6700 16G內(nèi)存的個人計算機上進行實驗。采用google提供的TensorFlow機器學習算法庫,在windows平臺,使用python語言進行開發(fā)設(shè)計。
將帶有手部的視頻圖像輸入程序中,程序能夠跟蹤手部連續(xù)100幀的運動軌跡,手部運動過程在沒有發(fā)生遮擋情況下的整個軌跡跟蹤過程如圖3所示。
圖3 單手部跟蹤Fig.3 One-hand tracking
圖3(a)為視頻中450幀時刻畫面,其中圖3(b)和(c)分別為第480幀和第500幀時刻的畫面,圖3(d)為第530幀時刻的畫面。從圖3中可以看出在復雜背景下即使手部發(fā)生較大形變也能夠保持手部的正確跟蹤。
兩個手部發(fā)生交叉遮擋的情況如圖4所示。
圖4 兩個手部發(fā)生交叉遮擋情況Fig.4 Cross-occlusion of two hands
圖4(a)為視頻中230幀時刻畫面,圖4(b)和(c)分別為第260幀和第290幀時刻的畫面,圖4(d)為第320幀時刻的畫面。從圖中可看出遮擋手的id都為101,在兩個手部發(fā)生交叉遮擋后再次出現(xiàn)時能夠繼續(xù)保持正確跟蹤。
測試視頻1共有4 140幀畫面,手部發(fā)生漏檢或誤檢的幀數(shù)為212幀,其誤檢查率為5.12%,基本在能夠接受的范圍。由于使用兩個追蹤方法共同處理,手部丟失后的下一幀還能繼續(xù)保持前面的跟蹤。在跟蹤處理過程中,實時處理平均幀數(shù)為21.212 f/s,最高幀數(shù)為24.327 f/s,最低幀數(shù)為18.964 f/s,基本能夠滿足手部跟蹤的實時性。
該系統(tǒng)在追蹤的實時性上得到了較好效果,與傳統(tǒng)的手部跟蹤方法對比有更好的魯棒性和穩(wěn)定性,并且對于目標交叉、目標遮擋帶來的目標丟失的情況具有很好的處理效果。軌跡跟蹤方法的實現(xiàn),為后面研究運動手勢檢測提供了前提條件。
設(shè)計了一種基于神經(jīng)網(wǎng)絡(luò)與卡爾曼濾波的手部跟蹤系統(tǒng)。該系統(tǒng)通過神經(jīng)網(wǎng)絡(luò)進行手部檢測,卡爾曼濾波進行目標跟蹤,hand ReID進行目標的重跟蹤來對手部的非剛體運動進行跟蹤,最后將手部運動的路徑顯示出來。實驗分析證明,該方法手部的誤檢率為5.12%,并且在重新檢測到目標后還能繼續(xù)保持跟蹤,每秒能夠處理20張畫面,基本滿足實時跟蹤手部的要求。