Caffe:train_test.prototxt和deploy.prototxt有什么区别?

4
在像GoogleNet这样的相关模型中,例如https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet,我们可以看到两个.prototxt文件描述了网络,它们之间有什么区别

deploy.txttrain_test.prototxt

我的关键问题是,在Python接口中,为什么我只能使用前者?也就是说:
model_def = caffe_root + 'models/bvlc_googlenet/deploy.prototxt'

model_weights = caffe_root + 'models/bvlc_googlenet/bvlc_googlenet.caffemodel'

net = caffe.Net(model_def,model_weights,caffe.TEST)

当以下情况时,此代码运行正确:

model_def = caffe_root + 'models/bvlc_googlenet/train_val.prototxt'

model_weights = caffe_root + 'models/bvlc_googlenet/bvlc_googlenet.caffemodel'

net = caffe.Net(model_def,model_weights,caffe.TEST)

这不行,它会输出错误信息:
layer {
  name: "inception_4e/relu_5x5_reduce"
  type: "ReLU"
  bottom: "inception_4e/5x5_reduce"
  top: "inception_4e/5x5_reduce"
}
layer {
I0805 10:15:13.698256 30930 layer_factory.hpp:77] Creating layer data
I0805 10:15:13.698444 30930 net.cpp:100] Creating Layer data
I0805 10:15:13.698465 30930 net.cpp:408] data -> data
I0805 10:15:13.698514 30930 net.cpp:408] data -> label
F0805 10:15:13.699956   671 db_lmdb.hpp:15] Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
*** Check failure stack trace: ***

为什么?有什么不同之处?
1个回答

8

train_val.prototxt 用于训练,而 deploy.prototxt 用于推理。

train_val.prototxt 包含了训练数据的位置信息。在您的情况下,它包含了一个包含训练数据的 lmdb 文件路径。

deploy.prototxt 包含了输入大小的信息,但不包含任何关于输入本身的信息。因此,您可以将任何具有该大小的图像作为输入传递给它,并进行推理。

当您加载 train_val.prototxt 时,它会查找其中提到的训练数据文件。由于无法找到该文件,因此您会收到错误提示。

提示:在进行推理时,最好使用 deploy.prototxt


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接