我目前正在创建图像数据集,以使用Caffe训练,验证和测试基本的自定义ConvNet。
具体来说,我已经收集了我的JPG图像(RGB),现在正在决定如何为我的网络预处理图像。我希望对图像应用基本的标准化,例如将图像平均值减去“居中”图像。
ImageNet教程http://caffe.berkeleyvision.org/gathered/examples/imagenet.html提到了此操作,描述了如何通过将LMDB传递到.binaryproto
中的compute_image_mean
可执行文件来为数据集生成平均$CAFFE_HOME/build/tools
文件。 / p>
我已经完成了这个,现在我的训练LMDB有一个.binaryproto
文件。据我所知,该文件基本上包含传递的LMDB中所有图像的平均像素值的表示。因此,我认为它存储了某种形式的包含三个通道的像素值的数组。
问题:
如何使用此.binaryproto
文件执行平均减法?
我应该为每个LMDB创建单独的.binaryproto
文件(训练,验证,测试)吗?或者我应该首先创建一个包含数据集中所有图像的LMDB,从中生成均值,并将减法应用于所有子集?
非常感谢任何建议。
答案 0 :(得分:2)
您只需使用训练集获取.binaryproto
文件,并在训练,验证和测试时使用它。
这是因为如果您采用所有图像的平均值,则在训练时间接向网络提供有关验证和测试图像性质的信息,这可能有助于它比其他方式更好地执行。
您可能知道,您需要将其添加到prototxt
下transform_param
文件的数据层中。
layer {
name: "data" #the name
# other attributes
transform_param {
mean_file: "path/to/training/binaryproto"
}
}
This question上的stats.stackexchange.com也引用相同的查询,该查询也链接到this useful resource。