
text轉為npz格式CSL數據集中的pose-gloss中text 文件一行數據實例-0.01646529 -0.6482327 1.502301 -0.02531151 -0.3631941 1.570885 -0.02312568 0.04488507 1.634066 -0.03375742 -0.08601215 1.62303 -0.1698013 -0.2011915 1.549954 -0.1945323 -0.3977987 1.495995 -0.1950186 -0.5810784 1.407555 -0.1900637 -0.6325662 1.390355 0.1222058 -0.2088086 1.575616 0.1466089 -0.4060238 1.525056 0.162049 -0.582612 1.441606 0.1556938 -0.6228903 1.418582 -0.07448247 -0.6340373 1.46204 -0.09610306 -1.00437 1.446867 -0.1176976 -1.363221 1.457754 -0.1110597 -1.39173 1.339637 0.04221528 -0.6352441 1.479441 0.03347063 -1.007394 1.431241 0.02595523 -1.36769 1.41056 0.03370204 -1.384942 1.28791 -0.0317168 -0.1542985 1.612552 -0.1869177 -0.6876513 1.365173 -0.1652057 -0.6285808 1.371044 0.1484023 -0.6751753 1.395068 0.1230987 -0.6076492 1.428954原來的.txt是 CSL2018 已經提取好的姿態關鍵點數據不是普通文本語料。我們把它轉成.npz主要是為了讓 PyTorch 訓練更方便、更快、更穩定。原來的 TXT 是什么以這個文件為例P01_01_00_0._body.txt它表示一個手語樣本的視頻姿態序列。文件名大致可以這樣理解P01 第 1 個表演者 / signer 01_00_0 這個類別下的某個樣本編號 _body 身體姿態關鍵點這個.txt里每一行是一幀視頻的姿態數據。每一行有75個數字x1 y1 z1 x2 y2 z2 ... x25 y25 z25也就是25 個關鍵點 × 每個關鍵點 3 個坐標 75 個數所以一個 TXT 文件本質上是一個三維數組[T, 25, 3]其中T 這個樣本的視頻幀數 25 每幀有 25 個身體關鍵點 3 每個關鍵點的 x、y、z 坐標比如一個文件有 80 行那它就是[80, 25, 3]為什么轉成 NPZ.txt是給人看或跨平臺保存方便的格式但訓練模型時不太適合直接用。轉成.npz的原因主要有幾個讀取更快.txt每次都要一行一行讀字符串再把字符串切開、轉成浮點數。訓練時會反復讀很多樣本這樣很慢。.npz里直接保存的是 NumPy 數組加載后馬上就是數值矩陣。數據形狀更明確原始 TXT 只是很多數字。轉成.npz后我們明確保存為keypoints.shape[T,25,3]訓練代碼就不用猜每一行怎么拆。和現有 Dataset 代碼匹配你現在項目里的CSLIsolatedDataset期望讀取的是np.load(path)[keypoints]也就是說.npz里必須有一個叫keypoints的數組。為了接入現有訓練代碼所以要轉成.npz。避免訓練時重復預處理如果每次訓練都從.txt開始解析會重復消耗時間。現在轉換一次以后訓練、評估都直接讀.npz。更適合深度學習流水線PyTorch 訓練需要的是張量.npz比.txt更接近模型需要的輸入格式。轉換前后關系原始 TXT一行 一幀 一行 75 個數 25 個點 × 3 維坐標 整個文件 一個手語動作樣本轉換后的 NPZ{keypoints:array([T,25,3],dtypefloat32)}manifest 文件負責告訴訓練程序{keypoint_path:keypoints/000/P01_01_00_0_body.npz,label:0,video_id:P01_01_00_0}含義是這個樣本的數據文件在哪里 它屬于第幾個類別 它的視頻/樣本編號是什么所以可以理解為TXT 是原始姿態序列文本格式 NPZ 是訓練用的數值數組緩存格式 manifest 是訓練樣本索引表核心不是改變數據內容而是把同一份姿態數據整理成模型更容易讀取的格式。.npz 文件1. 本質結論.npz 不是 NumPy 專屬格式但它是 NumPy 標準的數組存儲格式原生設計就是配合 NumPy 使用。底層結構.npz本質是一個zip 壓縮包里面每個文件對應一個單獨的.npy文件.npy單個數組二進制存儲格式NumPy 自定義二進制.npz多個.npy打包壓縮的 zip 包2. 誰能讀寫它① 原生最優NumPyimportnumpyasnp# 保存多個數組np.savez(data.npz,aarr1,barr2)# 讀取datanp.load(data.npz)print(data[a],data[b])這是官方標準用法讀寫最簡單、無額外依賴。② 其他 Python 庫也能讀取只要庫支持解析 zip 解析.npy二進制就能打開 npzPyTorch可以先用np.load()讀出 numpy 數組再轉 tensor無直接 load npz APITensorFlow同理依賴 numpy 中轉SciPy完全兼容底層復用 NumPy 的 savez/loadzipfile numpy.lib.format純底層手動解析不用np.load示例手動拆解 npz證明它是普通zipimportzipfile,numpy.lib.formatasnpyfmtwithzipfile.ZipFile(data.npz)aszf:fornameinzf.namelist():withzf.open(name)asf:arrnpyfmt.read_array(f)③ 非 Python 語言很難直接讀C/Matlab/Java 沒有原生 npz 解析器需要自己實現.npy二進制解析 zip 解壓工業跨語言通用方案一般不用 npz改用hdf5、csv、二進制raw、protobuf3. 關鍵區分邏輯用途設計初衷就是批量保存多個 NumPy 數組科研、數值計算場景幾乎只配合 numpy 使用文件封裝底層是通用 zip不是私有加密格式任何能解壓 zip 的工具都能打開看到內部.npy數組編碼內部單個文件是.npy這是 NumPy 獨有的二進制編碼別的語言/庫不能直接解析裸.npy必須實現對應解碼邏輯。4. 總結日常使用場景可以認為它是專門給 NumPy 配套的格式幾乎只有做數值計算、操作 ndarray 時才會用到技術底層只是 zip 包裹 NumPy 私有數組文件不是完全封閉專屬格式能手動拆解但脫離 NumPy 會非常麻煩。補充對比格式歸屬適用場景.npyNumPy單個數組.npzNumPy多個數組打包壓縮.h5 / .hdf5通用科學存儲跨語言、大數據、復雜數據集