caffe學習筆記(十二)用訓練好的模型進行分類


1、caffemodel文件

文件名稱為:bvlc_reference_caffenet.caffemodel,文件大小為230M左右,為了代碼的統一,將這個caffemodel文件下載到caffe根目錄下的 models/bvlc_reference_caffenet/ 文件夾下面。可以運行腳本文件進行下載:

./scripts/download_model_binary.py models/bvlc_reference_caffenet

2、均值文件。

有了caffemodel文件,就需要對應的均值文件,在測試階段,需要把測試數據減去均值。這個文件我們用腳本來下載,在caffe根目錄下執行:

sh ./data/ilsvrc12/get_ilsvrc_aux.sh

執行並下載后,均值文件放在 data/ilsvrc12/ 文件夾里。

3、synset_words.txt文件

在調用腳本文件下載均值的時候,這個文件也一並下載好了。里面放的是1000個類的名稱。

python方法

caffe開發團隊實際上也編寫了一個python版本的分類文件,路徑為 python/classify.py

運行這個文件必需兩個參數,一個輸入圖片文件,一個輸出結果文件。而且運行必須在python目錄下。假設當前目錄是caffe根目錄,則運行:

cd python
python classify.py ../examples/images/cat.jpg result.npy

分類的結果保存為當前目錄下的result.npy文件里面,是看不見的。而且這個文件有錯誤,運行的時候,會提示

Mean shape incompatible with input shape

的錯誤。因此,要使用這個文件,我們還得進行修改:

1、修改均值計算:

定位到

mean = np.load(args.mean_file)

 這一行,在下面加上一行:

mean=mean.mean(1).mean(1)

 則可以解決報錯的問題。

2、修改文件,使得結果顯示在命令行下:

定位到

# Classify.
    start = time.time()
    predictions = classifier.predict(inputs, not args.center_only)
    print("Done in %.2f s." % (time.time() - start))

這個地方,在后面加上幾行,如下所示:

  # Classify.
    start = time.time()
    predictions = classifier.predict(inputs, not args.center_only)
    print("Done in %.2f s." % (time.time() - start))
    imagenet_labels_filename = '../data/ilsvrc12/synset_words.txt'
    labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
    top_k = predictions.flatten().argsort()[-1:-6:-1]
    for i in np.arange(top_k.size):
        print top_k[i], labels[top_k[i]]

 就樣就可以了。運行不會報錯,而且結果會顯示在命令行下面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM