論文閱讀筆記 — 3D人體姿態辨識 Single-Shot Multi-Person 3D Pose Estimation From Monocular RGB

Hung-Chih Chiu
10 min readOct 28, 2020

--

這周要跟大家分享的3D動作識別文章原始連結如下:

Youtube上面的影片介紹如下:

本篇文章除了建立3維人體關鍵點的預測模型外, 還提供了2個三維人體動作資料集, 一個是延伸自MPI-INF-3DHP的合成資料集MuCo-3DHP, 另一個同樣使用Captury這個系統所拍攝的多人人體姿態集MuPoTS-3D.

MuCo-3DHP是Multiperson Composited 3D Human Pose的縮寫, 是延伸自MPI-INF-3DHP這個資料集, 有關MPI-INF-3DHP的資料集可以參閱我先前的文章介紹:

MPI-INF-3DHP資料集中共有8個受試者, 每個受試者會穿著兩種不同的服飾, 而這些受試者是在14種不同攝影機角度下進行拍攝. MuCo-3DHP的建立就從14個攝影角度下任意選取某一個角度, 並從8x2種受試者組合中任意選取1~4個樣本出來組合成一個新的多人影片, 在同一角度下每個受試者的3維資訊都很清楚, 因此可以將隨意挑出的受試者整合成單一影像如圖1所示. 圖1的上面那列顯示的是將多人合成的結果, 下面那列的影像則是將合成後的影像針對背景或是人物的衣服替換成其他花色. 另外圖1右邊兩行還針對影像做了旋轉或是縮放以增加影像的多樣性.

圖1 MuCo-3DHP資料集

而另一個資料集則MuPoTS-3D是實際利用動作擷取系統去擷取的, MuPoTS-3D是Multiperson Pose Test Set in 3D的縮寫, 所採用的擷取系統與MPI-INF-3DHP相同使用了Captury 這套系統如下.

利用Captury針對20種場景(5種室內, 15種室外)進行拍攝, 室外場景包含了光影變化, 或是因為光照使影像中產生光暈等場景, 室內是以30fps, 2048x2048進行拍攝的, 室外則以GoPro拍攝, 所用解析度為1920x1080, 60fps拍攝, 場景中最多包含3個人的互動如圖2所示.

圖2 MuPoTS-3D資料集

而在主要模型的部分, 主要是參照了location-map, 也就是VNect所使用的方法, VNect的方法可以即時針對3維動作進行辨識, 關於VNect的介紹, 可以參閱我前面的說明文章:

VNect針對每個關鍵點都會輸出4張heatmaps, 第一張是關鍵點在2維平面上的位置, 後面3張則是關鍵點離root joint的x, y, z三個方向的位移. 但是VNect有幾個缺點, 第1, 他假設所有的關鍵點都可看到, 如果有部分關鍵點被遮蔽, 這個方法容易失效, 第2, 原始的做法延伸到多人的場景會有問題, 需要針對影像中每一個人都產出一組自己的heatmap.

因此基於VNect的基礎, 作者提出了ORMPs (Occlusion-Robust Pose-Maps)方法. ORMPs最主要的方法就是加入了多餘的關鍵點(redundancy), 什麼是多餘的關鍵點呢??我們可以參閱圖3的說明:

圖3 VNect與ORPM比較

圖3上半部是左邊是VNect, 右邊是ORPM單人的heatmap, 下半部則是ORPM多人的heatmap. 比較圖3中VNect與ORPM所產生的heatmap, 我們就可以輕易發現兩者的差異, VNect針對該關鍵點(圖3中是右手肘與頸部), 只會產生關鍵點相較於root joint的向量差(每一張圖代表x,y,z其中一個方向的向量), 而ORPM不只產生該關鍵點的相對位移, 還會產生其他多餘關鍵點的位移(redundancy). 但是這個多餘的點是如何定義的呢? 首先我們先來看在資料集中將人體定義為17個關鍵點, 分別為頭, 頸, 骨盆中心點與肢段L, L定義如下, 也就是4肢上的關鍵點:

有了上述的關鍵點, 我們ORPM針對每一個關鍵點的輸出heatmap 定義如下:

由上式中可以知道每一個關鍵點的輸出都必須包含與頸關節還有骨盆中心的聯集, 所以在圖3中不管是那個關鍵點我們都有看到對於這兩個關鍵點的預測, 另外如果這個關鍵點是頭, 則就是頭, 頸與骨盆這三個點, 而如果這個關鍵點位於4肢上, 則關鍵點除了頸, 骨盆外還須包含這個肢段上的關鍵點, 以圖3中ORPM的右手肘為例, 模型除了預測出右手肘的位置外, 還包含了右肩, 右手腕以及頸部, 骨盆的位置, 所以在下半部多人的ORPM模型下, 針對右手肘的預測包括了每一個人的右手肘, 右肩, 右手腕, 頸部與骨盆的位置.

至於為什麼要在一個關鍵點中預測出多個肢段的關鍵點, 目的就在避免某個關鍵點被遮蔽時, 可以有其他的關鍵點可以協助模型做預測, 而預測的準則如圖4所示.

圖4 關鍵點被遮蔽時的規則

圖4中列出的範例都是針對右手肘要進行預測的範例, 就是圖4中淺黃色的點, 在不同情形下, 右手肘的座標會先表示成相對於母點的座標, 接著再將這個向量轉換成為以骨盆中心點的座標. 圖4a是在關鍵點都沒有被遮蔽的情形下, 當沒有任何遮蔽的情形下, 右手肘的座標會選擇以該肢段最末端, 也就是離身體最遠的點, 也就是右手腕為參考的母點, 計算右手肘到右手腕的向量, 之後再轉換到以骨盆中心為原點的座標. 圖4b則是肢段最遠的點也就是右手腕被遮蔽的情形下, 因此就會由外往內再找一個關鍵點作為參考座標, 也就是右手肘本身. 圖4c則是整個肢段被遮蔽, 因此就會採用軀幹上的頸部座標. 在多人的情形下也會採用上述的邏輯, 例如圖4d左邊的人因為關鍵點都沒有被遮蔽, 所以選用的是最末端的手腕做為參考點, 右邊人的右手腕因為與左邊人的左手腕重複被遮蔽, 因此巷內選擇右手肘做為參考點, 另外如果不同仁同類型的關鍵點太接近, 如圖4e, 左邊人的右手腕與右側人的右手腕接近, 為避免誤判, 同樣往內選擇一個參考點作為參考點, 這邊兩個人都選擇了右手肘. 一個明確的2為關鍵點座標可以方程式表示如下:

上式中P2Dij, i代表影像中有幾個人, i=[1:m], j則是關鍵點, j=[1:n], 明確的2維關鍵點除了產生的信心地圖C2D分數要高過tc外, 另外在相同關鍵點間的距離還要超過tD.

除了2維關鍵點之外, 作者也參照了OpenPose由模型產生part affinity field(PAF) A用以標註兩個關鍵點之間的關係, 有關OpenPose的介紹可以參閱我前面兩篇的介紹文章:

因此透過網路會得到6n個heatmap, n是關鍵點的數目, 6代表的是6個特徵, 其中一張是關鍵點的信心地圖, 也就是關鍵點的位置, 而有3張是關鍵點相對於root joint在x,y,z 3個方向的位移, 剩下2張是PAF在x與y方向的heatmap.

整個網路的骨幹使用的是ResNet-50, 接著再分為兩個分支, 其中一個做2D Pose+PAF預測, 另一個分支則是做3D動作預測, 網路架構如圖5所示.

圖5 模型架構

從圖5中可以看到ResNet與2D Pose都是由MS COCO先訓練過, 第2段3D Pose則由MPI-INF-3DHP或是MuCo-3DHP訓練. 另外2D Pose先預測出2D heatmap Hcoco以及PAF Acoco, 接著再將這些heatmap與ResNet-50抽取的特徵送入3DPose, 最終得到每個關鍵點的2維位置HMPI以及與root joint 3個方向位移XMPI, YMPI, ZMPI.

Hcoco與HMPI所用的loss function是每個pixel的L2 loss, PAF Acoco也是使用每個pixel的L2 loss.

在多人的場景下使用MuPoTS-3D的資料集進行測試, 與LCR-Net的比較結果如表1所示, 可以看到相較於LCR-Net都有比較好的結果.

而在單人的場景下, 模型分別採用單人的資料集(MPI-INF-3DHP)與多人的資料集(MuCo-3DHP)進行訓練後與其他模型進行比較, 必較結果如表所示.

--

--