Deep learning 在caffe中切片输入数据层-未知blob输入

Deep learning 在caffe中切片输入数据层-未知blob输入,deep-learning,caffe,Deep Learning,Caffe,我正在尝试用caffe进行像素分类,因此需要提供与输入图像大小相同的地面真实图像。有几种方法可以做到这一点,我决定将我的输入设置为4通道LMDB(根据第2点)。这要求我在输入后添加一个切片层,该层也在中列出 我一直将未知blob输入数据\u lmdb作为错误消息发送到第0层(数据\u lmdb应该是我最底层的输入层)。我发现未知blob(无论是顶部还是底部)错误主要是由于忘记在一个训练/测试阶段定义某个内容,而在另一个阶段(例如,或)定义该内容所致。但是,我使用的是我以前使用过的train.pr

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

我一直将
未知blob输入数据\u lmdb作为错误消息发送到第0层(
数据\u lmdb
应该是我最底层的输入层)。我发现
未知blob
(无论是顶部还是底部)错误主要是由于忘记在一个训练/测试阶段定义某个内容,而在另一个阶段(例如,或)定义该内容所致。但是,我使用的是我以前使用过的
train.prototxt
interference.prototxt
solver.prototxt
文件的组合,只是将输入层从HD5替换为LMDB(为了一点实践),所以所有内容都应该定义

有人知道为什么我将
未知blob输入数据\u lmdb获取到层0
错误吗?从火车日志文件中,我可以看到它在读取
train.prototxt
文件时崩溃(它甚至没有到达
创建层
部分)

我的
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
规范化层,然后是
卷积层):

inference.prototxt
中的前几个层定义与
train.prototxt
相同(这不重要,因为它不用于培训),除了以下内容:

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  
  }
}
  • data\u lmdb
    中,源路径不同(
    data/test
  • 数据中\u lmdb
    层使用
    批量大小:1

请让我知道,如果我需要包括任何更多的信息或层。我试图保持它的简洁,但最终没有真正起作用。

消息
未知blob输入
指向某个层希望作为输入的不存在的blob。您的
slice\u input
层指定了
data\u lmdb
作为输入blob,但您的网络中没有这样的blob。相反,您有一个具有这样名称的层。Blob名称由
top
字段定义,在本例中为
slice\u input

您应该将
data\u lmdb
层中的
top:“slice\u input”
更改为
top:“data\u lmdb”
,或者使用
bottom:“slice\u input”#4通道=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的介绍材料;我不知道它们定义的层和斑点是不同的;可能是因为人们倾向于给他们取相同的名字。