Real-time 3D Hand Pose Estimation with 3D Convolutional Neural Networks

基於三維卷積神經網絡的實時三維手勢估計

1 摘要

  在本文中,我們提出了一種使用三維卷積神經網絡(CNNs)從單深度圖像進行實時三維手姿態估計的新方法。2D CNN提取的基於圖像的特徵由於缺乏3D空間信息,不適合直接進行3D手姿勢估計。我們提出的基於3D CNN的方法,將手部深度圖像的3D體積表示作爲輸入並從體積輸入中提取3D特徵,可以捕獲手的3D空間結構並且在單通道中準確地迴歸全3D手部姿勢。爲了使3D CNN對手部大小和全局方向的變化具有魯棒性,我們對訓練數據執行3D數據增強。爲了進一步提高估計精度,我們建議應用3D深度網絡架構並利用完整的手部表面作爲從深度圖像學習3D手部姿勢的中間監督。對三個具有挑戰性的數據集進行了大量實驗,結果表明我們提出的方法優於基線和最先進的方法。交叉數據集實驗也表明我們的方法具有良好的泛化能力。此外,我們的方法很快,在具有單個GPU的標準計算機上以每秒超過91幀的速度運行。

2 介紹

  隨着實時人體姿勢估計的成功[1],[2],[3]以及中距離和短距離深度相機的可用性,如英特爾實感,SoftKinetic和Primesense Carmine,近年來,準確時實3D手部姿態估計引起了很多研究的關注[4],[5],[6],[7],[8],[9],[10],[11],[12]。鉸接式3D手姿態估計是虛擬現實和增強現實應用中人機交互的核心技術之一,因爲該技術爲用戶提供了與虛擬環境和虛擬對象交互的自然方式。3D手姿勢估計也可以用於手勢識別,例如手語識別[13],[14]和駕駛員手勢分析[15],[16]。然而,由於手部姿勢的大變化,手部運動的高維度,嚴重的自我遮擋以及深度圖像中的手指的自相似性,實現有效且穩健的手部姿勢估計性能仍然是具有挑戰性的。
  由於卷積神經網絡(CNNs)的成功[7],[17],[18],[19],[20],[21],[22],[23],[24],[25]和大型手姿勢數據集的可用性[7],[8],[26],近期許多手勢估計工作取得了良好的效果。大多數這些方法直接將深度圖像作爲2D CNN的輸入,輸出熱圖[7](圖1a),3D關節位置[17],[18],[20],[21],[24](圖1c)或手模型參數[22]。然而,我們認爲由於缺乏3D空間信息,由2D CNN提取的基於圖像的特徵不直接適合於3D手姿勢估計。例如,在[18]中,2D CNN的初始結果很差,並且它被反饋循環迭代地重新定義以合併來自生成模型的3D信息。Ge等人[19]通過將深度圖像投影到三個視圖上並應用多視圖CNN來回歸三個視圖的熱圖(圖1b),從而更好地利用深度線索。然而,多視圖CNN仍然不能充分利用深度圖像中的3D空間信息,因爲從3D到2D的投影將丟失某些信息。雖然增加視圖的數量可以改善性能,但是當使用更多視圖時,計算複雜性將增加。
圖1
圖1:3D手姿勢估計的不同方案。(a)2D CNN將深度圖像作爲輸入並輸出熱圖。(b)多視圖2D CNN將多視圖投影作爲輸入並輸出多視圖熱圖。(c)2D CNN將深度圖像作爲輸入並直接回歸3D關節位置。(d)我們使用3D CNN,其採用體積表示作爲輸入並且迴歸3D關節位置的較低維度表示。
  在本文中,我們提出了一種基於3D CNN的手姿勢估計方法,該方法可以捕獲輸入的3D空間結構,並在單通道中準確地迴歸全3D手勢,如圖1d所示。具體而言,人手首先從深度圖像中分割出來;手的3D點雲被編碼爲3D體積存儲投影方向截斷有符號距離函數(D-TSDF)[27]值,然後將其饋送到3D卷積神經網絡中。我們設計了一個3D深度密集網絡,以提高網絡的學習能力。該網絡的輸出是3D手部關節在3D體積中的相對位置的較低維度表示。通過執行PCA重建和座標轉換,我們可以最終獲得相機座標系中的3D手部關節位置。通過3D卷積提取的3D特徵的優勢,我們的方法能夠理解3D空間中的手姿態結構,並且能夠有效且穩健地推斷3D手部關節位置。
  與先前基於CNN的手姿態估計方法相比,我們提出的基於3D CNN的方法具有以下優點:

  • 我們提出的3D CNN能夠從3D體積表示中學習3D特徵,以進行精確的3D手姿勢估計。與從2D特徵迴歸3D關節位置的基於2D CNN的方法相比[17],[18],[21],[28],3D CNN可以在單通道中直接從3D特徵迴歸3D關節位置。這不僅實現了卓越的估計精度,而且避免了耗時的迭代重建過程。
  • 我們提出的3D CNN可以輕鬆地以端到端的方式進行訓練。我們在本文中設計的3D淺平面網絡和3D深度密集網絡都可以在單個GPU上以實時速度運行。
  • 我們提出的方法對手部大小和全局方向的變化具有魯棒性,因爲我們在訓練集上執行3D數據增強。與在2D圖像上執行2D變換的傳統數據增強不同,我們提出的3D數據增強在3D點雲上應用3D變換,因此可以更好地豐富3D空間中的訓練數據。

  本文是我們會議論文的延伸[29]。本文的新貢獻總結如下:

  • 我們已經提出利用完整的手部表面作爲從深度圖像學習3D手部姿勢的中間監督。實驗結果表明,利用中間手錶面補全步驟,可以進一步提高3D手姿態的估計精度。
  • 我們已經研究了深度神經網絡架構的性能[30],[31],當應用於我們提出的基於3D CNN的3D手姿態估計框架時,以提高學習能力。 實驗結果表明,3D深層網絡可以實現比3D淺層網絡更好的性能。
  • 爲了更好地理解3D CNN,我們已經可視化了在3D特徵體積中產生給定激活的輸入方案。在這些方案中已經觀察到手的局部和全局3D結構。
  • 我們進行了更廣泛的自身比較實驗,並在一個額外的手姿勢數據集ICVL上與更多最先進的方法進行了比較[8]。我們還進行了跨數據集實驗,並與英特爾實感SDK進行了定性比較[32]。實驗結果表明,該方法可以實時獲得良好的性能,具有良好的泛化能力。

  本文的其它部分組織如下:第2節討論了3D手姿態估計的一些相關工作。由於我們的方法以3D體積爲輸入,我們首先在第3節介紹不同的體積表示,然後第4節描述所提出的基於3D CNN的方法。第5節提供了實驗結果,第6節總結了本文。

3 體積表示

  我們提出的基於3D CNN的手姿態估計方法採用體積表示作爲神經網絡的輸入。將觀察到的手部深度圖像編碼爲體積表示的目的是生成3D體積,從深度圖像實時提供3D空間中的手的充分且有意義的信息。3D體積將被饋送到3D CNN以學習3D特徵以用於隨後的3D手部關節位置迴歸。
  手的輸入深度圖像首先被轉換爲一組3D點,表示爲PR3P\subset\mathbb{R}^3,如圖2的前兩行所示。爲了創建包含M×M×MM×M×M體素的3D體積,我們首先爲3D手點構建軸對齊邊界框(AABB)。AABB是最小邊界框,其x,y,z軸分別與攝像機座標系的x,y,z軸對齊。3D體積的中心設置在AABB的中心,其面設置爲與AABB的面平行。體素的邊長度設置爲:

lvoxel=maxlx,ly,lz/M(1) l_{voxel} = max{l_x, l_y, l_z} / M \qquad (1)

其中lx,ly,lz是AABB沿三個方向的邊長;M是體積分辨率值。我們將體素v的值表示爲F(v),可以通過使用佔用模型(第3.1節)或截斷符號距離函數(第3.2節)來確定。
圖2
圖2:不同體積表示的可視化。對於最後五行,我們僅通過使用此圖中所示的顏色映射來顯示其值小於1且大於-1的體素。體積分辨率爲32×32×32。

3.1 佔據柵格

  佔據柵格是表示3D體積中的佔用和未佔用體素的二進制柵格,如圖2的第3行所示。因此,體素值被確定爲:

F(v)={1pP,s.t.DChe(vc,p)lvoxel/20otherwise(2) F(v) = \begin{cases} 1 & \exists p \in P,s.t.D_{Che} (v_c, p) \le l_{voxel / 2} \\ 0 & otherwise \\ \end{cases} \qquad (2)

其中DChe(p,q)=maxi(piqi)D_{Che} (p, q) = \max\limits_i (| p_i - q_i |)是Chebyshev距離;vcv_c是體素v的中心。
  如果輸入是完全已知3D信息的3D CAD模型,則佔據柵格足以表示完整的3D模型。 然而,在我們的問題中,輸入是2.5D深度圖像,其僅從相機的視圖捕獲觀察到的表面點,這是手的不完整的3D形狀。佔據柵格不能區分觀察到的表面前和後的體素。

3.2 TSDF體積

  在基於精確的截斷符號距離函數(TSDF)的體積中,每個體素存儲從體素中心到最近的表面點的截斷有符號距離。體素v的值計算如下:

F(v)=minmaxd(vc)/μ,1,1(3) F(v) = min {max {d(v_c) / \mu, -1}, -1} \qquad (3)

其中d(vc)d(v_c)是從體素中心vcv_c到最近表面點的符號距離;當體素中心的深度值小於最近表面點的深度值時,其符號爲正;否則,符號爲負。μ\mu是截斷距離,此處設置爲3×lvoxel3×l_{voxel}
  但是,計算精確的TSDF非常耗時,因爲必須檢查所有表面點以找到3D體積中每個體素的最近點。對於實時考慮,應該使用投影TSDF[58],其中最近的點僅在相機幀中的視線上找到。它可以在GPU上有效地並行計算。由於投影TSDF是精確TSDF的近似,因此在投影TSDF中一些信息是不準確的或丟失的。在這項工作中,我們應用投影方向TSDF(D-TSDF)[27]來編碼體積表示中的更多信息,其中每個體素將3D偏移矢量[dx,dy,dz][dx, dy, dz]存儲到最近點而不是標量距離。
  圖2(最後五行)顯示了一些例子:準確的TSDF體積,投射TSDF體積和具有不同手部姿勢的投影D-TSDF體積。可以看出,在準確的TSDF體積中,TSDF的值在從觀察到的表面移動到自由空間時增加,而在移動到被遮擋的空間時減小。在投影TSDF體積中,TSDF的值沿着視線連續變化,其在觀察到的表面前面保持爲正,在觀察到的表面後面保持爲負。 z方向的投影D-TSDF體積與投影TSDF體積幾乎相同,因爲z方向接近視線。x,y方向的投影D-TSDF體積可以提供更多信息以補償投影TSDF體積的不準確性。第5.3.2節中的實驗將表明投影D-TSDF在計算上是有效的,並且可以提高估計精度。
  我們需要在預測精度和計算成本之間取得平衡,以確定體積分辨率MM。如果體積分辨率太大,則計算體積表示將是耗時且佔用大量內存的。如果體積分辨率太小,則體積表示無法爲3D手部姿勢估計提供足夠的信息。在這項工作中,MM被選爲32,根據第5.3.1節中的實驗證明其具有良好的估計精度和3D手姿態估計的計算效率。

4 3D卷積神經網絡

  在本節中,我們首先描述了用於3D手姿態迴歸的網絡架構和損失函數。爲了解決自遮擋和全局方向的大變化問題,我們進一步介紹了3D手部表面補全和3D數據增強的方法。在本節的最後,我們可視化和分析3D CNN學習的3D模式。

4.1 網絡架構

  我們提出的3D CNN將三個體積的投影D-TSDF作爲輸入並輸出包含F個元素的矢量。如圖3所示,我們設計了兩種網絡架構:3D淺平面網絡和3D深度密集網絡。
圖3
圖3:簡單和密集的網絡架構。兩個網絡都採用三個32×32×32投影D-TSDF體積作爲輸入和輸出F元素。在(a)中,所有3D卷積層都具有步幅1且沒有填充。在(b)中,3D深密網絡的增長率爲32;每個3D密集塊中的L表示密集單元的數量;每個密集單元由一系列層組成:BN-ReLU-3D Conv(1×1×1)-BN-ReLU-3D Conv(3×3×3);每個過渡層使用1×1×1 3D卷積將特徵圖的數量減少一半,並使用平均合併對特徵圖進行下采樣。'BN’表示批量標準化層,'FC’表示完全連接的層,'DP’表示丟失層。

4.1.1 3D淺平網絡

  3D淺平面網絡包含三個3D卷積層和三個完全連接的層,如圖3a所示。對於三個3D卷積層,內核大小爲535^3,333^3333^3,步長都爲1且沒有填充。前兩個3D卷積層之後是3D最大池層,內核大小爲232^3,步長爲2且沒有填充。在通過3D卷積層提取3D特徵之後,使用三個完全連接的層將3D特徵映射到3D手部關節位置的較低維度空間。在前兩個完全連接的層中,我們應用具有0.5的丟棄率的丟棄層,以防止神經網絡過擬合[59]。

4.1.2 3D深密網絡

  具有捷徑的深度卷積網絡已經顯示出強大的圖像識別學習能力[30],[31],因爲捷徑可以緩解梯度消失問題。我們在提出的基於3D CNN的手姿態估計方法中應用深密網絡架構[31]。如圖3b所示,我們設計了一個包含28個卷積層和3個完全連接層的3D深度密集網絡。遵循[31]中的體系結構,我們在每個密集塊中應用瓶頸層以減少模型參數的數量。5.3.5節的實驗表明,與3D淺平面網絡相比,3D深度密集網絡可以獲得更準確的估計結果。

4.2 3D手勢迴歸的損失函數

  我們的方法估計3D空間中的KK個手關節位置,其表示3D手姿勢。設K個目標手關節位置爲Φ={Φk}k=1KΛ\varPhi = \{\varPhi_k\}^K_{k =1} \in ΛΛΛ3×K3×K維手關節空間。我們將訓練樣本表示爲(Xn,Φn)(X_n, Φ_n),其中XnX_n是深度圖像,ΦnΦ_n是攝像機座標系中對應的關節位置,n=1,....,Nn = 1, ...., N。深度圖像XnX_n被轉換爲體積表示VnV_n,如第3節中所述。VnV_n的中心位於從3D手點生成的AABB的中心。因此,真實值ΦnΦ_n應該轉換爲體積座標系中的座標,並在0和1之間歸一化。我們將變換和歸一化的關節位置表示爲Yn={ynk}k=1KΛY_n= \{ynk\}^K_{k=1} \in Λ。將第k個手關節的3D位置ynkR3y_{nk} \in \mathbb{R}^3變換並歸一化爲:

ynk=(ϕnkcn)/(Mlvoxel)+0.5 ynk = (\phi_{nk} - c_n) / (M \centerdot l_{voxel}) + 0.5

其中cnc_n是3D體積的中心。通過減去中心cnc_n將原始真是值位置φnkφ_{nk}轉換爲體積座標系,並通過除以體積的邊長lvoxell_{voxel}(我們假設所有關節都在3D體積內)將其歸一化在-0.5和0.5之間。爲了使ynky_{nk}的座標在0和1之間,我們在這個公式中加0.5。
  由於3D手關節的自由度(DOF)通常低於手關節位置的維度3×K3×K,我們設計的3D CNN明確強制手部關節位置估計的手部設置約束,因此可以減輕手姿勢估計不可行性。爲了學習手姿勢先驗,我們在訓練數據集中對變換和歸一化的關節位置{Yn}n=1N\{Y_n\}^N_{n=1}執行PCA,這與[17]中的方法類似。主成分的係數是αn=ET(Ynu)α_n=E^T·(Y_n -u),其中αnα_n包含FF個係數,F<3×K;E=[e1,e2,...,eF]F<3×K;E = [e_1,e_2, ..., e_F]是主要成分;uuYY的平均向量。
  在訓練階段,我們使用SGD算法最小化以下目標函數:

w=argminwn=1NαnF(Vn,w)2(5) w^* = arg \min\limits_w \sum^N_{n=1}|| \alpha_n - F(V_n,w)^2 || \qquad (5)

在測試階段,給定輸入體積表示VV,由3D CNN估計的變換和歸一化的手關節位置是Y^=EF(V,w)+u\hat{Y} = E·F(V, w^*)+ u

4.3 手部表面補全

  3D手姿勢估計中的挑戰之一是輸入深度圖像僅捕獲部分手錶面並且遭受自遮擋問題。爲了解決這個問題,我們利用完整的手部表面作爲中間監督,從深度圖像學習3D手部姿勢。更具體地說,我們使用數據驅動方法估計完整的手部表面,並利用估計的完整手部表面進行3D手部姿勢估計。如圖4所示,我們應用3D U-Net[61]架構來估計捕獲的部分手部表面的完整手部表面。與[62]類似,我們使用無符號截斷距離函數(TDF)作爲網絡輸出,因爲沒有必要區分完整手表面的距離函數的已知和未知空間。通過使用具有3D手模型的模型擬合方法[7]生成完整手部表面的真實值。在訓練3D U-Net時,我們使用ADAM優化器[64]最小化[63]中定義的平滑L1損失。在生成完整手部表面的TDF體積之後,我們將其與原始投影D-TSDF體積連接並將它們饋送到3D DenseNet中以進行3D手姿勢估計。3D U-Net和3D DenseNet分別進行預培訓,並以端到端的方式進行調整。5.3.6節的實驗表明,通過手錶面補全的中間監督,可以進一步提高3D手姿態估計的準確性。
圖4
圖4:手部表面完成和3D手姿態估計的框架。應用3D U-Net從對應於捕獲的部分手錶麪點的投影D-TSDF體積估計完整手錶麪點的TDF體積。將與估計的TDF體積連接的投影D-TSDF體積饋送到3D CNN中用於3D手姿勢估計。'C’表示連接操作。

4.4 3D數據增強

  3D手姿勢估計的另一個挑戰是手姿勢在全局方向和手大小方面具有大的變化。爲了使3D CNN模型對不同的方向和大小具有魯棒性並提高其泛化能力,我們對姿勢迴歸和表面補全網絡的訓練數據進行3D數據增強。與現有的2D圖像數據增強不同,我們的方法直接旋轉和拉伸3D空間中的手點。
  我們首先沿着相機座標系的xxyyzz軸拉伸點雲,分別用拉伸係數sxs_xsys_yszs_z。然後,點雲分別圍繞相機座標系的xxyyzz軸旋轉,旋轉角度爲θxθ_xθyθ_yθzθ_z。對於3D點pp,在拉伸和旋轉之後,點pp轉換爲pp'

p=RSpR=Rx(θx)Ry(θy)Rz(θz)(6)S=Diag(sx,sy,sy) \begin{aligned} &p' = R \centerdot S \centerdot p \\ &R = R_x(\theta_x) \centerdot R_y(\theta_y) \centerdot R_z(\theta_z) \qquad (6)\\ &S = Diag(s_x, s_y, s_y) \end{aligned}

其中RxR_xRyR_yRzR_z分別是圍繞xxyyzz軸的3×3旋轉矩陣;Diag(sx,sy,sy)Diag(s_x,s_y,s_y)是3×3對角矩陣,其左上角開始的對角線是sxs_xsys_yszs_z。圖5顯示了3D數據增強的示例。在手點雲和相應的真實值關節位置上執行3D拉伸和旋轉。然後從變換後的點雲生成TSDF卷。
圖5
圖5:3D數據增強的示例。左上角:原始點雲,真實值和TSDF體積。左下:3D拉伸後的點雲,真實值和TSDF體積。右上:三維旋轉後的點雲,真實值和TSDF體積。右下:3D拉伸和旋轉後的點雲,真實值和TSDF體積。出於說明目的,我們僅在z方向上繪製投影D-TSDF體積。
  在這項工作中,通過隨機拉伸和旋轉原始訓練樣本生成增強訓練集。拉伸因子sxs_xsys_y從區間[1/1.5,1.5][1/1.5,1.5]隨機選擇對數均勻。由於影響TSDF體積的是相對大小而不是絕對大小,我們可以將伸展因子szs_z設置爲1。在攝像機的座標系中,從深度圖像生成的點雲不僅在zz內面內旋轉,軸也在平面外繞xxyy旋轉,如圖5所示。由於點雲的不完整性,平面外旋轉點雲與實際點雲不同。我們假設對於小的平面外旋轉角度θxθ_xθyθ_y,從平面外旋轉點雲產生的TSDF體積可以與從實際點雲產生的TSDF體積大致相同,此時相機的視點在旋轉角度內,我們從區間[30°,30°][-30\degree,30\degree]隨機均勻地選擇θxθ_xθyθ_y。從區間[180°,180°][-180\degree,180\degree]隨機均勻地選擇面內旋轉角度θzθ_z。在訓練階段,原始訓練集和增強訓練集都用於訓練。第5.3.3節中的實驗將顯示3D數據增強的有效性。

4.5 可視化3D CNN

  爲了分析由3D CNN提取的三維特徵,我們通過採用[60]中提出的引導反向傳播方法,在三維特徵體積中可視化產生給定激活的輸入模式,該方法是在[65]提出的基於反捲積的可視化方法的修改。
  在圖6中,我們可視化在3D淺平面網絡中學習的一些3D模式,該網絡在MSRA手姿勢數據集上完全訓練[26]。我們採用具有不同手勢的三個輸入體積作爲圖6中的示例。爲了重建3D模式,通過使用引導的反向傳播方法將從3D卷積層生成的3D特徵體積向下投射到輸入體素空間。對於每個手姿勢的每個卷積層,我們選擇四個特徵體積作爲圖6中的示例。爲了顯示輸入體積的哪些部分導致3D特徵體積中的高激活,我們在3D特徵量中最高激活對應的接收域內裁剪重建的3D圖案體積。我們還顯示了輸入3D體積中接收域的相對位置。3D淺平面網絡中的第一卷積層(L1),第二卷積層(L2)和第三卷積層(L3)的接收場尺寸分別是5,10和20。
圖6
圖6:在完全訓練的3D CNN模型中學習的模式的可視化。對於每一層,我們在第一行顯示重建的模式,並在第二行顯示由黑框指示的相應的接收字段。通過使用[60]中提出的引導反向傳播方法重建這些模式。對於L3的模式,我們僅繪製絕對值大於閾值的體素。具有較大值的體素以亮色顯示,而具有較小值的體素以深色顯示。第一卷積層(L1)中的神經元可以捕獲局部結構,例如角和邊緣;第二卷積層(L2)中的神經元可以捕獲手部分的結構,例如手指;第三卷積層(L3)中的神經元可以捕獲手的全局結構。
  從圖6中可以看出,從低層(L1)到高層(L3),神經元可以捕獲從局部到全局的模式。L1中的神經元捕獲低水平局部幾何結構,例如角落(例如,L1列3,8,12)和邊緣(例如,L1列1,5,7)。L2中的神經元捕獲手的中級形狀結構,例如手動手指尖(例如,L2柱5,6,8,10)和手掌邊緣(例如,L2柱2,4,7,11)。L3中的神經元捕獲手的高級全局結構。值得注意的是,在L3的模式中,手關節區域的對比度是明顯的,這表明學習的高層特徵體積集中在手關節區域。3D特徵的分層特性與[65]中觀察到的2D CNN中的分層特性一致。

5 實驗

5.1 數據集和評估度量

  我們在三個公共手姿勢數據集上評估我們提出的方法:MSRA手姿勢數據集[26],NYU手姿勢數據集[7]和ICVL手姿勢數據集[8]。
  MSRA數據集[26]包含由英特爾創意互動手勢相機捕獲的九個受試者的手部深度圖像。每個受試者執行17個手勢,每個手勢包含約500幀。此數據集中有超過76K個幀。在以下關於該數據集的實驗中,我們對八個受試者進行訓練並對剩餘受試者進行測試。對所有受試者重複九次。每個框架的真實值包含K=21個手關節的3D位置,包括每個手指的四個關節和手腕的一個關節。
  NYU數據集[7]包含超過72K的訓練幀和8K的測試幀,由$PrimeSense^{TM}$3D傳感器捕獲。每幀的真實值包含36個手關節的3D位置。和[7],[18]中一樣,我們估計K=14個手關節的3D位置的子集,包括三個拇指關節,食指,中指,無名指和小指各兩個關節,一個關節用於手掌中心和兩個手腕關節。由於紐約大學數據集提供了包含人體和背景的原始深度圖像,我們應用簡化的沙漏網絡[66]來檢測2D手部關節位置並使用相應的深度信息來分割手部。
  ICVL數據集[8]包含12個具有22K幀的訓練序列和兩個具有1.6K幀的測試序列,由Intel的Creative Interactive Gesture Camera捕獲。該數據集另外提供一個訓練集,其原始訓練樣本在平面內旋轉14次。然而,在我們的實驗中,我們不使用額外的訓練集,而是通過隨機旋轉和拉伸原始訓練樣本八次來應用3D數據增強。因此,我們實驗中的增強訓練集包含176K幀。每個幀的真實值包含K=16個手關節的3D位置,包括每個手指的三個關節和手掌中心的一個關節。
  在我們的實驗中使用三個度量來評估手部姿勢估計性能。第一個度量標準是所有測試幀上的每個關節平均誤差距離。第二個度量是良好幀的比例,其中最差的關節誤差低於閾值[67],這是一個嚴格的度量。第三個指標是誤差閾值內的關節比例[10]。

5.2 實現細節

  我們在具有兩個Intel Core i7 5930K 3.50GHz CPU,64GB RAM和具有8GB GPU內存的Nvidia GeForce GTX 1080 GPU的計算機上訓練和評估我們提出的用於3D手姿態估計的3D CNN模型。3D CNN模型在PyTorch框架內實現。對於網絡訓練參數,我們選擇批量大小爲16,動量爲0.9,權重衰減爲0.0005。對於3D迴歸網絡,學習率設置爲0.01,並且在50個週期之後除以10。對於3D U-Net,學習率設置爲0.001。在60個週期之後停止訓練以防止過擬合。我們對所有數據集上的所有實驗應用相同的超參數。 使用[68]中提出的方法隨機初始化3D CNN中3D卷積層的所有權重。

5.3 自身比較

5.3.1 選擇體積分辨率

  爲了評估不同體積分辨率的影響,我們使用具有不同分辨率值的投影D-TSDF體積進行實驗:使用具有直接回歸的3D平面網絡的16,32和64。由於以64×64×64分辨率對網絡進行訓練非常耗時,因此我們僅在MSRA數據集的一小部分上訓練和測試具有不同體積分辨率的這三個網絡,而在該實驗中沒有數據增強。如圖7(左)所示,16×16×16分辨率的估計精度略低於32×32×32和64×64×64分辨率的估計精度。後兩種分辨率的估計精度幾乎相同。但是,使用64×64×64分辨率計算TSDF卷更耗時且佔用大量內存。因此,體積分辨率32×32×32最適合於手姿態估計,並且我們在以下實驗中使用該體積分辨率。該實驗還表明,我們的方法對於相對較低的體積分辨率是穩健的,因爲當分辨率值爲16時,評估精度不會降低很多。
圖7
圖7:在MSRA數據集上有/無數據增強的不同體積分辨率和不同體積類型的自比較[26]。左:不同體積分辨率對好幀的比例的影響。中:不同卷類型和數據增加對好幀的比例的影響。右:不同體積類型和數據增強對每個關節平均誤差距離(R:root,T:tip)的影響。

5.3.2 選擇體積類型

  我們使用沒有數據增強的3D平網絡評估不同體積類型對MSRA數據集的估計準確性的影響。從圖7(中間和右側)可以看出,在佔據柵格,精確TSDF,投影TSDF和投影D-TSDF中,投影D-TSDF表現最佳。值得注意的是,佔據柵格的性能與準確的TSDF和投影TSDF的性能相當,這表明3D CNN可以從佔據柵格中學習有效的3D特徵,儘管佔據柵格不能區分觀察表面之前和之後的體素。但投影D-TSDF在三個方向上編碼更多信息,優於佔據柵格。對於實時性能,在同一GPU上生成佔據柵格,精確TSDF,投影TSDF和投影D-TSDF的平均計算時間分別爲1.4ms,30.2ms,1.9ms和2.9ms。因此,考慮到估計精度和實時性能,投影D-TSDF總體上是最佳的。在以下實驗中,我們應用具有32×32×32體積分辨率的投影D-TSDF作爲網絡輸入並應用3D數據增強用於訓練。

5.3.3 評估數據增強

  我們比較了不使用數據增強的方法和使用2D/3D數據增強的方法。對於2D數據增強,我們在2D圖像平面中隨機旋轉和拉伸3D手點雲。如圖7(中間和右側)所示,當使用相同的輸入體積時,使用2D數據增強的方法優於不使用數據增強的方法。當在訓練階段使用3D數據增強時,評估精度進一步提高。值得注意的是,儘管3D旋轉點雲與真實點雲並不完全相同,但使用3D數據增強訓練的網絡仍然可以獲得比使用2D數據增強訓練的網絡更好的性能,這表明網絡可以受益於3D增強數據。

5.3.4 2D CNNs 和3D CNNs比較

  我們比較了基於3D CNN的方法和基於2D CNN的方法在實驗中的性能。對於基於2D CNN的方法,我們將手從深度圖像分割並將其調整爲96×96的圖像,同時保持縱橫比。2D CNN的輸出是2D圖像手關節的位置和深度值,使用相機參數轉換爲3D位置。爲了公平比較,我們嘗試了具有類似網絡架構和相當參數數量的2D深密網絡和3D深密網絡。2D深密網絡有5個密集塊,29個卷積層和3個具有65M參數的全連接層;3D深度密集網絡有4個密集塊,28個卷積層和3個具有50M參數的全連接層。此外,我們在訓練2D深度密集網絡時執行2D數據增強,並且訓練樣本的數量與訓練3D深度密集網絡時使用的數量相同。如圖8所示,3D深度密集網絡在所有三個手勢數據集上始終比2D深度密集網絡表現更好,這表明3D CNN可以更好地利用深度信息並提供更準確的估計。
圖8
圖8:在MSRA[26],NYU[7]和ICVL[8]手姿勢數據集上進行3D手姿態估計的2D/3D CNN與不同網絡架構的自比較。在圖例中顯示了不同方法的所有關節的平均誤差距離。

5.3.5 淺網絡和深網絡比較

  我們比較了3D淺層平面網絡和3D深度網絡的估計精度。對於3D深度網絡,除了深度密集網絡之外,我們還嘗試了深度殘差網絡[30],其具有4個殘餘塊,9個卷積層和3個全連接層。從圖8可以看出,三維深度密集網絡的性能優於三維深度殘餘網絡,三維深度殘餘網絡在三種姿態數據集上的性能優於三維淺層網絡。儘管3D深度網絡具有更多卷積層,但3D淺平面網絡中的卷積層具有更多輸出通道。因此,這三個網絡的前向傳播時間是相當的,3D淺層平面網絡爲3.5ms,3D深度殘餘網絡爲3.4ms,3D深度密集網絡爲4.5ms。我們在以下實驗中使用3D深密網絡。

5.3.6 評估手部表面補全

  我們評估手部表面補全對3D手姿態估計精度的影響。估計的完整手部表面作爲我們方法的中間結果,一些示例在圖9中示出。我們使用Matlab的isosurface函數從距離函數的32332^3體積中提取手部表面[62]。從圖9中可以看出,我們的方法能夠從輸入的部分手錶面生成完整的手部表面。與實際情況相比,我們的估計更加模糊,並且失去了完整手部表面的一些細節。在截斷距離爲2.5的體素空間中,估計的TDF體積相對於完整表面的真實TDF體積的平均L1L_1損失爲0.112。表1給出了使用手部表面補全和不使用手部表面補全的3D手姿態估計的平均誤差。可以看出,無論使用3D深度殘差網絡還是3D深度密集網絡,表面補全步驟都可以進一步提高估計準確性。此外,爲了評估完整手部表面對手部姿勢估計的重要性,我們使用真實的完整手部表面與原始的部分手部表面相結合作爲網絡輸入來估計3D手部姿勢。如表1的最後一行所示,當使用完整手部表面的真實值時,網絡可以實現小得多的估計誤差,這表明如果可以更精確地估計完整的手部表面,我們的方法可以實現更小的姿態估計誤差。
圖9
圖9:使用我們的方法在NYU手姿勢數據集上完成手部表面的示例[7]。從32332^3體積的距離函數中提取手部表面。
表1:使用3D ResNet和3D DenseNet對手部表面補全對3D手部姿態估計的影響。紐約大學數據集[7]的平均估計誤差列於本表中。
表1

5.4 與當前最先進的比較

5.4.1 在MSRA數據集上比較

  在MSRA數據集上,我們將基於3D CNN的手姿態估計方法與七種最先進的方法進行比較:層次迴歸方法[26],聯合矩陣分解和完成(JMFC)方法[69],基於CNN的多視圖方法[19],基於局部表面法線(LSN)的方法[45],使用深度生成模型的交叉網絡[23],具有手姿勢先驗和改進的改良2D CNN(DeepPrior++)[70],區域集合網絡(REN)[72]和姿勢引導結構化REN(Pose-REN)[71]。注意,由於層次迴歸方法[26]已經證明優於[1],[6]中的方法,我們間接地將我們的方法與[1],[6]進行了比較。
  如圖10所示,我們的基於3D CNN的方法在MSRA數據集上優於最先進的方法。不同錯誤閾值的好幀比例如圖10(左)所示。當誤差閾值大於10mm時,我們的方法可以獲得最佳性能。例如,當誤差閾值爲30mm時,我們方法的好幀比例比[71],[70],[19],[23],[45](手指聯合迴歸),[26]和[69]中的方法分別高約6%,10%,20%,22%,28%,33%和39%。當誤差閾值爲5mm時,我們方法中良好幀的比例略差於[26]和[69]中的方法。這可能是由體素的相對較大的邊緣長度引起的,當體積分辨率爲32×32×32時,平均爲5.5mm。在圖10(中間和右側)中,我們與[19],[26],[71],[72]中的方法比較不同偏航和俯仰角度的平均誤差距離。可以看出,我們方法中不同視角的平均誤差比[26],[19],[72]和[71]中的方法分別小約7mm,4.5mm,1.8mm和0.8mm。我們的方法與俯仰角度變化的差異較小,標準偏差(0.58mm)小於[26]中的方法(0.79mm),[19](0.64mm),[72](0.82mm)和[71](0.63毫米)。
圖10
圖10:與最先進的方法[19],[23],[26],[45],[69],[70],[71],[72]在MSRA數據集上的比[較26]]。左:好幀的比例超過不同的誤差閾值。中間和右側:相對於相機框架的不同偏航和俯仰視角的平均誤差距離。

5.4.2 在NYU數據集上比較

  在NYU手姿勢數據集上,我們首先將我們基於3D CNN的手部姿勢估計方法與九種最先進的方法進行比較:基於2D CNN的熱圖迴歸方法[7],基於2D CNN的直接回歸具有姿勢先驗的方法(DeepPrior)[17],基於2D CNN的方法使用反饋迴路[18],基於2D CNN的手模型參數迴歸方法[22],基於深度特徵的矩陣完成方法(DeepHand)[20],交叉網使用深度生成模型[23],Lie-X方法應用李羣理論[73],DeepPrior++方法[70]和Pose-REN方法[71]。對於基於2D CNN的熱圖迴歸方法[7],我們使用熱圖估計2D關節位置,並使用相應的深度值將它們轉換爲3D位置。如圖11(左)所示,我們的方法在所有錯誤閾值上優於這九種方法。例如,當誤差閾值在20mm和50mm之間時,我們方法的好幀的比例比Pose-REN方法[71]的大約多10%。
  爲了與[21]中基於空間注意網絡的分層混合方法進行公平比較,我們在[21]中的實驗中評估了11個手關節子集(去除除拇指的根關節外的手掌關節)中不同誤差閾值內關節的比例。如圖11(中)所示,我們的方法優於[17],[18],[21],[70],[71]中的方法,在所有誤差閾值中。例如,我們方法誤差閾值20mm內的關節比例比[21]中方法的約20%多。
  我們還將我們的方法的平均誤差距離與[18],[22],[70],[71]中的方法進行了比較。如圖11(右)所示,我們的方法在大多數關節上實現了最小的平均誤差距離,並且我們方法中所有關節的平均誤差距離比方法[18],[22],[70]和[71]分別小約5.5mm,6.5mm,2mm和1.5mm。
圖11
圖11:與最先進的方法[7],[17],[18],[20],[21],[22],[23],[70],[71]的比較,[73]關於紐約大學數據集[7]。左:好幀的比例超過不同的誤差閾值。中:關節在不同誤差閾值內的比例。右:每個關節的平均誤差距離(R:root,T:tip)。

5.4.3 在ICVL數據集上比較

  在ICVL手姿勢數據集上,我們將基於3D CNN的手姿態估計方法與八種最先進的方法進行比較:潛在迴歸森林(LRF)[8],層次迴歸方法[26],手模型基於參數的方法[22],LSN方法[45],交叉網使用深度生成模型[23],REN方法[24],DeepPrior++方法[70]和Pose-REN方法[71]。如圖12(左)所示,我們的方法在此數據集的大多數錯誤閾值上優於這八種方法。
  我們還將我們的方法的平均誤差距離與[17],[45],[71],[72]中的方法進行了比較。如圖12(右)所示,我們的方法在大多數關節上實現了最小的平均誤差距離。我們方法的所有關節的平均誤差距離爲6.7mm,而[17],[45],[72]和[71]中的方法的平均誤差距離爲9.3mm,8.2mm,7.3mm和6.8mm。
圖12
圖12:與ICVL數據集[8],[22],[23],[26],[45],[70],[71],[72]的最新方法[8]進行比較[8]]。左:好幀的比例超過不同的誤差閾值。右:每個關節的平均誤差距離(R:root,T:tip)。

5.5 交叉數據集實驗

  爲了評估基於3D CNN的手姿態估計方法的泛化能力,我們進行了交叉數據集實驗,其中3D CNN模型在整個MSRA數據集上進行訓練[26],並在[34]中發佈的整個數據集上進行評估。根據[34]中的評估指標,我們計算了手腕和五指尖的平均誤差距離。如表2所示,我們將基於3D CNN的方法與[34]中報告的基於模型的跟蹤方法進行了比較,這些方法是FORTH [5],PSO [34],ICP [74],ICP-PSO[34]和ICP-PSO*(基於手指初始化的ICP-PSO)[34],以及基於CNN的多視圖方法[19]。可以看出,我們的方法在三個受試者和所有受試者的平均誤差上實現了第二好的結果。
  值得注意的是,[34]中基於模型的方法需要爲每個受試者精心校準的手模型。然而,我們的方法不使用校準的手模型,因此對於不同的受試者更靈活。在這種情況下,我們的方法仍然優於FORTH,PSO,ICP和ICP-PSO方法,如表2所示。我們的方法比使用真實值初始化第一幀的ICP-PSO*方法稍微差一點。但是我們的方法不使用測試數據的任何真實值,而是在更具挑戰性的跨數據集上執行。因此,我們的方法在該交叉數據集實驗中獲得的總體第二好結果表明我們的基於3D CNN的方法具有良好的泛化能力。
表2:在[34]中發佈的數據集上測試的7種方法的6名受試者的平均估計誤差(以mm爲單位)。
表2

5.6 定性分析結果

  MSRA,NYU和ICVL數據集的一些定性結果如圖13所示。我們將3D深度密集網絡與2D深度密集網絡的基線方法進行比較,如第5.3.4節所述。如圖13中可見,當使用相同的殘差網絡架構時,我們的基於3D CNN的方法可以比基於2D CNN的方法更好地利用深度信息並提供更準確的估計。
  我們還與英特爾RealSense SDK進行定性比較[32]。我們在整個MSRA數據集上訓練3D CNN模型,並應用此預訓練的3D CNN模型,在真實場景中使用英特爾實感SR300深度相機進行實時手姿態估計。我們基於3D CNN的方法和英特爾實感SDK[32]的定性結果如圖14所示。可以看出,英特爾實感SDK不像我們的方法那樣準確地適應複雜的手部姿勢。例如,在圖14的第4列中,當小指被無名指遮擋時,英特爾實感SDK會錯誤估計無名指的位置;在圖14的第6列中,英特爾實感SDK將食指與中指混淆;在圖14的第2列,第8列和第9列中,英特爾實感SDK將無名指與小手指混淆。相比之下,從可以更好地利用3D信息的3D CNN中獲益,我們的方法能夠正確估計這些情況下的手部姿勢。我們的演示視頻中提供了更多比較,可在線獲取。
圖13
圖13:MSRA,NYU和ICVL數據集的定性結果。我們將基於3D深密網絡(每個數據集的第2列)的方法與基於2D深密網絡的方法(每個數據集的第1列)進行比較。在每個數據集的最後一列中顯示了真實的手關節位置。我們用點雲顯示手部關節位置和骨骼。使用不同顏色可視化不同的手關節和骨骼。這個圖片最好用彩色看。
圖14
圖14:使用英特爾實感SR300深度相機在實際場景中進行測試的定性結果。對於每個手姿勢,第1行顯示手的RGB圖像;第2行顯示手的深度圖像;第3行顯示英特爾實感SDK估計的手勢[32];第4行顯示我們基於3D CNN的方法估計的手姿勢。我們用點雲顯示手部關節位置和骨骼。拇指,食指,中指,無名和小指的關節分別以綠色,藍色,青色,黃色和粉紅色可視化。 這個圖片最好用彩色看。

5.7 運行時間和模型大小

  基於3D CNN的手姿態估計方法的運行時間在5.2節中描述的計算機上平均爲7.9ms。在GPU上生成具有32×32×32體積分辨率的投影D-TSDF體積的過程平均需要2.9ms。在GPU上運行的3D深度密集網絡前向傳播的過程平均需要4.5ms。從3D CNN輸出的PCA係數重建3D體積中的手關節的3D座標並將其轉換爲攝像機座標系中的3D位置的過程在CPU上平均需要0.5ms。因此,我們的方法能夠以超過126幀/秒(fps)的速度實時運行。在我們的方法中採用手錶面補全步驟時,3D U-Net和3D深密網絡前向傳播平均需要7.6ms。因此,使用手錶面補全的方法的運行時間是11.0ms,幀速率是91fps。
  對於模型尺寸,我們的3D深度密集網絡模型大約需要192MB,用於手部表面完成的3D U-Net大約需要200MB,而[19]中的多視圖CNN大約需要1.2GB。網絡參數以32位浮點存儲。

6 結論

  我們提出了一種新的基於3D CNN的手姿態估計方法。通過採用投影D-TSDF,我們將手部深度圖像編碼爲3D體積表示,然後將其饋送到3D CNN。我們展示了3D CNN在單通道中將3D體積映射到3D關節位置很容易以端到端的方式進行訓練。3D深度密集網絡可以進一步提高3D手部姿勢估計的學習能力。爲了使3D CNN對各種手部大小和全局方向具有魯棒性,我們對訓練數據執行3D數據增強。爲了解決自我遮擋問題,我們利用完整的手部表面作爲學習3D手姿勢的中間監督。實驗結果表明,我們提出的基於3D CNN的方法在三個具有挑戰性的數據集上實現了3D手姿態估計的最先進性能,並且能夠以良好的泛化能力實時運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章