我正在尝试对caffe进行像素分类,因此需要提供输入图像大小的地面真实图像。有几种方法可以完成此操作,因此我决定将输入设置为 4通道LMDB (根据this answer的第二点)。这要求我在输入之后添加一个Slice
层,这在same answer中也有概述。
我不断收到Unknown blob input data_lmdb to layer 0
作为错误消息(data_lmdb
应该是我最底层的输入层)。我发现unknown blob
(位于顶部还是底部)错误主要是由于忘记在一个训练/测试阶段之一中定义某个内容而在另一个阶段(例如,this question或{{3 }})。但是,我使用的是之前使用过的train.prototxt
,inference.prototxt
和solver.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
请告知我是否需要添加更多信息或图层。我试图保持简短,但最终并没有真正解决。
答案 0 :(得分:1)
消息Unknown blob input
指向某层希望作为输入的不存在的Blob。您的slice_input
层将data_lmdb
指定为输入Blob,但是您的网络中没有这样的Blob。取而代之的是具有这样名称的 layer 。 Blob名称由top
字段定义,本例中为slice_input
。
您应该在top: "slice_input"
层中将top: "data_lmdb"
更改为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
}
}