Caffe 在 train_val.proto 中一起使用 hdf5 层和 imagedata 输入层
Caffe using hdf5 layer and imagedata input layer together in train_val.proto
我目前正在使用 hdf5 数据层读取我拥有的图像(大约 30000 张)和一些关于图像的元数据作为输入。
我无法进行 crop-flip 数据增强,因为当我只使用中心裁剪时,存储大约 1500 张图像的数据只会导致大约 1.5 GB 的 h5 文件,hdf5 数据集的总大小(30 个 h5 文件)变成 ~40 GB,所以我不能使用扩充,因为 hdf5 数据集会太大。
所以,我在想,如果我可以使用Imagedata层来读取图像,使用hdf5数据层来读取元数据,我的问题就可以解决了。但是我没有在这上面找到任何 material 。可以这样做吗?
是的,我以为我收到了一个错误,但这是由于我的原型文件中的其他内容,下面是我的原型输入层
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
}
}
我很高兴你 。但是,HDF5 文件的文件大小限制根本不是问题。在 caffe 中,"HDF5Data"
层作为输入获取一个 text 文件作为 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 }
}
我目前正在使用 hdf5 数据层读取我拥有的图像(大约 30000 张)和一些关于图像的元数据作为输入。
我无法进行 crop-flip 数据增强,因为当我只使用中心裁剪时,存储大约 1500 张图像的数据只会导致大约 1.5 GB 的 h5 文件,hdf5 数据集的总大小(30 个 h5 文件)变成 ~40 GB,所以我不能使用扩充,因为 hdf5 数据集会太大。
所以,我在想,如果我可以使用Imagedata层来读取图像,使用hdf5数据层来读取元数据,我的问题就可以解决了。但是我没有在这上面找到任何 material 。可以这样做吗?
是的,我以为我收到了一个错误,但这是由于我的原型文件中的其他内容,下面是我的原型输入层
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
}
}
我很高兴你 "HDF5Data"
层作为输入获取一个 text 文件作为 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 }
}