DeepPrior++: Improving Fast and Accurate 3D Hand Pose Estimation

摘要

  DeepPrior[18]是一種基於深度學習的簡單方法,可以在給定深度圖的情況下預測手的關節3D位置。自2015年初公佈以來,在一些令人印象深刻的工作中表現優異。在這裏,我們通過簡單的改進表明:添加ResNet層,數據增強和更好的初始手部定位,我們在三個主要基準(NYU,ICVL,MSRA)上實現了比更復雜的最新方法更好或更相似的性能,同時保持了原始方法的簡單性。我們的新實現可在https://github.com/moberweger/deep-prior-pp上找到。

1 介紹

  準確的手勢估計是許多人機交互或增強現實任務的重要要求,並且在計算機視覺研究界引起了很多關注[9,10,16,20,21,34,36,43]。即使使用結構光或時間飛行傳感器等3D傳感器,它仍然非常具有挑戰性,因爲手具有高自由度,並且在圖像中表現出自相似和自遮擋。
  一種流行的3D手姿態估計方法是DeepPrior,由[18]引入。DeepPrior是一種基於深度網絡的方法,它使用單個深度圖像作爲輸入,並直接預測手骨架的3D關節位置。DeepPrior的關鍵思想是將主成分分析(PCA)計算出的先前3D手勢明確地整合到卷積神經網絡中。這爲3D手姿勢估計提供了一種簡單,準確且快速的方法。
  自原始論文發表以來,機器學習和深度神經網絡領域取得了巨大的進步。我們利用該領域的最新進展更新原始方法。因此,我們將結果方法稱爲DeepPrior++。特別:

  • 我們通過引入殘差網絡[7]來提取特徵圖,更新了模型架構,使模型更加強大;
  • 我們改進了初始手部定位方法。DeepPrior中的這一步是基於啓發式的。這裏我們使用訓練好的方法;
  • 我們改進了訓練程序,以利用現有數據中的更多信息。

我們在https://github.com/moberweger/deep-prior-pp上公佈了我們的改進代碼,希望它對社區有用。
  在下文中,我們將在第3節中簡要回顧原始的DeepPrior方法,然後在第4節中介紹我們的修改。第5節中對修改進行了評估,並與公共基準數據集上的最新方法進行了比較。

2 相關工作

  有大量的早期工作涉及手部姿勢估計,我們參考[3]進行概述。2015年,對基準數據集[30]的幾項工作的評估表明,DeepPrior在準確性和速度方面表現最好。自那時以來取得了巨大的進步,在這裏我們簡要回顧相關的工作。我們使用三個主要基準數據集中的至少一個(即NYU[40],MSRA[28]和ICVL[34])中使用常用錯誤度量來報告結果,和所有工作進行比較。這些工作在本節中標有星號*。
  許多最近的方法利用手部運動樹的層次結構。[35*]沿骨架樹前進並預測樹內子關節的位置。類似地,[44*](Lie-X)預測沿骨架樹的更新,其更正初始姿勢並使用李代數來約束這些更新。孫等人[28*](HPR)估計每個手指的歸一化座標系中的關節位置,[25]爲每個手指使用單獨的迴歸量來預測在最近鄰公式中組合的空間和時間特徵。[46]引入了一個專注於每個關節的空間注意機制和一個額外的優化步驟來強制運動約束。[14]沿着運動樹將手分成較小的子區域。[45]*爲每個姿勢預測一個姿勢類,併爲每個類訓練一個單獨的姿勢迴歸量。所有這些方法都需要多個預測器,每個關節或手指一個,並且額外的迴歸器通常用於算法的不同迭代。因此,不同模型必須訓練和評估的迴歸模型的數量範圍從數十個到多於50個。
  爲了克服這個缺點,有幾項工作將運動層次結構整合到一個CNN結構中。郭等人[6*](REN)爲輸入特徵的不同空間區域訓練子網集合,Madadi等人[15*]使用樹狀CNN架構來預測運動樹的不同部分。但是,這需要根據註釋專門設計的CNN架構。
  還提出了輸入深度圖像的不同數據表示。鄧等人[2*](Hand3D)將深度圖像轉換爲3D體積,並使用3D CNN預測關節位置。然而,3D網絡顯示出低計算效率[23]。不同的是,[42*]使用表面法線而不是深度圖像,但是當前深度傳感器不容易獲得表面法線,因此引入了額外的計算開銷。Neverova等[17]*將手部分的分割與關節位置的迴歸相結合,但分割對傳感器噪聲敏感。
  不直接預測3D關節位置,[40*]提出了一種預測不同關節的2D熱圖的方法。[5*]擴展了這項工作並使用了多個CNN用於預測來自深度圖像的不同重投影的熱圖,每次重投影需要單獨的CNN。此外,這些方法需要複雜的後處理以使運動模型適應熱圖。
  Bouchacourt等人[1*](DISCO)提出了一個概率框架,使用網絡來學習手部姿勢的後驗分佈,並且可以從分佈採樣。但是,目前還不清楚如何在實踐中將這些採樣結合起來。Wan等人[41*](CrossingNets)使用兩個生成網絡,一個用於手勢,一個用於深度圖像,並學習這兩個網絡之間的共享映射,其涉及在複雜過程中訓練多個網絡。
  Oberweger等人[19*](Feedback)學習CNN以合成手的深度圖像並使用合成的深度圖像來預測初始手姿勢的更新。同樣,這需要訓練三種不同的網絡。
  周等人[48*](DeepModel)通過引入一個強制執行的附加層,將手模型集成到CNN中3D手模型的物理約束,其中約束必須事先手動定義。
  Fourure等[4*](JTSC)通過引入共享表徵來利用來自不同數據集的不同註釋,這是一個有趣的想法來收集更多訓練樣本,但在處理傳感器特徵時具有缺點。
  張等人[47*]將姿勢估計表示爲多元迴歸問題,然而,這需要在運行時解決複雜的優化問題。
  最近也有一些基於模型的生成方法引起了很多關注。儘管非常準確,[12*],[26],[32*],[37*]的工作需要手的3D模型,應該根據用戶的手進行調整[26],[33*],並在推理期間運行復雜的優化。
  與這些最近的方法相比,我們的方法更容易且更快速地訓練,具有更簡單的架構,更準確,並且以相當的速度運行,即實時。

3 原始的DeepPrior

  在本節中,我們將簡要回顧一下原始的DeepPrior方法。更多細節可以在[18]中找到。
  DeepPrior旨在從單個深度圖像估計3D手部關節位置。它需要一組標有3D關節位置的深度圖像用於訓練。
  爲簡化迴歸任務,DeepPrior首先執行手部的3D檢測。然後它估計包含手的粗略3D邊界框。和[34]一樣,DeepPrior假定手是距離相機最近的對象,並從深度圖中提取以該對象的質心爲中心的固定大小的立方體。然後,它將提取的立方體大小調整爲128×128的標準化爲[-1,1]的深度值塊。
  深度不可用的點(結構光傳感器可能發生,例如,深度值比立方體的背面更遠)被指定爲深度爲1.此歸一化對於學習階段很重要,爲了從手到相機的不同距離不變。
  考慮到手的物理約束,不同的3D關節位置之間存在強相關性。因此,DeepPrior不是直接預測3D關節位置,而是在較低維空間中預測姿勢的參數。由於這強制了手姿勢的約束,這提高了預測的可靠性。
  如圖1所示,DeepPrior通過使用3D手姿勢數據PCA中的主要成分初始化最後一層的權重,在網絡結構之前實現姿勢。然後,使用標準反向傳播訓練整個網絡。
image
圖1:原始DeepPrior的網絡架構。C表示卷積層,其中濾波器的數量和濾波器大小如圖所示,FC是具有神經元數量的完全連接層,P是具有池化大小的最大池化層。所示的多層網絡可以是任意的神經網絡,具有用於先前的附加層。DeepPrior通過從應用於3D手姿勢數據的PCA預先計算最後一層的權重來引入姿勢先驗。

4 DeepPrior++

  在本節中,我們將描述我們的更改以增強原始的DeepPrior方法,其中包括改進的訓練數據增強,更好的手部定位以及更強大的網絡架構。有關實現級別的詳細信息,請參閱代碼。

4.1 改進的訓練數據增強

  由於我們的方法是數據驅動的,因此我們的目標是從可用數據中儘可能多地利用信息。文獻[13,40]中使用了許多不同的增強方法,例如縮放,翻轉,鏡像,旋轉等。在這項工作中,我們使用深度圖像,這產生了特定的數據增強方法。具體來說,我們使用旋轉,縮放和平移,以及它們的不同組合。
  旋轉:手可以輕鬆地圍繞前臂旋轉。可以通過深度圖像的簡單平面內旋轉來近似該旋轉。我們使用圖像的隨機平面內旋轉,並通過將3D註釋投影到2D圖像上,應用相同的平面內旋轉,並將2D註釋投影回3D座標來相應地改變3D註釋。旋轉角度採用均勻分佈採樣,間隔爲[-180°,180°]。
  縮放:MSRA[28]和NYU[40]數據集包含不同的人,手的大小和形狀不同。雖然DeepPrior沒有明確的規模不變,但我們可以通過改變訓練數據中裁剪的大小來訓練手大小不變的網絡。因此,我們通過從正態分佈採樣的隨機因子(深度爲1,方差爲0.02)從深度圖像縮放裁剪的3D邊界框。這會改變裁剪立方體中手部大小的外觀,並根據隨機因素縮放3D關節位置。
  平移:由於手部3D定位不完美,我們通過向手部3D位置添加隨機3D偏移來增強訓練集,並將深度圖像的作物的3D位置居中。我們從正態分佈中對隨機偏移進行採樣,方差爲5mm,這與我們使用的手部3D檢測器的誤差相當。我們還根據此偏移修改3D註釋。
  在線增強:增強是在訓練期間在線進行的,因此網絡在每個時期看到不同的樣本。這導致總共超過1000萬個不同的樣本。增強有助於防止過度擬合併且對於手與訓練集的偏差更加穩健。雖然樣本是相關的,但它在測試時顯着有幫助,正如我們在實驗中所示。
  強大的先驗:同樣,我們也改進了先驗,這是通過將PCA應用於3D手勢而獲得的。我們通過在3D中隨機使用原始姿勢的旋轉,縮放和平移來採樣1M姿勢。我們使用這組增強的3D姿勢來計算先驗。

4.2 精確的手部定位

  原始的DeepPrior使用了非常簡單的手部檢測。它基於手的深度分割的質心。因此,使用深度閾值分割手,並計算3D質心。然後,圍繞質心提取3D邊界框。
  DeepPrior++仍然使用此方法,但引入了一個精確步驟,可顯着提高最終的準確性。該細化步驟依賴於迴歸CNN。該CNN應用於以質心爲中心的3D邊界框,並經過訓練以預測中指掌指關節(MCP)的位置,我們將其作爲參考。我們還使用增強訓練數據來訓練CNN,如第4.1節所述。
  對於實時應用程序,我們不是從每個幀中提取質心,而是將此迴歸CNN應用於前一幀的手部位置。這仍然準確,同時在實踐中更快。

4.3 更強大的網絡架構

  殘差網絡。自DeepPrior引入以來,對更好的深層架構進行了大量研究[8,24,31],殘差網絡(ResNet)架構[8]似乎是性能最佳的模型之一。
  們的模型類似於[8]的50層ResNet模型。由於ResNet最初是用於圖像分類,我們調整架構以適應我們的迴歸問題。最重要的是,我們刪除了全局平均池化,並添加了兩個完全連接層。網絡輸入爲128×128像素,值歸一化爲[-1,1]。採用的ResNet模型如圖2所示。網絡包含一個初始卷積層,包含64個濾波器和2×2最大池化。該卷積層之後是四個殘差模塊,每個模塊具有2×2的步長,並且具有{64,128,256,256}個濾波器。
image
圖2:我們的ResNet架構。C表示卷積層,其中濾波器的數量和濾波器大小如圖所示,FC是具有神經元數量的完全連接層,D是具有丟棄神經元的概率的丟棄層,R是具有濾波器數量和過濾器大小的殘差模塊,以及P具有池化區域大小的最大池化層。來自深度圖像的手部裁剪被送入ResNet,預測最終3D手部姿勢。
  用於細化手部定位的更簡單的模型如圖3所示。它由三個具有最大池化的卷積層和兩個帶有Dropout的全連接層組成。
image
圖3:用於精確手部定位的網絡架構。如圖2所示,C表示卷積層,FC表示完全連接層,D表示Dropout層,P表示最大池化層。來自深度圖像的初始手工裁剪被饋送到網絡,該網絡預測偏移以校正不準確的手部定位。
  我們使用具有標準超參數和學習率爲0.0001的梯度下降算法ADAM[11]來優化網絡參數,並訓練100個週期。
  使用Dropout進行正則化。ResNet模型可以過度擬合,我們經歷過這種行爲,特別是在手部姿勢變化較小的數據集上[34]。因此,我們將Dropout[27]引入模型,該模型被證明可以提供一種有效的神經網絡正規化方法。我們在殘餘模塊之後的兩個完全連接的層上應用具有0.3的壓差率的二進制Dropout。這樣可以培訓高容量的ResNet模型,同時避免過度擬合併實現高度準確的預測。

5 評估

  我們在三個用於手勢估計的公共基準數據集上評估我們的DeepPrior++方法:NYU數據集[40],ICVL數據集[34]和MSRA數據集[28]。爲了與其他方法進行比較,我們將重點放在原始DeepPrior論文之後發佈的作品上。在文獻中使用不同的評估指標用於手姿態估計,並且我們報告的數字在論文中陳述或者如果提供的話從圖表測量,和/或繪製相關圖表用於比較。
  對於所有實驗,我們報告30維PCA先驗的結果。通過使用有效的數據增強實現,所有實驗的訓練時間相同,在配備3.2GHz和64GB RAM的Intel i7和nVidia GTX 980 Ti顯卡的計算機上大約需要10小時。

5.1 評估指標

  我們使用兩種不同的指標來評估準確性:

  • 首先,我們將3D手部姿勢估計的準確性評估爲平均3D關節誤差。這是文獻中最常用的度量標準,並且由於評估的簡單性,允許與許多其他工作進行比較。
  • 作爲第二個更具挑戰性的指標,我們繪製了所有預測關節低於給定的最大歐幾里德距離真實值的幀的分數[38]。

5.2 NYU數據集

  NYU數據集[40]包含超過72k的訓練和8k多視角RGB-D數據的測試幀。使用結構化的基於光的傳感器捕獲數據集。因此,深度圖顯示缺失值以及噪聲輪廓,這使得數據集非常具有挑戰性。對於我們的實驗,我們僅使用來自單個相機的深度數據。數據集具有準確的註釋,並表現出不同姿勢的高度可變性。訓練集包含來自單個用戶的樣本和來自兩個不同用戶的測試集樣本。我們遵循既定的評估協議[18,40],並使用14個關節來計算指標。
  我們的結果與現有技術方法的比較一起顯示在表1中。我們將DeepPrior++與幾種相關方法進行比較,它明顯優於其他方法。
image
表1:與NYU數據集[40]的最新技術進行比較。我們以毫米爲單位報告平均3D誤差。DeepPrior ++的表現明顯優於該數據集的所有其他方法。
  在圖4中,我們將我們的方法與其他判別方法進行比較。雖然Supancic等人[30]一小部分幀報告了非常準確的結果,我們的方法在大多數幀中表現得更好。
image
圖4:與NYU數據集[40]中最先進的判別方法的比較。 我們繪製了所有關節距離最大距離的幀的分數。曲線下面的較大區域表示更好的結果。我們提出的方法在其他判別方法中表現最佳。(最好彩色觀看)
  在圖5中,我們使用不同的評估協議比較了現有技術的方法,即我們遵循[32,37]的協議,他們評估測試集的前2400幀。同樣對於該協議,我們明顯優於Taylor等人的現有技術方法[37]。請注意,[32,33,37]需要一個可能是用戶特定的3D手模型,而我們的方法僅使用沒有任何3D模型的訓練數據。
image
圖5:與NYU數據集[40]上最先進的基於模型的方法進行比較。我們根據[32,37]的協議繪製幀的分數,其中每幀的平均關節誤差在距離真實值的最大距離內。曲線下面的較大區域表示更好的結果。我們提出的方法甚至優於該數據集上基於模型的方法,超過90%的幀具有小於10mm的誤差。(最好彩色觀看)

5.3 ICVL數據集

  ICVL數據集[34]包括一個超過180k深度幀的訓練集,顯示各種手部姿勢。測試集包含兩個序列,每個序列大約700幀。使用飛行時間相機記錄數據集,並具有16個帶註釋的關節。深度圖像具有高質量,幾乎沒有任何缺失深度值,並且具有很少噪聲的清晰輪廓。儘管作者提供了不同的人工旋轉訓練樣本,但我們僅從真正的22k幀開始,並應用4.1節中描述的數據增強。然而,與其他數據集[28,40]相比,該數據集的姿態可變性是有限的,並且註釋相當不準確,如[18,30]中所討論的。
  我們在表2中展示了與不同的最新方法的比較。同樣,我們的方法顯示了最先進的準確性。但是,與其他方法的差距要小得多。這可能是因爲數據集更容易,姿勢變化較小[30],並且由於評估註釋中的錯誤[18,30]。
image
表2:與ICVL數據集的最新技術比較[34]。我們以毫米爲單位報告平均3D誤差。
  在圖6中,我們將DeepPrior++與ICVL數據集[34]上的其他方法進行了比較。我們的方法與Guo等人[6]的工作類似,Wan等人[42],唐等人[35],都在這個數據集上實現了最先進的準確性。這可能表明數據集上的性能是飽和的,剩餘的錯誤是由於註釋的不確定性。這一實證研究結果與[30]中的討論類似。雖然唐等人[35]在圖6的曲線的某些部分表現略好,我們的方法在NYU數據集上表現得更好,如圖5所示。
image
圖6:與ICVL數據集[34]的最新技術比較。我們繪製了所有關節距離真實值最大距離的幀的分數。一些作品顯示了類似的誤差曲線,可以作爲該數據集飽和性能的指標。 (最好彩色觀看)

5.4 MSRA數據集

  MSRA數據集[28]包含大約76k深度幀。它是使用飛行時間相機拍攝的。數據集包括來自9個不同受試者的序列。我們遵循共同評估協議[5,29,41]並執行留一法交叉驗證:我們對8個不同的受試者進行訓練並評估剩餘的受試者。我們爲每個受試者重複此過程,並報告不同運行的平均錯誤。
  表3中顯示了平均3D誤差的比較。再次,DeepPrior++ 的表現優於現有方法3mm。在圖7中,DeepPrior ++也優於繪製的度量標準上的所有其他方法,這表明它還能夠處理不同用戶的手。
image
表3:與MSRA數據集[28]的最新技術比較。我們以毫米爲單位報告平均3D誤差。DeepPrior ++的表現明顯優於該數據集的所有其他方法。
image
圖7:與MSRA數據集[28]的最新技術比較。我們繪製了所有關節距離真實值最大距離的幀的分數。曲線下面的較大區域表示更好的結果。我們的方法明顯優於當前最先進的判別方法。(最好彩色觀看)

5.5 消融實驗

  我們進行了額外的實驗,以顯示我們修改的貢獻。我們評估了對NYU數據集[40]的修改,因爲它具有最準確的註釋,具有不同的姿勢,以及兩個不同的用戶進行評估。

5.5.1 訓練數據增強

  爲了評估訓練過程的貢獻,我們測試了不同的數據增強方案。結果顯示在表4中。使用數據增加導致精度增加超過7mm。最重要的是,增加手部平移可以解決手部檢測部分中的錯誤,並且增加旋轉會影響旋轉的手部姿勢,從而有效地擴大了訓練姿勢。
image
表4:新訓練程序對NYU數據集的影響[40]。通過使用不同的數據增強方法,可以顯着提高準確度。在第一行中,我們不使用任何數據擴充。在最後一行中,我們對訓練數據應用增強,但不是先計算姿勢,顯示先前具有良好姿勢的重要性。
  儘管增加比例不像增加NYU數據集上的平移或旋轉幫助那麼大,但是在用戶手的大小未被準確確定的情況下,即在實際應用中的新用戶,它可以有所幫助。有趣的是,通過增強3D手勢來計算先驗也是非常重要的。如果數據被增強,但是先驗是從原始3D手姿勢計算的,則與沒有數據增加相比,準確性更差,因爲先前的表達不足以捕獲增強的手姿勢的方差。

5.5.2 手部定位

  此外,我們評估手部定位對最終3D關節誤差的影響。對於此實驗,我們使用ResNet架構和所有數據增強。結果顯示在表5中。使用手的真實位置可以實現最高精度,這在實踐中是不可行的,因爲真實的探測器不能提供完美的手部定位。這表明,通過使用更精確的3D手部定位方法仍有改進的餘地。
image
表5:手部定位精度對NYU數據集的影響[40]。真實定位給出了最低的3D姿勢誤差,但這種定位在實踐中並不適用。我們對常用質心定位(CoM)的改進將精度提高了1mm以上。
  從非常簡單的質心定位開始,並通過細化估計的質心定位,該步驟將3D定位誤差降低了近20mm。這反過來又使最終的平均3D姿勢誤差進一步提高1mm以上。

5.5.3 網絡架構

  我們評估表6中不同網絡架構的影響。我們使用精細的手部本地化和所有數據增強來訓練兩個網絡。改進的訓練程序和更好的定位已經將原始架構的結果提高了3mm以上(距離[18]19.8mm)。使用所提出的ResNet架構,由於模型的更高容量,平均精度可以再提高4mm。我們還評估了原始架構,但改變了卷積層,使得它們使用與ResNet架構相同數量的過濾器,但這種架構仍然不如ResNet。
image
表6:網絡架構對NYU數據集的影響[40]。最近的ResNet架構比原始網絡架構表現得更好,即使使用與原始架構的ResNet相同數量的過濾器(帶有更多過濾器的原始版本)。最重要的是,我們仍然可以在手動跟蹤應用程序中以30fps保持實時性能。
  ResNet架構比原始實現慢,但它仍然能夠在單個GPU上以超過30fps的速度運行,使其適用於實時應用程序。

5.6 定性評估

  我們在圖8中顯示了幾個定性結果,我們將其與原始的DeepPrior進行比較[18]。通常,與原始的DeepPrior相比,DeepPrior ++提供了明顯更好的結果,特別是在高度清晰的姿勢上。這可以歸因於數據增加和更好的定位,也可以歸因於更強大的CNN結構,這使得CNN能夠學習用於複雜關節的高度準確的姿勢。
image
圖8:NYU數據集上的DeepPrior和DeepPrior ++之間的定性比較[40]。我們展示了在深度圖像上投影的推斷的3D關節位置。真實值以藍色顯示,預測的姿勢以紅色顯示。DeepPrior ++提供的結果明顯優於原始DeepPrior的結果,特別是在複雜姿勢上。(最好彩色觀看)

6 討論和結論

  自DeepPrior發佈以來,關於姿勢估計的其他工作在深度學習框架中引入了一個姿勢,顯示了此類先驗的重要性:

  • [22]提出用編碼器替換PCA計算的線性變換。首先將該編碼器與解碼器一起訓練,以預測姿勢的緊湊表示。由於解碼器具有更復雜的形式,因此它在準確性方面帶來了一些改進。
  • [39]考慮人體姿勢估計並且還使用自動編碼器,但是計算比原始姿勢更大尺寸的姿勢嵌入,這似乎顯着提高了身體姿勢估計情況下的準確性。
  • [49]通過從2D熱圖估計3D手部關節位置來學習姿勢,將先驗分解爲規範座標和相對運動,而我們之前使用PCA學習並不區分這兩者。

  也許本文提出的工作的高級結論是我們的社區在比較方法時應該小心:通過關注其不同的步驟,我們能夠使DeepPrior++的表現明顯優於原始的DeepPrior,並且表現相似或更好比起最近的作品,而兩種方法的關鍵思想是相同的。

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