這篇論文沒有給出代碼,細節部分還是得看論文來推敲了,因此可能會有理解出問題的地方。
概述
做了什么:引入一個端到端的框架,從包含人體的單張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對比
部件分割
更多實驗細節可以去閱讀原文以及補充材料。