HDF5 输入到 caffe 的数据格式

format for data for HDF5 input to caffe

我的图像是 3 通道 RGB 图像。我将每个图像转换为矢量形式。 我打算使用 HDF5 格式将此 'data' 提供给 caffe。

我形成 HDF5 数据的代码是(使用 matlab)

images=csvread('vectorized_image.txt');
labels_new=csvread('labels.txt');

images=images.';

% reshape images to 4-D: [rows,col,channel,numbers]
trainData=reshape(images,[99 99 3 size(images,2)]);

% permute to [cols,rows,channel,numbers]
%trainData=permute(trainData,[2 1 3 4]);

% permute lables to [labels, number of labels ]

%trainLabels4=permute(label4,[2,1]);
trainLabels=permute(labels_new,[2,1]);

h5create('hand_train.hdf5','/data',size(trainData),'Datatype','double');
  h5create('hand_train.hdf5','/label',size(trainLabels),'Datatype','double');

h5write('hand_train.hdf5','/data',trainData);
h5write('hand_train.hdf5','/label',trainLabels);

上面的数据 blob 的格式是 (row, col, channel, number_samples)。数据 blob 的形式应为 (number_samples,channel,width, height),符合 `http://caffe.berkeleyvision.org/doxygen/classcaffe_1_1Blob.html

当我运行用(row, col, channel, number_samples)训练时,代码运行s。当我 运行 使用 (number_samples, channels, row, col, ) 训练时,代码给出错误:

hdf5_data_layer.cpp:53] Check failed: hdf_blobs_[i]->shape(0) == num (7500 vs. 99) 

其中 7500 是数据集中的图像数量。 HDF5 格式数据的正确输入方法是什么?

其中一个原因是 Matlab 以 Fortran 顺序而不是 C 顺序存储数据,这是 HDF5 内部使用的顺序。看看 HDF5 的 Matlab 文档,它应该对此非常明确。