解密Oculus Quest手勢追蹤系統:MEgATrack Hand Tracking

解密Oculus Quest手勢追蹤系統:MEgATrack Hand Tracking

2019年年底,Facebook Oculus 在自己的VR產品Quest 上發布了hand tracking的支援。這是一個消費者端的完整手勢追蹤系統,不只是判斷手勢,而是幾近精準地抓到了使用者的每個指節位置。厲害的是,這樣精準的追蹤只使用上了4顆不帶深度訊息的灰階相機,並且運行在行動裝置等級的處理器Qualcomm Snapdragon 835 上。

Oculus Hand Tracking and it’s paper MEgATrack on SIGGRAPH

在先前的文章,我依照兩篇Facebook Reality Lab發在2020 CVPR的論文,推測了這套手勢追蹤系統可能的實現方法,沒想到過了沒多久,在同年SIGGRAPH上Facebook Reality Lab直接、大方地在一篇論文 (MEgATrack: Monochrome Egocentric Articulated Hand-Tracking for Virtual Reality ) 中解密了他們的系統雛形。

比起先前發表的多相機keypoint neural network,MegaTrack使用了更加簡單的單一影像網路,配合最佳化3D pose的Levenberg-Marquardt方法,實現了不論在單相機或多相機情況下都能運作的系統。

Tip

文章難度:★★★★☆

閱讀建議:這篇文章主要介紹 Oculus hand tracking系統的雛型 MEgATrack。對於不論研究端或是工程端的人員都值得研讀。這篇文章會介紹許多在研究與工程上的改進,包含 3D位置的近似、魚眼相機深度的修正,系統導向的物件偵測器等等。

推薦背景知識: Hand pose estimation、hand tracking、object detection、fish-eye camera model、2.5D pose presentation、Levenberg-Marquardt。

Main Components

MegaTrack的追蹤系統主要由三個部分構成:

  1. Detection Network (DetNet):輸入一整張相機影像,使用網路偵測使用者的手。並crop手附近的圖片,做為下一級的輸入。
  2. Keypoint Network (KeyNet):輸入一張包含手的影像與21個參考的3D點(細節晚點解釋),預測21個手keypoint的2.5D pose,即camera uv space下的2D pose與相對深度 (事實上MegaTrack預測距離相機中心的相對距離,細節一樣晚點解釋)。
  3. Hand Kinematic Model:使用一個26 DoFs的hand kinematic model,透過觀測KeyNet預測的2.5D pose,近似 (最佳化) 真實的3D pose。
The overall pipeline of MegaTrack (figure from the paper )

Estimate 3D poses with Levenberg-Marquardt

我個人認為Hand Kinematic Model是這套系統最關鍵的模塊。以往大部分的2.5D近似3D方法都是利用某段特定的骨長,比如說手腕到中指的長度,將2.5D pose投影到符合這段長度的位置作為近似的3D pose [2]。

Recover 3D hand pose fron 2.5D representation (sub-image from this paper )

MegaTrack選擇妥善使用所有keypoint一起最佳化3D pose,這一個比較難實作,但是更加穩定的作法。即使以往的近似方法都會挑選最穩定的骨骼作為投影的目標,這樣還是難免會有出錯的時候。MegaTrack使用一個26DoFs的hand kinematic model:手腕6 DoFs (rotation and translation),每根手指4DoFs (rotation only),對KeyNet的2.5D pose計算residual,使用Levenberg-Marquardt方法最佳化。

最佳化時,透過hand kinematic model進行forward kinematic,得到3D空間中的21個3D點 (與KeyNet一樣的21個點)。實際上最佳化的residual term有三項:(1) 將21個3D點投影回相機空間,與KeyNet預測的2D pose越接近越好;(2) 計算21個3D點的relative distance,與KeyNet預測的depth distance越接近越好;(3) 與前一個pose越接近越好,即smooth term。

如果不熟悉 Levenberg-Marquardt方法,可以想像這是一個窮舉 3D空間中手的方法,並從中挑選最符合相機觀察 (KeyNet輸出的 2.5D pose) 的那隻手,就是這個演算法最終輸出的結果。

The residual terms for optimizing hand kinematic model.

除了 26個kinematic的自由度外,MegaTrack的kinematic model還需要一個代表手大小的比例 (scale)。這個scale 一樣會透過Levenberg-Marquardt最佳化。為了精準的估測scale,MegaTrack設計在雙眼情況下,透過連續的多個 frame (實務上為 100個 frame) 一起近似這個 scale。

這個方法的優點除了比使用單一骨骼長度近似來的穩定 (數大便是美) 以外,另一個優點是可以直接擴充到多個相機的情況。在雙相機的情況下並不需要設計額外的演算法,只要將第二個相機的資訊也拿來計算residual,即雙倍的observation,增加了找到好的3D pose的機會。

這個方法在使用者體驗上的優勢是降低了相機間hand over的誤差。在一般的演算法設計上,雙眼預測的pose勢必會比單眼來的好,但若是在單眼區與雙眼區運行不同演算法,會造成切換時的不流暢。比如說,使用者將手從雙眼區移動到單眼區時,演算法的輸出或許會因為切換,突然改變好幾公分。

MegaTrack (或說Quest) 的相機配置 (figure from the paper )

Estimate 2.5D poses with neural network

MEgATrack選擇使用網路預測2.5D pose,再使用2.5D pose近似3D pose的方法。事實上,MEgATrack預測2.5D pose的演算法本質沒有太多特別突出的設計,而是基於相機、系統做出細節性的改動,讓使用者體驗上獲得極關鍵性的提升。

MEgATrack的detection model專注於追蹤使用者的雙手,直接假設任何時候最多只會有兩隻手出現在畫面中。因此有別於一般dense detection (不管是anchor-free or anchor-based),MegaTrack DetNet不對feature map的每個像素點預測,而是直接以整全觀 (holistic) 的方法分別預測左右手的座標以及是否出現在畫面中。以dense detection的觀念來看,就是只在影像中心點跑一次detection head。

Dense preiction v.s. MegaTrack DetNet (sub-figure from this paper and this paper )

MegaTrack DetNet的設計相當貼近於它的系統需求,除了永遠只找各一支左右手外,在預測 bounding box的時候只預測 3 DoFs的 box。因為後級的 KeyNet固定吃正方形的 box,即使框了長方形還是需要調整成正方形,因此直接輸出 (Y, X, H=W) 。

MEgATrack KeyNet其中一個最有意思的地方在於魚眼鏡頭的處理。由於魚眼相機的投影在邊緣是有明顯的distortion,這個distortion讓預測2.5D的深度變得相當地曖昧 (ambiguous),因此MEgATrack選擇讓模型預測distance而非深度。這邊的distance指的是對於相機中心的歐幾里得距離,一般我們討論的深度 (depth) 是指點垂直於成相平面、平行於光軸的距離。

depth與distance在魚眼相機的差異 (figure from the paper )

第二個有意思的地方是KeyNet的輸入除了影像外,還要輸入21個keypoint的extrapolated 3D pose,也就是之前預測的2.5D pose通過kinematic model最佳化後得到3D pose,再依照時間序外插。但這並不意味著KeyNet是RNN (recurrent neural network)。這個遞迴的pose是一個給網路的提示,而這個提示可以提升在self-occlusion時pose的穩定性

最後,相比於detection model使用holistic approach,keypoint estimation一般需要更精確的座標資訊,因此keypoint estimation的網路輸出都是heatmap,再從heatmap中找出響應最大的數值,而非直接輸出座標。這邊一個比較特別的地方是MEgATrack KeyNet不只是在2D pose預測heatmap,在local distance的預測上也使用了1D heatmap。

Overall Pipeline

假設今天一個新的使用者戴起Oculus Quest,整個手勢追蹤會先在雙手區完成kinematic model scale的校正。

首先,在輪流在不同camera上跑detection,直到找到其中一隻手。先利用這個camera的影像通過KeyNet與pose optimization得到第一個3D pose,再利用這個3D pose投影到其他camera中找到別的camera中的手。這個方法減少了多次跑DetNet所需的運算資源。接下來進入Detection-by-tracking模式,外插上一禎的kinematic model,以推測下一禎手會出現的位置,更進一步的減少運行DetNet的運算需求。

在使用100禎雙手的影像完成kinematic model scale的校正後,這個scale會被儲存下來,直到裝置被放下才會清除。大多數的情況下,只有KeyNet與pose optimization在持續地運行,DetNet只有在lost tracking的情況下才會被重新啟動。另外,為了壓低運算量,即使同一支手存在於超過兩個camera的視角內,MegaTrack還是只會跑其中兩隻camera

至於 lost tracking的判斷論文並沒有特別提及,我個人猜測這是可以從 pose optimization中推測。如果無法在 3D空間出找出符合 kinematic model的結果,就代表不是 KeyNet結果很差,就是 lost tracking。而這兩個情況在 Oculus Quest的系統中都是選擇讓手消失於 VR世界中。

好了~這篇文章就先說到這邊。為了避免文章過於冗長,我將一些細節細節放在文末的補充處。事實上,MegaTrack這篇論文說不上有什麼亮點,但又好像字字珠璣,全部都是亮點,每個細節都打在建構穩定hand tracking的痛點上。這篇論文像是一個將研究與工程完美結合的示範,讓大家看看車尾燈,又不容易複製 (DetNet與KeyNet都大約有兩百萬比訓練資料)

相比許多關注在pose estimation的論文,MegaTrack提供的是一整個系統的觀點。建議對hand tracking有興趣的人務必細讀一下原文。

老話一句,科技的進展快速,看論文的速度永遠跟不上新論文的產生,我的觀點可能也會存在瑕疵,若有發現什麼錯誤或值得討論的地方,歡迎回覆文章或來信一起討論 :)

Supplementary

在實作上,MegaTrack的DetNet與KeyNet分別使用了260萬張與200萬張照片。由於KeyNet dataset收集難度較高,這兩個dataset的收集與標註方法皆有所不同。

KeyNet的資料使用了6支灰階相機與1支深度相機構成一組多視角的相機陣列,並做成一個可以背在身上背包,方便到各種不同光源與背景的環境蒐集,以達成夠多樣的dataset。在收集資料時,受試者被要求手掌必須正對於深度相機,確保可以透過RGB-D的模型得到精準的標註資料,並且有多個環繞的灰階相機可以蒐集不同視角的資料。

收集keypoint network訓練資料的相機陣列 (figure from the paper )

收集DetNet則簡單許多,由訓練良好的DetNet主導資料標註的過程。在收集好大量未標註的資料,由標註人員負責框第一個bounding box,接下來只要運行detection-by-tracking的演算法。標註人員只需要抓出KeyNet的錯誤,重新框一個box。這個流程是一種human-in-the-loop的semi-automatic標註方法,大幅加快資料標註的速度。

半自動標註bounding box的方法 (figure from the paper )

MegaTrack KeyNet的一大特色就是除了影像外還要輸入一組參考用的keypoint 3D pose,而這組21個3D pose最大的效果在於穩定模型的預測,在大量ambiguous的情況下提供穩定的模型預測。

比如說以下這張食指與中指分不太清楚的影像,但在sequential上是有幾個frame可以看到中指,這樣的資訊持續傳遞下去就可以降低食指被誤判為中指的情況。

輸入keypoint對於預測的幫助 (figure from the paper )

MegaTrack的DetNet與KeyNet架構都十分簡單,並大致切分為兩個版本:普通版本與輕量版本。輕量版本可以有效率地運行在mobile端 (Snapdragon 835 mobile processor with a Hexagon v62 DSP)。

整體上網路主架構以ResNet-34 [3] 為主,但將residual block換為inverted residual block (IRB),其實就是所謂的MobileNetV2[4]。

輕量detection network (DetNet-F) 架構 (table from the paper )
輕量keypoint network (KeyNet-F) 架構 (table from the paper )

References

[1] MEgATrack: Monochrome Egocentric Articulated Hand-Tracking for Virtual Reality[SIGGRAPH 2020] [2] Hand Pose Estimation via Latent 2.5D Heatmap Regression[ECCV 2018] [3] Deep Residual Learning for Image Recognition[CVPR 2016] [4] MobileNetV2: Inverted Residuals and Linear Bottlenecks[CVPR 2018]

comments powered by Disqus