在 caffe 中切片输入数据层 - 未知的 blob 输入
Slicing an input data layer in caffe - unknown blob input
我正在尝试使用 caffe 进行逐像素分类,因此需要提供输入图像大小的地面实况图像。有几种方法可以做到这一点,我决定将我的输入设置为 4 通道 LMDB(根据 ). This requires me to add a Slice
layer after my input, which is also outlined in the .
的第二点
我不断收到 Unknown blob input data_lmdb to layer 0
作为错误消息(data_lmdb
应该是我最底层的输入层)。我发现 unknown blob
(无论是顶部还是底部)错误主要是由于忘记在 TRAIN / TEST 阶段之一定义某些东西而在另一个阶段定义它(例如 , or )。但是,我正在使用我以前使用过的 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
如果我需要包含更多信息或层,请告诉我。我试图保持简短,但最终并没有真正奏效。
消息 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 进行逐像素分类,因此需要提供输入图像大小的地面实况图像。有几种方法可以做到这一点,我决定将我的输入设置为 4 通道 LMDB(根据 Slice
layer after my input, which is also outlined in the
我不断收到 Unknown blob input data_lmdb to layer 0
作为错误消息(data_lmdb
应该是我最底层的输入层)。我发现 unknown blob
(无论是顶部还是底部)错误主要是由于忘记在 TRAIN / TEST 阶段之一定义某些东西而在另一个阶段定义它(例如 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
如果我需要包含更多信息或层,请告诉我。我试图保持简短,但最终并没有真正奏效。
消息 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
}
}