李成武 高宇玥



摘 要:手語是聾啞人群最常使用的交流方式,但因為手語的普及程度較低,聾啞人與普通人之間交流有很大障礙。本文利用Keras 構建卷積神經網絡框架實現對手語圖像的識別,通過循環神經網絡將語音轉為對應的手語視頻輸出。手語的自動化識別能夠使手語使用者更加便利地與外界進行溝通,不懂手語的人也可以和聾啞人正常、順利地交流。
關鍵詞:手語 Keras 卷積神經網絡 循環神經網絡
一、引言
最新資料統計說明,我國聽力語言殘疾居視力殘疾、肢殘、智殘等五大殘疾之首,為2057萬人,占中國總人口數的1.67%,其中七歲以下兒童約為80萬人。手語是聽障人之間溝通的主要方式,由手型、動作、表情及姿勢等構成的一套手語交流體系。但健聽人多數不懂手語,手語溝通障礙造成了社會勞動力的較大浪費。目前,中國殘聯出臺了手語統一標準,這使得聾啞人與健全人之間順利交流變得有章可循,手語翻譯技術具有廣泛的應用價值。開發手語識別系統有助于聾啞人融入社會,也有助于加速國家通用手語的推廣進程。
過去手語識別的研究主要依賴于各種可穿戴傳感器,如顏色手套、數據手套等。基于數據手套的手語識別準確率較高,但設備昂貴、攜帶不便,難以普及和推廣。深度學習的快速發展加速了基于視覺的手語識別應用。本文通過設計手語識別框架,基于卷積神經網絡模型實現手語識別。
二、系統總體設計方案
基于深度學習的手語學習系統分為四個部分:手勢圖像采集、圖像信息的提取與識別、語音識別、手語視頻輸出。“手勢圖像采集”模塊主要完成對手語動作的采集,并將采集到的圖像信息發送到NVIDIA JETSON TX2平臺。再由“圖像信息的提取與識別”模塊利用神經網絡的卷積層提取手部特征并通過全連接層進行識別。這樣就使得正常人能理解聾啞人手語的含義。“語音識別”模塊將正常人輸入的語音轉化為文本,然后通過“手語視頻輸出”模塊將語音識別出來的文本轉化為對應的手語視頻輸出(圖1)。這樣聾啞人就能理解正常人想要表達的意思。那么,不懂手語的正常人和聾啞人之間的交流變得輕松而簡單。
三、數據集構建和預處理
手語信息以視頻的形式錄入,錄入相同手勢不同角度下的視頻。錄入完成后,以幀為單位將錄入的視頻轉換成圖片保存在同一目錄的不同文件夾中,每個文件包括相同詞義的數據,并確定其含義。目前,數據集包含50個不同手勢,每個手勢100張圖片,共5000張圖片。其中訓練集共4000張圖片,每個手勢80張;測試集共1000張圖片,每個手勢20張。
數據集構建完成后需要對訓練集進行預處理,利用OPENCV捕捉視頻幀,根據背景差分法分割出前景目標,并通過膚色檢測模型輸出只有手部區域的二值圖像。為了增加模型的魯棒性,本文使用Keras框架中的ImageDataGenerator對視頻幀進行隨機裁剪、水平翻轉、隨機旋轉角度、尺寸縮放等操作。
四、神經網絡訓練
因為手語訓練數據有限,所以本文采用遷移學習的方法完成手語手勢的識別。相比于AlexNet ,VGG-16結構簡單,卷積核全部替換為3×3(極少用了1×1),池化核全部使用2×2。參數量大,大部分參數集中在全連接層中。網絡名稱中有16表示它有16層conv/fc層。本文采用VGG-16作為預訓練模型。
本系統遷移學習的具體步驟為:
1.構建VGG-16模型;
2.加載VGG-16模型參數;
3.將網絡最后一層卷積層前面的參數固定,不參與訓練,即設置參數為trainable=False;
4.在最后一層卷積層的后面加上一個隱藏層為1024的全連接層;
5.修改softmax層的輸出,因為本文使用的數據集共有50種手勢,所以將softmax的輸出設為50。softmax層計算公式如下:
其中,Xj表示第j個輸出,K代表總分類數,softmax層的輸出代表樣本X屬于第j個分類的概率。
將4000張圖片順序打亂分為50批(batch),即每個batch有80張圖片,然后訓練50輪(epoch),并將訓練好的模型參數保存在本地。雖然訓練時間較長,但是這樣可以保證每個手勢識別正確率的增加和應對不同狀況下兩手勢發生的意外重合。
五、語音識別
近幾年,不少專家和學者都在語音識別任務中嘗試了注意力模型。但是截至目前,注意力模型在在線語音服務中的大規模使用,一直鮮有成功案例。究其原因,是因為語音識別的注意力模型存在兩個問題:一是流式解碼的問題。傳統的注意力模型大都是基于整句的建模,比較有代表性的是谷歌的LAS模型。如果在線語音識別采用整句注意力建模,這就客觀上要求語音都上傳到服務器后,才能開始聲學打分計算和解碼,這樣勢必引入較長的用戶等待時間,影響用戶體驗,同時也沒辦法完成實時語音交互的任務。二是長句建模的精度下降問題。傳統注意力模型的核心思想是基于整句的全局信息,通過機器學習的方法,選擇出和當前建模單元最匹配的特征。句子越長,進行特征選擇的難度越大。出錯的概率越高,錯誤前后傳導的概率也越高。
本文語音識別模塊是采用百度語音識別API來實現的。百度語音識別所采用的模型解決了傳統注意力模型不能進行流建模和解碼的問題,并且依靠截斷,實現了對長句子的高精準的注意力建模,同時也解決了CTC模型的插入或刪除錯誤對注意力模型的影響。接下來對百度語音識別采用的模型即流式多級的截斷注意力模型(SMLTA)進行簡略介紹。
SMLTA模型使用CTC(一種語音識別算法)的尖峰信息對連續語音流進行截斷,然后在每一個截斷的語音小段上進行當前建模單元的注意力建模。這樣把原來的全局的整句Attention建模,變成了局部語音小段的Attention的建模。同時,為了克服CTC模型不可避免的插入刪除錯誤對系統造成的影響,該算法引入一種特殊的多級Attention機制,實現特征層層遞進的更精準的特征選擇。
最終,這種創新的建模方法識別率不但超越了傳統的全局Attention建模,同時還能夠保持計算量、解碼速度等在線資源耗費和傳統CTC模型持平。
六、手語手勢識別與輸出
系統操作界面有四個功能選項,分別為獲取手勢、識別手勢、學習手勢、操作提示。
系統啟動后打開攝像頭獲取手勢視頻,錄制的手勢視頻保存在手勢視頻文件夾中,并將視頻逐幀轉為成一張一張的圖片保存在手勢圖片文件夾下,方便后續預處理操作。
將手勢圖片文件夾下的手勢圖片送入已訓練好的CNN模型進行手勢識別,判斷手勢動作代表的詞義,將其與數據庫進行比對,匹配出相同詞義的手勢圖片后輸出,并將詞義打印在顯示結果處。
正常人利用麥克輸入一個詞或一段話的音頻信號,通過語音識別模塊翻譯成文本。翻譯好的文本經過分詞后會和數據庫中保存的各手勢詞義進行比對,匹配成功的手勢將從數據庫中輸出對應的視頻文件給用戶,以供學習。
七、實驗與結論
本文使用的實驗環境為: NVIDIA JETSON TX2 開發板,Ubuntu 16.04操作系統,TensorFlow1.13。
隨機選取5種手勢對系統進行測試試驗。實驗中,每種手勢由5個實驗者各做10次,共得到250個手勢視頻片段,系統對這250個視頻片段進行手勢識別,識別結果如表1所示。
表中各種手勢的平均識別率為89. 6%,試驗結果表明,本文的手識別方法具有較高的精確度。但系統可以識別的手勢種類較少,因此,下一步的工作將增加手勢的種類,并為了實際需求將加入動態手語識別。
參考文獻
[1]王麗光,張根源,劉子龍.基于單目視覺的實時手語識別系統設計與實現[J].電子科技,2017,30(3):131.
[2]李亞麗,王敏,李靜.遷移學習的研究現狀[J].時代教育,2014,09(169):222.
[3]BG大龍.【專題知識】詳解經典CNN結構—VGGNet原理[EB/OL].https://zhuanlan.zhihu.com/p/79258431,2019-08-25.
[4]洞察網.百度提出截斷注意力模型SMLTA,第一個注意力模型的語音大規模上線[EB/OL].https://tech.china.com/article/20190116/kejiyuan1205235862.html?qq-pf-to=pcqq.c2c,2019-01-16.
[5]曉坤、思源.超越整句的流式多級Attention:解密百度輸入法背后的語音識別模型[EB/OL].https://zhuanlan.zhihu.com/p/55330861,2019-01-20.