Neural network 如何将图像数据馈送到caffe或现有示例上的HDF5?

Neural network 如何将图像数据馈送到caffe或现有示例上的HDF5?,neural-network,hdf5,deep-learning,caffe,pycaffe,Neural Network,Hdf5,Deep Learning,Caffe,Pycaffe,我在使用HDF5的caffe上进行图像分类和回归任务时遇到了困难,由于某种原因,HDF5的培训在开始时总是失败,测试和训练损失可能很快降到接近零。在尝试了降低学习速度、添加RELU、退出等所有技巧后,一切都没有起效,因此我开始怀疑我提供给caffe的HDF5数据是否错误 因此,目前我正在研究universal dataset(它也是),首先我尝试使用ImageData和LMDB层进行分类,它们都工作得很好。最后我使用HDF5数据层进行微调,除非在使用HDF5的数据层上,否则训练协议不会改变。同样

我在使用HDF5的caffe上进行图像分类和回归任务时遇到了困难,由于某种原因,HDF5的培训在开始时总是失败,测试和训练损失可能很快降到接近零。在尝试了降低学习速度、添加RELU、退出等所有技巧后,一切都没有起效,因此我开始怀疑我提供给caffe的HDF5数据是否错误

因此,目前我正在研究universal dataset(它也是),首先我尝试使用ImageData和LMDB层进行分类,它们都工作得很好。最后我使用HDF5数据层进行微调,除非在使用HDF5的数据层上,否则训练协议不会改变。同样,在学习开始时,损失在迭代60时从5降至0.14,在迭代100时从0.00146,这似乎证明HDF5数据不正确

我在上有两个图像和标签到HDF5片段,它们似乎都生成了HDF5数据集,但由于某些原因,这些数据集似乎不适用于caffe

我想知道这个数据有什么问题,或者这个例子是如何在HDF5中运行的,或者你是否有一些HDF5的分类或回归例子,这些对我很有帮助

一个代码段显示为

def generateHDF5FromText2(label_num):
    print '\nplease wait...'

    HDF5_FILE = ['hdf5_train.h5', 'hdf5_test1.h5']
        #store the training and testing data path and labels
    LIST_FILE = ['train.txt','test.txt']
    for kk, list_file in enumerate(LIST_FILE):

    #reading the training.txt or testing.txt to extract the all the image path and labels, store into the array
    path_list = []
    label_list = []
    with open(list_file, buffering=1) as hosts_file:
        for line in hosts_file:
            line = line.rstrip()
            array = line.split(' ')
            lab = int(array[1])
            label_list.append(lab)
            path_list.append(array[0])  

        print len(path_list), len(label_list)

                # init the temp data and labels storage for HDF5
        datas = np.zeros((len(path_list),3,227,227),dtype='f4') 
        labels = np.zeros((len(path_list), 1),dtype="f4")

        for ii, _file in enumerate(path_list):
                    # feed the image and label data to the TEMP data
            img = caffe.io.load_image( _file )
            img = caffe.io.resize( img, (227, 227, 3) ) # resize to fixed size
            img = np.transpose( img , (2,0,1))
            datas[ii] = img
            labels[ii] = int(label_list[ii])

            # store the temp data and label into the HDF5
        with h5py.File("/data2/"+HDF5_FILE[kk], 'w') as f:
            f['data'] = datas
            f['label'] = labels
            f.close()

一个输入转换似乎发生在原始网络中,并且在均值减法中的HDF5创建中丢失了该转换
您应该获得mean文件(如示例中所示),将其读入python并从每个图像中减去它

顺便说一句,mean文件可以为您提供输入图像比例的线索(如果像素值应该在[0..1]范围或[0..255])


您可能会发现将binaryproto转换为numpy数组很有用。

您正在处理RGB图像,而不进行任何转换(例如,RGB->BGR、均值减法等)。可能是您的训练模型使用了一些转换进行了训练。调试的一种方法是拍摄
X
图像,将它们转换为
lmdb
,并存储到HDF5。构建一个具有两个输入层的网络:一个读取lmdb,另一个读取HDF5。然后添加一个比较两个输入图像的
euclideanloss
层。这应该表明这两个图像是否相同。可能是相同的。我如何在Caffe HDF5层中进行平均减法,在LMDB层中,我可以在prototxt中配置“transform_param>mean_file”。您可以在创建HDF5层时减去平均值。还有一件事:HDF5图像的强度范围是多少?是[0..1]还是[0..255]?您可能需要将数据缩放到适当的范围。。。