張行健 張建新
(浙江理工大學機械與自動控制學院 浙江 杭州 310018)
隨著機器學習和嵌入式等技術的發展,現代工業愈加智能化[1]。目前工業領域中傳統的人機交互方式復雜,在操作上不夠自然直觀。為此,研究一種能實現對機械手的直觀控制的新型人機交互方式很有必要,其中一種交互方式是讓機械手直接模擬操作者的動作,實現直接控制,這一方式的關鍵是計算機能夠對手勢進行識別和判斷。
目前手勢識別方法主要分為三個類別。(1)基于超聲波的手勢識別。Yang等[2]提出的手勢識別是利用多個超聲波裝置檢測手勢的位置,該方法的識別平均準確率可以達到93%,但是在較復雜的噪聲環境中容易被干擾。(2)基于傳感器的手勢識別。謝小雨[3]提出一種利用手勢控制臂帶(MYO)傳感器采集的肌電信息和加速度實現手勢的識別,該方法的識別平均準確率可以達到96%,但該類方法由于需要佩戴傳感器,使用不夠方便等。(3)基于機器視覺的手勢識別。賀航[4]基于OpenCV函數庫,利用基于HU不變矩提取手勢的圖像特征值,再通過模板匹配法完成手勢識別,但該方法對不同人的手勢識別準確率差異較大,泛化性較差。孫玉等[5]利用Leap Motion設備獲取手勢的三維坐標信息,并結合長短期記憶網絡模型進行動態手勢識別,但Leap Motion設備較為昂貴,不利于工業的大規模使用。朱雯文等[6]提出了一種基于加速度信號的卷積神經網絡(CNN)模型,但是由于采用的是簡單的LeNet網絡結構,手勢識別準確率只能達到90%。石雨鑫等[7]提出了一種將CNN模型和隨機森林(RF)相結合的手勢識別算法,其識別準確率達到97%,但RF會明顯加大運算量,且容易在噪聲較大的分類中出現過擬合現象。
本文將采用機器視覺和卷積神經網絡的思路,提出一種以AlexNet結構為基礎針對手勢特征識別的CNN模型。改進后的CNN模型可以有效識別手勢,通過STM32單片機實現對機械手的直觀控制。本文改進的CNN模型的手勢識別正確率在測試集中達到98%。
本文設計的手勢識別控制系統是先用攝像頭保存操作者的手勢動作,然后用PC機中預先訓練好的CNN模型去識別手勢動作,再將手勢動作的識別結果通過串口通信傳輸給STM32單片機,最后通過單片機控制機械手,實現操作者手勢直接控制機械手的功能。總體方案設計如圖1所示。

圖1 總體方案設計圖
CNN的典型結構如圖2所示。CNN發展歷史中的里程碑事件是Alex提出AlexNet結構,獲得了ILSVRC-2012大賽冠軍[8]。AlexNet結構通過6 000萬個參數和65萬個神經元,成功地把120萬幅高分辨率圖像分成1 000個不同的類別[8]。

圖2 CNN典型結構示意圖
本文提出的CNN結構以AlexNet結構為基礎,并根據實際手勢識別的情況做了以下改進(具體結構參數如表1所示):

表1 CNN具體結構參數
(1)刪除LRN層。AlexNet結構使用局部響應歸一化(LRN)用于正則化。但是Simonyan等[9]發現LRN的效果十分細微,反而會大量占據存儲量和花費許多計算時間。本文在有無LRN層的CNN模型上進行測試,結果并無區別,說明LRN層確實性價比太低,于是本文刪除LRN層,以加速訓練過程。
(2)改小卷積核大小。AlexNet結構的第一個卷積核的大小為11×11,是為了適應1 000種圖像的多分類問題,讓輸入的第一個卷積層盡可能包含大的圖像特征。而本文改進的CNN模型是用于手勢識別,手勢的特征分布相對區分度較小,所以較小的卷積核能夠更好地獲取這些特征分布。本文把第一個卷積核大小改為3×3,并且使用較小的卷積核可以很明顯地減少訓練參數。
(3)加深網絡深度。AlexNet結構的卷積核過大導致隨著網絡層數加深,網絡的參數指數型上升,會發生明顯的過擬合現象。而本文把卷積核減小了很多,所以可以適當地加深網絡的深度,因為卷積層的深度對CNN識別準確率有很重要的影響。本文分別在第一個和第二個池化層前增加了一個和前一個卷積層規模大小一樣的卷積層,即一共增加了2層卷積層。
(4)更換優化函數。AlexNet結構使用的是隨機梯度下降法(SGD),雖然SGD比標準的梯度下降算法在運算速度上有所提高和更不容易收斂到局部最優值,但是由于SGD頻繁的更新和波動會導致存在一定的超調量。本文使用自適應時刻估計算法(Adam),該算法能計算每個參數的自適應學習率[10]。Adam可以計算和存儲每個參數的對應動量變化,可以有效緩解學習率消失、收斂過慢和損失函數波動較大問題。
本文改進的CNN結構的池化層都選擇最大值池化方式,再接著3個全連接層,每個全連接層都有1 024個神經元,dropout設置為0.5。在全連接層3后面有一個Softmax函數,將預測結果分為剪刀、石頭、布、GOOD和OK這5類手勢動作。
過擬合現象是困擾卷積神經網絡模型發展的重要因素。過擬合是指模型在訓練集上學習的特征過多,以至于不具有泛化能力,雖然可以在訓練集上達到100%的正確率,但是在測試集上的正確率卻不盡如人意。本文主要通過以下4種方法來緩解甚至避免過擬合現象,以提升模型預測的準確率,具體過程與結果如表2所示。

表2 優化過程
(1)數據增強。數據增強是避免過擬合現象最簡單的方法。數據增強有很多方法,比如翻轉、平移、水平反射和改變圖像RGB通道的強度等方法。本文采用最原始的方式,更多地拍攝手勢照片,因為一般只用標準手勢動作。最開始本文的訓練集是每種手勢500幅照片,即一共只有2 500幅照片,模型在測試集上識別正確率只有50%。當本文的訓練集增加到每種手勢1 300~1 450幅,一共有6 650幅照片時,模型在測試集上識別正確率可以達到70%。
(2)Dropout技術。Dropout是一種簡單但非常有效的避免過擬合的技術[11]。Dropout是指在模型每次隨機挑選部分神經元不參與訓練,減弱神經元的協同效應,繼而讓神經元不能依賴其他神經元存在,被迫學習與其他神經元不同的隨機子集,獲得更健壯的特性。本文在最后三層的全連接層都使用了Dropout技術,并且設置隨機“脫落”神經元的概率為50%。
(3)調整池化方式。池化層的填充有VALID和SAME兩種方式。當池化層的卷積核根據步長移動到圖像數據外面時,SAME是自動在周圍填0補齊,而VALID是忽略,所以相對于SAME池化方式,VALID方式會輸入周圍更少的特征。重疊池化是指讓卷積核移動的步長小于卷積核自身的大小,讓圖像數據中間的特征更豐富。因為訓練集中的手勢動作基本都在圖像的中間,于是本文調整池化方式為VALID和重疊池化。
(4)選擇合適參數。訓練批次大小、訓練迭代步數、學習率和訓練圖像大小等參數都會影響模型在測試集上的識別準確率。通過多輪單一變量對比實驗發現,在以本文的數據集、模型結構和卷積大小數量為訓練背景下,代價函數用交叉熵函數,其形式如下:
(1)
式中:C表示代價;x表示樣本;n表示樣本的總數;y表示實際值;a表示預測值。
激活函數用非線性ReLU函數。因為ReLU函數可以通過單側抑制,使神經網絡中的神經元具有稀疏激活性,其形式如下:
(2)
訓練批次大小設置為64,訓練迭代步數設置為799步,學習率設置為0.000 1,訓練圖像大小壓縮為227×227,RGB圖像為輸入。
本文使用的機械手系統如圖3所示,其動力系統由6個MG996R舵機組成,可以實現機械手的上下、左右及前后抓取搬運等動作演示。轉向關節處均采用的是杯式軸承,可以使轉向更加靈活,同時使舵機的轉向在同一圓心。底盤采用4 mm厚度的鋁制圓盤形式,使機械手左右轉動更加靈活順暢并且穩固。機械手控制模塊是一個搭載STM32F103核心處理器的6路舵機控制模塊,該模塊是一種高效的微伺服電機控制器,可以控制6個舵機協同動作。機械手系統硬件的總體設計框圖如圖4所示。STM32單片機和PC機通過串口進行通信,實物設計圖如圖5所示。

圖3 機械手實物圖

圖4 機械手系統總體設計圖

圖5 機械手系統實物圖
機械手系統選用USART作為STM32單片機的串口通信寄存器,通過USB轉TTL設備完成上位機和下位機的通信,該設備的一端連接STM32單片機的四個IO口,另一端連接電腦的USB口。
機械手系統的軟件控制總流程圖如圖6所示,STM32單片機通過串口中斷接受PC機的手勢識別結果,再通過定時器中斷控制機械手。
STM32單片機通過定時器產生周期為20 ms,即50 Hz,高電平的脈沖寬度的最小值為1~2 ms的PWM,具體流程圖如圖7所示。

圖7 定時器生成PWM波
由于系統一共識別5種手勢,所以STM32單片機存儲了5個PWM波組,每個PWM波組都有6個脈沖寬度不同的PWM波,使機械手系統可以做5個不同的動作,每個動作都有6個自由度可以設置。
本文利用OpenCV建立數據集,并分為訓練集和測試集。圖片數據集中有5種基本手勢:剪刀、石頭、布、GOOD手勢和OK手勢;采集自9位大學生志愿者,其中5位男性、4位女性。訓練集中OK手勢圖片有1 450幅,其他四種手勢圖片有1 300幅;測試集中每種手勢的圖片數量都為450幅。采集的數據集如圖8和圖9所示。

圖8 剪刀手勢數據圖

圖9 五種手勢數據圖
拍攝手勢的照片是按照手勢動作名加上當前幀數命名,這樣后期不需要再手動進行標注設置。同時由于只需要識別手勢動作,并不需要攝像頭拍到的完整畫面,于是在保存圖像的時候自動設置感興趣區域的大小為300×300,切割后可以有效地減少拍攝背景等干擾。
本文利用TensorFlow搭建的CNN模型在訓練集訓練的效果如圖10所示,實際訓練步數是每個step值的20倍。

圖10 CNN在訓練集的正確率和損失率
改進后的CNN模型在測試集中的平均準確率能達到98%,且用交叉熵度量的損失率僅為0.14。
手勢實時測試是調用保存在PC機中預先訓練好的CNN模型進行在線手勢判斷。本文在線測試了5種手勢,在背景為灰色窗簾有人臉干擾的情形下測試手勢識別效果如圖11所示。

圖11 五種手勢實時識別
在手勢實時測試過程中每種手勢都測試了10次,每次CNN模型都能正確識別;一位女性測試者在相同的環境進行手勢識別測試,她的5種手勢也都可以被準確識別。實驗證明該CNN模型在手勢識別中具有較高的準確性和較強的泛化性。
本文用LeNet-5結構、AlexNet結構、VGG-16結構和改進的CNN模型在測試集上預測,得出的實驗結果如表3所示。結果表明本文提出的改進后的CNN模型在手勢識別領域比AlexNet結構具有更高的識別準確率,能滿足手勢識別的需求。

表3 實驗結果對比
本文提出改進的CNN模型的正確率在測試集中可以達到98%,在背景不是很復雜的情形下(如只有人臉干擾)可以達到100%的識別準確率。實驗證明該CNN模型具有較強的泛化能力,可以很好地完成手勢動作識別任務,從而直觀地控制機械手做出相應動作。未來可以考慮如下兩個方面的改進:
(1)數據增強。本文的數據集還遠不夠,要拍攝更多不同背景下的手勢動作和更多志愿者的手勢動作,并且使用多種數據增強的手段,如:旋轉、縮放、膨脹和平移等。
(2)多結果融合。同時用多個不同的CNN模型算出結果概率,然后將這些結果概率取平均得到最大預測結果概率。