鄭涵,田猛,趙延峰,王先培
(武漢大學電子信息學院,武漢 430072)
手作為人體上重要部分之一,是人類與外界傳遞信息的重要方式。手部位姿估計作為人機交互技術的熱點項目之一,廣泛應用于虛擬現實(virtual reality,VR)和增強現實(augmented reality,AR)等應用中。手部檢測和手部位姿估計助力于體感游戲的發展和實現,精確的手部位姿估計算法可以提高用戶游戲體驗,并為后續更為高深的技術提供基礎支持。手部位姿估計在3D建模領域也有廣泛的應用,現在已經有一些工作能實時建模出手部模型。但是由于存在手關節自由度高,檢測目標小,以及手部的自遮擋等問題,已有手部位姿估計算法存在精度低魯棒性較差等問題。
當前常用的手勢姿態估計方法主要分為3類[1-2]。第一類是生成方法,該方法計算量大,魯棒性差。Boukhayma等[3]采用編碼器來生成手模型的形狀,姿勢和視角參數,以獲得手的3D網格參數及其底層 3D 骨架。第二類是判別方法,該方法需要大量的數據支持,隨著深度學習的發展,該方法逐漸被推廣使用[4]。劉家祥[5]采用深度學習從3個方面研究三維手勢估計方法。Kulon等[6]使用循環結構的網格卷積解碼器來恢復 3D 手網格和手部姿態。第三類是混合式方法,該方法結合了兩種方法的優點[7-8],既不需要建立復雜的手部模型,也不依賴于模型初始化,手部模型的約束可以減少不合理的預測動作,減小計算量,提高檢測的魯棒性。Liu 等[9]利用對武術三維手勢特征進行提取和分類;然后,利用手部形態拓撲結構模擬手部關節的依賴性,得到手部關節的三維坐標。最后,利用姿態回歸模塊實現武術手勢動作的姿態估計。
手部檢測是完成手部位姿估計算法重要的一步。手部檢測算法可以分為傳統的檢測識別方法和基于深度學習方法。傳統的手部檢測方法主要依賴于顏色特征[10-11],或其他先驗知識提取的目標特征,受環境影響大,魯棒性差。唐文權等[12]基于膚色進行人手檢測,先對基于光補償的膚色模型估算和糾正,再進行非線性轉換得到橢圓膚色模型,再進行一系列操作連接人手候選區域。基于深度學習的方法具有識別速度快,識別精度高的優點。其中具有代表性的是基于候選區域的卷積神經網絡,Faster R-CNN對目標檢測的速度做了很大的提升,很多研究者將該算法應用于手部檢測。馬鵬程[13]在Faster R-CNN的基礎上使用特征金字塔(feature pyramid networks,FRN)代替區域生成網絡(region proposal network,RPN),并且在ROI Pooling層加入注意力機制,提高了檢測精度和速度。張勛等[14]采用Faster R-CNN網絡對建議框做目標檢測和分類實現手勢端到端的識別。劉壯等[15]在原有的Faster R-CNN檢測框架的基礎上,增加了Depth通道,并在特征層面上將其余RGB通道信息進行融合,實現手部檢測。但是Faster R-CNN網絡在小目標檢測等方面還存在缺陷。
以基于改進的Faster R-CNN的手部位姿估計算法為研究背景,通過對目前存在的難點分析,將手部位姿估計分為手部檢測和手部關鍵點檢測。首先提出一種改進的 Faster R-CNN 網絡用于手部檢測。將深度相機采集的原始深度圖進行預處理,與 RGB 圖圖像通道保持統一尺度[16],從而初步過濾掉背景信息,然后提出深度特征提取網絡,來替換 Faster R-CNN 的特征提取模塊,使算法能夠適應多通道多尺度的圖像數據,最后在網絡的頭網絡中增加 handside分支來區分左手和右手,進而獲得精度更高的手部檢測結果,解決手部在圖像中檢測目標較小的問題。
在改進 Faster R-CNN 網絡基礎上增加了頭網絡分支用以訓練輸出 MANO (hand model with articulated and non-rigid deformations)手部模型的姿態參數和形狀參數,并根據手部特征重新設計了兩個損失函數用來約束 MANO 參數的訓練。MANO 手部模型是一種參數化的手部網格模型,通過網絡回歸得到的姿態參數和形狀參數能控制MANO 生成手部模型,進而得到手部的關鍵點三維坐標,從而有效解決手部自遮擋等問題。
如圖1所示,改進后的手部檢測算法包括特征提取模塊、RPN、特征圖的分類預測、包圍框預測,與基于Faster R-CNN的目標檢測算法類似。現改進特征提取網絡,提出深度特征融合網絡來將RGB圖像的語義特征與深度圖像的位置特征進行融合,解決手部檢測中存在的遮擋問題和尺度問題。并將Faster R-CNN算法中的ROI最大值池化更改為ROI Align,提高了算法的運行速度及小目標檢測的準確性。

圖1 手部檢測算法基本網絡框圖Fig.1 Basic network block diagram of hand detection algorithm
深度相機直接獲得的深度圖不可避免地包含噪聲甚至異常值,如果直接用來訓練網絡,可能會導致預測結果偏差。因此,在訓練之前需要對深度圖進行去噪和歸一化處理。本文中使用雙邊濾波進行深度圖降噪,使用最大最小標準化對深度圖進行歸一化處理,與 RGB 圖圖像通道保持統一尺度,從而初步過濾掉背景信息。
Faster R-CNN在進行特征提取時,選擇了 VGG16 網絡的最后一層輸出來做提取出的特征圖。在卷積的過程中,小目標的語義特征大概率作為背景而被拋棄。導致了Faster R-CNN難以提取小目標。
FPN可以信息融合將低層特征圖的位置信息與高層特征圖的語義信息進行融合。基于此思想,將含有豐富的位姿信息的深度圖特征和含有豐富語義信息的 RGB圖特征進行數據層融合,提出了一種新的特征融合網絡來聯合提取 RGB-D 圖像特征。深度特征融合網絡如圖2所示。

圖2 深度特征融合網絡Fig.2 Deep feature fusion network
將傳統Faster R-CNN網絡中的對ROI的最大值池化,更改為 ROI Align,即通過雙線性插值的方法來使特征圖像素級對齊。文獻[17]證明,這種做法不僅可以提高整體運算速度,還可以提高對小目標的檢測準確性。
原始的 Faster R-CNN 的損失函數包括兩個部分,即分類損失函數Lcls和回歸損失函數Lreg。


(1)

綜上,本文提出的改進Faster R-CNN算法的總損失函數為
Ltotal=Lcls+Lreg+Lhs
(2)
圖3所示為一個由MANO[18]模型生成的手部網格。根據MANO的手部模型,可以很容易地根據稀疏權重關系獲得除了5個手指指尖以外的16個控制手部整體運動的骨骼關節點。MANO也根據左右手鏡像的先驗知識,從右手的模型中生成了左手模型,保證了左右手模型的一致性。MANO手部模型一共有778個參數,為了簡化計算難度,降低計算復雜度,引入形狀參數β和姿勢參數θ來控制手部模型的位姿。由此可以得到MANO手部模型的計算公式為

圖3 MANO手部模型Fig.3 MANO the model of hand
(3)
M(β,θ)=f[T(β,θ),θ,W,J(θ)]
(4)
J(θ)=F[T+Bs(β)]
(5)

由式(3)~式(5)可以看出,只需要給定形狀參數β和姿勢參數θ,就可以從標準手部模型中生成對應形狀與姿態的手部模型。
由此設計出一個基本的網絡框架,如圖4所示。

圖4 基于MANO的手部位姿估計基準網絡框架Fig.4 A benchmark network framework for hand pose estimation based on MANO
將手部檢測后分割出的手部圖片直接輸入到手部位姿估計網絡框架中得出手部關鍵點信息。但是使用兩個不同的深度學習網絡,不僅導致訓練時復雜,預測的結果難以控制,也會進行過多不必要的計算(例如進行了兩次特征提取),使運行速度過慢。
針對上述問題,借鑒多任務網絡思想,將手部位姿估計基本網絡框架加入到本文改進的 Faster R-CNN中,改進后的網框架如圖5所示。

圖5 多任務手部位姿估計網絡基本框圖Fig.5 Basic block diagram of multi-task hand pose estimation network
MANO手部模型為了訓練自己定義了兩個損失函數,分別為形狀損失Lβ和姿態損失Lθ[17]。
然而本文選用的數據庫,大部分真值標注都不包含姿態參數θ和形狀參數β,因此 MANO 模型并不適用目前大部分的主流的手部位姿估計數據庫。但是如果不對形狀參數進行約束,MANO 網絡模型可能會出現過粗或者過細的手部模型,從而影響從手部模型中提取的骨骼關節點結果。如果不對姿態參數進行約束,MANO 網絡模型可能會出現異常姿態的手部模型。
為了約束形狀參數,假定所有數據庫中手部的形狀都是標準大小,即人為設定數據庫中所有的形狀參數的真值β*=0。將Lβ重新定義為
(6)
根據先驗知識,手部的姿態是由包括手指指尖在內的21個骨骼關鍵點來共同控制,因此通過獲得MANO手部模型中21個骨骼關鍵點的空間位置信息就可以達到約束 MANO手部模型的姿態參數θ。選擇了MANO模型上包括指尖在內的21個骨骼關節點三維位置與對應真值差值來計算姿態損失函數,計算公式為
(7)

綜上,本文提出的手部位姿估計算法的總損失函數為
Ltotal=λclsLcls+λregLreg+λhsLhs+λβL′β+λcoiLcoi
(8)
式(8)中:λcls、λreg、λhs、λβ、λcoi分別為對應損失函數的平衡權重。本文訓練時,取值λcls=λreg=λhs=λβ=λcoi=1。
所有的訓練和驗證都在NVIDIA Quadro RTX 6000顯卡上運行,操作系統為Ubuntu18.04,CUDA 版本為10.2以及cudnn版本為7.5,初始學習率為 0.02,每回合下降4%。
本文主要研究集中在 NYU[19]、ICVL[20]、MSRA[21]、first-person hand action benchmark[22](F-PHAB)4個數據庫。其中前3個主要是裸手的數據庫,最后一個是手物交互的數據庫。
在目前的三維手部位姿估計算法中,研究學者一般采用手部共21個骨骼關節點作為位姿估計的關鍵點。與之對應的,采用關鍵點坐標的均方誤差值(key-point mean square error,KMSE)來評估算法的有效性。
關鍵點誤差 KMSE 可以定義為圖像上預測關鍵點坐標與對應真值坐標之間的歐式距離,公式為
(9)
(10)
式中:KMSE為所有關鍵點的總誤差;I為關鍵點總數量;KMSE,i為第i個關鍵點的均方誤差值;n為測試視頻的總共幀數;(xij,yij,zij)為第j幀圖像的第i個關鍵點的估計坐標值;(Xij,Yij,Zij)為第j幀圖像的第i個關鍵點坐標值的真值。
3.3.1 手部檢測算法
為了驗證改進 Faster R-CNN 的方法的有效性,選擇F-PHAB 數據庫,并將原始的 Faster R-CNN 方法與本文改進的方法進行了對比。由于數據庫中并沒有手部的真值框,因此將骨骼關節點的三維坐標映射到二維圖像上的最大包圍框定義為真值框。為了擴充數據庫,根據左右手鏡像關系,將訓練集數據進行鏡像翻轉處理。從不同場景中隨機選擇了40 000 張作為訓練集,選擇 10 000 張作為測試集,進行了對比試驗。由于手部檢測任務實際上有3類目標:左手、右手和背景,因此選擇了準確率來作為評價標準。
從表1可以看出,將深度圖像作為 RGB 圖像中的圖像通道可以一定程度上提高遮擋情況下的手部檢測結果,但是實際效果并不理想,而本文的方法在識別準確率上要全面優于Faster R-CNN。圖6中,綠框代表預測為左手區域,紅框代表預測為右手區域。場景一和場景二均為測試集數據,場景一中左手大部分區域都被物體遮擋,從圖6中可以看出,無論輸入數據是 RGB 圖像還是RGB-D 數據,Faster R-CNN 只能檢測到部分左手信息,而本文方法可以檢測到幾乎完整的左手信息。場景二中左手并沒有完全在圖內,Faster R-CNN 并不能檢測到左手,而本文方法能有效的檢測到左手。場景三取材于日常生活中,手部位置距離相機很近,Faster R-CNN 由于沒有多尺度的特征提取網絡,雖然檢測到了手,但是無法精確定位。使用本文方法,手部信息大部分都在框內,只有大拇指中極少的部分在框外。在3種場景下,本文方法均有較好的識別結果。從定性和定量的角度來看,本文提出的改進方法相較于Faster R-CNN算法具有更好地檢測結果。

表1 本文方法與Faster R-CNN的評價指標對比Table 1 Comparison of evaluation indicators between this paper and Faster R-CNN

圖6 不同場景下手部檢測結果Fig.6 Hand detection results in different scenarios
3.3.2 手部關鍵點提取
為了評估本章方法的有效性,將在3個常用數據庫 ICVL、NYU、MSRA 上分別計算關鍵點平均誤差 KMSE,并將結果與目前主流的算法進行比較。由表2所示,本文提出的算法在 NYU 和 ICVL 均與最優的方法相當,其中 ICVL 數據庫由于遮擋較少,識別相對簡單,因而達到了當前最優效果。相對而言,在 MSRA 數據集的誤差與最優方法誤差相差 0.3 mm,這與該數據庫場景復雜,包含人員較多和自遮擋問題較嚴重有一定關系。綜上所示,本文算法能夠一定程度上解決手部位姿估計存在的高自由度、手部目標過小、手部自遮擋問題和尺度問題,較為準確地估計出圖像中的手部位姿。手部位姿估計的可視化結果如圖7所示。即使手部有部分被物體遮擋,依舊可以繪制出手部關鍵點信息。綜上所述,本文算法能較好地解決手部遮擋問題,實現手部的位姿估計。

圖7 手部位姿估計可視化結果Fig.7 The visualization results of hand pose estimation

表2 本文算法與主流算法在不同數據集上的比較Table 2 Comparison of the algorithm in this paper and the mainstream algorithm on different data sets
本文設計并實現了基于改進Faster R-CNN網絡的手部位姿估計算法。提出了改進的Faster R-CNN網絡進行手部檢測,并在此基礎上提出了基于MANO手部模型的手部位姿估計。實驗表明,手部檢測結果中存在的自遮擋和尺度問題得到了解決,并且檢測結果的準確性有所提高。通過與主流算法的對比可以證明,本文算法能夠較為準確地得到手部位姿估計的結果。在未來的工作中,將進一步對手部姿態估計中手部動作的意義進行理解。