Caffe在train_val.proto中一起使用hdf5层和imagedata输入层

时间:2016-01-15 20:46:53

标签: matlab input hdf5 caffe conv-neural-network

我目前正在使用hdf5数据层来读取我拥有的图像(大约30000)以及有关图像的一些元数据。

我无法进行裁剪翻转数据扩充,因为当我只使用中心裁剪时,存储大约1500张图像的数据只会产生大约1.5 GB的h5文件,这是hdf5数据集的总大小(30 h5文件)变成~40 GB,所以我不能使用扩充,因为hdf5数据集太大了。

所以,我想如果我可以使用Imagedata层来读取图像而hdf5数据层用于元数据,我的问题就可以解决了。但我没有找到任何材料。是否可以这样做?

2 个答案:

答案 0 :(得分:0)

是的,我认为我收到了错误,但这是由于我原型文件中的其他内容,下面是我原型的输入图层

layer {
  type: "HDF5Data"
  name: "data"
  top: "Meta" 
  hdf5_data_param {
    source: "/path/to/train.txt"
    batch_size: 50
  }
  include { phase: TRAIN }
}
layer {
  name: "data"
  type: "ImageData"
  top: "X"
  top: "Labels"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  image_data_param {
    source: "/path/to/train.txt"
    batch_size: 50
    new_height: 256
    new_width: 256
  }
}
layer {
  type: "HDF5Data"
  name: "data"
  top: "Meta" 
  hdf5_data_param {
    source: "/path/to/val.txt"
    batch_size: 50
  }
  include { phase: TEST }
}
layer {
  name: "data"
  type: "ImageData"
  top: "X"
  top: "Labels"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "data/ilsvrc12/imagenet_mean.binaryproto"
  }
  image_data_param {
    source: "/path/to/val.txt"
    batch_size: 50
    new_height: 256
    new_width: 256
  }
}

答案 1 :(得分:0)

我很高兴你documentation。但是,HDF5文件的文件大小限制根本不是问题。在caffe中,"HDF5Data"图层将文本文件作为输入source作为输入,列出尽可能多的 hdf5文件!因此,如果遇到大型hdf5文件,可以将其拆分为几个较小的文件,并将它们全部列在文本文件中。

例如,您可能有/path/to/hdf5_list.txt个文件列出以下文件

/path/to/not_too_large_file.h5
/path/to/split_large_file_001.h5
/path/to/split_large_file_002.h5
/path/to/split_large_file_003.h5
/path/to/split_large_file_004.h5

等等...... 然后你的输入图层看起来像

layer {
  name: "input"
  type: "HDF5Data"
  top: "data"
  top: "label"
  hdf5_data_param {
    source: "/path/to/hdf5_list.txt"
  }
  include { phase: TRAIN }
}