caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)
在caffe的學習過程中,我發現我需要一個模板的程序來方便我測試訓練的模型。我在上一篇博客中(caffe學習(五):cifar-10數據集訓練及測試(Ubuntu) ),最后測試訓練好的模型時是修改caffe自帶的classify.py來進行測試的,如果每次都修改未免太麻煩了,所以我就上網找了相關的資料。
參考博客:Caffe學習系列(20):用訓練好的caffemodel來進行分類
下載模型
1、先去下載一個訓練好的caffemodel,bvlc_reference_caffenet.caffemodel。
下載地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
大小約230M,幾分鐘就下好了。
這個模型是caffe的作者賈揚清及其團隊訓練好的,我們默認將這個文件放到
$CAFFE_ROOT/models/bvlc_reference_caffenet/下。
也可使用腳本下載,速度較慢:
cd $CAFFE_ROOT ./scripts/download_model_binary.py models/bvlc_reference_caffenet2、生成均值文件。
輸入指令:
在測試時,程序會將數據減去均值,隨后再調用訓練好的模型。我們直接將這個文件下載下來。
調用腳本下載時,一并將synset_words.txt下載好了。這個文件放的是1000個類的名稱。
編寫python代碼
我此前安裝過anaconda2,使用其自帶的jupyter notebook編寫代碼??梢钥吹矫恳徊降倪\行結果,也可以看到報錯等,調試代碼十分方便。
下面按照每段代碼的順序列出來:
1、引入依賴庫。
2、引入caffe的路徑,caffe_root修改為自己的caffe的根目錄。
caffe_root = '/home/xhb/caffe/' sys.path.insert(0, caffe_root + 'python')3、引入caffe,將路勁切換到caffe根目錄。
import caffe os.chdir(caffe_root)4、幾個用到的文件,caffe_model就是我們之前下載的模型,mean_file是均值文件,net_file是網絡配置文件。
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'5、caffe模型配置,讀入模型和網絡配置以及均值文件。
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))6、讀取圖片,這里讀取的是我自己下載的圖片,路徑由自己更改。
img1 = caffe.io.load_image(caffe_root + 'examples/images/cat2.jpg')7、預處理。
net.blobs['data'].data[...] = transformer.preprocess('data', img1)8、前向傳播一次,最后一層網絡會輸出結果。
out = net.forward()9、讀取存放了標簽的文件synset_words.txt。
imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt' labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')10、將最后一層的結果按照概率大小排序。
op_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]11、打印預測結果,預測概率從大到小。
for i in np.arange(top_k.size):print top_k[i], labels[top_k[i]]到命令行下再測試幾個看看:
狗
結果:(很詳細啊)
飛機:
結果:
筆
結果:
這套python代碼可以當做一個模板來使用了,只需要稍微修改一點圖片名等信息即可,方便了不少。
總結
以上是生活随笔為你收集整理的caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caffe学习(五):cifar-10数
- 下一篇: Zedboard学习(七):VGA显示