論文閱讀筆記 — 3D人體姿態辨識 A simple yet effective baseline for 3d human pose estimation
這周要介紹的3D人體姿態辨識論文連結如下:
在Youtube上面demo的影片:
作者github連結如下:
本篇文章的摘要中作者就有提到關於人體3維關鍵點的辨識錯誤有可能來自兩個地方, 第一個來自於影像中的2維關鍵點辨識時就發生了錯誤, 第二個則是來自於由2維關鍵點轉換到3維關鍵點時的誤差.
而本邊作者建構了一個神經網路進行第二個部分從2維關鍵點到3維關鍵點的座標轉換如下式,
上式f*定義如下, 式中xi為2維人體關鍵點座標, yi為3維人體關鍵點座標, f則是將2維轉換為3維座標的神經網路.
經由作者的驗證, 發現一個簡單架構的網路就能夠達成這個座標的轉換, 而上述神經網路模型的架構f如圖1所示.
模型網路架構很簡單, 除了線性網路的堆疊外主要就是運用了幾種模型中常用的技巧, 包含了batch normalization, dropout, residual connection以及activation function上選用ReLU. 模型主要架構就是圖1中的residual block, residual block會重複兩次, 在圖1中沒有畫出的是第一層線性網路, 這一層網路的輸入是人體所有2維關鍵點座標, 輸出則是1024個權重, 這些權重再與第一段residual block連接. 除第一層外另外還有最後一層線性網路是將第2段residual block的輸出作為輸入, 並輸出3N個3維關鍵點座標. 最終整個網路是6層線性架構, 參數量在400~500萬之間.
在網路中所用的activation function都是用ReLU, 而在residual block中可以看到使用了一段residual connection連接輸入與輸出, 作者提到residual connection增加約10%精確度, 另外模型訓練中也採取了batch normalization以及dropout, 並限制每個權重最大值不能超過1.
資料前處理的部分會將每個關鍵點的2維座標與3維座標進行正規化(減去平均值並除以標準差), 全部關鍵點的3維座標會先以髖關節中點為原點進行平移, 接著再轉換到攝影機視角為最終座標系.
而在關鍵點的2維座標偵測上, 作者採用Stacked hourglass而不是Convolution Pose Machine (CPM), 因為Stacked hourglass的模型運算速度較快, 而且在MPII的資料集上Stacked hourglass有較好的預測結果. 關於Stacked hourglass與CPM可以參閱我先前介紹的文章:
而針對前面提到的多種技巧作者也進行了ablative experiment如表1所式, 從攝影機座標, residual connection, batch normalization與drop out, 最終可以提升精度約30多mm.
另外作者也測試了residual block的組數如表1下所式, 經實驗可以看到2組的residual blocks可以得到最佳效果.
模型的驗證在Human3.6M與HumanEVA這兩個資料集上面驗證, 表2列出在Human3.6M資料集下的測試結果, 其中受試者1, 5, 6, 7, 8用於訓練, 9與11用於測試, 而預測出的關鍵點誤差是將預測的髖關節中心與ground truth的髖關節中心對齊後進行比對. 表2中SH代表2維關鍵點的輸入都是經由Stacked hourglass模型, FT是指除原本在MPII資料集上pre-train的模型之後再經由Human3.6M資料集進行微調, GT是指直接使用ground truth的2維座標, SA指的是訓練資料是依據個別動作下去訓練, MA則是將全部的動作都進行訓練.
由表2的結果可以得知如果直接用ground truth作為輸入可以得到最佳的預測, 而採用Stacked hourglass模型的輸出, 則是經Human3.6M資料集微調並採用全部的動作進行訓練的結果最好