Caffe中使用HDF5製作多標籤資料

2021-08-07 20:06:33 字數 2469 閱讀 7403

在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...