張睿敏,杜叔強(qiáng),周秀媛
(蘭州工業(yè)學(xué)院計(jì)算機(jī)與人工智能學(xué)院,甘肅 蘭州 730050)
隨著計(jì)算機(jī)視覺技術(shù)的發(fā)展,基于攝像頭的手勢(shì)識(shí)別研究受到了學(xué)習(xí)和業(yè)界的重視,手勢(shì)識(shí)別在智能人機(jī)交互、智能駕駛系統(tǒng)等方面都有著廣闊的應(yīng)用前景[1]。高效的動(dòng)態(tài)手勢(shì)識(shí)別算法能讓計(jì)算機(jī)準(zhǔn)確地識(shí)別復(fù)雜的手部動(dòng)作,張建榮[2]提出的動(dòng)態(tài)時(shí)間規(guī)整(improve Dynamic Time Warping,i DTW)手勢(shì)識(shí)別算法,采用點(diǎn)和線結(jié)合的方法約束搜索路徑,提高了手勢(shì)識(shí)別的精確度。KHARI等[3]使用微調(diào)后的VGG19(Visual Geometry Group)模型對(duì)RGB(Red Green Blue)和RGB-D(RGB+Depth)圖像進(jìn)行手勢(shì)識(shí)別,識(shí)別準(zhǔn)確率達(dá)到了94.8%,但只能對(duì)靜態(tài)手勢(shì)進(jìn)行識(shí)別。王龍等[4]通過建立手勢(shì)膚色模型,提取手勢(shì)特征,能快速識(shí)別相關(guān)手勢(shì),但是容易受到光照等因素的影響。丁馳等[5]提出將神經(jīng)網(wǎng)絡(luò)和SSD(Single Shot Multibox Detector)結(jié)構(gòu)結(jié)合起來提取手勢(shì)特征,提高了在光線等因素影響下手勢(shì)的識(shí)別效率,但模型較大、檢測(cè)時(shí)間長(zhǎng)。
從以上學(xué)者的研究可以看出,動(dòng)態(tài)手勢(shì)識(shí)別算法已經(jīng)取得了不錯(cuò)的識(shí)別效果,但研究者很難設(shè)計(jì)出一種對(duì)所有手勢(shì)都適用的識(shí)別方法。基于改進(jìn)YOLOv5+Kalman的動(dòng)態(tài)手勢(shì)識(shí)別跟蹤算法主要在YOLOv5網(wǎng)絡(luò)的基礎(chǔ)上添加了兩個(gè)模塊:自適應(yīng)注意力模塊(Adaptive Attention Module,AAM)和特征增強(qiáng)模塊(Feature Enhancement Module,FEM)。增加這兩個(gè)模塊后,一方面減少了生成特征圖時(shí)的信息丟失問題,另一方面增強(qiáng)了特征金字塔的表示能力,以便對(duì)不同手勢(shì)進(jìn)行實(shí)時(shí)準(zhǔn)確的識(shí)別,然后應(yīng)用Kalman濾波器進(jìn)行預(yù)測(cè)跟蹤。預(yù)測(cè)跟蹤時(shí),將短時(shí)內(nèi)的手部運(yùn)動(dòng)看作恒定的運(yùn)動(dòng),目標(biāo)狀態(tài)在設(shè)定的非常短的時(shí)間內(nèi)是不變的,在跟蹤時(shí),因?yàn)橄噜弮蓭瑘D像差異不大,所以手勢(shì)的運(yùn)動(dòng)模型采用的是等速度運(yùn)動(dòng)模型。
YOLOv5模型是基于YOLOv3模型的基礎(chǔ)上改進(jìn)而來的,目前有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四個(gè)模型。YOLOv5的組成分為三個(gè)部分:Backbone(骨干網(wǎng)絡(luò))、Neck(頸部網(wǎng)絡(luò))、Output(頭部網(wǎng)絡(luò)),具體如圖1所示。
圖1 YOLOv5網(wǎng)絡(luò)模型Fig.1 YOLOv5 net work model
Focus、Conv、Bottleneck CSP 和SPP 等模塊組成模型的Backbone網(wǎng)絡(luò),Backbone主要是在不同圖像細(xì)粒度上聚合并提取圖像特征。YOLOv5通過在骨干網(wǎng)絡(luò)Backbone和Neck網(wǎng)絡(luò)部分使用Bottleneck CSP模塊,在保證語(yǔ)義提取準(zhǔn)確的同時(shí),提高網(wǎng)絡(luò)速度[6]。Neck網(wǎng)絡(luò)組合了一系列圖像特征,并將圖像特征傳遞到Output網(wǎng)絡(luò)。Output網(wǎng)絡(luò)對(duì)圖像進(jìn)行檢測(cè)并生成邊界框和預(yù)測(cè)類別。設(shè)置大小為80×80×512的圖像,Neck網(wǎng)絡(luò)進(jìn)行上采樣操作,上采樣操作包含兩個(gè)瓶頸層 Bottleneck CSP,兩個(gè)標(biāo)準(zhǔn)卷積層Conv(大小步長(zhǎng)為1),兩個(gè)UPsample和Concat層;然后進(jìn)行下采樣操作,下采樣操作包括兩組Bottleneck CSP、Conv、Concat層和單獨(dú)的Battleneck CSP,得到大小分別是80×80×256、40×40×512、20×20×1 024的特征圖。
YOLOv5應(yīng)用大小不同的特征圖在頭部進(jìn)行檢測(cè),即應(yīng)用大圖像檢測(cè)小目標(biāo),應(yīng)用小圖像檢測(cè)大目標(biāo)。對(duì)于頸部操作得到的結(jié)果,再經(jīng)Conv2d卷積操作,便得到大小為80×80×256、40×40×512、20×20×1 024的特征圖。
在YOLOv5原有特征金字塔的基礎(chǔ)上,添加AAM 和FEM 兩個(gè)模塊,既減少了生成特征圖時(shí)的信息丟失問題,也增強(qiáng)了特征金字塔的表示能力,如圖2所示。這樣在保證實(shí)時(shí)檢測(cè)的前提下提高了YOLOv5網(wǎng)絡(luò)對(duì)多尺度目標(biāo)的檢測(cè)性能,各組分別采取具有差異卷積核的大小卷積,從而獲取不同尺度的感受野[7],得到不同尺度的目標(biāo)信息。此外,增加了自動(dòng)學(xué)習(xí)數(shù)據(jù)增強(qiáng)模塊,在增強(qiáng)數(shù)據(jù)集的同時(shí)提高了模型的魯棒性,使其更適用于實(shí)際場(chǎng)景。
圖2 AF-YOLOv5網(wǎng)絡(luò)Fig.2 AF-YOLOv5 net work
輸入圖像經(jīng)過多個(gè)卷積操作生成{C1,C2,C3,C4,C5}特征映射。C5通過AAM 生成特征映射{M6},映射{M6}與{M5}求和,然后傳遞給下一層與其他特征融合,通過有限元分析,路徑聚合網(wǎng)絡(luò)(Path Aggregation Net work,PANet)縮短了底層與頂層特征間的信息路徑。首先,AAM 模塊通過自適應(yīng)池化層得到不同尺度的語(yǔ)義特征;然后,每個(gè)上、下文特征進(jìn)行1×1卷積,以獲得通道維數(shù),利用雙線性插值將其上采樣,得到S尺度以便進(jìn)行后續(xù)融合,空間注意力機(jī)制通過Concat層將三個(gè)上、下文特征的通道進(jìn)行合并;特征圖依次經(jīng)過1×1卷積層、整流線性單元(Rectified Linear Unit,ReLU)激活層、3×3卷積層和Sigmoid激活層,為每個(gè)特征圖生成相應(yīng)的空間權(quán)值。
FEM 模塊由多分支卷積層和分支池化層兩個(gè)部分組成,多分支卷積層能為輸入特征圖提供不同大小的感受野,它通過擴(kuò)張卷積、批歸一化(Batch Nor malization,BN)層和ReLU 激活層。把三個(gè)平行分支中的擴(kuò)張卷積核設(shè)定為相同大小,都為3×3,擴(kuò)張速率設(shè)定為不同,分別為1、3、5。分支池化層用于融合來自不同并行分支的信息,避免引入額外參數(shù)[8-9]。在訓(xùn)練過程中,不同分支的平衡通過平均操作實(shí)現(xiàn),使單個(gè)分支在測(cè)試過程中實(shí)現(xiàn)推理。
圖像增強(qiáng)通過一定手段對(duì)原圖像附加一些信息或變換數(shù)據(jù),有選擇地突出圖像中感興趣的特征或者抑制(掩蓋)圖像中某些不需要的特征,使圖像與視覺響應(yīng)特性相匹配[10-12]。圖像數(shù)據(jù)增強(qiáng)就是對(duì)被訓(xùn)練的圖像做隨機(jī)改變(如旋轉(zhuǎn)、縮放、變形等),目的是生成相似而又不同的訓(xùn)練樣本,進(jìn)而擴(kuò)大訓(xùn)練數(shù)據(jù)集大小。模型通過多種類型數(shù)據(jù)集的訓(xùn)練,能夠降低模型對(duì)有些特定屬性的依賴,提高模型的泛化能力。同時(shí),圖像本身的變化能夠增強(qiáng)模型對(duì)未見數(shù)據(jù)的泛化,從而避免了模型的過度擬合。
本文增強(qiáng)圖像時(shí)使用的是ImageDataGenerator()類,ImageDataGenerator()類是圖片生成器,它包含在keras.preprocessing.image包中;每次使用它對(duì)batch_size個(gè)樣本圖像進(jìn)行增強(qiáng),部分關(guān)鍵代碼如下:
在跟蹤算法上加一個(gè)預(yù)測(cè)機(jī),本文使用Kalman濾波器預(yù)測(cè)機(jī)[13-14],形成有預(yù)測(cè)機(jī)制的跟蹤算法。把短時(shí)的手部運(yùn)動(dòng)粗略地看成一種恒定的運(yùn)動(dòng),在設(shè)定的非常短的時(shí)間內(nèi)目標(biāo)的狀態(tài)是不變的,設(shè)計(jì)Kalman預(yù)測(cè)跟蹤機(jī)對(duì)手勢(shì)進(jìn)行預(yù)測(cè)跟蹤。通過遍歷圖像特征的所有通道,減去平均像素值,對(duì)于去均值后的特征圖,再遍歷所有特征[15-17],得到S,V,D(x i=VSD),取V矩陣前K列,即對(duì)應(yīng)特征的壓縮維度(預(yù)設(shè)值)。在預(yù)測(cè)跟蹤中,手勢(shì)運(yùn)動(dòng)模型采用的是等速度運(yùn)動(dòng)模型,狀態(tài)向量定義為公式(1):
觀測(cè)向量定義為公式(2):
預(yù)測(cè)向量定義為公式(3):
其中,colcenter'(t),rowcenter'(t)表示Kalman濾波器預(yù)測(cè)的搜索窗口的中心位置,v'x(t),v'y(t)表示搜索速度。
將Kalman濾波的狀態(tài)方程定義為公式(4):
觀測(cè)方程定義為公式(5):
以上方程中,參數(shù)w t是t時(shí)刻的動(dòng)態(tài)噪聲,v t是t時(shí)刻的觀測(cè)噪聲,其余參數(shù)都表示相關(guān)矩陣,x t表示狀態(tài),u t表示控制,Y t表示t時(shí)刻的觀測(cè),A t表示狀態(tài)轉(zhuǎn)移,B t表示狀態(tài)控制,H表示觀測(cè)。
將時(shí)間更新方程定義為公式(6):
將狀態(tài)更新方程定義為公式(7):
以上方程中,P t是協(xié)方差矩陣,^x k是新的最優(yōu)估計(jì),K t是卡爾曼增益,它表明當(dāng)前時(shí)刻新的最優(yōu)估計(jì)是由上一時(shí)刻的最優(yōu)估計(jì)加上外部控制量預(yù)測(cè)得到的。這樣Kalman濾波器預(yù)測(cè)模型通過時(shí)間更新和狀態(tài)更新保證跟蹤的實(shí)時(shí)性和準(zhǔn)確性。
實(shí)驗(yàn)硬件配置要求:CPU為AMD Ryzen 5 3600@4.2 GHz,GPU為NVIDIA GeForce RTX 3060,內(nèi)存為32 GB,顯卡為ASUS TUF-GeForce RTX3080TI-O12G-GAMING 12 GB 顯存。軟件開發(fā)工具:官網(wǎng)下載安裝Python3;安裝Python編輯器Py Charm;安裝Anaconda;打開cmd 窗口輸入命令pip install pandas,安裝pandas庫(kù);打開cmd窗口輸入命令pip install opencv,安裝OpenCV庫(kù);官網(wǎng)下載安裝CUDA;官網(wǎng)下載安裝cuDNN;安裝PyTorch。
利用大量樣本訓(xùn)練模型,實(shí)驗(yàn)數(shù)據(jù)集采用動(dòng)態(tài)手勢(shì)圖像,其來源主要包括向前、向后、向左、向右、點(diǎn)贊等共13種動(dòng)態(tài)手勢(shì)數(shù)據(jù),包括600張正樣本(手勢(shì))和600張負(fù)樣本(不出現(xiàn)手勢(shì)的背景),負(fù)樣本在一定程度上增加了模型的魯棒性和泛化功能。正負(fù)樣本的比例為1∶1,用來進(jìn)行模型訓(xùn)練,借助開源計(jì)算機(jī)視覺庫(kù)(Open Source Computer Vision Library,OpenCV)進(jìn)行對(duì)應(yīng)的手勢(shì)模型訓(xùn)練,然后進(jìn)行手勢(shì)識(shí)別跟蹤訓(xùn)練。
動(dòng)態(tài)手勢(shì)識(shí)別跟蹤系統(tǒng)采用改進(jìn)的YOLOv5卷積神經(jīng)網(wǎng)絡(luò)模型+Kalman預(yù)測(cè)跟蹤模型進(jìn)行動(dòng)態(tài)手勢(shì)的識(shí)別和跟蹤,通過對(duì)算法的改進(jìn)可以很好地提升手勢(shì)識(shí)別精度,識(shí)別準(zhǔn)確率達(dá)到了99.6%,而且不會(huì)占用太多資源。系統(tǒng)對(duì)部分手勢(shì)識(shí)別跟蹤的具體運(yùn)行結(jié)果如圖3所示。
圖3 運(yùn)行結(jié)果Fig.3 Operation results
在項(xiàng)目運(yùn)行結(jié)果窗口中,左側(cè)窗口通過檢測(cè)框和箭頭的組合表示對(duì)手勢(shì)的識(shí)別和手勢(shì)的運(yùn)動(dòng)方向,右側(cè)窗口通過文字和滾動(dòng)狀態(tài)框顯示識(shí)別到的動(dòng)態(tài)手勢(shì)結(jié)果。其中,圖3(a)的識(shí)別結(jié)果是“Rolling Hand Back ward”,圖3(c)的識(shí)別結(jié)果是“Swiping Left”。
本文針對(duì)動(dòng)態(tài)手勢(shì)的識(shí)別跟蹤問題,提出基于改進(jìn)的YOLOv5卷積神經(jīng)網(wǎng)絡(luò)模型+Kalman預(yù)測(cè)跟蹤模型進(jìn)行動(dòng)態(tài)手勢(shì)的識(shí)別和跟蹤算法。算法是在YOLOv5原有的特征金字塔網(wǎng)絡(luò)基礎(chǔ)上,增加了自適應(yīng)注意力模塊AAM 模塊和特征增強(qiáng)FEM 模塊,起到了減少特征圖生成過程中信息丟失并增強(qiáng)表示能力的作用,設(shè)計(jì)Kalman跟蹤器,通過時(shí)間更新和狀態(tài)更新,能適時(shí)、準(zhǔn)確地對(duì)動(dòng)態(tài)手勢(shì)進(jìn)行跟蹤。采用大量樣本進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)證明算法能夠?qū)緞?dòng)態(tài)手勢(shì)進(jìn)行快速且準(zhǔn)確的識(shí)別,并且Kalman濾波器預(yù)測(cè)模型保證了對(duì)動(dòng)態(tài)手勢(shì)跟蹤的實(shí)時(shí)性和準(zhǔn)確性。為了進(jìn)一步提高算法對(duì)更多動(dòng)態(tài)手勢(shì)的識(shí)別和跟蹤,后續(xù)將對(duì)算法進(jìn)行持續(xù)的優(yōu)化研究。