快速單目三維人手和身體的運動捕捉
1. 論文簡要
人體動作的本質細微差別往往是通過肢體動作和手勢的結合來傳達的,但現有的單目動作捕捉方法大多側重於身體動作捕捉而忽略手的部分,或者只關注手的動作捕捉而不考慮身體動作。在本文中提出了FrankMocap運動捕捉系統,可以估計三維人手和身體運動。
代碼地址:https://github.com/facebookresearch/frankmocap
2. 背景介紹
將視頻中的人類動作數字化的技術在各種應用領域具有巨大的潛力,包括人機交互、社會人工智能和機器人技術。人手和身體姿態對於理解這些場景同等重要,因為人手的高自由度,並且相對於人體形態很小,因此使用專業的動作捕捉系統,也很難捕捉人手的動作。目前主流的方法是構建雙手和人體的三維參數模型,然而這些方法依賴於對參數模型的擬合,速度慢達不到實時的應用標准。
本論文提出了一種快速並且准確地估計三維人手和人體姿態的方法,主要的思路:首先基於深度神經網絡設計人手和人體模塊,然后從RGB圖像中回歸出人手和人體的三維姿態,最后將姿態同步到SMPLX模型中進行集成,實現全身三維動作捕捉。
3. 相關研究
3D參數人體姿態模型:SMPL模型對人體的高矮胖瘦和人體動作的姿態進行定義,對人體每個可以活動的關節點進行參數化。總體來說SMPL模型是一個統計模型,可以通過兩種類型的統計參數對人體進行描述。
- 形狀參數(shape parameters): 一組形狀參數有10個維度的數值描述人的形狀,每個維度可以解釋為人體形狀的某個指標,比如高矮胖瘦等(維度的大小可由PCA控制)。
- 姿態參數(pose parameters): 一組姿態參數 \(24\times 3\) 描述人體動作姿態,特別說明一下,這里的3不是三維空間坐標,而是該節點針對其父節點的旋轉角度的軸角式表達(axis-angle representation).
單張圖像的3D人體姿態估計:許多三維人體姿態估計方法都考慮從單幅圖像中預測三維人體關鍵點位置。由於缺少三維關節角和相應長度,這些方法的輸出不能直接用於圖形應用。目前大部分三維人體姿態估計方法都是采用3D參數模型以二維觀測重建一個三維人體姿態。
單張圖像的3D人手姿態估計:之前的三維人手位姿估計是通過深度圖回歸得到的,但是不能廣泛用於RGB的場景下。最近的工作主要有兩類方法,一類是通過圖片和OpenPose類似網絡得到2D關節點作為輸入然后回歸出MANO模型的參數;另一類方法是自己構建3D人手模型,將圖片和得到的2D熱圖輸入圖神經網絡回歸出人手模型的頂點。
人手和人體姿態估計的聯合:由於缺乏全身的標注數據,之前的方法都依賴於優化方法。SMPL-X模型表示全身模型,通過對二維關鍵點的擬合優化了模型參數,並附加了身體姿態先驗和碰撞補償等約束條件。
4. 本文方法
本文目的是從單目圖像中估計3D身體(軀干和肢體部分)和3D手(左和右手),產生SMPLX模型的參數作為輸出,以表示3D身體和人手的姿態。該方法的一個重要方面是在SMPL-X模型中使用不同的專家模塊對身體和手位姿進行估計,同時兩個模塊產生兼容的輸出。框架的概述如圖下圖:
4.1. SMPL-X模型
給定一個單獨的圖像,本文的方法可以產生SMPL-X模型的形狀和姿態參數形式的全身運動捕捉輸出。作為SMPL模型的擴展,SMPL-X模型可以表示形狀變化,通過低維形狀和位姿參數的組合,實現了與姿態相關的人體變形。SMPL模型只關注身體部位,SMPL-X與SMPL模型的一個關鍵區別在於,SMPL-X還可以通過添加附加組件來表達手指動作和面部表情。
首先用 \(W\) 表示SMPL-X模型:
其中 \(W\) 包含整個身體的全局方向參數 \(\phi_{w} \in \mathbb{R}^{3}\),人體姿態參數 \(\boldsymbol{\theta}_{w} \in \mathbb{R}^{(21+15+15) \times 3}\),身體和人手交叉的形態參數 \(\boldsymbol{\beta} \in \mathbb{R}^{10}\) ,將 \(\boldsymbol \theta_{w}\) 可以分成人體姿態參數 \(\boldsymbol{\theta}_{w}^{b} \in \mathbb{R}^{21 \times 3}\) ,左手姿態參數 \(\boldsymbol{\theta}_{w}^{l h} \in \mathbb{R}^{15 \times 3}\) ,右手姿態參數 \(\boldsymbol{\theta}_{w}^{r h} \in \mathbb{R}^{15 \times 3}\) ,因此 \(\boldsymbol{\theta}_{w}=\left\{\boldsymbol{\theta}_{w}^{b}, \boldsymbol{\theta}_{w}^{l h}, \boldsymbol{\theta}_{w}^{r h}\right\}\)。所有位姿參數表示在運動學模型映射中相對於父關節的相對旋轉角度。SMPL-X模型的輸出是10745個頂點的mesh結構,\(\boldsymbol V_w \in \mathbb R^{10475\times 3}\) ,利用給定頂點的回歸函數 \(R\),可以得到整個身體的三維關節位置:\(\boldsymbol{J}_{w}^{3 D}=R_{w}\left(\boldsymbol{V}_{w}\right)\) ,其中 \(\boldsymbol{J}_{w}^{3 D} \in \mathbb{R}^{(22+15+15) \times 3}\) 。
人手模型通過SMPL-X定義:\(\boldsymbol{V}_{h}=H\left(\boldsymbol{\phi}_{h}, \boldsymbol{\theta}_{h}, \boldsymbol{\beta}_{h}\right)\) 其中 \(\boldsymbol{\theta}_{h} \in \mathbb{R}^{3 \times 15}\) 代表人手姿態參數,\(\boldsymbol{\beta}_h\) 人手模型的形狀參數。由於人手模型來自SMPL-X,\(\boldsymbol \beta_h\) 和 \(\boldsymbol \beta_w\) 共享相同的參數化空間。\(\phi_{h} \in \mathbb{R}^{3}\) 代表人手mesh的全局方向,使用人手模型作為獨立模型,獨立於原始SMPL-X模型的 \(W\) 的祖先節點。人手模型 \(H\) 產生帶有778個頂點的人手mesh結構,\(\boldsymbol{V}_{h} \in \mathbb{R}^{778 \times 3}\)。 通過裁剪手腕區域周圍的頂點,從整個身體網格 \(V_w\) 來定義的人手網格頂點。3D人手關鍵點回歸可以表示為 \(\boldsymbol{J}_{h}^{3 D}=R_{h}\left(\boldsymbol{V}_{h}\right)\) ,其中 \(\boldsymbol{J}_{h}^{3 D}\in \mathbb{R}^{21\times 3}\) , 包含1個手腕,15個指關節,5個指尖。
該方法的主要優點是三維人手模型的位姿參數、mesh頂點和三維關節點,與全身參數直接兼容,這使人手能夠有效地集成全身的模塊中。
4.2. 3D人手姿態估計
人手模塊結構:人手模型 \(M_{H}\) 由端對端的神經網絡構建回歸出人手姿態參數,人手模塊 \(M_H\) 定義為:
其中 \(I_H\) 表示手部區域的RGB圖片,\(c_h=(t_h,s_h)\) 是弱透視相機參數,能夠將3D人手模型投影到輸入圖片上。 其中 \(t_h\in \mathbb{R^2}\) 為圖像平面的2D平移,\(s_h \in \mathbb{R}\) 為放縮因子。因此3D人手關鍵點 \(J^{3D}_{h,i}\) 能正交投影成2D關鍵點:
人手模型 \(M_H\) 的架構由編碼器和解碼器結構組成,其中編碼器輸出來自輸入圖像的編碼特征,以及解碼器由特征回歸手部位姿參數。編碼網絡由ResNet-50構成,解碼網絡由全連接層構成。
訓練方法:采用三種不同的標簽損失函數:(1) 3D姿態標注(以角度軸表示),(2) 3D關鍵點標注(關節標注),(3) 2D關鍵點標注。標簽損失分別為 \(L_{\theta}\) ,\(L_{3D}\) ,\(L_{2D}\) ,具體損失函數定義如下:
其中 \(\hat{\theta}_h\) ,\(\hat{J}^{3D}_{h}\), \(\hat{J}^{2D}_h\) 分別為角度軸姿態參數,3D關鍵點,2D關鍵點。2D關鍵點損失對於估計相機投影參數很重要,沒有使用3D人手數據集中的形狀參數是因為有些數據集采用MANO模型定義與SMPL-X不兼容, 因此采用形狀參數的正則損失 \(L_{reg}\) 定義:
用於訓練人手模塊的總損失 \(L\) 定義如下:
數據集預處理:三維人手姿態數據集通常是在多台不同視角的同步相機平台下拍攝的,用這樣的數據集進行訓練容易產生過擬合。為解決這一問題可以盡可能多的采用不同數據集來提高模型的泛化性,這種方法會存在不同數據集標簽信息不同的問題。(一般通過重新調整3D關鍵點的順序)
訓練數據增強:在訓練期間數據擴充是使模型具有更好泛化能力的常見做法,常見的做法包括隨機比例,隨機平移,顏色抖動和隨機旋轉。在自然環境下的視頻常常會存在嚴重的運動模糊,為了提高模型的健壯性,在數據增強過程中加入了運動模型增強,具體做法是生成運動模糊內核,然后用2D濾波器在圖片上添加模糊。
4.3. 3D人體姿態估計
人體模塊 \(M_B\) 產生軀干和肢體參數:\([\phi_b,\theta_b,\beta_b,c_b]=M_B(I_b)\) ,\(I_b\) 表示圖片輸入,\(\phi \in \mathbb R^3\) 表示整體身體方向,\(\theta_b \in \mathbb{R}^{21\times 3}\) 表示人體姿態參數(沒有人手關鍵點),\(\beta_b\in \mathbb{R}^{10}\) 表示形狀參數。\(\beta_b\) 與 \(\beta_w\) 共享相同的參數空間。
4.4. 整合全身
集成模塊將3D人體和人手模塊的輸出統一表示為SMPL-X模型的一種形式。對於整合有兩種策略:(1)簡單的復制粘貼模式;(2)采用優化框架,包括額外的2D關鍵點。
復制粘貼模式:由於人手和人體模塊的輸出與SMPL-X模型兼容,它們可以很容易地組合。一個簡單的策略就是從人手和人體各模塊的輸出中傳遞相應的關節角度參數。但是,手腕部分需要額外的處理,因為從身體和人手模塊獲得兩個不同的輸出。手腕關鍵點的姿態參數為 \(\theta^{wrist}\) , \(\boldsymbol{\theta}_{b}=\tilde{\boldsymbol{\theta}}_{b} \cup\left\{\boldsymbol{\theta}_{b}^{\mathrm{rwrist}}, \boldsymbol{\theta}_{b}^{\mathrm{lwrist}}\right\}\) , 其中 \(\tilde{\boldsymbol{\theta}}_{b}\) 除了手腕包含所有人體姿態參數。因此整個人體和人手模塊以復制粘貼方式整合為:
其中\(\Gamma_{l}\) , \(\Gamma_{r}\) 函數表示將從人手模塊得到的全局手腕方向 \(\phi_h\) 轉化為局部手腕姿態參數。 這種方式不需要額外的計算量適合實時系統。
優化方式:作為另一種集成方法,建立了一個優化框架來擬合全身模型參數。該策略特別有助於減少復制-粘貼策略手腕部位周圍的偽影,也可以利用二維關鍵點估計輸出來提高二維定位質量。優化框架的損失函數為:
其中 \(\mathcal{F}^{2 d}\) 為二維重投影損失項,\(\mathcal{F}^{p r i}\) 作用是保持3D姿態參數和形狀參數在合適的空間。
5. 實驗論證
5.1. 實驗細節
目標框:采用OpenPose獲取目標框,
人手模塊:ResNet-50
人體模塊:SPIN、SMPL
5.2. 數據集
人手數據集:FreiHAND、HO-3D、MTC、STB、RHD、MPII+NZSL
人體數據集:COCO、Human3.6M
5.3. 評估
人手效果的比較:
全身效果的比較:
6. 結論
本文介紹了一種名為FrankMacop的快速運動捕捉系統,我們設計的身體和人手專家模塊產生兼容的輸出作為全身運動捕捉,並且提出了兩種集成策略,快速復制粘貼和優化框架。本文的全身動作捕捉系統在現場演示中,接近實時的速度(9.5 fps),這是比其他方法快幾個數量級。
該方法仍然存在一些局限性:(1)如果兩只手靠的太近,則手部姿勢容易估計錯誤。(2)需要邊框推斷出3D的身體和人手。未來的擴展的方向可以處理多人交互的情況,如兩個人打招呼時握手。