human3 6m資料集格式解析

2021-10-23 09:53:35 字數 4922 閱讀 6494

最近做3d人體姿態骨骼相關的實驗,需要使用到human3.6m這個資料集,但是這個資料集的格式以及使用方式在網上並沒有人詳細地進行說明,因此我記錄下我對這個資料集的格式理解的過程。對於用xyz表示的格式不在贅述,但是在人體骨架運動序列的生成任務中,往往會採用李群和李代數的方法表示骨架,關於李群和李代數可以參考網上的其他博文,這裡只敘述h36m資料是如何使用李代數表示人體骨架。

用李代數表示的human3.6m的標註資料開啟之後是如下格式:

0.0000000,0.0000000,0.0000000,-0.0000000,-0.0000001,0.0000001,0.3230213,-0.4831149,-0.0673216,-0.0632727,-0.0000000,-0.0000000,-0.0513711,0.5105966,-0.0717521,0.3066142,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.3265765,0.3157165,-0.0472587,-0.1024184,-0.0000000,-0.0000000,0.0504554,-0.3802582,-0.0118426,0.2074713,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.4935718,0.0160918,-0.1225905,-0.0910649,0.0319310,0.0919449,-0.5382497,0.0032421,-0.3011716,1.3627026,-0.0115682,0.1639829,-0.0000000,-0.0000000,-0.0000000,-0.1539563,-0.0657004,2.0724664,-0.1472652,-0.2662845,0.7816223,-0.1515370,-0.0000000,-0.0000000,0.2704134,-0.5088616,0.1476415,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.0520571,0.0791909,-2.1037283,-0.1340761,0.4897867,-0.8238848,-0.3317853,-0.0000000,-0.0000000,0.1473034,-0.1267874,-0.0072563,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000

-0.0566091,-0.0728046,-0.4761781,0.0002633,-0.0016594,0.0013396,0.3249512,-0.4825976,-0.0681018,-0.0664033,-0.0000000,-0.0000000,-0.0504344,0.5090697,-0.0757788,0.3075081,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.3277222,0.3166970,-0.0482386,-0.1038797,-0.0000000,-0.0000000,0.0504261,-0.3792894,-0.0117432,0.2074303,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.4898341,0.0168204,-0.1218890,-0.0900892,0.0323371,0.0876651,-0.5319070,0.0068988,-0.3015916,1.3708540,-0.0113818,0.1643514,-0.0000000,-0.0000000,-0.0000000,-0.1516332,-0.0658906,2.0727837,-0.1523688,-0.3035229,0.7762181,-0.1673595,-0.0000000,-0.0000000,0.2622762,-0.4809161,0.1241033,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,0.0526290,0.0793313,-2.1033485,-0.1298485,0.4750284,-0.8241772,-0.3224269,-0.0000000,-0.0000000,0.1390186,-0.0978035,-0.0031509,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000,-0.0000000

旋轉向量簡單的來說,就是若從向量a旋轉到向量b,旋轉向量的方向就是a和b旋轉面的法向量的方向,旋轉向量的大小對應a旋轉到b的角度。

把這99個資料3個為一組,共分為33個旋轉向量。

接下來說明這些旋轉向量對應的關節以及human3.6m標註的資料結構。

h3.6m資料裡,有個初始的人體骨骼模型,它簡單的定義了各個骨骼邊的長度以及它們之間的互相連線關係。下圖是已經轉換完成的骨骼影象,試想把圖中旋轉的角度全部去除,就能得到乙個呆板的類似機械人的人體骨骼模型,那就是h3.6m假設的初始模型,當然具體h36m定義的並不像機械人,但是基本原理是一樣的。

下面用數字i表示第i個旋轉旋轉向量,j-k表示人體骨骼上的一條向量邊,則j-k在初始模型中有一條與之對應的邊:

向量0在目前已看到的**中沒有看到使用的,用途不明,因此我也不把它叫做旋轉向量。

旋轉向量1:向量0-1的原始向量對應的旋轉向量,也就是說原始向量經過旋轉之後的到向量0-1;

旋轉向量2:向量1-2的原始向量經過了旋轉向量1旋轉之後,在經過旋轉向量2的旋轉才能得到向量1-2,也就是說1-2的原始向量分別經過了旋轉向量1和旋轉向量2得到了圖中的1-2;

具體原理可以去了解3d圖形學中的世界座標與相對座標;

以此類推,這些旋轉向量就組成了一條旋轉鏈。

h36m中共有5條旋轉鏈,分別是

0-1-2-3-4-5

0-6-7-8-9-10

0-11-12-13-14-15

12-16-17-18-19-20-21

|-22

12-24-25-26-27-28-29

|-30

附上全部關節點的標註順序

在h3.6m中,會有一些看似冗餘標註點,如圖中的11和0是重合的,其實是因為h36m的節點來說,如果它們的父節點相同,那麼它們共享同乙個旋轉向量,因此所有父節點相同的節點相對父節點旋轉角度都是一樣的,這樣會造成一些問題,比如節點0有3子節點,但是胯部的方向和脊椎的旋轉方向是不一樣的,因此就需要乙個多設定乙個11節點作為12的父節點來改變12節點的旋轉方向。同理,20與19重合用來改變21的方向,28與27重合用來改變29的方向,16和24都與13重合,16用來改變17的方向,24用來改變25的方向,剩下的23和31則為無意義節點。

在所有視覺化h36m的指令碼中,都會有這麼幾組資料:

parent = np.array([0, 1, 2, 3, 4, 5, 1, 7, 8, 9, 10, 1, 12, 13, 14, 15, 13,

17, 18, 19, 20, 21, 20, 23, 13, 25, 26, 27, 28, 29, 28, 31]) - 1

offset = np.array([[0., 0., 0.],

[-132.95, 0., 0.],

[0., -442.89, 0.],

[0., -454.21, 0.],

[0., 0., 162.77],

[0., 0., 75.],

[132.95, 0., 0.],

[0., -442.89, 0.],

[0., -454.21, 0.],

[0., 0., 162.77],

[0., 0., 75.],

[0., 0., 0.],

[0., 233.38, 0.],

[0., 257.08, 0.],

[0., 121.13, 0.],

[0., 115., 0.],

[0., 257.08, 0.],

[0., 151.03, 0.],

[0., 278.88, 0.],

[0., 251.73, 0.],

[0., 0., 0.],

[0., 0., 100.],

[0., 137.5, 0.],

[0., 0., 0.],

[0., 257.08, 0.],

[0., 151.03, 0.],

[0., 278.88, 0.],

[0., 251.73, 0.],

[0., 0., 0.],

[0., 0., 100.],

[0., 137.5, 0.],

[0., 0., 0.]])

expmapind = np.split(np.arange(4, 100) - 1, 32)

這幾組資料定義了骨骼資料的結構以及對應的旋轉向量下標:

parent[i]表示第i個關節點與它的父節點組成的骨骼向量的旋轉矩陣的索引位址;

offset[i]表示了在初始模型中骨骼向量parent[i]-i的長度和方向;

expmapind[i]表示了各個旋轉向量在標註資料中的分組,其中有99個資料中的下標,**中每三個分一組,可以看到下標從3開始,因此前三個資料也就是第乙個向量並未使用,總共分為32組。

Eclipse 3 6 M7 太陽神版 發布

eclipse 3.6 m7 太陽神版 發布 the eclipse and equinox 團隊於 5 月 1 日 宣布 eclipse 3.6 helios 太陽神 里程碑第 7 版發布。這是 eclipse 3.6 的最後乙個里程碑版,意味著 3.6 太陽神最終版即將凍結,並最遲於 6 月發布...

Eclipse 3 6 M7 太陽神版 發布

eclipse 3.6 m7 太陽神版 發布 the eclipse and equinox 團隊於 5 月 1 日 宣布 eclipse 3.6 helios 太陽神 里程碑第 7 版發布。這是 eclipse 3.6 的最後乙個里程碑版,意味著 3.6 太陽神最終版即將凍結,並最遲於 6 月發布...

Eclipse 3 6 M7 太陽神版 發布

eclipse 3.6 m7 太陽神版 發布 the eclipse and equinox 團隊於 5 月 1 日 宣布 eclipse 3.6 helios 太陽神 里程碑第 7 版發布。這是 eclipse 3.6 的最後乙個里程碑版,意味著 3.6 太陽神最終版即將凍結,並最遲於 6 月發布...