在caffe中,如果使用lmdb資料格式的話,預設是只支援「影象+整數單標籤」這種形式的資料的。
如果訓練網路需要一些其他形式的資料或標籤(如浮點資料,多標籤等等),可以將其製作成hdf5格式。
ps:hdf5資料格式比較靈活,但缺點是占用空間較大。筆者曾經試著把229多張512x512的影象製作成乙個hdf5檔案,可以有1.4g. 因此建議影象檔案的話,最好還是用lmdb格式,快速且節省空間;在網路定義檔案中,同時使用data層和hdf5層。
影象資料準備
如上所述,影象檔案仍然使用lmdb格式。
準備影象檔名列表list.txt,注意這裡我們用不到lmdb中存放的標籤,因此每一行只需要影象名就可以,convert_imageset會在執行時把每個label都賦為0.
製作lmdb檔案
$caffe_root/build/tools/convert_imageset [flags] $image_root list.txt $lmdb_name
標籤資料準備
import h5py
import numpy as np
import os
label_dim = 45
# 存放標籤值的檔案
list_txt = 'name_label.txt'
# 要生成的hdfs檔名
hdf5_file_name = 'hdf5_train.h5'
with open(list_txt, 'r') as f:
lines = f.readlines()
samples_num = len(lines)
# 此處可以指定資料型別,如 dtype=float
labels = np.zeros((len(lines), label_dim))
for index in range(samples_num):
img_name, label = lines[index].strip().split()
label_int = [int(l) for l in label]
labels[index, :] = label_int
# 將標籤資料寫入hdf5檔案
h5_file = h5py.file(hdf5_file_name, 'w')
# 此處'multi_label'和網路定義檔案中hdf5data層的top名字是一致的
h5_file.create_dataset('multi_label', data=labels)
h5_file.close()
print
'complete.'
其中,name_label.txt存放了影象名稱和標籤,當然這裡我們只需要讀取其中的標籤。
name_label.txt檔案格式(部分):
這樣的話,hdf5_train.h5裡面就儲存了所有影象對應的標籤,每個標籤包含多個0或1的值。
注意,list.txt中的檔名一定要和name_label.txt中標籤一一對應。
網路定義
採用兩個資料層,乙個data層,乙個hdf5data層:
name: "train_net"
layer
transform_param
}layer
}
其中,hdf5_train_list.txt中存放的是所有需要讀取的hdf5檔案的名字。
這個例子中,hdf5_train_list.txt的內容:
/path/to/hdf5_train.h5
安裝HDF5及在VS下配置HDF5
最近要用到hdf5來儲存資料,想要安裝嘗試用一下.發現網上有兩種安裝方式,一種是obtain518.html 獲取最新的hdf5 1.8軟體 另一種是cmakebuild518.html 使用cmake構建hdf5 1.8.我原本嘗試後一種方法 windows下hdf5靜態庫的封裝與測試 已驗證 發...
HDF5檔案讀寫
做實驗需要跑資料,caffe庫要求資料格式為hdf5.hdf5資料的import與export可以通過matlab簡單完成。hdfview可以簡單檢視hdf5資料。1.h5disp命令可以檢視hdf5資料格式 h5disp test.h5 hdf5 test.h5 group dataset dat...
HDF5檔案讀寫
做實驗需要跑資料,caffe庫要求資料格式為hdf5.hdf5資料的import與export可以通過matlab簡單完成。hdfview可以簡單檢視hdf5資料。1.h5disp命令可以檢視hdf5資料格式 1 h5disp test.h5 2hdf5 test.h5 3 group 4 data...