認識手勢追蹤系統:MediaPipe Hand與Oculus Hand Tracking

認識手勢追蹤系統:MediaPipe Hand與Oculus Hand Tracking

用雙手在空中操作電腦、操作虛擬物件好像是存在於科幻小說與電影中的劇情,但近年這些科學幻想已經不再只是幻想。2019年年底,Facebook Oculus 在自己的的VR產品Quest 上發布了Hand Tracking的支援,以雙手直接玩遊戲、創作或是操作電腦的可能性開始在每個一般人的生活中萌芽。

Oculus Quest的hand pose tracking system (figure from this article )

在手勢追蹤系統上,近期商用最成熟的產品之一莫過於Facebook在Oculus Quest上的手勢追蹤系統 ,透過軟硬體的良好配合,實現非常精確且穩定的手勢追蹤。相比需要綁定特定硬體配置的精細追蹤系統,Google在更早之前也推出了相似的研究導向系統MediaPipe Hand ,不同於Facebook嚴謹的設定,MediaPipe Hand追求的是在不同硬體裝置都可以通用的手勢追蹤系統。

這篇文章將會透過分析MediaPipe Hand與Oculus Hand Tracking,以盡量平易近人的科普方式,介紹當代的手勢追蹤系統是如何實現的。

Tip

文章難度:★☆☆☆☆

閱讀建議:本篇文章正文部分盡量以科普式的方法介紹當代的 hand tracking system設計,比較繁雜的部分都保留在文末的補充,可以自行斟酌閱讀。

推薦背景知識: Epipolar geometry, deep learning

Hand pose estimation

手勢與手姿態相關的研究與應用的目標是一種與電腦系統溝通最自然的方式之一,就像鋼鐵人電影中的懸浮觸控那樣。一般來說,這些與電腦系統溝通的方式都被稱為一種人機互動介面 (Human Computer Interface, HCI)。

隨著AR/VR與深度學習的發展,市面上關於手勢的應用漸漸從以往的手勢辨識 (hand gesture recognition)往手姿態估測與追蹤 (hand pose estimation & tracking)發展。比起單純的辨識手勢,如果可以知道整個手的狀態,如每個指節的位置,那我們就可以不透過鍵盤、滑鼠或是遙控器,單純使用雙手得到更自然的遊戲或創作體驗,甚至是更高階的商務或是醫療服務。

Hand pose estimation is kind of interaction with computer system (image from Iron Man, copy from here )

一個很容易想到的做法就是做一個專用的手套,裡面放滿電容 (也可以想像成一堆觸控螢幕),藉此感測使用者的手勢與手姿態。這個方法雖然聽起來可行,不過使用起來麻煩-必須戴手套。

Hand tracking glove (image from this article )

如果不想要戴手套,使用不直接接觸的感測器會是一個更友善的方法,而相機類的輸入就是其中一個可能。受惠於近年深度學習 (Deep Learning) 在電腦視覺(Computer Vision) 上的許多突破,以相機影像為輸入的手勢追蹤系統已經是一個可實現的熱門選項。

電腦視覺 (Computer Vision) 指的是指用相機和電腦代替人眼對目標進行辨識、跟蹤和測量等,試圖建立能夠從圖像或者多維資料中取得有用資訊的人工智慧系統。這在電腦科學與資訊工程是一個很熱門的領域。

(關於深度學習的簡單介紹,可參考文末的補充 1。)

在手勢辨識與追蹤上,依照目標可以大致分成:

  • 手勢辨識 (hand gesture recognition)
  • 2D手姿態估測 (2D hand pose estimation)
  • 3D手姿態估測 (3D hand pose estimation)
  • 3D手型估測 (3D hand shape estimation)。

假設今天使用者比了一個OK手勢,手勢辨識只要能夠分辨出這是比OK就算達標;2D手姿態估測則是要能夠在輸入影像上標定關鍵點 (如關節) 的2D位置;3D手姿態估測需要更進一步標定該關鍵點在3D空間中的位置;最後,3D手型估測則是希望知道整隻手的在3D空間中的輪廓與外型。

Hand pose相關的四個主要任務 (sub-images from this Youtube poster )

一般來說,難度也是照上面順序增加,即難度上 3D hand shape estimation > 3D hand pose estimation > 2D hand pose estimation > hand gesture recognition。

在相機類型的輸入部分,主流的輸入源有包含:

  1. 一般的相機影像:如彩色 (RGB) 與灰階 (gray-scale) 影像。
  2. 深度相機影像:在每個像素位置可以得到物體相對於相機的深度,一般來說造價比較昂貴、功耗也比較高。
  3. 同步多相機影像:即在同一個時間點不同視角的相機影像輸入,如果這些相機彼此的位置關係是固定的,如多鏡頭的手機,則會稱為有幾何校正 (geometric calibration) 的相機組。
(sub-images from this Youtube poster and this paper )

一般來說,這些資源的昂貴程度依序 (expansive -> cheep ) 為: depth camera > multiple cameras with geometric calibration > multiple cameras > RGB & gray-scale camera。

以大方向來看,3D手姿態估測有兩個很大的困難處:第一個是真實深度難以估測,雖然說深度相機可以提供深度資訊,但深度相機由於成本與功耗較高,一般來說消費級產品不常搭載。第二個是手被物品遮蔽或自我遮蔽 (比如說背面拳頭):事實上,遮蔽是所有基於視覺方法的痛點,這點如果不考慮非視覺的輸入,就只有增加更多不同視角的相機輸入了。

The difficulties of 3D hand pose estimation (sub-images from this paper and this paper )

MediaPipe Hand的解決方法

MediaPipe Hand 是一個偏向研究導向的應用,他的方法很基本,硬體需求也很寬鬆。雖然效果並不是最好的,卻是依然值得認識。MediaPipe Hand的輸入影像為單一一張的RGB影像,因此在估測3D pose時,真實深度 (global depth) 是一個很大的挑戰。

MediaPipe Hand的手姿態估測效果 (image from Google AI Blog )

Google團隊使用了一種近似3D hand pose的方法:一樣預測關鍵點在影像上的2D位置,並且額外預測各個關鍵點的相對深度 (local depth),即相對某個關鍵點的深度差。在大部分的情況下,手腕處或是手掌中心會被設為相對深度的基準點,也就是這個位置的深度視為零。這種表示相對深度的方法被統稱為2.5D表示法。

接下來的問題變成2.5D表示法要怎麼近似真實3D位置。回想一下現在有的資訊:(1) 各個關鍵點在影像上的2D位置、與 (2) 各個關鍵點的相對深度。這時候只要再假設 (3) 手骨長度,將2D的預測與相對深度以幾何投影方式投到3D空間,並放置在手骨長度恰好等於假設值的3D位置上,這樣就完成了3D手姿態的近似。

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

不過這樣的方法終究只能算是一種近似手法,任何一個假設或是預測的誤差都會直接影響到 global depth的精準度。

Oculus Hand Tracking的解決方法

Oculus Quest上的3D手姿態估測是目前消費級產品上使用者最好的產品之一,雖然Oculus並沒有對外公布他們hand pose tracking的演算法,不過其實可以從他們 (Facebook Reality Lab) 最近發表的論文與Quest的硬體設備配置大致推測作法。

[2020/08/27 補充] 事實上 Facebook後來在SIGGRAPH 2020發表了Quest hand tracking相關的論文,直接分享了系統、模型與資料蒐集等細節。與這篇文章推論的方法有所不同,有興趣的可以到以下這篇文章觀看。

首先,觀察Oculus Quest的相機排列:由四顆魚眼相機組成,裝置正前方為視角重疊最多的地方。如此的設計下,一般使用者的手在Quest虛擬世界的可視區 (field of view, FOV) 大多會落在至少兩顆相機的視角內,因此可以判斷在大多數時候他們會使用 multiple cameras with geometric calibration的演算法,只有在極少的位置使用單一相機的演算法。

(image from Oculus Youtube Video )

因此,在3D hand pose estimation演算法方面,Oculus除了會採用2D/2.5D hand pose estimation方法外,還可以更進一步地利用有幾何校正的多相機優勢。

三角量測法 (triangulation)是在幾何上求解3D位置常用的方法,是最直接利用有幾何校正的多相機資訊的方法之一。

三角量測法緣自航海術,也是現在國高中必備的數學觀念之一。藉由多個觀測點測量目標距離,當已知一個邊長及兩個觀測角度時,觀測目標點可以被標定為一個三角形的第三個點。

The basic triangulation (image from Wikipedia )

而在相機上的三角量測法也是一樣的套路,假設已知兩個相機間的關係 (geometric calibration) ,只要個別計算同一個關鍵點 (比如說食指尖端) 在影像上的2D位置,就可以透過三角量測法算出實際的3D位置。

Triangulation with stereo cameras (image from this website )

在多個相機輸入的情況下,使用三角量測法可以免去用單一鏡頭去近似、推估深度的不確定性。不過這並不是最佳的方法,因為不同相機影像的輸入在計算2D點的時候沒有互相參考,這裡還存在許多可使用的資訊,比如說:某些指節在相機A中被自我遮蔽,但是在相機B的視角中卻可以清楚看到這些指節。

從Facebook發在CVPR 2020上的論文來看,相比於三角量測法是在求解2D點後才考慮其他相機的資訊,Oculus在預測2D點的時候多半不是使用單一相機的影像預測,而是參考兩個或多個相機的影像的資訊才預測2D點,也就是把相機對應關係這個資訊從三角量測法再往前挪了一步,將多個相機之間的立體幾何關係加到的類神經網路的考慮中。

One of the possible approaches of Oculus Hand Tracking (sub-images from this paper )

我個人認為 Facebook這邊實踐參考立體幾何關係的 2D手姿態估測的演算法有兩個比較可能的方向:其中一個是透過預先知道的極線幾何 (Epipolar line) 關係找對應的影像位置,另一個是利用深度學系近年火熱的 latent feature disentangling優化 learnable triangulation,不過這邊講下去可能就有點太多了,有興趣的可以參考文末補充 2。

手姿態估測的研究在這兩三年內達到了一個新的高峰,並且逐漸地往平價消費端開花結果。筆者很喜歡鋼鐵人這部在2008年上映電影,當時電影中的最吸引我的就是那套懸浮觸控喜統,誰也想不到十年間,以雙手與電腦世界溝通已經是可以網購的消費產品 (全息投影還沒)。

雖然現在的手勢追蹤系統還有許多限制與待改善處,不過相信在下一個十年內,這些嶄新、自然的人機互動方法會漸漸融入許多人的生活中,就像現在的智慧型手機一樣不可或缺。

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

補充資料

類神經網路 (Artificial Neural Network)是深度學習中最主要的元素,也是深度學習為什麼被稱為深的原因。要快速、粗淺地認識類神經網路,可以直接想像成一個數學函式 (或者說根本就是一個函示)。依照不同的設計,這組函示可以輸入一段話,輸出一段答覆,像是Apple的Siri;也可以吃一張昏暗的照片,輸出一張超級夜拍的結果,像是Google Pixel的夜拍模式。

Facebook Reality在CVPR 2020發了兩篇跟3D人體姿態、手姿態估測相關的論文,一篇 (Epipolar Transformers ) 是利用了Epipolar line,尋找可能的對應特徵。另一篇則是透過latent feature disentangling改進2019年用類神經網路做triangulation的方法 (Lightweight Multi-View 3D Pose Estimation through Camera-Disentangled Representation )。

以下簡單介紹一下Epipolar Geometry中的Epipolar line與Epipolar line。參考下面的圖例,假設今天在真實世界中一點Q,投影到兩個相機 (相機中心分別為C與C’) 的成相平面中得到q與q’,而兩個相機中心連線於成相平面的分別得到e與e’兩個點。這時候q與e之間的線就稱為Epipolar line,而這些點型成的平面就稱為Epipolar plane。

Epipolar Geometry (image from this website )

Epipolar Transformers 方法的大方向就是在任一個相機成相的2D點q上,利用點q可以在另一張影像的成相平面找到一整條Epipolar line,這時候在使用類神經網路sample這條線上的點,透過這條線上的資訊,使的原本2D點可以預測得更好。

The idea proposed in Epipolar Transformer (sub-image from this paper )

事實上並不是在在任一個相機成相的 2D點上,而是在任一個 latent feature的點上,不過 CNN大致上保留了極線幾何的特性,所以透過原本的相機關係還是可以找 Epipolar line。

在這篇文章的正文中,我們介紹了triangulation的觀念,雖然triangulation在數學上是一個絕對的計算方式,不過由於只要觀測點的估測有誤差,就會導致triangulation的結果有誤差。這時候就有人想到了,是不是讓網路同時考量這些可能的誤差,再自己做triangulation

實際上的作法大致如下:將2D點的估測利用相機幾何空間上的關係,把2D的預測投影到3D空間中,再使用類神經網路 (比如說3D-CNN) 回歸3D點位置,這個方法稱為可學習的三角量測法 (learnable triangulation )

Learnable triangulation (image from this paper )

實際結果中,learnable triangulation確實超越了一般的triangulation,但是卻也付出了龐大的運算量 (3D-CNN)作為代價。這時候就有研究者動了腦筋,試圖用其他方法取代掉運算量龐大的3D-CNN,也就是Facebook在CVPR 2020上的論文

他們的方法引用了2017年一篇試圖解讀deep feature在幾何變換上的方法 (feature transform layer, FTL ),在精準度幾乎不輸原版learnable triangulation的情況下,將運算時間壓到原本的1/50。

One of the possible approaches of Oculus Hand Tracking (sub-images from this paper )

事實上現在大多的手勢追蹤系統並不是直接去找手的關節點,而是會有一套逐步逼近的流程。比如說:先用object detection的方法找到手,在將手丟到另一個類神經網路解關節點的位置。通常也會搭配一些前級 (如object tracking) 與後級 (如kinematic optimization & Kalman filter)的處理,讓整套系統更加穩定。

The hand tracking flow of MediaPipe Hand (figure from this paper )

References

  1. MediaPipe Hands: On-device Real-time Hand Tracking[arXiv]
  2. On-Device, Real-Time Hand Tracking with MediaPipe[Google AI Blog]
  3. Oculus Picks: 5 Hand Tracking Experiences on Quest[Oculus Website]
  4. Hand Pose Estimation via Latent 2.5D Heatmap Regression[ECCV 2018]
  5. Learnable Triangulation of Human Pose[ICCV 2019]
  6. Epipolar Transformers[CVPR 2020]
  7. Lightweight Multi-View 3D Pose Estimation through Camera-Disentangled Representation[CVPR 2020]
  8. Pinhole Camera: Epipolar Geometry[拾人牙慧]
  9. Epipolar geometry[inf.ed.ac.uk]
comments powered by Disqus