【问题标题】:Changing the input data layer during training in Caffe在 Caffe 训练期间更改输入数据层
【发布时间】:2016-05-02 15:54:23
【问题描述】:

是否可以即时更改ImageData 层或MemoryData 层的输入源?

我正在尝试在每个时期都对数据进行洗牌,但我同时拥有图像和一些其他非图像特征,我想在网络的稍后阶段将它们连接起来。我找不到一种可靠的方法来随机播放图像和我的其他数据,同时保持两者的对齐。

所以,我正在考虑在每个时期重新生成imagelist.txt 以及非图像数据(在内存中),并将新文件附加到ImageData 层并使用新数据初始化MemoryDataLayer

如何确保在不重新启动训练过程的情况下使用新文本文件重新初始化网络。 (我希望网络在同一阶段继续训练,动量等,只开始从新文件而不是最初编译的文件中读取图像文件)。

layer {
name: "imgdata"
type: "ImageData"
top: "imgdata"
top: "dlabel"
transform_param {
  # Transform param here
}
image_data_param {
source: "path to imagelist.txt" ## This file changes after n iterartions
batch_size: XX
new_height: XXX
new_width: XXX
}
}

同样,我希望能够将重新洗牌的数据复制到MemoryData 层。我可以在培训期间拨打Net.set_input_arrays 吗?

layers {
  name: "data"
  type: MEMORY_DATA
  top: "data"
  top: "label"
  memory_data_param {
  batch_size: XX
  channels: X
  height: XXX
  width: XXX
  }

【问题讨论】:

  • 你考虑过使用 PythonLayer 吗?
  • 感谢您的评论。即使使用 python 编写的图层,我也不确定如何在洗牌时对齐图像和非图像数据。
  • 你可以在 Python 层中做任何事情。单层的所有输入
  • 我不明白。我的两个不同的数据流问题仍然存在。特别是当我需要定期洗牌时。你能给我一个简单的伪代码吗?

标签: computer-vision deep-learning caffe conv-neural-network


【解决方案1】:

您的问题可以在Python layers 的帮助下解决,正如comments 中所建议的那样。 python层的使用示例可以在caffehere中找到。

在 python 脚本中,您可以编写代码来通过保留它们的对齐方式来打乱这两个数据。

【讨论】:

    【解决方案2】:

    我想提供一个没有python接口的答案,我是用C++源代码做的。

    使用 Intel/caffe 作为示例是因为我目前正在研究它,但您可以轻松地尝试使用 blvc/caffe。我假设你可以编译 caffe 源代码。

    这里是修改源代码的一个合适的地方(在加载 train_text.prototxt 之后):

        https://github.com/intel/caffe/blob/master/src/caffe/solver.cpp#L156
    

    在块内,添加以下内容:

        net_param.mutable_layer(0)->mutable_data_param()->set_source("/test/data/path/");
        net_param.mutable_layer(1)->mutable_data_param()->set_source("/test/data/path/");
        LOG(INFO) << "+++> " << net_param.layer(0).data_param().source();
        LOG(INFO) << "+++> " << net_param.layer(1).data_param().source();
    

    您将更改前两层(训练数据层和测试数据层)的数据源。

    所以如果你想在其他场景中改变数据源,只要找到net_param、layer和data_param的上下文,然后你可以使用上面的函数调用来改变你自己的数据路径。

    其实由于caffe使用的是google protobuffer,所以如果你想了解net_param、layer和data_param的完整接口,你需要构建caffe,然后查看文件:.build_release/src/caffe/proto/caffe.pb.h(我使用Makefile构建,不是cmake)。 protobuffer我不是很懂,懂的可以查看源码:src/caffe/proto/caffe.proto.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-25
      • 2020-02-09
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多