我正在使用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"
}
答案 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测试输入。