周 舟,韓 芳,王直杰
東華大學 信息科學與技術學院,上海201620
在聾校語言教學中,雙語教學模式能有效提高聾童的語言學習效率,對于特殊教師們來說則需花費更多的耐心、時間和精力。面臨著我國特殊教育學校的師資普遍薄弱的現狀,手語識別技術便可幫助特教完成教學任務——聾童將手語錄成視頻輸入計算機,進而能夠學習輸出的漢字和唇語,無需老師親自教學就能完成漢語書面語的學習。另外,計算機只對標準的手語(以《中國手語》為標準)進行識別,借此還可糾正聾童手語方言化的問題。
目前手語識別方法大體分為兩種:一是基于傳統圖像特征和機器學習的方法[1-2]:如首先利用傳統的圖像分割算法從手語視頻的視頻幀中分割出手部,再通過機器學習的方法(如SVM、Adaboost 算法)根據分割區域的圖像特征(如HOG、SIFT特征)進行特征分類[3]。但由于這些特征的表征能力有限,難以從復雜內容中提取到具有代表性的語義信息,而且分步完成的手勢識別實時性差。二是基于深度學習的方法[4]:如利用目標檢測神經網絡學習視頻幀的特征,對手部進行定位并同時進行手勢分類。相比傳統圖像處理和機器學習算法,基于深度學習的目標檢測網絡往往能得到更高的準確率和識別速度[5],其代表有Faster R-CNN[6],以及后來推出的Onestage目標檢測方法,如YOLO[7]、SSD[8],能進行端到端檢測,具有更好的實時性,因此成為動態目標檢測的主流方法。
本文提出的手語識別算法利用深度學習中的目標檢測網絡SSD,相比基于圖像特征和機器學習的大部分手語識別方法更簡單,能同時完成手語視頻中每個視頻幀中的手部檢測和手勢分類。目前,大部分研究僅利用SSD 進行手部定位[9],或沒有針對手勢識別任務改進SSD[10],因而在檢測小目標時仍存在漏檢、誤檢等情況。本文對SSD網絡進行網絡結構、損失函數和訓練方法上的改進,實驗表明,本文算法在手語識別的任務上取得了更好的效果。
SSD 網絡是目前主流的目標檢測網絡之一。其網絡結構大致如圖1所示,輸入是尺寸為300×300的圖像,其基礎網絡是VGG16 網絡,分別在基礎網絡中的6 個特征層(Conv4_3、Fc7、Conv6_2、Conv7_2、Conv8_2、Conv9_2)上預測目標,每個特征層都負責在該層的每個預選框下檢測特定尺寸的目標。為了檢測大型物體并增加感受野,在原始基礎網絡上增加了額外的卷積特征層。SSD將整幅圖像分割成網格單元,并在每個網格單元中,生成一組具有多個尺度和縱橫比的默認框,每個邊界框都對應4 個反映其尺寸的值進行回歸、C(類別數)+1個分類概率進行分類,再經過非極大值抑制刪除一部分重疊或者不正確的邊界框,生成最終的邊界框集合。整個網絡通過端對端的訓練方案在所有預測圖上用定位損失和分類損失的加權進行優化,最終的預測是通過合并來自不同特征層的所有檢測結果來實現的。
SSD損失函數分為兩部分:用于默認框位置回歸的損失函數Lloc和置信度損失函數Lconf。位置回歸損失Lloc為預選框l和真實邊界框g的SmoothL1損失函數回歸的參數是默認框d的中心偏移量,以及寬w、高h,見公式(1):



其中,N是與真實框相比滿足交并比閾值的默認框數量,參數α用于調整Lloc和Lconf之間的權重比例,默認α=1。
借助特征金字塔的思想,預選框的生成是SSD的亮點之一。6 個特征層產生的特征圖的大小分別為38×38、19×19、10×10、5×5、3×3、1×1。每個n×n大小的特征圖中有n×n個中心點,圍繞中心點產生一大一小的2個正方形框和2個或4個長方形框,其中,如果該層設置的長方形框的長寬比有一個(默認為2),則通過長寬互換產生2個長方形框;如果縱橫比有兩個:2和3,則產生4個長方形框。每個特征層的中心點對應的默認框數量k分別為4、6、6、6、4、4。在每層空間位置上,對這些默認框進行位置回歸和置信度回歸。當特征層尺寸越小,在該特征層上預選框中檢測到的目標越大。
這些框的尺寸根據一定規律進行計算,得到每層的特征圖上產生的默認框尺寸如表1所示,由于一只手的大小不可能超過整張圖片的一半,因此在Conv8_2、Conv9_2 上產生的默認框對于手部檢測的效果貢獻不大,本文中將Conv8_2 和Conv9_2 去掉,在保證準確率不變的情況下最大限度減少網絡的參數,提高檢測速度。另外,淺特征層對手這種小目標的檢測能力更強,本文將Conv4_3中的k改為6,最終每層默認框尺寸如表1。

圖1 SSD網絡結構圖

表1 每層的特征圖上對應的默認框大小
SE-Net[11]通過對各通道之間依賴關系建模,以此對各通道特征進行重校準,選擇性增強特征表達能力更強的通道,其結構如圖2。其中U為任意卷積層的輸出結構體,在該卷積層后嵌入SE-Net模塊,計算各通道的權重,輸出相同尺寸和維度的結構體。

圖2 SE-Net網絡結構
SE-Net 模塊主要分成三步:用于全局信息嵌入的Squeeze部分、負責自適應重新校準的Excitation部分和將權重融合進原特征層的Scale層。
(1)首先根據空間維度進行特征壓縮,將每個二維的特征通道變成一個實數,這個實數則攜帶著全局的信息,并且輸出和輸入的維度相匹配。它表征著在特征通道上相應的全局分布,而且使得靠近輸入的層也可以獲得全局信息,此部分的操作由全局平均池化操作完成,公式如下:

其中,uc表示U中第c個二維矩陣,下標c表示其中的通道。
(2)再采用門機制,利用參數W為每個特征通道生成對應的權重,其中參數被學習用來顯式建立通道之間的相關性。為了限制模型復雜度和輔助泛化,此部分通過兩個全連接層完成:在第一個全連接層按縮放因子r(默認為16)減少通道數為激活函數為Relu;在第二個全連接層恢復通道數為C,經過Sigmoid 激活后得到,其結構為C×1×1,具體公式如下:

其中W1、W2分別為兩個卷積層的參數,且和

圖3 改進的SSD網絡結構
(3)此時s融合著各通道的特征圖信息,其中的每個數值都代表該通道的二維特征矩陣的權重,將其與原特征層U按通道相乘,通過加權的方式,完成在通道維度上的對原始特征的重標定。公式如下:

為了更好地加強有效的特征而抑制貢獻小的特征,將SE-Net嵌入剩下的4個特征層后,改進后網絡的結構如圖3所示。為了加強分類能力,嵌入的位置是置信度計算分支上,即在圖3 中的全局平均池化(Global Pooling)層、兩個FC池化層和Scale層。
SSD檢測框中包含有檢測目標的框為正樣本,不包含則為負樣本。一幀圖像中檢測目標只有1~2個,而且占整張圖片的2%~5%,那么此時正樣本的數量遠遠小于負樣本,導致分類性能差。為了解決這一問題,本文將Lconf的交叉熵損失函數CE(pt)替換為焦點損失[12](Focal Loss)函數FL(pt),公式如下:

其中,pt為該類別分類正確的概率,且FL(pt)相比CE(pt)添加了兩部分的權重αt和(1-pt)γ,αt主要用來處理正負樣本不均衡問題,對于正樣本,則設置較小的權重αt;對于負樣本則使用稱為調制參數,其中γ≥0,其作用則是將模型的注意力集中在難訓練樣本(即難例),所謂難例就是pt更接近0的樣本,反之pt接近1,則說明該樣本屬于易分類樣本。如圖4 所示,橫軸為pt,縱軸為損失函數值。當γ=0時,即為原始的交叉熵損失。通過調整γ,控制難易分類對總分類損失函數的貢獻。

圖4 在不同γ 下,損失函數值隨pt 變化曲線

圖5 本文數據集上mixup數據增強的效果圖(1、2、3分別為不同的手勢類別)
另外為了提升模型對檢測目標的分類能力,將式(1)中置信度損失與位置回歸損失的比例增大,即令參數α=0.8,使模型在學習時側重于分類損失。
為了使模型在復雜的環境下得到很好的檢測效果,往往可以采取數據增強的方法,通過從訓練樣本鄰域中提取附加的虛擬樣本以擴充對訓練分布的支持。本文使用的數據增強方法為mixup[13],原本用于減輕分類網絡中的對抗性干擾[14],其關鍵思想是以線性差值的方法構建新的虛擬訓練樣本和標簽。公式如下:

另外,為了加速模型訓練收斂的速度,使模型輸出特征的分布更加穩定,訓練時,本文在SSD 中每個卷積層后都添加Batch Normalization(BN)[15]層,以批數量(batch_size)為單位。并在每個特征層后特征歸一化(Normalize)操作,即對每個像素點在通道上做L2 歸一化,先將數據統一映射到[ ]0,1 區間上,再把像素點上的值放大到一定倍數,如20倍,加快基于梯度下降法或隨機梯度下降法模型的收斂速度,提升模型精度。例如在每一個特征層及其后的網絡結構如圖6所示。
在手語視頻中,最少在3 幀之內不會有超過2 幀包含有關鍵手勢的關鍵幀,因此在每個手語視頻中每隔3幀取出一幀進行SSD目標檢測,得到每幀圖片中所有檢測目標的類別,經過相鄰重復關鍵幀的去重和無意義手勢的去除后,在已經建立好的中國手語標準關鍵手勢模板數據庫中搜尋結果匹配的漢語詞匯,完成整個視頻的手語-漢語翻譯。在模板庫中手語“前途”的關鍵手勢類別名稱如表2所示。

圖6 每個特征圖及其后的網絡流程圖

表2 手語“前途”的模板
SSD的檢測類別(即手勢類別)除關鍵手勢外,還包含2 類非關鍵語義手勢:過渡不清晰手勢“background”(記作G)和無動作靜止手勢“static”(記作S),模板匹配具體流程見圖7,L1為“前途”第一個關鍵幀的左手關鍵手勢“1-qiantu-L1”的縮寫,以此類推L2和R2。

圖7 目標檢測結果與標準手語庫進行模板匹配
實驗數據來源于中科院SLR Dataset數據集中不同手語詞匯的彩色視頻,每個手語詞匯由50 個不同的手語者錄制,每個手語時長都不相同,平均時長為3~5 s,從每個視頻中隨機抽取視頻幀作為訓練集,采集共計5 000 張720×720 的RGB 圖像,其中25%作為測試集,75%作為訓練集,使用標記工具LabelImg標注每只手的手勢類別及位置。
實驗配置為CPU:Inteli7 8700K,RAM:8 GB,GPU:Nvidia GTX 1080,GPU 加速庫:CUDA 8.0.61,CUDNN6.0.21,實驗系統為ubuntu16.04,算法使用Caffe深度學習框架。網絡訓練過程中,設置batch_size 為8,初始學習率為0.005,多分步策略學習,前置衰減系數為0.000 5,同時通過觀察損失函數變化、訓練與測試準確率差異等指標調整學習率和下調學習率時的步數。
為了驗證本實驗各部分的效果,在本文算法的基礎上分別單獨去掉各模塊進行實驗,在這些實驗中保持訓練集和實驗配置都相同,輸入圖像尺寸均為300×300,結果如表3。

表3 消去各模塊后對網絡的影響
由結果可以看出,各個部分都能單獨對mAP有1%~2%的提升,SE-Net 計算不同通道的重要性權重并重新分配給各通道,增大了對手勢識別發揮作用的特征層的權重。置信度損失函數替換為Focal Loss 使訓練時模型參數的學習更傾向于正確的分類預測框。mixup 數據增強方法增加了訓練時的擾動,使模型在更加復雜的環境下也能保持很好的檢測精度,為了更直觀地展示mixup 的效果,利用圖5 中混合后的圖像做不同模型的對比實驗,結果如圖8,沒有使用混合方法訓練的網絡很難檢測到所有的目標,相比之下,由于生成的視覺欺騙訓練的模型更具魯棒性。添加兩種不同的歸一化層后,引入了新的學習參數,模型參數會有所提高,但是由于其對神經網絡中間層的數據進行重新歸一化,使每一層的更新更為同步,減少了在某一層過擬合的可能性,對mAP的提升起到不小的作用。
本文任務實為分類任務,相比預測框位置的準確率,本算法更關注預測框類別,因此定義了兩個檢測指標來觀察預測框分類的準確率:

圖8 SSD-3和本文改進的SSD的檢測結果對比

由于一幀圖像中最多只可能有兩個手勢,如果檢測出3 個及以上分數大于0.5 的目標,則選出的分數最大的兩個預測框作為檢測結果,并與原始SSD、文獻[16]中的MobileNet-SSD 和文獻[17]中的SE-MSSD 在以上指標上進行記錄,其中MobileNet-SSD為將基礎網絡改成MobileNet[18],結果如表4所示。

表4 手勢識別實驗結果對比
通過表4 可以觀察到本文改進的SSD 模型相比另外幾個模型在mAP上提升了4~5個百分點,其中,FA越低,說明預測出的錯誤分類框更少,而在預測錯誤的時候則會使手語模板匹配失敗,LA 越高,則說明沒檢測的目標更少,那么漏檢的幀更少,手語關鍵幀的語義缺失的概率越少。MobileNet-SSD將6個特征圖的尺寸只有本文算法的一半,對小目標的檢測效果沒有本文好。SE-MSSD的基礎網絡是MobileNet,SE-Net模塊添加在MobileNet 的每個深度可分離卷積層后,深度可分離卷積雖可大量降低網絡參數量,提高算法的運算速度,但也因此帶來了精度上的損失,而在本文中SE-Net 僅加在產生默認框的特征層的置信度計算分支上,引入的額外計算量相比SE-MSSD 少很多,在盡可能減少參數的情況下增強了網絡層通道間的相關性,提高分類準確率。另外,本文中增加了默認框的數量,并且通過歸一化操作操作和mixup提升了模型泛化能力,對手部小目標的檢測能力更強,預測框數量更接近于真實數量。
為了驗證本算法在手語識別上的有效性,與基于二級匹配策略的實時動態手語識別[19]做對比實驗,對于本數據集的手語視頻中的手語詞匯進行識別,平均準確率如表5。

表5 本文算法與文獻[19]的視頻手語識別結果對比
通過表5比較可以看出,本文算法識別手語的精度相比文獻[19]有一定的提升,而且在識別時間上也由于手部定位和分類的一步完成快于文獻[19],文獻[19]借助體感攝像頭Kinect獲取手心軌跡,首先根據軌跡的點密度分布設計了一種關鍵幀檢測算法以提取手勢的關鍵手型,再結合軌跡的曲線特征和提取關鍵手勢特征進行二級匹配,步驟復雜,用于提取關鍵幀的時間耗費久,而且利用傳統圖像特征分割手部并進行特征提取,易受光照等不利因素的影響,因此準確率和識別速度受到影響。而本文算法只需借助一個單目攝像頭,無需借助輔助技術,更不需要文獻[19]中用到的顏色手套,脫離了其他技術和外物的限制,利用目標檢測網絡SSD一步完成手部定位和分類,并利用SE-Net 增強了圖像深度信息的提取能力,為了更好地完成分類任務,利用Focal Loss 損失函數解決正負樣本不均衡的問題并提升置信度損失的權重,使模型目標的分類更加準確,還利用多種訓練技巧,例如mixup、歸一化來提升模型的泛化能力。
本文提出了一種基于改進SSD 的手語識別算法。利用SSD目標檢測神經網絡實現視頻手語的識別,復雜度低,避免傳統圖像處理算法分割手部效果不佳和機器學習分類準確率低的問題。本文對原始SSD 主要進行以下四方面的改進:(1)針對手部小目標,去掉SSD最后兩個用于檢測大目標的特征層,并在第一個特征層增加產生的默認框數量;(2)添加SE-Net模塊學習每個特征通道的重要性,并加權到原特征上;(3)針對每張視頻幀中正負樣本極度不均衡的情況,選用Focal Loss 作為SSD損失函數中的置信度分類部分,并增大分類損失的權重,提升了網絡針對手勢的分類能力;(4)加上mixup數據增強和卷積層、特征層后的歸一化操作等訓練技巧,整體上提升了模型的泛化能力和魯棒性。實驗證明,本文方法不僅在識別率和速度上得到提升,而且僅使用單目攝像頭,不借助數據手套、顏色手套或體感設備Kinect,更具價格優勢和實用性。