日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)

發布時間:2025/3/21 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_caffenet

2、生成均值文件。
輸入指令:

cd $CAFFE_ROOT sh ./data/ilsvrc12/get_ilsvrc_aux.sh

在測試時,程序會將數據減去均值,隨后再調用訓練好的模型。我們直接將這個文件下載下來。
調用腳本下載時,一并將synset_words.txt下載好了。這個文件放的是1000個類的名稱。

編寫python代碼

我此前安裝過anaconda2,使用其自帶的jupyter notebook編寫代碼。可以看到每一步的運行結果,也可以看到報錯等,調試代碼十分方便。

下面按照每段代碼的順序列出來:
1、引入依賴庫。

#coding=utf-8 import numpy as np import sys,os

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]]

到命令行下再測試幾個看看:


結果:(很詳細啊)

208 n02099712 Labrador retriever 222 n02104029 kuvasz 257 n02111500 Great Pyrenees 179 n02093256 Staffordshire bullterrier, Staffordshire bull terrier 180 n02093428 American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier

飛機:

結果:

404 n02690373 airliner 908 n04592741 wing 895 n04552348 warplane, military plane 812 n04266014 space shuttle 744 n04008634 projectile, missile



結果:

563 n03388183 fountain pen 418 n02783161 ballpoint, ballpoint pen, ballpen, Biro 623 n03658185 letter opener, paper knife, paperknife 784 n04154565 screwdriver 473 n02951585 can opener, tin opener

這套python代碼可以當做一個模板來使用了,只需要稍微修改一點圖片名等信息即可,方便了不少。

總結

以上是生活随笔為你收集整理的caffe学习(六):使用python调用训练好的模型来分类(Ubuntu)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。