論文閱讀筆記 — 3D人體姿態辨識 LCR-Net++: Multi-person 2D and 3D Pose Detection in Natural Images
這周要跟大家分享的3D人體姿態辨識, 是上次跟大家分享LCR-Net的進階版, 模型架構是基於先前LCR-Net做部分的改進, 建議可以先讀一下LCR-Net的介紹了解整個網路架構, 關於LCR-Net的介紹如下.
LCR-Net++的原始論文連結如下 (https://arxiv.org/pdf/1803.00455.pdf), 模型預測的結果如圖1. 作為LCR-Net的延伸, 論文中採用的圖片大致都與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所示:
因此, 最終的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右).
回歸採用的是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所示.
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維座標是有誤差的, 如何消除掉這個誤差作者並沒有在論文中說明, 如果沒有消除這個誤差, 最終模型的預測就會受到這個真值誤差的影響, 不知道在實作上要如何克服??
前面提到的K值與T3D, 作者進行了實驗比較以獲取最佳的數值如圖6所示, 可以看到K=100時有比較好的精度, T3D則選擇125mm用以作為PPI中點群的篩選距離.
資料集之一是選用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).
相關Ablative analysis如表1所示, 從LCR-Net(以VGG16為骨幹)開始, 加入了合成的Human3.6m以及CMU的訓練資料集, 並將座標對齊由RoI Pooling換成RoI alignment, 以及堆疊網路提升精度, 到依據關鍵點位置重新給分, 這些步驟作者稱為LCR-Net+, 而將骨幹換成ResNet50配合重新給分, 這部分則是LCR-Net++, 可以看到最終LCR-Net++所得到的精度最佳.
而取其他論文在不同方法(P1, P2, P3)下比較的結果如表2所示.