2016-10-10 45 views
0

我使用Caffe(http://caffe.berkeleyvision.org/)进行图像分类。我在Windows上使用它,一切似乎都编译得很好。Caffe - MNSIT - 如何在单个图像上使用网络?

要开始学习,我按照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代码recognice图像:如果我正确格式的图像为MNIST例如

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; 

我不知道。该图像是一个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" 
} 

回答

0

如果我理解正确的问题,你有一个训练有素的模型,你想用你自己的输入图像来测试模型。有很多方法可以做到这一点。

我常用的一种方法是运行一个类似于我拥有的Python脚本here

请记住,你必须通过编辑线sys.path.append('../../../python')

另外编辑以下行到模型中使用的文件名和make pycaffe点到文件夹打造朱古力蟒。

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

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

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

谢谢。我有python启用,它似乎工作。我会明天测试你的方法:) – MortenGR

+0

查看更新,你有任何想法,为什么它不工作? – MortenGR

0

您需要从原始network.prototxt文件中创建deploy.prototxt文件。数据层,看起来像这样:

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

,你替换[渠道],[宽度]和[高度]与您的图像的正确的价值观。

您还需要删除所有以“标签”作为底部输入的图层(这通常只是您的损失层)。

然后,您可以使用这个deploy.prototxt文件来使用MATLAB或PYTHON测试您的输入。

+0

查看更新,你有什么想法,为什么它不工作? – MortenGR

+0

用caffe.io.load_image阅读图像。我相信caffe在加载它时会转换图像。或者在喂入网络之前尝试转换图像。 – AHA

相关问题