首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caffe - MNSIT -如何在单个镜像上使用网络?

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

Stack Overflow用户
提问于 2016-10-10 20:12:20
回答 2查看 2K关注 0票数 0

我正在使用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时,他们都会跳到下一个点,并告诉下载一些新的模型。一些参考资料告诉您要使用classfier.bin/.exe,但此文件需要一个imagenet_mean.binaryproto或类似的mnist。我不知道在哪里可以找到或生成这个文件。

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

更新:基于帮助,我让网络识别一张图像,但即使网络的准确率为99.0%,识别也不正确。我使用了以下python代码来识别图像:

代码语言:javascript
复制
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。我需要对这个图像做更多的变换吗?

网络(部署)如下所示(开始和结束):

代码语言:javascript
复制
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"
}
EN

回答 2

Stack Overflow用户

发布于 2016-10-10 21:06:44

如果我没理解错的话,你有一个经过训练的模型,你想用你自己的输入图像来测试这个模型。有很多方法可以做到这一点。

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

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

另外,将以下行编辑为您的模型文件名。

代码语言:javascript
复制
NET_FILE = 'deploy.prototxt'
MODEL_FILE = 'fcn8s-heavy-pascal.caffemodel'

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

代码语言:javascript
复制
out = net.blobs['score'].data
票数 0
EN

Stack Overflow用户

发布于 2016-10-12 02:01:20

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

代码语言:javascript
复制
input: "data"
input_shape {
  dim: 1
  dim: [channles]
  dim: [width]
  dim: [height]
}

将通道、宽度和高度替换为图像的正确值。

你还需要移除所有得到“标签”作为底部输入的层(这通常只是你的损失层)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39958037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档