【问题标题】:Slicing an input data layer in caffe - unknown blob input在 caffe 中切片输入数据层 - 未知 blob 输入
【发布时间】:2019-06-24 04:12:55
【问题描述】:

我正在尝试使用 caffe 进行逐像素分类,因此需要提供与输入图像大小相同的地面实况图像。有几种方法可以做到这一点,我决定将我的输入设置为 4 通道 LMDB(根据this answer 的第二点)。这需要我在输入后添加Slice 层,same answer 中也对此进行了概述。

我不断收到Unknown blob input data_lmdb to layer 0 作为错误消息(data_lmdb 应该是我最底层的输入层)。我发现unknown blob(无论是顶部还是底部)错误主要是由于忘记在其中一个训练/测试阶段定义某些内容而在另一个阶段定义它(例如this questionthis one)。但是,我使用了我之前使用过的train.prototxtinference.prototxtsolver.prototxt 文件的组合,只是将输入层从 HD5 替换为 LMDB(进行一些练习),所以应该定义所有内容。

谁能看到我为什么会收到Unknown blob input data_lmdb to layer 0 错误?从火车日志文件中,我可以看到它在读取train.prototxt 文件时立即崩溃(它甚至没有到达Creating layer 部分)。

我的prototxt文件如下:

solver.prototxt

net: "train.prototxt"       # Change this to the absolute path to your model file
test_initialization: false
test_iter: 1
test_interval: 1000000
base_lr: 0.01
lr_policy: "fixed"
gamma: 1.0
stepsize: 2000
display: 20
momentum: 0.9
max_iter: 10000
weight_decay: 0.0005
snapshot: 100
snapshot_prefix: "set_snapshot_name"    # Absolute path to output solver snapshots
solver_mode: GPU

train.prototxt(仅前两层;它们之后是LNR 标准化层,然后是Convolution 层):

name: "my_net"
layer {
  name: "data_lmdb"
  type: "Data"
  top: "slice_input"
  data_param {
    source: "data/train"
    batch_size: 4
    backend: LMDB
  }
}
layer{
  name: "slice_input"
  type: "Slice"
  bottom: "data_lmdb" # 4-channels = rgb+truth
  top: "data"
  top: "label"
  slice_param {
    axis: 1
    slice_point: 3  
  }
}

inference.prototxt 中的前几层定义与train.prototxt相同(无论如何都应该不重要,因为它不用于训练),但以下情况除外:

  • data_lmdb 中的源路径不同 (data/test)
  • data_lmdb层使用batch_size: 1

如果我需要包含更多信息或图层,请告诉我。我试图保持简短,但最终并没有真​​正奏效。

【问题讨论】:

    标签: deep-learning caffe


    【解决方案1】:

    消息Unknown blob input 指向某个层想要作为输入的不存在的 blob。您的 slice_input 层将 data_lmdb 指定为输入 blob,但您的网络中没有这样的 blob。相反,您有一个具有这样名称的 layer。 Blob 名称由top 字段定义,在本例中为slice_input

    您应该在data_lmdb 层中将top: "slice_input" 更改为top: "data_lmdb",或者使用bottom: "slice_input" # 4-channels = rgb+truth

    但是,为了更清晰的命名,我会为您提供以下内容:

    name: "my_net"
    layer {
      name: "data"
      type: "Data"
      top: "data_and_label"
      data_param {
        source: "data/train"
        batch_size: 4
        backend: LMDB
      }
    }
    layer{
      name: "slice_input"
      type: "Slice"
      bottom: "data_and_label" # 4-channels = rgb+truth
      top: "data"
      top: "label"
      slice_param {
        axis: 1
        slice_point: 3  
      }
    }
    

    【讨论】:

    • 哦,这解释了这么多,谢谢。显然我需要去重新阅读一些caffe的介绍材料;我不知道它们定义的层和 blob 是不同的;可能是因为人们倾向于将它们命名为相同的名称。
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2018-01-09
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2018-11-08
    相关资源
    最近更新 更多