翁耿鵬 鄭曉帆 潘 良 饒 浩
(韶關學院信息工程學院,廣東 韶關 512005)
手勢作為人與人之間日常溝通的方式之一,已逐漸成為新一代人機交互的熱門研究方向,將手勢識別應用于硬件設備人機交互控制中在未來將具有重大意義,例如:控制智能家居、手勢控制會議投影儀、控制無人機、隔空控制手機等,能夠讓用戶無接觸地操控設備,同時也為老人、兒童等一些對數字化設備操作困難的人群提供便利。
目前對手勢進行識別的方法主要分為兩類:一是依靠數據手套等穿戴式設備通過對關節指尖等關鍵位置對手勢進行采集識別[1],雖然識別精度高,但由于硬件成本高,交互不夠便捷,難以在大眾中推廣。二是依靠計算機視覺的方法,用戶僅需搭配攝像頭或傳感器即可進行手勢識別,雖然相對于穿戴式設備而言識別精度較差,但由于用戶無需穿戴特殊的設備,具有交互自然、成本低等優點。且目前隨著計算機視覺的發展,基于計算機視覺識別方式的識別精度與速度都已達到可以接受的水平。其中基于計算機視覺的手勢識別出現了各式各樣的方法。王先軍等人采用膚色模型與Hu矩描述因子結合,利用BP進行手勢識別[2];程淑紅等人采用基于多特征融合及生物啟發式遺傳算法優化多分類支持向量分類器對手勢進行識別[3];徐坊等人采用基于3D卷積網絡的分級網絡結構識別手勢[4]。
本系統為移動設備提供一種基于手勢的人機交互方式,運行在移動設備的應用層上,而手勢識別分為動態手勢識別和靜態手勢識別。動態手勢識別雖動作會更加自然,但使用的識別模型一般較為龐大復雜,對設備性能要求較高,難以運行在移動設備上,因此系統采用靜態手勢進行識別。為了使手勢簡單易懂,采用手指做出數字手勢這種常見的可識別性高的靜態手勢進行識別。
系統針對用戶不方便觸碰移動設備屏幕的情況,例如手上有油、水等污漬或用戶距離移動設備有一定的距離,用戶可以通過本系統對移動設備進行操控。其中當用戶在瀏覽網頁或者看電子書是可以使用上滑和下滑功能來操縱屏幕進行瀏覽。當用戶需要截取屏幕內容時,使用截屏功能一則可實現隔空截屏,二則可相比目前的手機需要同時按多個按鍵或是需要多指滑屏或是需要下拉通知欄進行截屏等的操作方式更加快捷方便。用戶在有信息出現在通知欄時可使用下拉通知欄功能查看信息詳情,并可使用返回功能回到原來頁面,而無需觸碰設備屏幕。
由于傳統手勢識別算法在背景相對復雜的情況下識別精度易受影響,因此在圖像預處理過程中加入基于膚色檢測算法的手勢分割,將背景與手勢分割出來,以提高后續的識別精度,降低背景對手勢細節信息的影響。
在訓練過程,為了降低背景噪音對模型訓練時手勢特征提取產生的影響,同時盡可能保存待識別手勢的細節信息,采取先基于膚色對手勢進行分割提取[5]再進行圖像數據增強處理。在基于膚色對手勢分割主要用到的圖像處理技術為顏色空間轉換、高斯濾波和對圖像二值化處理的大津法等。流程如圖1所示。

圖1 膚色檢測流程圖
目前基于顏色空間的膚色檢測主要是基于RGB、YCrCb等顏色空間。其中RGB顏色空間是最基本、最常用的顏色空間。攝像頭采集的圖片一般也是以RGB顏色空間保存的,顯示器一般也是采用RGB顏色標準進行顯示的。但由于RGB格式的顏色空間中R、G、B三個分量對亮度比較敏感,當對圖片的亮度進行調整時,RGB顏色空間的R、G、B三個分量也會隨之發生改變,不適用于圖像處理。YCrCb空間由RGB空間轉換而來,受亮度影響較小,是目前使用較多的一種顏色提取算法。故本實驗采取將從攝像頭讀取的圖像,從默認的RGB格式轉換為YCrCb格式的膚色提取算法。
由于從攝像頭讀取原始圖像后,因受圖片的拍攝環境或者拍攝設備自身的影響,一般收集到的圖片都會或多或少存在一些圖像噪音,為盡可能保證采集到完整的手勢信息,提高圖像二值化后手勢的完整性,需要先對原始圖像進行去噪處理。具體方法為在將圖片從RGB顏色空間轉換成YCrCb顏色空間后,將其中的Cr分量分離出來,并對其進行高斯濾波處理消除高斯噪聲,之后對已消除高斯噪聲的Cr分量結合OTSU算法對手勢圖像進行二值化處理,最后將二值化處理后的手勢圖像與原手勢圖像進行“與”運算,得到分割完整的手勢圖像,如圖2所示。

圖2 圖像處理步驟
首先,在數據增強前先將手勢數據集圖片經過基于膚色的手勢分割處理,分割出手勢信息保留完整的圖片。隨后由于采集的樣本有限且沒法兼顧到所有的角度,為提高模型的泛化能力,增強數據集的多樣性,采用了數據增強(Data Augmentation)手段對數據集擴充,主要為隨機選取圖片進行水平翻轉或者垂直翻轉后又在-45度到45度范圍內隨機旋轉一定的角度,以模擬出不同的拍攝角度。最后由于數據集的圖片尺寸并不完全相同,因此需要將圖片調整成統一尺寸,同時也為了提高訓練速度,在這里主要通過縮放和中心裁剪操作將圖片尺寸統一為224*224。經過圖像預處理和圖像增強后部分圖像如圖3所示。

圖3 數據增強后的部分手勢數據集
本文的手勢識別模型在編寫代碼時所使用的硬件環境為:Inteli5-9300H2.4GHz4核CPU、16GBDDR4內存(RAM)、NVIDIAGTX10503G顯卡;軟件開發平臺為:python3.8、Pytorch1.7.1;使用JupyterNotebook6.1.6編寫手勢識別模型的代碼,使用GoogleColab進行模型訓練。
目前卷積神經網絡已普遍應用于計算機視覺領域,并且取得良好效果,如AlexNet、VGG、ResNet等。但為了提高卷積神經網絡對圖像分類的準確率,卷積神經網絡的深度越來越大,復雜度也越來越高。考慮到本文實現的手勢識別是應用于移動設備,一個復雜且龐大的卷積神經網絡應用于移動設備往往會因為計算資源不足而導致無法運行,基本要依靠互聯網將圖像數據傳輸到服務端才能識別,但這樣需要消耗大量的網絡資源,因此將參數多、網絡復雜的神經網絡部署到移動設備并不現實。同時由于訓練出一個良好的神經網絡模型往往需要有大量規范的數據集并且花費大量的計算資源與時間去訓練模型和優化參數。而通過遷移學習,將在大型數據集上訓練的對某些問題具有良好識別率的模型參數遷移到新的圖像識別任務上,可以使用少量的訓練數據就能達到良好的訓練效果,利用遷移學習可以快速訓練出一個良好的模型并且實現了模型的復用。鑒于此,實驗選取MobileNetV2為手勢識別的模型,MobileNetV2是Google公司推出的可解決傳統神經網絡對設備要求高的輕量級卷積神經網絡[6],并將pytorch官方在大型數據集ImageNet上訓練出具有卓越性能的MobileNetV2模型作為預訓練模型進行手勢識別。
MobileNetV2模型的主要思想是采用深度可分離卷積,其將標準卷積的一次計算分解為深度卷積和逐點卷積二次計算,其網絡結構如圖4所示。假設進行卷積的特征圖尺寸為(DI,DI,M),經過卷積后變為(DO,DO,N),使用的卷積核尺寸為(Dk,Dk),則標準卷積計算量為Dk×Dk×M×N×DI×DI,而深度可分離卷積的計算量為Dk×Dk×M×DI×DI+M×N×DI×DI。在采用3×3的卷積核,深度可分離卷積計算量大約為原來的1/9[7]。深度可分離卷積將標準卷積分解減少了模型的參數量和計算量,使得模型輕量化。

圖4 標準卷積結構和深度可分離卷積結構
實驗中對MobileNetV2預訓練模型所做的具體調整為刪除MobileNetV2上原有的全連接層分類器,加入了適合于手勢識別任務全連接層,在全連接層的最后還加入SoftMax函數輸出每張手勢圖片屬于各個手勢類別的概率。并在模型上所有的3*3卷積層上加入了L2正則化約束,將模型參數的權重控制在一定的范圍內,使得模型的抗過擬合能力更強,提高了模型的泛化能力,調整后網絡的基本結構單元如圖5。由于MobileNetV2模型的網絡參數較少,在文中采用對預訓練的MobileNetV2模型的所有網絡參數的權重進行重訓練。

圖5 調整后網絡基本結構單元
在訓練卷積神經網絡模型過程中,學習率是影響模型訓練效果的一個重要因素。實驗采用自適應矩估計(Adaptive moment estimation,Adam)優化算法對模型進行優化,且使用等間隔調整學習率的方法對學習率進行調整。選擇0.0001作為初始學習率進行學習,并每經過400個步數,學習率調整為原來的0.8倍,以防止在微調因學習率過大,破壞了模型權重,影響模型訓練效果,且不會因為學習率太小,使得模型收斂緩慢。使用交叉熵損失函數(CrossEntropy Loss)來衡量模型輸出的預測值與實際值的擬合程度,指引模型的優化方向。批訓練樣本數(batchsize)為128,每一個批訓練樣本為一個步數(step),設置了40個迭代次數(epoch)進行訓練。訓練過程中MobileNetV2模型隨著步數的增加,識別的準確率(Accuracy)和損失值(loss)的變化如圖6所示,最終模型在訓練集上的識別準確率能達到98.13%,在測試集上的準確率也能到達88.31%。
本文針對背景容易影響識別率的問題,利用膚色檢測算法對手勢圖像進行分割處理,對經過手勢分割的圖像進行翻轉等空間處理,實現了手勢數據增強;針對移動設備性能不足,采用輕量級卷積神經網絡MobileNetV2,通過遷移學習對模型進行微調訓練,得到適用于在移動設備運行的手勢識別模型。