XNect: Real-time Multi-Person 3D Motion Capture with a Single RGB Camera


圖1: 實際測試效果
論文提供一種基於RGB視頻的實時多人運動捕捉,該方法分為三個階段:在第一個階段,通過卷積神經網絡估計每個人的2D和3D姿態特征,該部分設計了一個快速的網絡結構SelecSLS;在第二個階段,通過全連接的神經網絡將遮擋部分2D姿態和3D姿態特征推理成完整的3D姿態;在第三個階段,應用時空骨架模型擬合每個人預測的2D和3D姿態,目的是為了進一步協調2D和3D姿態和加強時間一致性,最終以關節角度信息返回整個骨骼姿態。
論文地址:https://gvv.mpi-inf.mpg.de/projects/XNect/
馬普所的工作成果鏈接:https://vcai.mpi-inf.mpg.de/GVV_Projects.html
1. 背景介紹
在視覺計算及其相關領域中,光學人體動作捕捉技術是當今世界最重要的技術之一。例如,它被廣泛使用在視覺特效中動畫虛擬人物和人類。它是許多人機接口的關鍵組成部分,也是生物醫學的核心運動分析。近年來,計算機圖形學與計算機視覺研究人員開發了新的動作捕捉算法。
這些算法不需要特殊的服裝,密集的相機陣列,演播室錄音,或者標記。只需要幾個校准的攝像機來捕捉穿着日常服裝的戶外人群,從一個單色圖像得到三維人體姿勢,打開了虛擬現實和增強現實應用的大門。但是仍然存在極具挑戰性問題,比如深度模糊,遮擋,和外觀和場景的多樣性。
更重要的是,大多數方法會因為遮擋導致失敗,或者只研究單個人。最近的一些方法側重於自我中心設置。由外向內設置的單人跟蹤(非自我中心)是已經受到嚴格的約束;因此多人跟蹤變得異常困難,由於多重遮擋,挑戰身體部分人員分配,計算上要求更高。這為許多應用程序(如游戲)帶來了實際障礙以及社交VR/AR。
2. 相關工作
接下來重點討論相關的2D和3D人體姿態估計,數據集和神經網絡架構。
多人2D姿態估計:多人二維姿態估計方法可分為自頂向下(top-down)和自底向上(bottom-up)兩種。top-down的方法先進行目標檢測(人),再對每個檢測到的人進行單人的關鍵點檢測(單人姿態估計);bottom-up方法先檢測所有人的關鍵點,然后再對關鍵點進行分組關聯。一般來說,top-down方法精度更高,而bottom-up方法速度更快。
單人3D姿態估計: 單人3D姿態估計以前是通過使用物理先驗的生成方法進行的,或者半自動綜合分析擬合參數體模型。最近的一些方法在網絡中集成了3D身體模型,並使用2D和3D姿勢的混合訓練從單個圖像中預測三維姿態和形狀。其他方法優化人體模型或模板來適應2D姿勢和輪廓。
多人3D姿態估計: 本文的方法是自底向上的,不會對每個人進行多次檢測。自底向上的方法使用固定數量的特征映射來預測場景中所有個體的2D和3D姿勢,並且為每個個體進行編碼。3D編碼將每個肢體和軀干視為不同的物體,並對特征中的每個“物體”的3D姿勢進行編碼映射到與“對象”的2D關節對應的像素位置。因此,該編碼可以處理部分個人之間的遮擋通過不同的身體部位。
3D姿態數據集: MarCOnI、Panopticon、MuCo-3DHP等3D姿態數據集。
卷積網絡設計: ResNet、Inception 和ResNext 等等變種;本文提出的CNN架構背后的關鍵是使用選擇性的遠距離和近距離合並連接,而不是DenseNet的密集連接模式。這使得網絡速度明顯快ResNet-50 同時保持相同的精度水平,避免精度和網絡復雜度之間的平衡,消除內存瓶頸。
3. 整體方法

圖2:整體思路
整體方法的大概的計算分為三個階段,前兩個階段分別為每幀局部(每個身體關節)和全局(所有身體關節)推理,第三個階段執行時序推理:第一個階段為使用新的SelecSLS網絡架構可見的身體關節推斷2D姿態和中間3D姿態編碼。每個關節的三維位姿編碼僅考慮運動序列中的局部上下文。第二個階段是一個緊湊的全連接網絡為每個被檢測到的人(並行運行),並通過利用全局上下文重建完整的3D姿勢,包括被遮擋的關節。第三階段提供了時序的穩定性,相對於攝像機的定位,以及通過運動學骨架擬合的關節角度參數。
4. 姿態估計
給定一個尺寸為 \(w\times h\) 圖像 \(I\), 估計3D姿態 \(\{P_k^{3D}\}_{k=1}^K\) ,其中 \(K\) 表示場景中人的個數。\(P_k^{3D}\in \mathbb{R}^{3\times J}\) 表示 \(J\) 身體關節的根(骨盆)相對三維坐標。接下來在下面詳細介紹。
4.1 階段一預測
第一階段使用核心網絡CNN提取特征,該網絡為分成兩個獨立分支的網絡2D姿態預測和3D姿態編碼,如圖2所示。核心網絡輸出特征圖大小為 \(\frac{w}{16}\times\frac{h}{16}\) , 2D和3D分支網絡的輸出特征圖大小為 \(\frac{w}{8}\times\frac{h}{8}\) 。3D分支網絡利用了2D分支網絡提取的特征。接下來詳細介紹兩個網絡分支和階段一的訓練過程。
4.1.1 2D分支:2D位姿預測和部位關聯
2D姿態預測為2D熱圖 \(H=\{H_j\in\mathbb{R}^{\frac{w}{8}\times \frac{h}{8}}\}\) ,每個熱圖代表每個像素的置信度,使用部分親和場 \(F=\{F_j\in \mathbb{R}^{\frac{w}{8}\times \frac{h}{8}\times 2} \}_{j=1}^{J}\) 來編碼身體關節所有權,使用單位向量場從關節指向其運動學父關節,並跨越各自肢體的寬度。對於輸入圖像,這些部分關聯字段可用於檢測個人在場的場景和可見的身體關節,並以將可見關節與個體聯系起來。如果一個人的頸部關節(假設在大多數情況下是可見的)沒有被檢測到,將從隨后的階段中完全拋棄了未檢測到的個體。對於 \(K\) 個檢測到的個體,該階段以絕對圖像坐標 \(P_k^{2D}\in \mathbb{Z}^{2\times J}_{+}\) 輸出二維身體關節位置。進一步,從熱圖最大值中得到了每個身體部位的檢測置信度 \(c_{j,k}\) 。
4.1.2 3D分支:預測中間3D位姿編碼

如圖4:基於局部運動學背景的三維姿態編碼
圖4所示,對 \(1×1×(3\cdot J)\) 預測的三維位姿編碼向量 \(l_j\)(右圖所示)進行每個關節 \(j\) 監督(左圖骨骼所示),\(l_j\) 只編碼關節 \(j\) 相對於其在運動鏈中直接連接的關節的三維位姿信息。這導致了如下所示的信道稀疏監督模式,而不是每個 \(l_j\) 編碼全身姿勢。標記為紫色的區域是不受監督的,網絡可以自由地預測那里的任何值。例如右肩(\(j=3\))連接關節點 \(j=2\) 和 \(j=4\) ,因此在 \(l_3\) 中, \(j=3\) 的關節點相對於 \(j=2\) 為 \((x_3,y_3,z_3)\) , \(j=4\) 的關節點相對於 \(j=3\) 為 \((x_4,y_4,z_4)\) 都是被監督的。
3D分支:第一階段網絡的3D分支使用核心網絡和2D分支的特征,來預測3D位姿編碼映射 \(L=\{L_j\in R^{\frac{w}{8}\times \frac{h}{8}\times 3}\}\) 。每個可見關節的空間位置編碼僅封裝其相對於其在運動鏈中直接連接的關節的3D姿態。在 \(L\) 中的具體編碼工作如下:在像素位置 \((u,v)_{j,k}\) 提取 \(1\times 1\times (3\cdot J)\) 向量 \(l_{j,k}\) ,\((u,v)_{j,k}\) 表示第 \(k\) 個人的第 \(j\) 人體關鍵點,這個特征向量 \(1\times 1\times (3\cdot J)\) 是完整的三維身體姿態,其中每個關節的相對三維位置位於單獨的通道中。
4.1.3 訓練過程
第一階段的網絡是多重訓練的階段。首先,在MPII和LSP單人2D數據集上,對核心網絡和2D姿態分支網絡進行訓練,然后使用這些權重作為初始值,最后在MS-COCO數據集上訓練多人2D姿態估計。隨后添加3D姿態分支,並分別在MS-COCO和MuCo-3DHP數據集上訓練兩個分支。發現在引入3D分支前,先對多人二維姿態數據進行預訓練很重要。
4.2 階段二預測

如圖3:2D姿態和3D編碼合並
階段二采用全連接網絡預測每個個體的相對根結點的3D姿態 \(\{P_k^{3D}\}_{k=1}^K\) ,在階段一的輸出作為輸入,將2D關節位置的預測 \(P_k^{2D}\) 轉化為相對於頸關節的表示方法。 對於每個個體 \(k\) 中每個關節點位置,可以提取 \(1\times 1 \times(3\cdot J)\) 形式的3D姿態編碼向量 \(l_{j,k}\) ,輸入到階段二的 \(S_k\in \mathbb{R}^{J\times(3+3\cdot J)}\) 是關鍵點坐標 \((u,v)_{j,k}\) ,關節點檢測置信度 \(c_{j,k}\) 和特征向量 \(l_{j,k}\) 的合並狀態。如果節點處於不可見狀態,那么就采用零向量代替(如圖3)。階段二采用5層全連接層將 \(S_k\) 轉化成3D姿態 \(P^{3D}_k\) 。(如圖5)

如圖5:全連接層
4.2.1 訓練過程
第二階段的網絡在MuCo-3DHP數據集上訓練。第一階段提取了2D姿態和3D姿態編碼,然后對於每個被檢測到的個體,使用真實標簽的3D姿態為監督對象 \(\left\{\left(X_{j}, Y_{j}, Z_{j}\right)\right\}_{j=1}^{J}\)。當有不同有嚴重的遮擋時,姿態預測可能與真實標簽截然不同,可以使用smooth-L1損失函數減輕這些異常值的影響。
5. 動作捕捉:階段三
在第一階段和第二階段之后,得到每個個體的每幀相對於根節點的姿態估計。然而,沒有估計人的大小或離相機的距離,人的身份是不跨幀跟蹤,和重建不是根據關節角度。為了彌補這一點,隨着時間推斷和跟蹤人的外貌,可選地平面幾何推斷絕對高度,並在時空運動學姿態擬合方法中,融合帶有時序平滑和關節點限制的二維和三維的姿態預測。
5.1 身份跟蹤和重新識別
為了區分在不同幀下估計的姿態,擴展了之前的姿態符號,在方括號中包含時間指標。到目前為止,每幀2D和3D姿勢已經被估計為當前和過去的幀。因此需要一種快速的方法來維護被檢測到的人在幀之間的身份,並在完全遮擋一段時間后重新識別出來。為此,在當前時間步長 \(t\) 分配人員檢測之間的通信,\(\{P_i[t]\}^{K[t]}_{i=1}\) 為當前時刻的姿態信息。利用上半身區域的HSV顏色直方圖對人的外觀進行建模和跟蹤,將色調和飽和度通道離散為每個30個箱子,並確定外觀 \(A_{i[t]}\) 作為包含肢體關節點的 \(\{P_i^{2D}[t]_i\}\) 類概率。這種描述方式可以有效地計算和模擬寬松和緊身的服裝,但在着裝相似的人中可能會出現顏色模糊。
為了能夠穩健地匹配人體,可以將當前檢測分配給之前已識別的身份,而不僅僅是基於外觀相似度 \(S_{i, k}^{A}=\left(A_{i}[t]-A_{k}[t-1]\right)^{2}\),而且基於2D姿態相似度 \(S_{i, k}^{P 2 D}(i, k)=\left(P_{i[t]}^{2 D}-P_{k[t-1]}^{2 D}\right)^{2}\) 和3D姿態相似度 \(S_{i, k}^{P 3 D}(i, k)=\left(P_{i[t]}^{3 D}-P_{k[t-1]}^{3 D}\right)^{2}\),在異常情況下設置一個閾值來檢測遮擋、人員離開視場和新人員進入視場。這意味着 \(K[t]\) 的數量可以改變。人在消失后保持一定的幀數,以允許在瞬間遮擋(如被跟蹤的受試者經過一個遮擋器后造成的遮擋)后重新識別。每30秒更新一次已知對象的外觀直方圖,來應對不同光照導致的外觀變化。
5.2 相對骨長和絕對高度的計算
身體各部分之間的相對長度是一個尺度不變的屬性,在第二階段很容易估計 \(P^{3D}_k\) 。為了增加魯棒性,可以對將骨骼長度 \(b_k\) 進行歸一化作為 \(P^{3D}_k\) 中連接關節之間的距離。將像素坐標的相對姿態估計轉換為以厘米為單位的絕對3D坐標是一項困難的任務,因為它需要已知位置和比例的參考對象和人的身高信息。
5.3 運動骨架擬合
通過二維和三維關節位置預測,對在視場所有人 \(K[t]\) 的骨骼姿態 \(\{\theta_k[t]\}^{K[t]}_{k=1}\) 進行優化,其中 \(\theta_k[k]\in \mathbb{R}^D\) 中 \(D=29\) 表示骨骼中自由度的數量。在骨架擬合之前,每幀2D和3D的姿態估計都要經過時序過濾。注意,\(θ_k∈R^D\) 描述了一個人的姿態,根據固定骨架的關節角度加上全局根位置,這意味着最終輸出是直接與CG角色動畫是兼容的。因為這樣會導致重投影誤差,所以通過聯合擬合了2D和根相關的3D預測結果,保持合理和穩健的3D關節信息。通過能量函數估計 \(\theta_k[t]\) :
通過梯度下降法來進行最小化求解函數,為了平衡各項因子的影響,將 \(w_{3D}=9e-1\) , \(w_{2D}=1e-5\) , \(w_{lim}=5e-1\) , \(w_{temp}=1e-7\) , \(w_{depth}=8e-6\) 按經驗設置為固定值。接下來,詳細解釋每一項的具體功能。
三維逆運動學項:該項計算相對根的3D關節點位置 \(P^{3D}_{k}[t]\) 和每個人 \(k\) , \(j\) 關節點和之前估計的相對骨骼長度 \(b_k\) 的正向動力學 \(\overline{\mathcal{P}}\left(\theta_{k}[t], b_{k}\right)\) 預測的相對根的關節點位置之間的3D距離:
二維重投影項:該項計算預測2D關鍵點 \(P^{2D}_k[t]\) 和正向動力學 \(\overline{\mathcal{P}}\left(\theta_{k}[t], b_{k}\right)\) 的2D投影之間的距離:
其中 \(c\) 表示2D預測的置信度,\(w_j^{2D}\) 是每個關節點的相對權重,\(\Pi\) 表示相機投影矩陣,與軀干關節(臀部、頸部、肩部)相比,下肢關節相對重量為1.7,肘關節為1.5,腕關節為2.0。注意 \(\mathcal P\) 輸出單位高度,用 \(h_k\) 縮放將其映射到度量坐標,投影約束重構世界坐標中的絕對位置。
關節點角度限制項:在關節旋轉極限 \(θ^{min}\) 和 \(θ^{max}\) 解剖結構的基礎上,對關節角度的旋轉量進行了軟限制。把它寫成:
從 \(j =7\) 開始,因為沒有對全局位置和旋轉參數的限制。注意,神經網絡被訓練來估計關節位置,因此沒有關於關節角度限制的明確知識。因此,\(E_{lim}\) 確保了得到的結果在生物力學上的合理性。
時序平滑項:由於神經網絡在每幀的基礎上估計姿態,結果可能顯示時間抖動。通過下面公式讓估計的姿態的時間穩定性得到了改進
其中參數值的變化率 \(∇θk\) 是用后向差來近似的。此外,使用平滑項 \(E_{\text {depth }}=\| \theta_{k, 2}[t]_{z}-\theta_{k, 2}[t-1]_{z} \|\) 更強地懲罰了約束較少的深度方向的變化,其中 \(θ_{k,2}\) 是根位置 \(z\) 分量的自由度。
逆運動學跟蹤初始化:對於新進入視場的人的第一幀,骨架的局部關節角與三維預測擬合時僅考慮 \(E_{3D}\) 和 \(E_{lim}\)。當最小化 \(E_{2D}\) 時,局部角度被固定,以找到最適合骨架的全局平移和旋轉。
6. 結果
6.1 系統特點及應用
首先系統提供了有效和准確的3D動作捕捉,為實時角色動畫和其他交互式CG應用做好了准備,盡管只使用單一的RGB視頻源,但仍然可以與基於深度的解決方案競爭。
實時性能:實時系統使用標准的網絡攝像頭作為輸入幀,處理512×320像素分辨率的輸入幀。對於有10個人的場景,系統運行在桌面上有一個支持3.5 GHz的Intel Xeon E5和Nvidia GTX 1080Ti處理速度在每秒30幀以上。
6.2 在單人3D姿態數據集上的性能
在MPI-INF-3DHP數據集上,通過三個評價指標:正確關鍵點的3D百分比3DPCK(越高越好),曲線下面積AUC(越高越高),平均3D關節點誤差MJPE(越小越好)。
6.3 多人3D位姿數據集的性能
在MuPoTS-3D monocular multi-person benchmark數據集上定量評價了該方法的精度
6.4 網絡結構評估
SelectSLS網絡與ResNet-50的對比
6.5 信道稀疏三維姿態編碼評價
channel-sparse監督編碼,這樣只能在局部進行運動學上下文的解釋,比channel-dense表現得更好。
6.6 骨骼擬合的評估(第三階段)
盡管第三階段的定量精度略有下降,但它在位姿估計的質量和時間穩定性方面產生了顯著改善,並提高了末端執行器的精度。由此產生的時間平滑的關節角估計可以用於交互式圖形應用程序。
7. 討論和未來工作
本文方法是第一個采用RGB相機對多人場景進行實時三維運動捕捉。盡管如此,它有一定的局限性,將在今后的工作中加以解決。
與其他方法一樣,本文方法的准確性是還不能與多視圖捕獲算法的精度相比。在該算法系統中,失敗的案例可能來自於每個組成部分。如果是二維姿態估計可能是不正確的或部分關聯是不正確的,那么三維的姿態估計也會不正確。此外,由於我們需要頸部可見才能成功地識別一個人,頸部被遮擋的情況會導致患者無法被檢測到。
本文算法成功地捕捉了被遮擋的對象的姿態,即使在人與人之間出現相互遮擋的情況。然而,這種方法仍然不能可靠地捕捉到非常密切的交互,比如擁抱。結合運動約束可以進一步改善位姿的穩定性,增加時序穩定性,從而能夠捕獲人與其他物體的細粒度交互。
在某些情況下,個別姿勢在幾幀中有更高的誤差,例如,強烈相互遮擋。然而,本文方法設法從中恢復姿態。在嚴重的自遮擋和相互遮擋情況下,擬合階段可能存在誤差,會使相機相對定位不穩定。不過重建的准確性和穩定性適合許多實時應用程序。
本文的算法速度很快,但相對簡單的身份追蹤器可能會交換人們的身份尤其是出現遮擋,較大的外觀變化,和相似的服裝外觀。需要更復雜的時空跟蹤解決這一問題。與所有基於學習的姿態估計方法一樣,姿態估計精度退化不同於訓練階段。為了解決這個問題,需要擴展該的算法,使它可以在無監督或用半監督的方式處理未標記的多人視頻。
8. 結論
與之前的方法不同,本文方法采用單個GPU可以達到實時的效果,以25 - 30幀/秒的幀率,並且輸出骨骼關節角度和相對相機人的位置,這可以可用於控制虛擬環境中的動畫角色,而且本文方法在遮擋情況下,仍然能夠預測完整的身體姿態。

