SMPL模型进阶
? ? ? SMPL模型是一種參數化人體模型,是馬普所提出的一種人體建模方法,該方法可以進行任意的人體建模和動畫驅動。這種方法與傳統的LBS的最大的不同在于其提出的人體姿態影像體表形貌的方法,這種方法可以模擬人的肌肉在肢體運動過程中的凸起和凹陷。因此可以避免人體在運動過程中的表面失真,可以精準的刻畫人的肌肉拉伸以及收縮運動的形貌。?
? ? ?該方法中β和θ是其中的輸入參數,其中β代表是個人體高矮胖瘦、頭身比等比例的10個參數,θ是代表人體整體運動位姿和24個關節相對角度的75個參數。
? ? ? ? β參數是ShapeBlendPose參數,可以通過10個增量模板控制人體形狀變化:?具體而言:每個參數控制人體形態的變化可以通過動圖來刻畫:
? ? ? ?PoseBlendShape參數是給出肌肉的凸起與凹下去與人體姿態,但是一般都優化算法都不采用poseBlendShape參數,因為PoseBlendShape項的懲罰能量的Landscape不利于非線性優化算法的迭代優化。
? ? ? ?但是如果要與Kinect給出的25個參數進行匹配直接進行是不夠的,因為兩者的關節節點是不匹配的。其中原因在于SMPL不但需要考慮基本的人體構型,還需要考慮關節密度能否控制點的運動,因此胸部并無明顯關節的情況下,增加了幾個關節,而手上的關節數量較少。此外需要注意因為SMPL為了較好的人體模型表達,因此較為精細的部位增加了較多的點數,如手指部分,按照正常人面積應該點數較少,但這對于SMPL模型不利。
? ? ? ? 按照doublefusion的思路可以用測地線距離(geodesic distance)為度量進行簡化,簡化后的模型為了保證關節的正確性,需要額外加入關節附近的頂點索引,此外由于頂點的抽離,在weights、Jregressor、Shape_Tensor、Mean-vertices都應該相應變化,并重新利用Python等語言的腳本進行處理寫成新的模型文件(.pkl或Json)。
? ? ?在實際的關節運動中,由于是級聯的鉸鏈的運動(Articulated),因此在CPU或者GPU中都需要進行順序運算,類似于Ai=Ai-1*Bi,從根節點出發到肢體關節點遍歷類似于比遍歷一棵特定深度的樹,而樹的深度決定順序運算的最長鏈,樹深度越長并行性越差,按照SMPL原始定義從尾骨位置出發的三叉樹深度為9,在此種情況下GPU的單個warp最后的兩個if會出問題,樹的葉子節點深度分別為6,9,9, 5,5,而修改根節點為原來3號節點后,葉子節點的深度變為4,7,7,7,7,因此樹深度下降,樹平衡性增加,求解節點旋轉平移的并行性提高。有望提高節點RT計算速度以及提高后續雅各比矩陣的稀疏性。
Json的索引需要重新排布,
對照表:?
smpl? [0, 1, 2, 3,? 4,? ?5,? 6,? 7,? 8,? 9, 10, 11, 12, 13, 14, 15, 16, 17,? 18,? 19,? 20, 21, 22, 23]
father = [-100, 0, 0, 0, 1, 2, 3, 5, 6, 7, 8, 9, 9, 9, 12, 13, 14, 16, 17, 18, 19, 20, 21]
正確??? ? [-100, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 12, 13, 14, 16, 17, 18, 19, 20, 21]
smplx的對照表的前24位與smpl是一樣的。后面的待補充
[-1000, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 20, 25, 26, 20, 28, 29, 20, 31, 32, 20, 34, 35, 21, 37, 38, 21, 40, 41, 21, 43, 44, 21, 46, 47, 21, 49, 50, 15, 15, 15]
?
new:? [ 3? 7? 8? 1? 12 13? 0? 16 17? 2? 20? ?21? 4? ? 5? ? ?6? ?9? ?10? ?11? 14? ?15? 18? ?19? 22? 23 ]
之前寫錯成了:(21號重復了兩遍)?
new:? [ 3? 7? 8? 1? 12 13? 0? 16 17? 2? 20? ?21? 4? ? 5? ? ?6? ?9? ?10? ?11? 14? ?21? 18? ?19? 22? 23 ]
GMM的默認的8個中心姿態:
? ? ? ? ? ? ? ? ? ? ? ? ? ?更改后的關節點編號? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?原始的關節點編號? ?
? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Kinect關節點? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??SMPL模型關節點
? ? ? 我整理的kinect與SMPL模型關節點對應關系如上圖和下表所示, 但并非嚴格的對應關系。?
Table =?[ 0 ?16 ?12 1 ? 17 ? 13 ?18 ?14 ? 15 ?19 ? 20 ?4 ? 8 ? 9 ?10 ? 5 ?6 ? 7 ?11 ?;? %%?Kinect
? ? ? ? ? ? ? ?0 ? 1 ?2 ?3 ? 4 ? ?5 ? 7 ? ?8 ? 11 ?10 ? 12 17 ?16 ?18 ?20 ?19 ?21 23 ?24 ?]; %% SMPL
? ? ? ?此外從Kinect中人體姿態為T-pose時候可以直接推出人體的部分β參數,如關于人體高矮、頭身比例、肢體相關的比例等,但是不能得到胖瘦相關的參數,根據實際實驗可以得到前五個參數,后面五個參數較難獲得,甚至會因為無法獲得而取得較大數值,導致人體模型嚴重失真。?
? ? ? ? ? 為了對人體模型進行約束,作者還給了人體姿態的GMM模型參數,該模型由八個中心構成。 其中最大概率的GMM的并非為人站成T-pose狀態下。 在利用GMM作為非線性優化重建人體模型相關研究中,GMM一般以對數的形式出現,但是此時需要注意的是目標懲罰函數并非以原始的概率密度的對數作為優化項,而是有一個constant項,甚至為了符合一般性,會先計算出貢獻最大的多分布中在特定姿態下概率密度最大的分布,然后乘以相應的固定常數,然后進行優化。
? ?然后實際中通過RGB回歸的人體二維點多半是coco25,分布如下
? ? ?很遺憾,兩者很大不同,比如coco25的臉部分布點很多,而smpl在脊柱上面分布點更加密集。另外兩者的Pelvis點和左右hip的定義也不同。?所以在做基于coco25的優化smpl姿態方面脊柱是個難點。
總結
- 上一篇: turicreate 视频_人工智能图片
- 下一篇: created(created)