caffe 在Ubuntu下如何用已訓練出來的模型測試一張圖片?

我已經在Caffe上訓練好了一個模型,想拿這個模型來做圖片分類。我起碼的需求是:給一張圖片,在這個模型上跑了一遍後,告訴我預測是哪屬於哪一類?!

PS:感覺網上有很多人都問這個問題,有的用c++,有的用Python,有的說Matlab,答案各種各樣,卻沒有一個是完整的;有的乾脆直接給個鏈接就完了。。。。

這問題困擾我好久了,急!如有哪位對Caffe有了解的大神,望助我一把!


最近工作在用這個,順手答一發 :D

推薦使用Python,需要在正常編譯完caffe後加一句 make pycaffe,然後把${CAFFE_ROOT}/python路徑加到PYTHONPATH中就可以import caffe了。當然也可以在程序中使用os和sys模塊添加路徑。

Talk is cheap, this is the code:

import numpy as np

import sys,os

caffe_root = "/path/to/caffe/"
sys.path.insert(0, caffe_root + "python")
import caffe
os.chdir(caffe_root)

net_file=caffe_root + "models/bvlc_reference_caffenet/deploy.prototxt"
caffe_model=caffe_root + "models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel"
mean_file=caffe_root + "python/caffe/imagenet/ilsvrc_2012_mean.npy"

net = caffe.Net(net_file,caffe_model,caffe.TEST)
transformer = caffe.io.Transformer({"data": net.blobs["data"].data.shape})
transformer.set_transpose("data", (2,0,1))
transformer.set_mean("data", np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale("data", 255)
transformer.set_channel_swap("data", (2,1,0)) # if using RGB instead if BGR

#im=caffe.io.load_image(caffe_root+"examples/images/cat.jpg")
#im=caffe.io.load_image(caffe_root+"examples/images/cross-eyed-cat.jpg")
img=caffe.io.load_image(caffe_root+"examples/images/dog.jpg")
net.blobs["data"].data[...] = transformer.preprocess("data",img)
out = net.forward()

imagenet_labels_filename = caffe_root + "data/ilsvrc12/synset_words.txt"
labels = np.loadtxt(imagenet_labels_filename, str, delimiter=" ")

top_k = net.blobs["prob"].data[0].flatten().argsort()[-1:-6:-1]
for i in np.arange(top_k.size):
print top_k[i], labels[top_k[i]]


以下例子都是python寫的。

這個代碼是用python代碼調用訓練好的CAFFE_ROOT/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel,其中一些文件路徑需要修改一下:

http://www.cc.gatech.edu/~zk15/deep_learning/classify_test.py

訓練ImageNet模型並在python中使用已經訓練好的模型,與上面的代碼稍有不同

【Caffe】訓練ImageNet模型

以上兩個例子都是使用

net = imagenet.ImageNetClassifier(MODEL_FILE, PRETRAINED)

prediction = net.predict(IMAGE_FILE)

實現的,caffe.Classifier是已經寫好的類,適用於圖像分類的imagenet的例子(例子詳細描述參見CAFFE_ROOT/examples/cpp_classification)。

一般性的使用方法,可以參考以下鏈接中提到的方法:

caffe/00-classification.ipynb at master · BVLC/caffe · GitHub

你可以查看一下它的代碼中使用「net.forward()」前是怎樣修改輸入的。


這兩個博客介紹了測試的方法::caffe生成lenet-5的deploy.prototxt文件

用caffe訓練好的lenet_iter_10000.caffemodel測試單張mnist圖片


謝邀 第一次被邀請 老激動了 嘿嘿! 你這個問題可以Python也可以C++,看你的需求了, 如果需要可視化的話,最好用Python,方便直觀易用。參考官網Jupyter Notebook Viewer


Caffe提供了一個分類預測的Demo,位置在 /caffe/python/classify.py,但原始的輸出是二進位文件,不容易直觀地看到結果。

我對這個腳本做了一些修改,將最終分類預測的標籤和Softmax層輸出的原始數據保存到了文本文件中,直接打開就能看到結果。

支持圖片批處理。

如果還嫌麻煩的話可以直接將結果輸出到命令行界面。

詳細的介紹請參見我的這篇博客,內含源碼下載地址。

http://blog.csdn.net/u010391437/article/details/71076576

——————

最後吐槽一下知乎移動端的排版。。我只是習慣在中英文之間加個空格,但是手機上排版出來間距大得像加了個製表符。。


你的這個問題現在作出來了沒有?我也在想怎麼解決這個問題!現在已經想了一天了,希望這個問題能有所解決!


推薦閱讀:

有了AWS,不需要自己配GPUs?做深度學習。?
關於這些用於深度學習的機器配置,合理嗎,哪個好?
如何評價微軟亞洲研究院提出的LightRNN?
如何理解空洞卷積(dilated convolution)?
LeCun 說的可微分編程是什麼?

TAG:深度學習DeepLearning | Caffe深度學習框架 |