李東潔,李東閣,楊 柳
哈爾濱理工大學(xué) 自動(dòng)化學(xué)院,哈爾濱 150080
基于手勢的人機(jī)交互是人類最自然的人機(jī)交互方式,近幾年來受到越來越多研究人員的關(guān)注[1]。在動(dòng)態(tài)手勢交互方式中,手的軌跡是手勢指令的重要組成部分之一,因此對(duì)手勢的跟蹤是一個(gè)重要環(huán)節(jié)[2]。手勢跟蹤的算法雖然在虛擬現(xiàn)實(shí)系統(tǒng)和人機(jī)交互(human-computer interaction,HCI)系統(tǒng)中得到了廣泛的應(yīng)用[3],由于在應(yīng)用中對(duì)手勢跟蹤的魯棒性和實(shí)時(shí)性要求逐漸提高,因此在基于視覺的研究領(lǐng)域中手勢跟蹤仍然是一個(gè)具有挑戰(zhàn)性的問題[4]。
手勢跟蹤算法可以分為基于運(yùn)動(dòng)模型的目標(biāo)跟蹤和基于外觀模型的目標(biāo)跟蹤算法。文獻(xiàn)[5]提出一種結(jié)合均值漂移和粒子濾波的運(yùn)動(dòng)模型手勢跟蹤算法,該算法雖然可以對(duì)目標(biāo)運(yùn)動(dòng)速度和空間進(jìn)行預(yù)測,但是對(duì)手的跟蹤過程中,由于手的可變形性,導(dǎo)致算法跟蹤失敗。文獻(xiàn)[6]提出一種粒子濾波器結(jié)合皮膚橢圓的外觀模型,通過對(duì)模型的檢測來完成對(duì)手勢的跟蹤。這種基于顏色的外觀模型,由于人臉和手膚色的相似性,導(dǎo)致跟蹤時(shí)的魯棒性較低,容易受背景影響。
基于檢測的目標(biāo)跟蹤是一種常用的目標(biāo)跟蹤框架。文獻(xiàn)[7]采用一種深度卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)對(duì)手勢特征進(jìn)行融合,在跟蹤的過程中大大提升了魯棒性,但由于其特征提取網(wǎng)絡(luò)復(fù)雜,計(jì)算速度較慢,不能達(dá)到實(shí)時(shí)手勢跟蹤的效果。2015 年,Redmon 等首次提出基于卷積神經(jīng)網(wǎng)絡(luò)的YOLO(you only look once)目標(biāo)檢測算法,徹底貫徹了采用直接回歸的方法獲取當(dāng)前檢測目標(biāo)的思想,使檢測速度大幅提高,但準(zhǔn)確度偏低[8]。隨即原作者又提出對(duì)于YOLO 的第三代改進(jìn)算法YOLOv3,該算法的檢測準(zhǔn)確率達(dá)到了令人滿意的效果。在COCO 數(shù)據(jù)集的測試中,在精準(zhǔn)度與Faster R-CNN、SSD(single shot multibox detector)等其他目標(biāo)檢測算法持平的情況下,YOLOv3 的檢測速度是其他模型的3~4 倍[9]。對(duì)手勢的跟蹤需要在場景中快速檢測出目標(biāo),YOLO 系列算法可以更好地區(qū)分目標(biāo)和背景區(qū)域[10]。因此,本文采用具有最佳檢測跟蹤效果的YOLOv3 算法代替?zhèn)鹘y(tǒng)基于外觀和運(yùn)動(dòng)模型的跟蹤算法來進(jìn)行手勢跟蹤。
YOLOv3 是YOLO 系列目標(biāo)檢測算法的第三代改進(jìn)算法,是目前最優(yōu)秀的目標(biāo)檢測算法之一[11]。在結(jié)構(gòu)上,YOLOv3 采用了Darknet-53 作為算法的主體網(wǎng)絡(luò)。在神經(jīng)網(wǎng)絡(luò)的每一層的網(wǎng)絡(luò)線性變換輸出之后,激活函數(shù)之前增加了一個(gè)批歸一化層(batch normalization,BN)來解決神經(jīng)網(wǎng)絡(luò)反向傳播過程中可能發(fā)生的梯度消失和梯度爆炸問題。Darknet-53使用的殘差網(wǎng)絡(luò)通過層間連接可以有效地解決訓(xùn)練過程中的梯度消失問題,并減少參數(shù)數(shù)量[12]。在張量拼接后,使用Logistic分類器能夠支持多標(biāo)簽對(duì)象的分類。
YOLOv3 雖然在多類目標(biāo)分類上表現(xiàn)出色,但是對(duì)于手勢檢測這樣的單類物體的檢測,這一網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)有些過于復(fù)雜和冗余,這樣會(huì)帶來訓(xùn)練過程難度增加,所需數(shù)據(jù)量變大以及達(dá)不到實(shí)時(shí)性等一系列問題。針對(duì)這一問題,本文對(duì)YOLOv3 網(wǎng)絡(luò)進(jìn)行改進(jìn),使其在不損失準(zhǔn)確度的情況下提升檢測速度,保證跟蹤的實(shí)時(shí)性。
2.2.1 網(wǎng)絡(luò)結(jié)構(gòu)中的改進(jìn)
本文提出的卷積神經(jīng)網(wǎng)絡(luò)(Darknet-gesture)保持了Darknet-53 的殘差模塊(Residual),在每個(gè)殘差模塊后面增加了一個(gè)1×1 的卷積核進(jìn)一步降低輸出維度,同時(shí)在第一個(gè)卷積層中使用線性激活函數(shù)來避免低維度卷積層特征圖像丟失問題。在殘差模塊中,調(diào)整了每個(gè)模塊中殘差網(wǎng)絡(luò)的層數(shù)。這種方式使得殘差模塊間的連接得到增強(qiáng),進(jìn)一步增強(qiáng)了特征圖的復(fù)用性,減少了模塊間特征的傳遞損失。進(jìn)行改進(jìn)后的卷積神經(jīng)網(wǎng)絡(luò)Darknet-gesture結(jié)構(gòu)見表1。
其中每個(gè)殘差模塊后面的數(shù)字為該模塊含有的殘差網(wǎng)絡(luò)層數(shù)。將改進(jìn)的網(wǎng)絡(luò)替代Darknet-53 網(wǎng)絡(luò),加入YOLOv3 中,即生成改進(jìn)算法YOLOv3-gesture。
2.2.2 基于規(guī)劃區(qū)域檢測的跟蹤框架
為了提高手勢跟蹤的魯棒性,本文提出一種規(guī)劃區(qū)域檢測的跟蹤框架。其實(shí)現(xiàn)過程如下:假設(shè)在第t幀圖像中檢測到有手勢目標(biāo)Object1,則經(jīng)過YOLOv3-gesture 網(wǎng)絡(luò)預(yù)測輸出預(yù)測框X1的中心坐標(biāo)(bx,by)、預(yù)測框?qū)挾群透叨萣h。進(jìn)入第t+1 幀后,在第t幀中心點(diǎn)的附近區(qū)域生成規(guī)劃區(qū)域進(jìn)行檢測,即在第t+1 幀時(shí),輸入YOLOv3-gesture 網(wǎng)絡(luò)的大小為規(guī)劃區(qū)域S*,其中規(guī)劃區(qū)域S*的寬度Sw和高度Sh取值由預(yù)測邊框的寬度bw和bh決定,則以第t幀中心點(diǎn)為原點(diǎn),第t+1 幀規(guī)劃區(qū)域的左上角頂點(diǎn)(Sx,Sy)換算公式如下:
Table 1 Improved structure for Darknet-gesture表1 Darknet-gesture 改進(jìn)結(jié)構(gòu)
其中,n為變換尺度,即Sw=nbw,Sh=nbh,若在規(guī)劃區(qū)域中未檢測到對(duì)象則n+1。規(guī)劃區(qū)域最大為輸入完整圖像的大小。如果存在多個(gè)手勢目標(biāo),則分別對(duì)每個(gè)手勢目標(biāo)求取規(guī)劃區(qū)域進(jìn)行檢測完成跟蹤。其過程如圖1 所示。
根據(jù)改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu),相比于輸入圖像有3 個(gè)尺度的特征圖檢測,分別是相對(duì)于輸入圖像的52 倍、26倍、13 倍下采樣,用來檢測不同尺寸的手勢。將8 組每組為100幀416×416的連續(xù)手勢圖像輸入YOLOv3-gesture 網(wǎng)絡(luò),使用不同的變換尺度和不同的特征圖檢測尺度對(duì)圖像進(jìn)行檢測,其成功率曲線如圖2所示。
數(shù)據(jù)可見,由于采用規(guī)劃區(qū)域的檢測方法,對(duì)于檢測區(qū)域的13倍下采樣檢測尺度的檢測成功率很低,這一尺度對(duì)于手勢檢測來說屬于冗余,因此本文決定采用26倍下采樣和52倍下采樣兩個(gè)檢測尺度完成規(guī)劃區(qū)域檢測。分析數(shù)據(jù)可知變換尺度為3時(shí)效果較好,因此規(guī)劃區(qū)域檢測的變換尺度的取值從3 開始。
通過對(duì)規(guī)劃區(qū)域的檢測,視頻每幀的相應(yīng)關(guān)系更加緊密,可以排除非敏感區(qū)域?qū)ο蟮母蓴_,使得對(duì)手勢跟蹤的魯棒性更強(qiáng)。同時(shí),相對(duì)于原始完整圖像,輸入圖像中的對(duì)象數(shù)量大大減少,減少了YOLO網(wǎng)絡(luò)的計(jì)算量,進(jìn)而縮短了算法的檢測時(shí)間,提高了手勢跟蹤的實(shí)時(shí)性。
Fig.1 Regional planning test圖1 區(qū)域規(guī)劃檢測
Fig.2 Detection success profile圖2 檢測成功率分布圖
本文訓(xùn)練和測試均在Windows 環(huán)境下進(jìn)行,模型搭建采用Darknet 開源框架實(shí)現(xiàn),硬件條件CPU 為i7-8700,GPU 為NVIDIA GTX1080。檢測模型的權(quán)重通過遷移學(xué)習(xí)采用ImageNet上的預(yù)訓(xùn)練權(quán)重模型。
實(shí)驗(yàn)數(shù)據(jù)集采集于CGD2011 手勢數(shù)據(jù)庫,該數(shù)據(jù)庫共有30 個(gè)基本手勢動(dòng)作,約5 萬個(gè)手勢。共有約4 500 個(gè)視頻,視頻數(shù)據(jù)每幀圖像分辨率大小為240×320,幀率為每秒10 幀。本文數(shù)據(jù)1 000 張圖片從該數(shù)據(jù)庫提取,200 張來自真實(shí)場景的手勢動(dòng)作拍攝照片,分辨率大小為1 372×941。使用LableImage對(duì)手勢照片中的手勢目標(biāo)進(jìn)行標(biāo)注。隨機(jī)選取其中的1 000 張用作訓(xùn)練集數(shù)據(jù),200 張用作測試集數(shù)據(jù)。同時(shí)隨機(jī)選取CGD2011 數(shù)據(jù)庫中的20 個(gè)視頻進(jìn)行實(shí)時(shí)性跟蹤檢測。
在訓(xùn)練階段,設(shè)置每批訓(xùn)練樣本batch 為64,一次性送入訓(xùn)練器樣本數(shù)量subdivisions 為16,動(dòng)量參數(shù)設(shè)置為0.9,權(quán)重衰減正則項(xiàng)為0.000 5,初始學(xué)習(xí)率設(shè)置為0.001,采用小批量隨機(jī)梯度下降的方式進(jìn)行優(yōu)化,同時(shí)采用多尺度訓(xùn)練的方式來增強(qiáng)算法對(duì)不同大小圖像檢測的魯棒性。其訓(xùn)練過程中損失函數(shù)的變化過程如圖3。YOLOv3 使用相同訓(xùn)練參數(shù)后的loss 值隨迭代次數(shù)變化對(duì)比如圖4 所示。結(jié)果顯示,由于YOLOv3-gesture 簡化了網(wǎng)絡(luò)的主體結(jié)構(gòu)使得訓(xùn)練難度和迭代次數(shù)變小。
Fig.3 Loss function varies with the number of iterations圖3 損失函數(shù)隨迭代次數(shù)的變化
Fig.4 Comparison of loss function of YOLOv3 and YOLOv3-gesture圖4 YOLOv3 與YOLOv3-geature損失函數(shù)對(duì)比
為了全面展示本文提出的YOLOv3-gesture 跟蹤效果,先將本文算法與YOLO 系列算法在同樣的數(shù)據(jù)集中進(jìn)行比較,再與3 個(gè)跟蹤相關(guān)算法在同樣的測試數(shù)據(jù)集中進(jìn)行比較。這3 個(gè)跟蹤相關(guān)算法分別是Struck[13]、FCN(fully convolutional networks)[14]和CCOT(continuous convolution operators for visual tracking)[15]。其中Struck 為經(jīng)典跟蹤算法;FCN 是基于深度學(xué)習(xí)最新的跟蹤算法;CCOT 是基于相關(guān)濾波的最新算法。
3.4.1 與YOLOv3 算法的比較
本文算法YOLOv3-gesture 與YOLOv3 的性能評(píng)判指標(biāo)為準(zhǔn)確度、召回率、平均準(zhǔn)確度和標(biāo)記框和預(yù)測框的交并比(intersection over union,IOU)值。算法每秒處理的幀數(shù)作為算法的速度評(píng)判指標(biāo),其單位為frame/s。通常動(dòng)作連貫的視頻為30 frame/s,因此如果檢測的速度達(dá)到30 frame/s,就可以認(rèn)為達(dá)到了實(shí)時(shí)跟蹤。在200 張測試集數(shù)據(jù)中應(yīng)用YOLOv3和YOLOv3-gesture,比較后得出各項(xiàng)指標(biāo)對(duì)比見表2。其中數(shù)據(jù)是通過調(diào)整IOU閾值使得準(zhǔn)確度和召回率最大得出的實(shí)驗(yàn)結(jié)果,本文算法相對(duì)于YOLOv3算法,準(zhǔn)確度提升了2.3%,召回率提升了3.4%,平均準(zhǔn)確度提升了4.5%。YOLOv3-gesture 通過規(guī)劃區(qū)域檢測的手段,減少了背景中非跟蹤對(duì)象的干擾,使檢測準(zhǔn)確度得到提升。
Table 2 Comparison of each index of two algorithms表2 兩種算法的各項(xiàng)指標(biāo)對(duì)比
同時(shí),YOLOv3-gesture 的檢測速度快于YOLOv3的32.8 frame/s,達(dá)到了實(shí)時(shí)跟蹤的要求。在測試過程中,對(duì)于某些運(yùn)動(dòng)過程中外表劇烈變化,處于模糊狀態(tài)的手勢目標(biāo),YOLOv3 算法的識(shí)別率較差。如圖5 所示,右側(cè)運(yùn)動(dòng)中的手勢YOLOv3 算法未識(shí)別出。分析可知,簡單的卷積神經(jīng)網(wǎng)絡(luò)模型在數(shù)據(jù)量較小,數(shù)據(jù)復(fù)雜多變的情況下具有更好的泛化性能,可以有效地應(yīng)對(duì)跟蹤中的運(yùn)動(dòng)模糊。
Fig.5 Comparison of test results圖5 測試結(jié)果對(duì)比
3.4.2 與其他跟蹤算法的比較
在與Struck、FCN 和CCOT 算法的比較中,采用IOU閾值作為成功率評(píng)判指標(biāo),并在CGD2011 數(shù)據(jù)庫中隨機(jī)選取20 個(gè)動(dòng)態(tài)手勢視頻,對(duì)以上算法進(jìn)行檢測,并對(duì)跟蹤視頻每一幀的成功率進(jìn)行統(tǒng)計(jì),結(jié)果如圖6 所示。IOU閾值最小為0 跟蹤效果最差;最大為1 跟蹤效果最好。同時(shí)對(duì)不同場景的交并比平均成功率進(jìn)行統(tǒng)計(jì)分析,結(jié)果如表3 所示。
Fig.6 Success rate curve of IOU圖6 交并比成功率曲線圖
Table 3 Statistical analysis of success rate in different scenes表3 不同場景成功率統(tǒng)計(jì)分析 %
部分跟蹤結(jié)果如圖7 所示。在具有復(fù)雜背景的手勢跟蹤場景中的部分幀當(dāng)中,從圖7(b)可以看出Struck 算法發(fā)生了漂移,CCOT 算法發(fā)生了預(yù)測框不能準(zhǔn)確包裹手勢的問題(圖7(c)),F(xiàn)CNT 算法雖然可以準(zhǔn)確預(yù)測位置,但是運(yùn)算速度僅有22 frame/s,不能達(dá)到實(shí)時(shí)跟蹤的效果。在手部有部分遮擋的手勢跟蹤場景中,Struck 與CCOT 均未檢測到目標(biāo),本文算法可以跟蹤遮擋目標(biāo)(圖7(d))。在運(yùn)動(dòng)劇烈的手勢目標(biāo)跟蹤中,Struck 無法檢測出劇烈運(yùn)動(dòng)的手勢目標(biāo),CCOT 算法在跟蹤的過程中出現(xiàn)明顯的延遲現(xiàn)象(圖7(f)),檢測框停留在上一幀目標(biāo)的位置。
Fig.7 Partial tracking results圖7 部分跟蹤結(jié)果
可見在不同場景下的跟蹤效果,YOLOv3-gesture性能良好,在交并比的成功率比較中,YOLOv3-gesture成功率均高于其他算法,這取決于卷積神經(jīng)網(wǎng)絡(luò)和規(guī)劃區(qū)域檢測應(yīng)用在目標(biāo)檢測和規(guī)劃區(qū)域檢測對(duì)干擾的排除作用,使得跟蹤的效果更佳。
針對(duì)復(fù)雜場景手勢跟蹤的魯棒性不足和實(shí)時(shí)性不足的問題,本文提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的改進(jìn)YOLOv3 跟蹤算法。該算法可以在復(fù)雜場景中克服運(yùn)動(dòng)手勢模糊,背景有非目標(biāo)對(duì)象干擾等問題,對(duì)手勢進(jìn)行實(shí)時(shí)跟蹤。實(shí)驗(yàn)表明,本文算法在復(fù)雜場景的手勢跟蹤性能優(yōu)于YOLOv3 算法以及其他跟蹤相關(guān)算法,后續(xù)工作會(huì)在跟蹤的基礎(chǔ)上對(duì)動(dòng)態(tài)手勢進(jìn)行識(shí)別。