我刚开始使用 Caffe 和深度学习,但我无法理解在 HDF5 数据上使用 Caffe 训练模型所需的预处理步骤是什么。具体来说,
- 是否需要将图像转换成[0-1]范围。笔记本示例 (00-classification.ipynb) 指出模型在 [0-255] 范围内运行,而一些引用表明它应该是 [0-1]。我该如何决定?
- 根据文档,图像数据批处理的常规 blob 尺寸为 N x channel K x 高度 H x 宽度 W。这没有冲突
- RGB 到 BGR 转换的 channel 交换步骤是强制性的吗?
- 如何对 HDF5 数据执行图像均值计算?对于
compute_image_mean.cpp
,后端是 lmdb。这只是为了提高性能?
至于LMDB的使用,问题1-3依然成立。对此的任何澄清将不胜感激。
最佳答案
欢迎来到咖啡厅。
1. 将输入数据缩放到 [0..1] 或 [0..255] 的范围完全取决于您。有些模型在 [0..1] 范围内工作,其他模型在 [0..255] 范围内工作,这与输入法 (LMDB/HDF5) 的选择完全无关。
这里最重要的是保持一致。如果您决定在 [0..1] 范围内工作,您必须确保训练集和验证集都以相同的方式准备,并且“部署”阶段的新示例被缩放到相同的范围。
2. 正如您已经观察到的那样,Caffe blob 始终是 4 维 batch-channel-width-height。
3. RGB 到 BGR 也不是强制性的,但很常见,因为 BGR 是 opencv 读取图像的方式。同样,这里最重要的是网络整个生命周期的一致性。
4. 最近,模型减去了每个 channel 的平均值,而不是每个像素的平均值。它更方便,尤其是当您更改网络的输入大小时。处理 HDF5 数据时,您可以计算平均图像并将其保存到 binaryproto 中。参见 an example here .
关于neural-network - Caffe HDF5 预处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766689/