[CVPR 2019論文閱讀筆記]利用多視圖幾何的自監督學習三維人體姿態

失蹤博主前來打卡啦😂

最近看了一些CVPR2019上關於三維人體姿態估計(3D human pose estimation)的文章,3D human pose estimation的任務簡單來說是,給定一段RGB視頻或者RGB圖片,估計它在三維空間的姿態。
在這裏插入圖片描述
後續也可以做這樣一些任務,包括虛擬現實和行爲識別等。
在這裏插入圖片描述
現在從場景可以分爲室內(indoor)和野外(in the wild),還可以分爲single view(單一視角)和multi-view(多視角)。現在幾種主要的研究方法包括以下幾種:
(1)3D pose from 2D keypoint detection:
這種方法也可以稱爲兩階段檢測(two step pose estimation):

  • 先從圖像空間(image space)中檢測二維關鍵點(2D keypoints)
  • 再從2D 提升到 (lift to) 3D,這一步還是比較簡單的,用一個簡單的神經網絡就能學習2D 到3D 的表示

這一方法需要用全監督或者其他的信息,包括相機的內外參等。
(2)Direct 3D pose estimation
現在用半監督,無監督,弱監督(這算一個類別嗎?感覺它就是半監督😂。。。),還有自監督(這不就是無監督嗎😂)用English就是我們在CVPR2019看到的semi-supervised, weakly or unsupervised learning, and self-supervised learning.
這些方法總的來說,就是用了encoder-decoder結構,主要是爲了學習一個3D 結構化表示,給一個視角下的一張照片,能夠預測出來在另一個視角下的圖片(predict one image seen from one viewpoint from one image captured from a different viewpoint)

最近,Middle East Technical University 在CVPR2019發表了一篇關於自監督學習的3D HPE的文章《Self-Supervised Learning of 3D Human Pose using Multi-view Geometry》,在這裏分享一些閱讀筆記,幫助自己理解,歡迎大家多多交流~

主要方法–訓練

這篇文章主要提出了EpipolarPose, 能直接從單張圖片預測3D 人體姿態。訓練時,不需要任何3D 監督或者相機外參,它利用對極幾何(Epipolar Geometry)和2D 的姿態信息來得到3D 姿態。
它的訓練過程如下:
有n個相機(n>=2)同時對場景中的某個人拍照,相機能同時產生I1,I2,...,InI_1, I_2, ... , I_n張圖片,下標代表相機的編號。
訓練的流程圖如下所示:
Overall architecture of EpipolarPose during training
從圖中可以看出來,有兩個分支(上分支是3D branch,下分支是2D branch),他們有一樣的姿態估計網絡(結構一樣),都是先用ResNet 做backbone,再接上一個反捲積網絡。當n=2,也就是2個相機時,每個訓練樣例包括了兩張圖片(I1,I2I_1, I_2), 這兩張圖片再被送進兩個網絡(也就是上下兩個分支)分別得到volumetric heatmaps (H^,HRw×h×d\widehat{H}, H\in\mathbb{R^{w\times h \times d}} ),經過soft argmax activation φ()\varphi(\cdot) 後得到了一個3D pose V^\widehat{V}和2D pose UU。文章說,對於任何一個volumetric heatmap,我們都能得到3D pose V^\widehat{V}和2D pose UU
文章一開始就說他們是self-supervision,體現在哪裏呢?作者說是 “It creates its own 3D supervision by uti- lizing epipolar geometry and 2D ground-truth poses”。也就是說,這裏的UU就被認爲是2D ground truth,所以他們接下來引入了一些幾何知識,通過triangulation,得到在全局座標系中的3D ground truth —> VV, 然後就在 VVV^\widehat{V}計算Loss,進行監督訓練等等等。

這個triangulation的計算流程又是什麼樣呢?用到了一些相機模型的知識,採用的是針孔相機模型。第 ii 張圖片裏的第 jj 個關鍵點的2D座標爲 U(i,j)=(xi,j,yi,j)U(i, j) = (x_{i, j}, y_{i, j}),它的3D座標爲(Xj,Yj,Zj)(X_j,Y_j, Z_j)。用針孔相機模型描述它們之間的關係爲:

[xi,jyi,jwi,j]=K[RRT][XjYjZj1] \left[ \begin{matrix} x_{i, j} \\ y_{i, j} \\ w_{i, j} \end{matrix} \right] = K[R|RT] \left[ \begin{matrix} X_j \\ Y_j \\ Z_j \\ 1 \end{matrix} \right]
在這裏插入圖片描述
K代表相機內參,R是旋轉矩陣,T是平移矩陣。
在動態捕捉的環境中,相機的外參矩陣(R, T)通常是不可知的。假設第一個相機位於座標系的中心。對於UiU_iUi+1U_{i+1}中對應的關鍵點jj
對任意一個j,矩陣F都能滿足Ui,jFUj+1,j=0U_{i, j}FU_{j+1, j} = 0。F通過RANSAC算法(隨機抽樣一致算法,採用迭代的方式從一組包含離羣的被觀測數據中估算出數學模型的參數)計算得到。我們再通過矩陣F計算E:E=KTFKE=K^TFK。再通過SVD對矩陣E進行分解,能得到旋轉矩陣R的四個近似解。作者通過手性檢查(cheirality check,一種對稱特點)來確定近似的解。

對合成的2D圖像,爲了得到它的3D pose,作者採用對極幾何求解。因爲(Ii,Ii+1I_i, I_{i+1})裏的關鍵點都沒有被遮擋,所有使用polynomial triangulation對3維座標點(Xj,Yj,ZjX_j, Y_j, Z_j)進行triangulation。
爲了計算由在相機空間中的3D pose V^\widehat{V}間的損失,作者把VV投影到相應的相機空間,這樣就可以最小化(VV, V^\widehat{V})間的損失。

Inference推理

上圖所示橙色的部分即爲推理的部分。輸入是單張圖片,輸出是3D姿態(V^\widehat{V}

整個自監督模型還加入了修正單元(Refinement Unit),它的輸入層能夠從EpipolarPose中得到的含有噪聲(不那麼理想)的3D 姿態。下圖所示是整個推理流程,RU 是一個可選的步驟來修正訓練模型產生的預測結果。這裏的訓練的ff正是圖1中橙色的部分。

在這裏插入圖片描述

Pose Structure Score

作者認爲本文的另外一個貢獻是提出了一個新的評價指標PSSPSS,他們認爲可以在今後的研究中也採用這個指標。
爲什麼要提出PSS呢?如下圖所示,作者認爲傳統的距離評價指標(MPJPE和PCK)將每個關節點獨立地看待,例如,有些姿勢和Reference Pose間有相同的MPJPE,但是他們在結構上完全不同。中間的姿態1和右邊的姿態看起來完全不一樣,但用傳統的評價指標評判時,它們是一樣的。
所以作者提出了一個新的評價標準姿態結構得分( Pose Structure Score),不光去計算各關鍵點之間的距離,還去衡量整個姿態的結構合理性。
在這裏插入圖片描述

如何計算PSS?

計算PSS需要ground-truth姿態的一個參考分佈(reference distribution)。假設有nn個pose qi,(i1,...,n)q_i, (i \in {1, ... , n})。作者將每個姿態向量都進行標準化qi^=qiqi\widehat{q_i} =\frac{q_i}{||q_i||}。作者再利用K-means聚類計算了kk個聚類中心μj,(j1,...,k)\mu_j, (j \in {1, ... , k})。文章採用如下公式計算預測的姿態p和ground-truth q之間的PSS:
PSS(p,q)=δ(C(p),C(q))C(p)=argminkpμk22δ(i,j)={1,i=j0,ij PSS(p, q) = \delta(C(p), C(q)) \\ C(p) = \mathop{\arg\min}_k||p-\mu_k||_2^2\\ \delta(i, j)=\begin{cases}1,& i = j \\ 0,& i \neq j \end{cases}
下圖展示了姿勢和聚類的t-SNE圖。每一個顏色代表一個聚類(pose),這裏展示了10個聚類。
在這裏插入圖片描述
下圖展示的是Human3.6M中的一些經典姿勢的聚類中心,k=50。
在這裏插入圖片描述

實驗細節

作者採用ECCV2018的IntegralPose爲代碼框架,並且採用ResNet-50爲backbone。輸入圖像和輸出heatmap的尺寸大小分別爲:256×256256\times256, J×64×64×64J \times64\times64\times64JJ是關鍵點數量
對於兩個相機,batch-size爲32,每個包含Ii,Ii+1I_i, I_{i+1}的圖像對。網絡訓練140,優化器採用Adam,初始學習率爲0.001,在第90步和120步的時候調整學習率。採用隨機旋轉和尺度變化來做數據增強。

實驗結果

  • 數據庫: Human 3.6M, MPI-INF-3DHP
  • Metrics: MPJPE, PCK, PSS
Can we rely on the labels from multi view images?

表1 H36M的triangulation的結果
GT表示用H36M中的2D標籤,GT 2D (w/o R)表示不用camera geometry(旋轉矩陣R) H36M 2D 和MPII 2D表示在這些數據集上訓練的姿態估計模型。我們可以看到,用GT 2D的效果最好,其次是H36M 2D,而在MPII數據集上訓練的2D keypoints 檢測器有輕微的效果下降。作者認爲是因爲H36M中的數據是用marker得到的,更準確(H36M中數據集中的試驗者在身上貼有小亮片(傳感器))。而MPII中人的關鍵點是由人工標記的,一些關鍵點定位不準。
在這裏插入圖片描述

Comparison to State-of-the-art

在H36M上和其他SOTA比較的結果如下表所示:
在這裏插入圖片描述
在這裏插入圖片描述
EpipolarPose在H36M上最好的結果能達到60.56mm(MPJPE)。

Weakly/Self Supervised Methods

下表展示的是文獻中一些關於weakly or self supervised方法在Human 3.6M上的結果。
可以觀察到GT2D訓練和MPII預訓練之間存在很大差異(76.60 - 55.08 = 21mm)。這個差距表明2D關鍵點的估計質量對於3D pose estimation取得更好的性能至關重要。
底下的兩個表展示的是和參考文獻31與9更公平和細緻的比較。
在這裏插入圖片描述

定性結果展示

在這裏插入圖片描述

總結

在這個工作中,作者展示了就算沒有ground-truth和相機外參,多視角的圖像能被利用來做自監督。這個方法的核心就是利用了多視角的2D pose + 對極幾何來推理出3D姿態。作者還提出了一個新的評價標準PSS,以後可以在文章中採用。

思考

我現在看的文章還不多,也就是把近幾年的各方面的文章看了一點,還是要多讀paper,看頂會上的文章還是能帶給我很大的啓發。
我發現 現在的文章大都是semi,un,weakly supervised,我覺得還是auto encoder和decoder比較有趣。另外,現在這些幾何知識也是我最近需要着重去學的,我還沒自己實現過epipolar geometry,相機空間變換等,cry😭…

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