論文閱讀筆記 — 3D人體姿態辨識 Compositional Human Pose Regression

Hung-Chih Chiu
7 min readDec 2, 2020

--

本周要介紹的3D人體姿態辨識論文連結如下:

Youtube上介紹的影片如下

本篇論文與上周分享的Integral human pose regression同樣是希望藉由神經網路直接回歸出每個關鍵點的3維座標, 前一篇的介紹連結如下:

而本篇文章中作者在網路架構並沒有什麼特別的設計, 採用的就是使用ResNet-50的架構, 配合上新的loss function設計, 完成整個模型的訓練, 而模型推論的結果如圖1所示.

圖1 模型推論3維姿態結果, 第1列為Human3.6M, 第2,3列為MPII資料集

而相較於其他論文是用模型直接回歸出每個關鍵點的3維座標, 作者認為這樣的作法對每個關鍵點都只是單獨的預測, 關鍵點之間的關係以及人體架構上的限制並沒有在個別關鍵點預測下考量.

如果採用模型直接回歸的方式, 一般所用的loss function如下, 你可以採用L2 norm或是下式的L1, 作者經實驗發現L1的結果較好, 式中J~k代表經模型回歸出第k個關鍵點的座標, J~kgt則是第k個關鍵點的ground truth.

在這篇論文中, Jk可以是2維的座標, 也可以是3維的座標, 如果2維座標座標的單位就是圖像的像素點, 3維座標則是mm, 2維座標的原點是以影像的左上角作為原點, 3維座標下則是以骨盆為其原點.

而在本篇論文中, 使用了~符號代表該數值有經過正規化, 如下式所示, N表示正規化方程式, N-1代表將正規化的數值還原成原本沒有經過正規化的數值. 而這邊正規化裡面所用的平均值與標準差都是透過資料集中的ground truth資料得到.

而為了解決只有回歸關鍵點座標, 但沒有考量到關鍵點相互關係的缺點, 作者決定用將原本回歸的目標由關鍵點的3維座標改成回歸關鍵點之間的關係, 而關鍵點之間的關係就要考量到人體架構如圖2所示.

圖2 模型回歸的目標

由圖2中可以看到模型回歸的目標由原本每個關鍵點的座標, 變成關鍵點與關鍵點間的關係, 也就是一般我們俗稱的肢段向量. 為了證明使用肢段作為回歸的目標比直接用關鍵點座標好, 作者列出了關鍵點與肢段的標準差如圖3所示, 由圖中可以看到關鍵點的標準差都大於肢段的標準差, 因此作者認為使用肢段作為預測的目標可以有較穩定的結果.

圖3 關鍵點與肢段的標準差, 圖3左為Human3.6M資料集, 因為是3維資料所以單位是mm, 圖3右側是MPII資料集, 因為是2維資料所以單位為pixel

而要以肢段做為回歸的目標, 就需定義關鍵點形成的肢段, 定義如下, Bk代表肢段k是由關鍵點Jk與他的上一個母關鍵點Jparent(k)兩點形成的, 肢段是由兩個關鍵點座標相減得到.

我們有了肢段的定義, 就可以重新設定loss function如下, B~k為正規化後的第k個肢段, B~kgt則是目標肢段的ground truth值.

然而, 如果僅有上式針對每一個肢段進行預測, 因為人體的肢段是由原點逐步向外連結如圖2所式, 因此每個階段的肢段誤差都會逐步累積, 最外側的肢段將會因為累積了多段的誤差導致末端點的誤差最大, 為了避免前述累進誤差所導致的錯誤, 作者加入了下面這一個累進誤差的式子, 該式子的意思就是由肢段1一直累加到肢段M-1.

上式中sgn是代表方向, 如果parent(I(m)) = I(m+1), 則sgn(parent(I(m)),I(m+1))為1, 其他則為-1. 而N-1如前面的式子說明, 是將正規化的肢段去正規化, 還原得到沒有正規化前的座標. 因此除了前面計算單個肢段的loss function外, 我們可以增加另一 組loss function代表多肢段累進出的誤差.

上式中ground truth定義如下

有了上面多組loss function, 作者也進行ablation experiment以驗證不同loss定義下對最終結果的影響, 因此作者定義出了下面幾種方式, 其中Pjoint為直接使用關鍵點的座標差異作為loss function, 這邊作者有提到與一開始的方法相似, 而作者把一開始的方法設為base line, 但是不清楚為何最後得到的結果會有些微的差異. Pbone代表採用肢段作為loss function, Pboth代表同時採用了Pjoint與Pbone的方式, 而Pall則是把累進的誤差加入, 以避免因不同肢段的誤差累進導致最終關鍵點座標的錯誤.

上述不同loss function比較的結果如表1所示, 由表1中可以看到採用全部的loss function的Pall可以得到最佳的結果.

表1 模型使用不同方式的比較方法

骨幹網路採用ResNet-50的架構, 並將最後一層全連階層改成3K的輸出, 輸入的影像都縮放成224x224的大小, 另外為了能夠讓2維與3維的資料同時混合進行訓練, 不管是關鍵點, 肢段或是相對位置都將座標分為xy以及z兩個部分, 而且loss function的部分都拆解為xy與z兩個部分如下所示:

上式中當輸入為2維資料時Lz設為0. 同時兩邊的座標也不同, xy是以影像座標為主, 單位為像素, z則是攝影機中心為座標, 單位為mm.

因為在Human3.6M中不同文獻採用了不同的受試者進行訓練與測試, 因此方法分為Protocol 1與Protocol 2, Protocol 1採用的是6個受試者進行模型訓練(S1, S5, S6, S7, S8, S9), S11每64個frame作為測試, 評量的方式是先經過generalized procrustes analysis做剛性座標轉換對齊的MPJPE(mean per joint position error)誤差. Protocol 2採用的是5個受試者進行模型訓練(S1, S5, S6, S7, S8), S9與S11每64個frame作為測試, 評量方式則是直接使用MPJPE. Protocol 1與2的結果如表2與3所示, 表中除了Human3.6M之外都有加入MPII的2維資料進行額外的訓練, 可以看到本篇論文的結果都是最佳的.

表2 Human3.6M使用Protocol 1的方訪進行訓練與測試
表3 Human3.6M使用Protocol 2的方訪進行訓練與測試

--

--