【caffe】用訓練好的imagenet模型分類圖像


因為畢設需要,我首先是用ffmpeg抽取某個寵物視頻的關鍵幀,然后用caffe對這個關鍵幀中的物體進行分類。

1.抽取關鍵幀的命令:

E:\graduation design\FFMPEG\bin>ffmpeg -i .\3.mp4 -vf select='eq(pict_type\,I)',setpts='N/(25*TB)' .\%09d.jpg

2.用python編寫腳本,利用在imagenet上訓練的模型分類視頻幀中的物體。

抽取得到的視頻關鍵幀都存放在文件夾"/home/sunshineatnoon/Downloads/dogs/dogs/"中,利用python的walk函數遍歷文件夾中的圖像並分類。

代碼如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 import os
 4 
 5 caffe_root = '/home/sunshineatnoon/Downloads/caffe/'
 6 import sys
 7 sys.path.insert(0,caffe_root+'python')
 8 
 9 import caffe
10 
11 MODEL_FILE = caffe_root+'models/bvlc_reference_caffenet/deploy.prototxt'
12 PRETRAINED = caffe_root+'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
13 
14 #cpu模式
15 caffe.set_mode_cpu()
16 #定義使用的神經網絡模型
17 net = caffe.Classifier(MODEL_FILE, PRETRAINED,
18                mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1),
19                channel_swap=(2,1,0),
20                raw_scale=255,
21                image_dims=(256, 256))
22 imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
23 labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
24 
25 #對目標路徑中的圖像,遍歷並分類
26 for root,dirs,files in os.walk("/home/sunshineatnoon/Downloads/dogs/dogs/"):
27     for file in files:
28         #加載要分類的圖片
29         IMAGE_FILE = os.path.join(root,file).decode('gbk').encode('utf-8');
30         input_image = caffe.io.load_image(IMAGE_FILE)
31         
32         #預測圖片類別
33         prediction = net.predict([input_image])
34         print 'predicted class:',prediction[0].argmax()
35 
36         # 輸出概率最大的前5個預測結果
37         top_k = net.blobs['prob'].data[0].flatten().argsort()[-1:-6:-1]
38         print labels[top_k]

一張圖像的分類結果如下圖所示:

分類結果:

這里不得不感嘆下caffe和神經網絡的強大,盡管視頻幀的分辨率已經這么低了,還是在前5個預測中得到了正確的分類:corgi

還有一張特別驚訝的:

分類結果:

這樣都能檢測出giant panda和cat,太牛了!


免責聲明!

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



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