在未知blob输入中对输入数据层进行切片



我正在尝试用caffe进行逐像素分类,因此需要提供一个与输入图像大小相同的真实图像。有几种方法可以做到这一点,我决定将我的输入设置为4通道LMDB(根据这个答案的第二点)。这需要我在输入后添加一个Slice层,这也在同一答案中列出。

我不断得到Unknown blob input data_lmdb to layer 0作为一个错误消息(data_lmdb应该是我最底层的输入层)。我发现unknown blob(无论是顶部还是底部)错误主要是由于忘记在一个训练/测试阶段定义某个东西,而在另一个阶段定义它(例如,这个问题或这个问题)。但是,我使用的是我以前使用过的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

如果我需要包含更多信息或图层,请告诉我。我试着保持简短,但最终没有成功。

消息Unknown blob input指向某个层想要作为输入的不存在的blob。您的slice_input层指定data_lmdb作为输入blob,但您的网络中没有这样的blob。相反,您有一个具有这样的名称。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  
}
}

最新更新