論文閱讀筆記 — 3D人體姿態辨識 LCR-Net++: Multi-person 2D and 3D Pose Detection in Natural Images

Hung-Chih Chiu
9 min readNov 4, 2020

--

這周要跟大家分享的3D人體姿態辨識, 是上次跟大家分享LCR-Net的進階版, 模型架構是基於先前LCR-Net做部分的改進, 建議可以先讀一下LCR-Net的介紹了解整個網路架構, 關於LCR-Net的介紹如下.

LCR-Net++的原始論文連結如下 (https://arxiv.org/pdf/1803.00455.pdf), 模型預測的結果如圖1. 作為LCR-Net的延伸, 論文中採用的圖片大致都與LCR-Net相同, 不仔細讀還會以為在讀前一篇的論文.

圖1 LCR-Net++模型預測結果

相比於LCR-Net, LCR-Net++在4個部分進行了網路的改進, 第1, 使用更多合成的影像用於模型的訓練; 第2, 如同OpenPose或是Stacked Hourglass的模型架構, 藉由重複的堆疊網路得到更精確的計算結果; 第3, 藉由Mask R-CNN的ROI Alignment, 因為沒有將座標取整數, 所以可以得到更精確的座標位置; 第4, 將骨幹架構由VGG-16換成ResNet.

LCR-Net的架構分為Location, Classification與Regression三個步驟, 就是LCR的縮寫, 模型架構如下圖2所示:

圖2 LCR-Net架構

因此, 最終的loss就是將這三個步驟的loss進行整合如下:

第一個的LLoc就是在影像中找出可能有人的位置, 以及他們對應的K個anchor pose的機率. 而在LCR-Net中使用的是Faster R-CNN的Regional Propose Network (RPN), 如下式:

RPN使用了RoI pooling, 中間會對影像中的座標作兩次取整的動作, 因為取整所以導致座標不精確, 因此在LCR-Net++內參考了Mask R-CNN的方法將RoI Pooling換成RoI Alignment, 沒有了取整可以得到較佳的精度. 主網路的部分也從VGG-16換成ResNet-50, 提升網路的速度與精度.

Classification的部分就是將影像視為一個分類的問題, 判斷經RPN網路得到的影像與我們預設的K組anchor pose哪一個比較相近, 所採用的loss function如下:

在LCR-Net++裡面Classification與Regression的部分都會透過重複的計算, 以提升網路預測的精度, 這部分後面再來說明. 在Classification內ground truth的資料, 會依據影像與K個anchor pose在3維空間中最短距離作為評斷 , 最短距離的anchor pose定義為這個分類cB如下, 其中P為ground truth 3維座標, Ak為K組anchor pose的3維座標, D3D為兩個關鍵點間的3維距離.

Regression的網路用以回歸anchor pose(圖3左)與ground truth(圖3中)的座標誤差(圖3右).

圖3 Regression網路要回歸的目標

回歸採用的是smooth-L1 loss如下, 式子中tcB是圖3右側的目標向量, vcB則是經由網路預測出的向量, 大小為 5 x J x (K+1), J是人體關鍵點的數量, 論文中為13. 5是2個2維座標與3個3維座標之合, K+1則是K個anchor pose與一個沒有識別到的物件, 當預測座標與ground truth的定界框IoU小於50%時, 則設定cB=0.

另外前面有提到LCR-Net++參照了Stacked Hourglass的方式, 透過迭代的方式獲取更高的模型精度與分類結果如圖4所示.

圖4 模型迭代以獲得更高精度

LCR-Net++同樣也以PPI(Pose proposals integration)的方式將座標進行整合, 但這邊採用的PPI與LCR-Net有些微的差異. LCR-Net++是先對每個關鍵點的分數進行重新評分 (rescore), 在定界框內的關鍵點維持原來分數, 定界框之外的關鍵點則逐步遞減如下所式:

上式中f(pj,B)=1如果該關鍵點座標落在bounding box之內, 所以如果預測全部的關鍵點都落在bounding box之中, 則s’=s, 如果關鍵點落在bounding box之外, 則f定義如下:

上式中σb為25, D(pj,B)則是關鍵點到bounding box的距離. 有了rescore的分數s’後可以得到最終座標如下:

上式中只取關鍵點座標距離在T3D的範圍內的點作為評估的姿態, 定義如下:

S是所有rescore後分數的總和, 定義如下:

為了要能夠得到足夠多的訓練資料, 即影像需要包含完整2維與3維關鍵點標註的資料, 作者參照了A Dual-Source Approach for 3D Human Pose Estimation from a Single Image這篇的想法, 產生所謂的”pseudo” ground-truth, 關於Dual-Source可以參閱我先前文章的說明:

產生”pseudo” ground-truth的架構如圖5, 比對影像中的2維關鍵點座標(圖5上路)與實驗室中拍攝的2維關鍵點座標(圖5下路), 利用nearest neighbor(NN)的方式搜尋最接近的2維關鍵點, 其對應的3維座標就被視為是"pseudo" ground-truth(圖5右), 這些資料就可以用來做模型的訓練. 不過我對於這樣的作法與上一篇的LCR-Net一直有一個疑問, 就是這樣的方式產生的”pseudo” ground-truth與真正的3維座標是有誤差的, 如何消除掉這個誤差作者並沒有在論文中說明, 如果沒有消除這個誤差, 最終模型的預測就會受到這個真值誤差的影響, 不知道在實作上要如何克服??

圖5 pseudo ground-truth標記流程

前面提到的K值與T3D, 作者進行了實驗比較以獲取最佳的數值如圖6所示, 可以看到K=100時有比較好的精度, T3D則選擇125mm用以作為PPI中點群的篩選距離.

圖6 (a)K值與(b)T3D值比較

資料集之一是選用Human3.6m進行訓練, 為了要能夠與其他演算法做同等的比對, 也使用了3種方法來進行訓練, 方法1 P1是用了6個受試者作為訓練資料(S1, S5, S6, S7, S8, S9), 而受試者S11, 相機2的視角每64張影像做為測試, 共928張影像. 方法2 P2用S1, S5, S6, S7與S8作為訓練, 而S9與S11每5張影像做為測試, 共測試11做為測試.

而除了Human3.6m, 為了要增加訓練資料量, 利用合成3D模型來產生合成的影像, 合成的動作中會考慮如同Human3.6m中的姿態, 利用SMPL 3D模型產生類似的動作, 以增加資料的變異性, 如圖7(a)為原始Human3.6m影像, 圖7(b)為利用SMPL產生的合成影像. 另外也會利用CMU的影像整合到Human3.6m中如圖7(c)與圖7(d).

圖7 不同影像合成以擴充訓練資料庫

相關Ablative analysis如表1所示, 從LCR-Net(以VGG16為骨幹)開始, 加入了合成的Human3.6m以及CMU的訓練資料集, 並將座標對齊由RoI Pooling換成RoI alignment, 以及堆疊網路提升精度, 到依據關鍵點位置重新給分, 這些步驟作者稱為LCR-Net+, 而將骨幹換成ResNet50配合重新給分, 這部分則是LCR-Net++, 可以看到最終LCR-Net++所得到的精度最佳.

表1 Ablation experiment

而取其他論文在不同方法(P1, P2, P3)下比較的結果如表2所示.

表2 比較結果

--

--