陳壯煉,林曉樂,王家偉,李超
(廣東輕工職業技術學院信息技術學院,廣州510300)
隨著科技的發展,現代技術不斷的智能化,識別技術的應用愈加廣泛,如人臉識別、指紋識別、車輛識別、手勢識別等。手勢是人與計算機更加自然的表達方式,即計算機通過識別手勢來了解人體語言,人無需接觸鍵盤、鼠標等外設即可與計算機進行自然交互[1]。手勢識別在人工智能領域起到非常重要的作用,但手勢識別在復雜背景下的識別準確率不高,本文利用卷積神經網絡識別算法來提高識別準確率。
早期的手勢識別是利用有線技術連接計算機系統,將數據傳輸到計算機,實現手勢識別。如數據手套內設有傳感器,傳感器通過導線與外電路連接將采集的信號傳遞給虛擬環境,然后通過機器識別算法實現手勢識別。該方法雖然識別準確率高,但在穿戴過程給用戶帶來極大的不便,而且價格昂貴。此后,數據手套被光學標記所取代,利用光學標記將手的位置和動作通過紅外線傳遞給計算機,計算機根據手勢做出相應的回應。光學標記準確率雖高,但仍需要復雜的設備,而且無法更自然的表達。
近年來手勢識別發展較快,但大多識別算法僅在簡單背景下識別,在復雜背景下識別準確率有所下降,許多專家針對此種情況更傾向于使用卷積神經網絡算法,卷積神經網絡對攝像頭采集到的手勢進行預處理,通過卷積層和池化層提取特征,使用激活函數對卷積的結果進行非線性映射,全連接層對結果進行識別分類。卷積神經網絡識別準確度相對較高,因此,基于卷積神經網絡的手勢識別成為熱門領域。
卷積神經網絡是基于動物視覺感受野設計而成,由卷積層、池化層和全連接層構成。它是人工神經網絡的一種。傳統的人工神經網絡中,每一層都是全連接的,如輸入是一副100000000 像素的圖像,則輸入層與隱藏層的某一個節點將有100000000 個權重需要訓練,這將會導致訓練困難。而卷積神經網絡提出了權值共享的概念,即用同一個卷積核生出卷積層上的所有節點。每個節點是與上一層的某個區域通過卷積核連接,不與除卷積核以外的區域連接,這大大減少了訓練的參數量,如對100000000 的圖像,若采用1000 的卷積核,則每個節點只需要訓練100 個節點。
卷積神經網絡結構如圖1 所示[2],卷積層主要是提取圖像特征,池化層是對提取的特征進行降維、防止過擬合,全連接層主要是輸出結果。

圖1 卷積神經網絡結構圖
卷積層主要是實現特征的提取,我們輸入一張圖片,計算機讀取的是通過像素矩陣標識的圖像,卷積層將像素矩陣與若干過濾器(卷積核)進行線性乘積(即卷積運算),每一個局部信息通過卷積核提取的特征信息通過權值共享的方法整合到特征圖中,如圖2 是卷積運算的過程。

圖2 卷積運算過程
每個卷積運算得到的特征圖可以組合卷積多個特征圖的值,通過卷積操作,可以增強圖片的特征信息,并降低噪音的影響[3],從而提高手勢的識別率。卷積層的計算公式如下所示:在卷積計算公式中,xl

j表示第l 層的第j 個特征圖,xli-1表示第i 個特征映射,Mj表示數據的集合,表示權重,表示偏置。例如現有5×5 的圖像和2×2的卷積核,通過步長為1 的卷積運算,得到4×4 的特征圖,如圖3、圖4 所示。

圖3 圖像矩陣(左)、卷積核(右)

圖4 運算過程
如圖4,當把卷積核置于圖像矩陣的右下角執行的運算為:
2*0+1*1+1*1+0*2=2,則輸出的特征圖中的特征參數為2。通過不斷地平移卷積核,與輸入矩陣進行卷積操作,就形成了新的特征矩陣。但對于一些比較大的圖片,在進行卷積操作時若每次只移一個步長則效率會比較低,卷積后的特征也較冗余,所以可以引入一個超參數對每次移動的步長進行調節,即卷積步長(Stride)。
下面介紹不同步長得到不同特征圖的效果:
當步長stride 為1 時,卷積的移動過程如圖5所示。

圖5 步長為1的卷積移動過程
輸出矩陣大小為:

當步長stride 為2 時,卷積移動過程如圖6 所示。

圖6 步長為2的卷積移動過程
可以看出,卷積核在移動過程中跳過一個單元格,即步長從1 變為2,則輸出矩陣大小為(向下取整):

池化層在卷積神經網絡中對輸入的特征圖進行降維,一方面是特征圖變小,降低網絡計算的復雜度,另一方面是提取主要特征。池化層可以忽略目標的相對位置的變化,來提高識別的精度,在一定程度上可以防止過擬合。常用的池化層有最大池化和平均池化。
對于池化操作,需要界定一個過濾器和步長。最大池化是取輸入矩陣在過濾器矩陣塊的最大值作為輸出矩陣相應位置的輸出。平均池化是取輸入矩陣在過濾器矩陣塊的平均值作為輸出矩陣相應位置的輸出。池化示意圖如圖7 所示[4]。

圖7 池化示意圖
圖7是一個4×4 的特征圖,現有2×2 的過濾器,步長為2,當過濾器在左上角時,若為最大池化,取過濾器所在大小的最大值,即取6,若為平均池化,則取過濾器所在大小的平均值,即。上節提到卷積層卷積后的矩陣大小的公式同樣適用于池化后的矩陣大小。
全連接層在卷積神經網絡中起到“分類器”的作用[5],將學到的“分布式特征表示”映射到樣本標記空間。如果說卷積層是局部特征的提取,那么全連接層就是將其提取到的局部特征重新通過權值矩陣整合成完整的圖片,也就是說全連接層可以整合卷積層中具有類別區分性的局部信息。
在CNN 中,卷積和池化操作相當于做特征工程,全連接層相當于做特征加權。在經過多個卷積層和池化層后,連接著一個或多個全連接層,全連接層的每個神經元都與上一層的所有神經元相連。全連接層可以整合卷積層或池化層具有區分類別的信息,即把卷積或池化輸出的二維特征圖轉化成一個一維的向量。過程的實現如圖8 所述。

圖8 卷積神經網絡過程
如圖8 為例,當進行卷積層提取特征后,通過池化層得到30 個12×12 的特征圖,在進行全連接,由于全連接層的每個結點與其下一層結點都有連接,即需卷積操作30×100 個12×12 的卷積核,卷積操作之后整個輸入圖像就會變成一個數值。總共有30 個特征圖,那么會產生30 個值,在將這30 個值進行累加求和,濃縮成一個數值。重復進行100 次之后會得到100 個值,即1×100 的向量。
手勢識別是人機交互中比較高效率、直接和便捷的一種。該手勢識別系統通過采集剪刀、石頭和布三種手勢進行訓練和識別。如圖9 所示,用戶將手部移入正方形的綠色識別框內,系統會捕捉到手勢進行識別判斷,將識別結果顯示在屏幕的左上角。

圖9 手勢識別
(1)手勢識別過程
手勢識別分為幾個步驟:通過采集手勢數據、利用OpenCV 對手勢數據進行二值化處理、將處理后的數據輸入到卷積神經網絡進行訓練、用訓練后的模型進行手勢識別。識別流程圖如圖10 所示。

圖10 手勢識別過程
(2)采集圖像數據集
系統要進行識別首先需要采集數據,系統通過調用PC 端攝像頭對剪刀、石頭、布三種手勢進行圖像采集。如圖11 所示,按鍵盤上的c 字母創建需要存放手勢的文件夾,文件夾名作為訓練數據的標簽,再輸入需要采集圖片的數目,將手移入綠色的小方框,按s 鍵開始采集手勢。

圖11 手勢采集
(3)圖像預處理
在手勢識別過程中,將采集到的手勢圖像轉換為數字圖像時,在傳輸過程中可能會受到外界因素的干擾和影響,如噪聲、光照等。手勢圖像會因這些干擾而產生畸變,導致訓練出來的模型識別準確率不高,因此需要進行圖像預處理。
在采集過程中攝像頭采集到的圖像都是沒經過處理的彩色圖像,彩色背景會對手勢訓練產生影響,因此要進行圖像分割,將手勢與背景分離開來[6]。若將彩色圖像作為輸入數據進行手勢模型的構建和訓練會讓計算機計算量過大,導致過擬合,從而影響程序的運行效率和手勢識別的精確度。為了更好地分割圖像,設置了手勢的識別區域,如圖12 所示的綠色小方框,識別區域縮小可以降低大背景下噪聲對圖像的影響,手勢采集過程中只需將手移入小方框即可。識別區域采集到的原始圖利用自適應閾值二值化算法進行預處理[7]。處理后得到的二值化圖像如圖12 所示,二值化后的圖像是黑白圖像,圖像中將手勢的輪廓描繪出來,這樣的圖像在進行提取特征和模型的訓練中將會提高準確率。

圖12 二值化圖像
(3)構建訓練模型
將處理后的圖像作為輸入數據輸入構建好的卷積神經網絡中,卷積神經網絡通過卷積和池化操作提取手勢特征,全連接層進行分類輸出,利用soft_max 損失函數來衡量模型預測的好壞。模型訓練結果如圖13、圖14 所示,訓練次數為10 次訓練后模型的準確率達到97.54% ,訓練次數為20 次的模型準確率達到
98.36 %。

圖13 訓練10次的模型訓練結果

圖14 訓練20次的模型訓練結果
(4)手勢識別
模型訓練完成后,按q 鍵打開識別窗口進行手勢識別,用戶將手移到識別區域,系統會調用訓練完的模型對攝像頭捕捉到的手勢進行識別,若識別到三種手勢,則將識別到手勢的標簽作為結果顯示在窗口的左上角,識別結果如圖15 所示。

圖15 三種手勢識別結果
人機交互最重要的一點就是電腦是否能準確接收外界的信息并快速做出響應,所以手勢識別的成功率成為了手勢識別能否應用在人機交互領域至關重要的一點。而圖像采集、圖像處理和模型訓練這三個環節對于識別的成功率有著非常大的影響。圖像采集時手部占的比例應盡量大,過多的背景會帶來更多的噪點(高頻信息),這些噪點會帶來過剩的計算量,多余的計算量會大大延長訓練的時間,對計算機的性能更是一種考驗。圖像處理可以壓縮一張圖像的信息量,經過處理的圖像雖然失去了色彩和維度,但可以更全面地獲取手勢的全局和局部特征,這樣有利于提高模型的準確率。并且針對該手勢識別人機交互系統的設計思路而言,只保留手勢圖片的基本特征更有利于模型的訓練。經過裁剪采集圖像的尺寸,剔除過剩圖像信息,最終輸入卷積神經網絡的圖像數據相對小了很多,需要訓練的時間也會相對減少很多,這樣同樣的時間可以進行更多次的訓練,從而提高了手勢識別的效率。
本文針對傳統的人機交互無法讓用戶與計算機更直接、自然的交互方式,設計了基于卷積神經網絡的手勢識別人機交互,用戶只需將手移到攝像頭前就可與計算機進行交互。基于卷積神經網絡,手勢識別可分為目標檢測、圖像分割、圖像識別,目標檢測主要是將手勢標注出來,而手勢在整個圖像占比不大,在剔除背景有一定助力,圖像分割主要是獲得二值圖像,所以分割的好壞直接影響圖像的識別精度,基于OpenCV 算法就可以很好地解決分割問題。
手勢識別在智能時代的發展尤為重要,它是一種非接觸式的人機交互技術,運用卷積神經網絡可以解決人機交互在特征提取的問題。目前手勢識別仍在追求高精度算法來提高識別的準確率。