我的图像是3通道RGB图像。我将每个图像转换为矢量形式。 我打算用HDF5格式将这些'数据'提供给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)。根据“http://caffe.berkeleyvision.org/doxygen/classcaffe_1_1Blob.html
,数据blob的形式应为(number_samples,channel,width,height)当我使用(row,col,channel,number_samples)进行训练时,代码会运行。当我使用(number_samples,channels,row,col,)进行训练时,代码会出错:
hdf5_data_layer.cpp:53] Check failed: hdf_blobs_[i]->shape(0) == num (7500 vs. 99)
其中7500是数据集中的图像数。 输入HDF5格式数据的正确方法是什么?
答案 0 :(得分:1)
这方面的一个主要原因是Matlab以Fortran顺序存储数据而不是C顺序,这是HDF5内部使用的。看看HDF5的Matlab文档,它应该非常明确。