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