文章目錄
- 一、Human3.6M資料集結構介紹
- 二、處理cdf.檔案
-
- 1.法一:使用nasa官方提供的CDF library
- 2.法二:使用CDF library的純python替代品:cdflib
-
- 1)安裝cdflib
- 2)cdflib中各函數介紹
-
- ①讀取一個cdf.檔案 cdflib.CDF('xxx.cdf')
- ②檢視此cdf.檔案資訊: cdf_info()
- ③提取此cdf檔案中的變量:varget ()
- 3)*cdflib執行個體:處理H3.6M中存儲2d keypoints的cdf檔案
- 4)解讀Human3.6M資料集中視訊和2d關節點資料
前言
一、Human3.6M資料集結構介紹
Human3.6M資料集有360萬個3D人體姿勢和相應的圖像,共有11個實驗者(Subject)(6男5女,論文一般選取1,5,6,7,8作為train,9,11作為test),和17個動作場景(Scenario),諸如讨論、吃飯、運動、問候等動作。該資料由4個數字錄影機,1個時間傳感器,10個運動錄影機捕獲。
我需要訓練的網絡輸入應該為兩個角度的人物照片(從視訊中提取關鍵幀),2d關節的關鍵點作為監督(從cdf檔案中提取)。從官網的以下分類中下載下傳:

大批量預處理Human3.6M資料集的方法可以參考:github: h36m-fetch
這次的小批量預處理先以S1(人物)的sitting1.55011271(人物右前方,觀察者的左側,下面用左來命名)和sitting.60457274(人物左前方,觀察者的右側,下面用右來命名)為例。
二、處理cdf.檔案
1.法一:使用nasa官方提供的CDF library
參考:使用python讀取cdf資料
- 第一步:下載下傳CDF Library:nasa cdf 官網
- 第二步:編譯
make OS=linux ENV=gnu CURSES=yes FORTRAN=no UCOPTIONS=-O2 SHARED=yes all
- 第三步:安裝
sudo make INSTALLDIR=/usr/local/cdf install
- 第四步:安裝
spacepy pip install spacepy
- 第五步:使用代碼如下執行個體
import os
from spacepy import pycdf
os.environ["CDF_LIB"] = "/usr/local/cdf/lib"
anno_Greeting=pycdf.CDF('/home/maddaff/Documents/TestSpace/Greeting.54138969.cdf')
data=anno_Greeting.copy()
anno_Greeting.close()
print data.keys()
NASA官網提供的可下載下傳檔案太多了,我不知道下載下傳哪個才是正确的CDF Lib,故而放棄了這種方法。
2.法二:使用CDF library的純python替代品:cdflib
cdflib子產品詳情(github位址)
1)安裝cdflib
在cmd中執行
pip install cdflib
或者直接在Pycharm中安裝此package
2)cdflib中各函數介紹
①讀取一個cdf.檔案 cdflib.CDF(‘xxx.cdf’)
import cdflib
cdf_file = cdflib.CDF('/path/to/cdf_file.cdf')
②檢視此cdf.檔案資訊: cdf_info()
傳回一個顯示基本CDF資訊的字典。這些資訊包括:
cdf
CDF的名稱
version
CDF的版本
encoding
CDF的位元組順序
Majority
行/列多數
zVariables
一個zVariables名稱的清單。
rVariables
一個rVariables名稱的清單。
Attributes
一個包含屬性名及其作用域的字典對象清單,例如 - {attribute_name : scope}。
Checksum
驗算符
Num_rdim
次元數,僅适用于 rVariables。
rDim_sizes
次元大小,僅适用于 rVariables。
Compressed
CDF壓縮到此檔案級
LeapSecondUpdated
最後更新的閏年表(如适用)
③提取此cdf檔案中的變量:varget ()
- 預設情況下,将傳回完整的變量資料。要僅擷取記錄可變變量的一部分資料,可以指定時間或記錄(從0開始)範圍。
-
可用于指定該變量所依賴的時間變量,并将在時間範圍内進行搜尋。對于符合ISTP的CDF,時間變量将來自此變量的屬性“ DEPEND_0”。該功能将自動搜尋它,是以無需指定“epoch”。epoch
- 如果未指定開始時間或結束時間(
和starttime
),則假定特定時期資料類型可能的最小值或最大值。end time
- 如果未指定開始或結束記錄(
和startrec
),則範圍從0開始,結束于最後寫入的資料。endrec
開始(和結束)時間應在清單中顯示為:
- [year month day hour minute second millisec] for CDF_EPOCH
-
[year month day hour minute second millisec microsec nanosec picosec] for
CDF_EPOCH16
- [year month day hour minute second millisec microsec nanosec] for CDF_TIME_TT2000
如果沒有提供足夠的時間分量,則隻有最後一項可以具有子時間分量的浮動部分。
注意:CDF的CDF_EPOCH16資料類型為每個資料值使用2個8位元組雙精度數。在Python中,每個值都表示為complex或numpy.complex128。
傳回變量資料。可以輸入變量名或變量号。預設情況下,它會根據資料類型傳回帶有變量data及其規範的numpy.ndarray or或list()class對象。
如果為expand=True,則傳回具有以下定義的鍵的字典用于輸出
Rec_Ndim
每個變量記錄的維數
Rec_Shape
變量的形狀
Num_Records
記錄總數
Records_Returned
檢索到的記錄數
Data_Type
CDF資料類型
Data
檢索變量資料
Real_Records
清單中稀疏記錄變量的真實資料記錄号
例如:
此指令将傳回變量Variable10中的所有資料,從記錄時刻0到150
3)*cdflib執行個體:處理H3.6M中存儲2d keypoints的cdf檔案
import cdflib
#load a cdf file
cdf= cdflib.CDF('Sitting 1.55011271.cdf')
#View the Information about the cdf file
info = cdf.cdf_info()
#Get the variables in the cdf file
x = cdf.varget("Pose")
4)解讀Human3.6M資料集中視訊和2d關節點資料
上述代碼生成的變量如下圖所示:
我們重點關注x(1,3304,64),也就是從cdf檔案中提取出來的變量,表示的是視訊每一幀中各關節點的2d坐标标注。
- 行-幀數:cdf檔案的每一行的定義是一幀中的标注,是以一個标注檔案對應的視訊有多少幀,這個檔案就有多少行。這個sitting1.55011271.mp4共有3304幀。
2D人體姿态識别-對Human3.6M資料集預處理(1):用python讀取并處理cdf檔案,cdflib包中各函數介紹,Human3.6M資料集2d關節點格式解讀一、Human3.6M資料集結構介紹二、處理cdf.檔案 - 列-32個關鍵點的2D坐标:這3304行的每一行裡面有64個資料,每2個資料為一組,共32組,每組表示的便是這個關鍵點的2D坐标。
論文《Human3.6M: Large Scale Datasets and Predictive Methods for 3D Human Sensing in Natural Environments》提到,資料集中共有32個關節點,但并未給出具體的标注順序和對應關節。
在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則為無意義節點。
————————————————
版權聲明:本文為CSDN部落客「alickr」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/alickr/article/details/107837403
由此可知,H36M資料集中标注32個關鍵點(見右圖),一部分是為了滿足表達旋轉向量的需要的。我們隻研究關節點的2d位置時,不需要考慮全部的32個關鍵點,隻需要提取出有效表示對應關節的關鍵點即可(見左表)。
右圖是參考博文CSDN:human3.6m資料集格式解析中給出的全部關鍵點(keypoints)的标注順序,左表是博文COCO和Human3.6m兩個資料集的人體骨骼标注順序 中給出的關鍵點和主要關節對應關系(注意這篇博文裡coco的标注是錯的!正确的關系見Coco key point json file parsing):