別及翻譯項(xiàng)目實(shí)戰(zhàn)系列--數(shù)據(jù)轉(zhuǎn)換)
text轉(zhuǎn)為npz格式CSL數(shù)據(jù)集中的pose-gloss中text 文件一行數(shù)據(jù)實(shí)例-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 已經(jīng)提取好的姿態(tài)關(guān)鍵點(diǎn)數(shù)據(jù)不是普通文本語料。我們把它轉(zhuǎn)成.npz主要是為了讓 PyTorch 訓(xùn)練更方便、更快、更穩(wěn)定。原來的 TXT 是什么以這個(gè)文件為例P01_01_00_0._body.txt它表示一個(gè)手語樣本的視頻姿態(tài)序列。文件名大致可以這樣理解P01 第 1 個(gè)表演者 / signer 01_00_0 這個(gè)類別下的某個(gè)樣本編號(hào) _body 身體姿態(tài)關(guān)鍵點(diǎn)這個(gè).txt里每一行是一幀視頻的姿態(tài)數(shù)據(jù)。每一行有75個(gè)數(shù)字x1 y1 z1 x2 y2 z2 ... x25 y25 z25也就是25 個(gè)關(guān)鍵點(diǎn) × 每個(gè)關(guān)鍵點(diǎn) 3 個(gè)坐標(biāo) 75 個(gè)數(shù)所以一個(gè) TXT 文件本質(zhì)上是一個(gè)三維數(shù)組[T, 25, 3]其中T 這個(gè)樣本的視頻幀數(shù) 25 每幀有 25 個(gè)身體關(guān)鍵點(diǎn) 3 每個(gè)關(guān)鍵點(diǎn)的 x、y、z 坐標(biāo)比如一個(gè)文件有 80 行那它就是[80, 25, 3]為什么轉(zhuǎn)成 NPZ.txt是給人看或跨平臺(tái)保存方便的格式但訓(xùn)練模型時(shí)不太適合直接用。轉(zhuǎn)成.npz的原因主要有幾個(gè)讀取更快.txt每次都要一行一行讀字符串再把字符串切開、轉(zhuǎn)成浮點(diǎn)數(shù)。訓(xùn)練時(shí)會(huì)反復(fù)讀很多樣本這樣很慢。.npz里直接保存的是 NumPy 數(shù)組加載后馬上就是數(shù)值矩陣。數(shù)據(jù)形狀更明確原始 TXT 只是很多數(shù)字。轉(zhuǎn)成.npz后我們明確保存為keypoints.shape[T,25,3]訓(xùn)練代碼就不用猜每一行怎么拆。和現(xiàn)有 Dataset 代碼匹配你現(xiàn)在項(xiàng)目里的CSLIsolatedDataset期望讀取的是np.load(path)[keypoints]也就是說.npz里必須有一個(gè)叫keypoints的數(shù)組。為了接入現(xiàn)有訓(xùn)練代碼所以要轉(zhuǎn)成.npz。避免訓(xùn)練時(shí)重復(fù)預(yù)處理如果每次訓(xùn)練都從.txt開始解析會(huì)重復(fù)消耗時(shí)間。現(xiàn)在轉(zhuǎn)換一次以后訓(xùn)練、評(píng)估都直接讀.npz。更適合深度學(xué)習(xí)流水線PyTorch 訓(xùn)練需要的是張量.npz比.txt更接近模型需要的輸入格式。轉(zhuǎn)換前后關(guān)系原始 TXT一行 一幀 一行 75 個(gè)數(shù) 25 個(gè)點(diǎn) × 3 維坐標(biāo) 整個(gè)文件 一個(gè)手語動(dòng)作樣本轉(zhuǎn)換后的 NPZ{keypoints:array([T,25,3],dtypefloat32)}manifest 文件負(fù)責(zé)告訴訓(xùn)練程序{keypoint_path:keypoints/000/P01_01_00_0_body.npz,label:0,video_id:P01_01_00_0}含義是這個(gè)樣本的數(shù)據(jù)文件在哪里 它屬于第幾個(gè)類別 它的視頻/樣本編號(hào)是什么所以可以理解為TXT 是原始姿態(tài)序列文本格式 NPZ 是訓(xùn)練用的數(shù)值數(shù)組緩存格式 manifest 是訓(xùn)練樣本索引表核心不是改變數(shù)據(jù)內(nèi)容而是把同一份姿態(tài)數(shù)據(jù)整理成模型更容易讀取的格式。.npz 文件1. 本質(zhì)結(jié)論.npz 不是 NumPy 專屬格式但它是 NumPy 標(biāo)準(zhǔn)的數(shù)組存儲(chǔ)格式原生設(shè)計(jì)就是配合 NumPy 使用。底層結(jié)構(gòu).npz本質(zhì)是一個(gè)zip 壓縮包里面每個(gè)文件對(duì)應(yīng)一個(gè)單獨(dú)的.npy文件.npy單個(gè)數(shù)組二進(jìn)制存儲(chǔ)格式NumPy 自定義二進(jìn)制.npz多個(gè).npy打包壓縮的 zip 包2. 誰能讀寫它① 原生最優(yōu)NumPyimportnumpyasnp# 保存多個(gè)數(shù)組np.savez(data.npz,aarr1,barr2)# 讀取datanp.load(data.npz)print(data[a],data[b])這是官方標(biāo)準(zhǔn)用法讀寫最簡單、無額外依賴。② 其他 Python 庫也能讀取只要庫支持解析 zip 解析.npy二進(jìn)制就能打開 npzPyTorch可以先用np.load()讀出 numpy 數(shù)組再轉(zhuǎn) tensor無直接 load npz APITensorFlow同理依賴 numpy 中轉(zhuǎn)SciPy完全兼容底層復(fù)用 NumPy 的 savez/loadzipfile numpy.lib.format純底層手動(dòng)解析不用np.load示例手動(dòng)拆解 npz證明它是普通zipimportzipfile,numpy.lib.formatasnpyfmtwithzipfile.ZipFile(data.npz)aszf:fornameinzf.namelist():withzf.open(name)asf:arrnpyfmt.read_array(f)③ 非 Python 語言很難直接讀C/Matlab/Java 沒有原生 npz 解析器需要自己實(shí)現(xiàn).npy二進(jìn)制解析 zip 解壓工業(yè)跨語言通用方案一般不用 npz改用hdf5、csv、二進(jìn)制raw、protobuf3. 關(guān)鍵區(qū)分邏輯用途設(shè)計(jì)初衷就是批量保存多個(gè) NumPy 數(shù)組科研、數(shù)值計(jì)算場景幾乎只配合 numpy 使用文件封裝底層是通用 zip不是私有加密格式任何能解壓 zip 的工具都能打開看到內(nèi)部.npy數(shù)組編碼內(nèi)部單個(gè)文件是.npy這是 NumPy 獨(dú)有的二進(jìn)制編碼別的語言/庫不能直接解析裸.npy必須實(shí)現(xiàn)對(duì)應(yīng)解碼邏輯。4. 總結(jié)日常使用場景可以認(rèn)為它是專門給 NumPy 配套的格式幾乎只有做數(shù)值計(jì)算、操作 ndarray 時(shí)才會(huì)用到技術(shù)底層只是 zip 包裹 NumPy 私有數(shù)組文件不是完全封閉專屬格式能手動(dòng)拆解但脫離 NumPy 會(huì)非常麻煩。補(bǔ)充對(duì)比格式歸屬適用場景.npyNumPy單個(gè)數(shù)組.npzNumPy多個(gè)數(shù)組打包壓縮.h5 / .hdf5通用科學(xué)存儲(chǔ)跨語言、大數(shù)據(jù)、復(fù)雜數(shù)據(jù)集