郭書杰
(大連東軟信息學院 智能與電子工程學院,遼寧 大連 116032)*
隨著科技的進步,日常生活中的各類電子設備越來越多,為了與這些設備進行高效的交流,人們研究出各種各樣的人機交互方法.作為一種肢體語言,手勢具有簡單、便捷的特點,它提供了一種有效的人機交互手段,特別是在AR和VR技術快速發展的今天,越來越多的設備開始使用手勢作為人機交互方式,手勢交互已經被廣泛地應用于汽車、消費電子產品、機器人、游戲、智能家庭、自動手語翻譯等諸多領域[1-3].精準高效的手勢識別,是將手勢應用于人機交互的關鍵,因此手勢識別技術是人機交互領域的一個重要研究方向,研究者提出了多種解決方案,大概可以分為基于傳感器的方法和基于機器視覺的方法兩種.王龍等[4]提出了一種結合膚色模型和卷積神經網絡的手勢識別方法.Oyebade等[5]提出了一種基于卷積神經網絡的手勢識別方法.彭玉青等[6]通過改進YOLO算法提出了一種基于深度學習的手勢識別算法HGDR-Net.彭理仁[7]等提出了一種基于深度圖像進行靜態手勢識別的方法.這些基于深度學習的手勢識別方法大多是對原始圖像直接進行手勢識別,或者是結合膚色模型對圖片進行簡單的預處理,當圖像中手所處的背景相對復雜時,特別是與人臉、手臂等裸露皮膚的部分有重疊時,算法的識別率就會降低;同時,這些算法所采用的神經網絡模型也比較復雜,訓練成本較高,實時性能稍差.為了解決這些問題,提出了一種手勢識別方案,方案通過對圖像的預處理,在一定程度上屏蔽了裸露的皮膚對識別結果的影響;同時對AlexNet網絡做了增加批標準化操作的改進,從而提高了模型的優化效率.
與其他圖像分類問題比較起來,手勢識別問題具有以下特點:
(1)不關注圖片的顏色:由于手勢識別的重點是手型的輪廓,所以無需關注圖片的顏色,使用灰度圖像就足以求解.
(2)硬件性能相對較弱:使用手勢識別作為人機交互手段的設備,一般都是硬件性能相對較弱的嵌入式系統,這就要求手勢識別方案要具有較高的執行效率,因此算法要具有較少的內存訪問消耗(memory access cost 簡寫為 MAC)和較低的算量(float-point operations,簡寫為FLOPs)
針對手勢識別問題的上述特點,制定了基于CNN的手勢識別方案.方案選用改進的AlexNet模型作為手勢識別的卷積神經網絡.AlexNet是由Krizhevsky等[8]提出的輕量級CNN網絡,AlexNet的結構相對簡單,對硬件性能的要求不高;同時在圖像識別領域,AlexNet也具有非常好的表現.然而由于AlexNet采用非線性激活函數,隨著訓練的進行,可能會出現神經元死亡的情況,進而改變數據的分布.為了能夠更好地解決手勢識別問題,對AlexNet進行了兩個方面的改進.一是對網絡結構進行優化,增加了三個批標準化(Batch Normalization)操作;二是通過對比實驗對網絡的超參數進行了優化選擇.
在對改進的AlexNet網絡進行模型訓練之前,首先對數據集中的圖片進行統一規格、邊緣提取等預處理,從而屏蔽臉部、手臂等裸露皮膚對識別結果的影響;然后使用預處理后的數據集對改進的AlexNet進行訓練并導出訓練好的模型參數;最后使用訓練好的網絡進行手勢識別.方案的具體流程如圖1所示.
為了對深度學習模型進行訓練和測試,需要大量的包含各種手勢的圖片作為數據集.數據集的大小決定了訓練出來的模型的識別準確率,為了保證訓練出來的模型的識別性能,需要有足夠大的數據集.本文用到的數據集有兩部分:NUS-II 數據集[9]和自己采集的數據集.NUS-II 數據集共有2750張復雜背景手勢圖片,實驗結果顯示,該數據集的圖片數量過少,很難解決模型的過擬合問題,為此又采集了13796張手勢圖片對數據集進行了擴容.數據集中的部分圖片如圖2(a)和2(b)所示.
為了降低MAC和FLOPs,根據手勢識別問題對數據集中的圖片做了如下處理.
(1)統一圖片的尺寸.為了便于深度學習模型在訓練和測試中使用,將數據集中的圖片統一轉換為200×200;
(2)對圖像進行邊緣提取.在進行手勢識別時,關注的重點是手的輪廓,為了降低計算量,在進行模型訓練之前,對數據集中的圖片進行了邊緣提取.常用的邊緣提取濾波有三種,Sobel算子、Laplacian算子和Canny算子,有通過對比他們的邊緣提取效果,最終選擇使用Sobel算子是一種邊緣提取濾波器.邊緣提取效果如圖3所示.
在進行模型選擇時,一般要遵從夠用即可的原則,為了能夠找到適合問題求解的簡單模型,使用Python編寫了自定義的3層卷積神經網絡、LeNet-5和AlexNet三種模型分別進行了測試.測試時,對三種模型,分別使用相同的數據集和相同的損失函數、激活函數、優化器等超參數配置.每種模型分別進行了15期訓練,通過對比每種模型在測試數據集上的識別準確率來評價模型的優劣.測試結果如圖4所示.
由圖4不難看出,三種復雜度相近的深度學習模型中,AlexNet模型具有最好的優化能力,并且經過15期的訓練就能達到超過90%的識別正確率,所以選擇該模型來進行手勢識別.
由于深度神經網絡需要用到多層的疊加處理,每一層參數的更新往往會導致上層的輸入數據的分布發生變化,隨著疊加層數的增加,高層的輸入分布會發生非常劇烈的變化,這就使得高層需要不斷的更新以便適應底層的數據變化,從而降低了學習速度.同時,這也可能導致模型落入飽和區,使得學習過早停止.另外,由于每層的更新都可能會對其他層產生影響,因此很難制定每層的參數更新策略.批標準化操作可以有效防止模型梯度爆炸或彌散,能夠讓大部分的激活函數遠離飽和區域,可以提模型對于各個超參的魯棒性.從圖4可以看出,AlexNet同樣具有容易導致梯度消失、模型優化過程進展緩慢,從而使得分類準確保持在某一值附近不能再提高的問題.為了解決這一問題,對AlexNet網絡進行了結構優化,在其第3、4、5個卷積層中,也加入了批標準化操作來降低數據的分布的改變帶來的影響,進而提高算法的優化效率.改進前后模型的性能對比如圖5所示.
由圖5可以看出,改進模型具有更好的持續優化能力,能夠使得識別準確率持續提高.最終結果顯示,與經典AlexNet模型相比,改進模型能夠將手勢識別的準確率提高4%左右.
超參數是深度學習中的一個重要概念,它是指那些在開始對模型進行訓練之前,需要人為設置參數值的參數.超參數的設置,對一個深度學習模型的性能具有很大影響.所以尋找一組合適的超參數是建立一個深度學習模型的關鍵步驟之一.根據Mishkin D等[10]的研究結果,選取激活函數、池化操作、Batch size和數據集大小等四個超參數作為研究對象,通過對比實驗,以他們在測試數據集上的識別準確率給標準,考察了他們對模型性能的影響.在進行實驗時,為了減少運算時間,除了“數據集對模型性能的影響”外,其他實驗均采用5070個圖片的小數據將進行.各個參數對模型性能的影響如圖6(a)~圖6(d)所示.
由實驗結果不難看出,由于加入了更多的批標準化操作的,更好地發揮了ReLU激活函數的性能;Batch size和數據集的大小對模型的性能具有比較明顯的影響,不同池化操作對算法性能的影響并不明顯.根據上述實驗結果可以,選擇以下超參數配置方案.激活函數選ReLU;Batch size設置為32;選用MaxPool池化操作;數據集中的圖片數量選在1.6萬張.
有兩種方式可以使用訓練好的模型進行手勢識別,一個是通過攝像設備實時采集圖像并識別;另一種是對給定的圖片進行識別.不管是使用哪種方式,都會首先使用1.3節說描述的方法對待識別的圖像進行預處理,然后在用訓練好的模型來進行手勢識別.
為了驗證方案的可行性,使用python編程實現了改進AlexNet模型,按照1.5節中的超參數配置方案配置模型,并使用擴容后的NUS-II 數據集(共有16546張圖片)對模型進行了100期的訓練.然后使用自己編寫的基于OpenCV的圖像采集程序,采集了三個人的手勢圖片,并從中隨機選出100張來對訓練好的模型進行驗證測試.測試中正確識別了93張圖片,5張圖片未能識別出結果,2張圖片識別錯誤.未能識別出結果的圖片可能是因為進行采集時,被采集人離攝像頭較遠,采集出的圖片中人手部分顯得特別小.識別錯誤的圖片主要是兩個背景比較復雜的手勢,手勢C和手勢H.
使用改進后的AlexNet模型進行手勢識別時,能夠達到約93%的識別準確率.但是識別結果仍然受圖像背景以及手勢占全圖的百分比的影響,當背景過于復雜或手勢占比較小時,識別不出結果或識別錯誤的概率就會增大.在下一步工作中,可以先檢測并標記圖片中手的位置,然后對手勢所在部分進行歸一化后,再做識別.