2019 CVPR的文章,使用時序卷積和半監督訓練的3D人體姿態估計
論文鏈接:https://arxiv.org/abs/1811.11742
github:https://github.com/facebookresearch/VideoPose3D
已經有前輩對這篇文章做過理解:https://www.cnblogs.com/zeroonegame/p/15037269.html
此處不介紹引言和相關工作,具體可參考前輩的閱讀筆記,寫的已經很好了。本文也只是做一個閱讀記錄。
摘要
這篇文章主要工作:
(1)使用基於空洞時序卷積的全卷積模型評估視頻中的3D姿勢
(2)引入了半監督訓練方法,作者稱為back-projection
2. 模型內容
2.1 Temporal dilated convolutional model
時序卷積模型將2D關鍵點序列作為輸入,生成3D姿態估計,其間采用空洞卷積來提取時序信息。
關於空洞卷積,貼一個鏈接:https://zhuanlan.zhihu.com/p/113285797
上圖為網絡結構圖,輸入為(243,34)大小的2D關鍵點序列,開始為一個不完整的塊,將輸出通道數設置為1024,后續由四個包含殘差結構的塊組成,最后一層輸出所有幀的的三維姿態預測。
以第一個塊為例,綠色部分為卷積層,每個塊前后有兩個卷積層,前者的卷積核(kernel size)W大小為3,后者的為1。前者的空洞卷積超參數(dilated factor) D = W^B,B的大小取決於當前處在第幾個塊,如第一個塊D=3^1=3,網絡中則為3d3,以此類推第四個塊為3d81。卷積之后經過歸一化,線性函數ReLU和Dropout后輸出特征。每一個塊輸出的特征,類似於ResNet,經過一次slice操作后又加入到下下個塊中,防止梯度消失。這邊的slice操作是為了匹配前后兩個塊的張量大小,確保能夠進行殘差連接。
作者主要采用的是如下圖的對稱卷積:
為了用於實時場景,實際是不能用到未來幀的,作者也嘗試了如下圖的因果卷積(causal convolutions,)
2.2 Semi-supervised approach
作者利用現成的2D關鍵點檢測器(2D keypoint detector)和back-projection相結合,將未標注的視頻產生的loss加到總loss中,以加強監督學習
2.2.1 Trajectory model
由於透視投影,屏幕中的2D姿態取決於軌跡(trajectory)和3D姿勢,軌跡可以是人體根關節的全局位置,從figure 3可以看出,最后通過譯碼器投影出的2D姿勢,包含了global position和 3D pose兩部分信息。
如果沒有這個全局位置信息,那么2D姿勢的主體會被固定投影在屏幕的中心。因此,這邊也對3D軌跡進行了回歸,以正確的進行2D反向投影。
為此,優化了第二個網絡,這個網絡在相機空間中對gloabl trajectory進行回歸,后者將其投影到2D之前加到姿勢中。兩個網絡具有相同的架構,但不共享一套參數,因為作者發現以多任務方式訓練時,兩者會產生負面影響。
如果人體離相機較遠,就會更加難以對起trajectory進行精確回歸,因此作者優化了trajectory的加權平均關節位置誤差(WMPJPE)損失函數:
使用相機空間中的真實深度值(y_z)的倒數對每個樣本進行加權,對於我們的目的來說,回歸遠目標的精確trajectory是不必要的,因為相應的2D keypoints往往集中在一個小區域周圍,因此對於目標越遠的目標,loss權重越低。
2.2.3 Bone length L2 loss
作者通過添加一個軟約束,對無標簽batch中subjects的平均骨長與有標簽batch的subjects的骨長做近似匹配,發現效果是更好的,即figure 3中計算的Bone length L2 Loss。計算這個loss對自監督學習起到了很重要的作用。
2.3 Discuss
該方法僅需要一些相機的內置參數,這些參數基本商業相機都能夠提供。該方法不依賴於特定的網絡結構,可以應用在任何以2D關鍵點作為輸入的3D姿態檢測器中。
在實驗中,作者按照本章中描述的架構將2D姿勢映射到三維,為了將3D姿勢重新投影到2D,作者使用了一個簡單的投影層,該投影層考慮到了線性參數(焦距、焦點)和非線性的鏡頭畸變系數(切向、徑向)來實現。這邊也提到了在Human3.6M數據集中使用的鏡頭畸變參數對於姿態估計幾乎沒有影響,但仍然將其囊括進來,因為是相機真實的一個參數。
3. 實驗及結果
3.1 實驗設置
評估使用的數據集:Human3.6M 和 HumanEva-I
Human3.6M中標志了3D姿態的7個子集,從中提取17的關節點,(S1,S5,S6,S7,S8)作為訓練集,(S9, S11)作為測試集。
HumanEva-I相對小得多,從三個視角記錄同一個對象,作者既通過對每個動作訓練不同模型來評估三個動作,也未所有動作訓練了一個模型。
衡量指標:MPJPE、P-MPJPE、N-MPJPE
3.2 實現細節
3.2.1 Implementation details for 2D pose estimation
之前的工作大部分都是在ground-truth bounding boxes提取目標,后使用stacked hourglass detector預測ground-truth bounding boxes中的2D關鍵點的位置。這篇文章並不依賴於任何特定的2D關鍵點檢測器。作者研究了集中不依賴於ground-truth boxes的2D detectors,使得該實驗在真實場景也可用。
除了stacked hourglass detector ,作者研究了包含一個ResNet-101-FPN bone的Mask-R-CNN網絡,參考其在Detectron中的實現,以及cascaded pyramid network(CPN) ——FPN表示的擴展,CPN實現需要外部提供邊界框(在這一情況下使用Mask R-CNN)
對於Mask R-CNN和CPN,因為關鍵點在COCO和Human3.6M不同,作者在COCO上進行預訓練,后在Huaman3.6M上fine-tune 2D投影的檢測器。在消融實驗中,作者還實驗了直接將3D姿態估計應用於預訓練的2D COCO關鍵點,以估計Human3.6M中的3D joints。
對於Mask R-CNN,作者采用了“stretched 1x”表訓練的ResNet-101作為backbone。微調時重新初始化了最后一層的keypoint network,反卷積層,來回歸hetmaps來學習一組新的keypoints。使用4個GPU進行步長衰減學習率訓練。
CPN使用輸入分辨率為384x288的ResNet-50作為backbone,微調時重新初始化GlobalNet和RefineNet的最后一層。訓練時采用指數衰減學習率。在微調時保持batch normalization。
下圖為作者研究的幾個2D key joints檢測器的效果對比
3.2.2 Implementation details for 3D pose estimation
這部分留個坑
3.3 結果
3.3.1 Temporal dilated convolutional model
下面兩張表顯示的是B=4blocks,receptive field=243 frames時的結果,可以看到兩個指標的效果普遍是比較好的,(+)表示需要額外依賴數據。
MPJPE Metric
P-MPJPE Metric
table 2展示了在單幀情況和時序情況下實現3D pose預測的Velocity error,即3D pose sequence的MPJPE(mean per-joint position error)的一階倒數,這一失序模型將單幀的MPJVE(measure joint velocity errors)平均降低了76%。
可以這么理解,絕位置對誤差(Abosolute position errors)是無法衡量預測的平滑性的,需要對其進行求導,一般誤差越大,就越不平滑,誤差越小,就會越平滑。
table4展示了在HumanEva-I的結果,結果也是很好的,說明可以推廣到更小的數據集上。
table 5 對比了與LSTM的復雜度,主要比較參數量、浮點運算量和MPJPE,27f表示使用27個frame預測一個3D pose,類似的,81f表示81 frames預測一個3D pose。
3.3.2 Semi-supervised approach
Figure 5a 顯示,隨着標記數據量的減少,半監督方法變得更加有效,當標記幀少於5K時,要比以 supervised 為 baseline的效果提升大約9-10.4 mm N-MPJPE
Figure 5b顯示了對數據集進行非下采樣版本的結果,這種設置方法更加適合這個模型,因為可以充分利用視頻中完整的時間信息,即使在感受野為27或者9時,也比baseline效果好上很多。
Figure 5c 更換了2D keypoints detector,發現會影響最終的誤差,說明一個好的detector是很重要的,最高可以提高22.6mm MPJPE(1% S1的情況下)
4. Conclution
本文介紹了一個簡單的全卷積模型。用於視頻中的3D人體估計。主要貢獻在於兩個:
(1)該架構通過在2D keypoint trajectory上使用空洞卷積,利用了視頻中的時序信息。
(2)使用半監督訓練,提高了數據缺少時的效果。該方法使用於未標記視頻,且只需要用到相機的一些內部參數。
附錄部分還有不少內容,作者其實做了很多工作,后續要學習一下代碼才能更深入領會。