【論文筆記】Learning to Estimate 3D Human Pose and Shape from a Single Color Image(CVPR 2018)

這篇論文沒有給出代碼,細節部分還是得看論文來推敲了,因此可能會有理解出問題的地方。

概述

做了什麼:引入一個端到端的框架,從包含人體的單張RGB圖像中預測出輪廓圖和關節熱力圖,生成SMPL參數並重建出一個SMPL的3D人體網格

存在問題:卷積網絡容易受到缺少訓練數據、3D預測時分辨率低的影響

關鍵點:提出了一個基於卷積網絡的高效的直接預測方法來解決上面的問題

特點:

  • 端到端網絡的輸出用於預測SMPL模型的參數
  • 從參數生成3D網格的過程是可微的,可以添加到網絡中
  • 投影過程也是可微的,意味着投影過程也可以訓練

模型

  • Human2D:使用stacked-hourglass模型,對輸入圖像處理得到關節熱力圖與輪廓圖
  • SMPL參數生成:PosePrior是全連接層,對熱力圖處理後得到SMPL的θ參數;ShapePrior則是卷積層與全連接層,對輪廓圖處理後得到SMPL的β參數
  • Mesh Generator: 可微SMPL生成函數,作爲網絡的一部分,沒有可學習的參數
  • Renderer: 投影矩陣是可微的,通過學習得到,將SMPL模型投影后可生成輪廓圖和關節點圖像

Human2D

輸入圖像分辨率爲256x256

其中紅色部分爲7x7的卷積層,步幅爲2

橙色部分爲3x3的卷積層,下面黑字爲通道數,再下面是卷積前的寬高。但是用於產生藍色結果的卷積以及在它之後進行後處理的卷積使用的是1x1的核

綠色部分則爲hourglass部分

藍色部分爲輸出的關節點熱力圖或者輪廓圖(分辨率都是64x64),熱力圖通道數即爲關節點數目,輪廓圖通道數爲2(分人體和背景)

Hourglass

每一列綠色塊對應3個連續的殘差塊。卷積核採用3x3,並且通道數在hourglass中保持在256個,使用了ReLU激活函數和Bath normalization。在encoding部分,使用max pooling來降採樣;在decoding部分,使用nearest neighbor upsampling上採樣。跳接層通用也包含殘差塊,它們的輸出將會按元素加進上採樣後decoding部分的特徵圖

Human2D Losses

\(L_{hm}\):使用網絡輸出的關節點熱力圖與ground-truth的關節圖採用逐像素的MSE Loss
\(L_{sil}\):使用網絡輸出的輪廓圖與ground-truth的輪廓圖採用逐像素的二進制交叉熵
\(L_{hg}=\lambda L_{hm} + L_{sil}, \lambda=100\)

PosePrior

在熱力圖中,找到置信度最大的像素位置,組合成(x, y, confidence),然後N個關節點就有3N個特徵,每個1024全連接層後面使用BatchNorm、ReLu、Dropout

ShapePrior

在3x3卷積後使用max pooling,每個1024全連接層後面使用BatchNorm、ReLu、Dropout

利用SMPL生成ground-truth

可以使用MoCap Data產生姿勢參數,Body Scans產生體型參數,然後傳遞給SMPL,再通過不同的視圖投影網格模型和關節點來製作輪廓圖和關節點熱力圖,作爲ground-truth

Mesh Generator

SMPL模型的生成過程變成了網絡的一部分,即這部分過程也是可微的。

在訓練時,首先針對Prior網絡使用L2參數Loss完成初始學習,然後再經過Mesh Generator生成3D關節點和頂點的方式,固定其中一個Prior網絡,使用下述Loss來fine-tuning另一個網絡的參數。

損失函數:

  • 3D per-vertex loss:\(L_M = \sum_{i=1}^{N} \parallel \hat{P_i}-\hat{P_i}\parallel_2^2, N=6890\)
  • 3D joint loss:\(L_J=\sum_{i=1}^{M} \parallel \hat{J_i}-\hat{J_i}\parallel_2^2, M=23\)

Renderer

將3D關節點和頂點都投影到圖片上得到2D關節點和2D頂點

\(\Pi(\hat{P})=\hat{S}, \Pi(\hat{J})=\hat{W}\)

\(L_{\Pi}=\mu\sum_{i}^{M}\parallel\hat{W_i}-\hat{W_i}\parallel_2^2+\parallel\hat{S_i}-\hat{S_i}\parallel_2^2, \mu=10\)

而投影過程是可微的,所以可以通過學習得到

實驗

測試數據集:UP-3D、SURREAL(CMU)

測試指標:mean per-vertex errors

消融實驗

對UP-3D進行消融實驗,若使用軸角表示法來訓練Priors,造成的誤差會非常大。因爲軸角表示法在某些情況下並不是唯一的,不易於收斂。採用羅德里格旋轉矩陣表示法的話旋轉表示是唯一的,因此誤差可以降低很多。而通過生成模型進行頂點的比對3D頂點L2損失,以及再重投影回到圖象空間來比對2D頂點L2損失,都可以對實驗結果有更細微的改善

UP-3D對比

部件分割

更多實驗細節可以去閱讀原文以及補充材料。

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