Caffe - MNSIT - 如何在单个图像上使用网络?

时间:2016-10-10 12:12:20

标签: neural-network caffe convolution pycaffe

我正在使用Caffe(http://caffe.berkeleyvision.org/)进行图像分类。我在Windows上使用它,一切似乎都在编译。

为了开始学习,我遵循了MNIST教程(http://caffe.berkeleyvision.org/gathered/examples/mnist.html)。我下载了数据并运行.. \ caffe.exe train --solver = ... examples \ mnist \ lenet_solver.prototxt。它运行了10.000次迭代,打印精度为98.5,并生成了两个文件:lenet_iter_10000.solverstate和lenet_iter_10000.caffemodel。

所以,虽然尝试对自己的图像进行分类会很有趣,但这应该很容易吗?

我可以找到资源,例如:https://software.intel.com/en-us/articles/training-and-deploying-deep-learning-networks-with-caffe-optimized-for-intel-architecture#Examples告诉我如何准备,训练和计时模型。但每次教程/文章实际上将单个实例放入CNN时,他们会跳到下一个点并告诉他们下载一些新模型。一些资源告诉使用classifier.bin / .exe,但是这个文件需要一个imagenet_mean.binaryproto或类似的mnist。我不知道在哪里可以找到或生成这个文件。

简而言之:当我使用Caffe训练CNN时,如何输入单个图像并使用我已有的文件获取输出?

更新:根据帮助,我让网络识别图像,但即使网络的准确度为99.0%,识别也不正确。我使用以下python代码来识别图像:

NET_FILE = 'deploy.prototxt'
MODEL_FILE = 'lenet_iter_10000.caffemodel'
net = caffe.Net(NET_FILE, MODEL_FILE, caffe.TEST)

im = Image.open("img4.jpg")
in_ = np.array(im, dtype=np.float32)
net.blobs['data'].data[...] = in_
out = net.forward() # Run the network for the given input image
print out;

我不确定我是否为MNIST示例正确格式化图像。图像是28x28灰度图像,基本为4.我是否需要对图像进行更多转换?

网络(部署)看起来像这样(开始和结束):

input: "data"
input_shape {
  dim: 1 # batchsize
  dim: 1 # number of colour channels - rgb
  dim: 28 # width
  dim: 28 # height
}

....

layer {
  name: "loss"
  type: "Softmax"
  bottom: "ip2"
  top: "loss"
}

2 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,那么您就拥有一个训练有素的模型,并且您希望使用自己的输入图像来测试模型。有很多方法可以做到这一点。

我经常使用的一种方法是运行类似于here的python脚本。

请记住,您必须使用make pycaffe在caffe中构建python,并通过编辑行sys.path.append('../../../python')

指向该文件夹

还要将以下行编辑为模型文件名。

NET_FILE = 'deploy.prototxt'
MODEL_FILE = 'fcn8s-heavy-pascal.caffemodel'

编辑以下行。您应该使用网络的最后一层来获取输出,而不是得分。

out = net.blobs['score'].data

答案 1 :(得分:0)

您需要从原始network.prototxt文件创建deploy.prototxt文件。数据层必须如下所示:

input: "data"
input_shape {
  dim: 1
  dim: [channles]
  dim: [width]
  dim: [height]
}

使用正确的图像值替换[channels],[width]和[height]。

您还需要删除任何获得"标签的图层"作为它的底部输入(这通常只是你的损失层)。

然后您可以使用此deploy.prototxt文件使用MATLAB或PYTHON测试输入。