使用Movidius神經計算棒進行vgg16演算法預測
阿新 • • 發佈:2019-02-13
本文討論在Ubuntu16.04的系統中使用Movidius神經計算棒,進行vgg16演算法預測。
1.首先在系統中安裝python3.5,這裡不再贅述。
2.然後進行神經計算SDK的安裝,注意安裝過程中記得將計算棒插入USB介面。
本文以NCSDK2的版本進行講解,依次執行以下安裝命令:
wget https://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk-02_05_00_02-full/ncsdk-2.05.00.02.tar.gz tar xvf ncsdk-2.05.00.02.tar.gz cd ncsdk-2.05.00.02 make install make examples
如果因為環境問題導致安裝不成功,具體衝突可檢視官網說明。
3.安裝成功後,將caffe或者tensorflow訓練好的模型進行編譯,NCSDK會自動安裝tensorflow1.7.0的版本。本文以vgg16為例,建立model_build.py:
from keras.applications import VGG16 from keras import backend as K import tensorflow as tf mn = VGG16() saver = tf.train.Saver() sess = K.get_session() saver.save(sess, "./TF_Model/vgg16")
4.然後執行此檔案
python model_build.py
此處用tf.train.Saver()儲存了一個tf模型。
5.在終端採用如下命令進行編譯,指定網路的輸入和輸出節點
mvNCCompile TF_Model/vgg16.meta -in=input_1 -on=predictions/Softmax -s 12
其中,-s 12表示使用12個SHAVE處理器
然後,可得到一個graph檔案。
6.使用如下命令,檢視模型每一層的執行情況:
mvNCProfile TF_Model/vgg16.meta -in=input_1 -on=predictions/Softmax -s 12
由上圖可知,vgg16實際執行時間為791.23毫秒,因此其實際上不適用於視訊的分析,這裡僅作為一個demo來講解神經計算棒的使用過程。
7.然後,我們下載一張圖,到預設路徑~/Download/aaa.jpg
8.編寫predict-vgg16.py檔案,將graph載入到神經計算棒裝置中進行預測。程式碼如下:
from mvnc import mvncapi as mvnc
import cv2
import numpy
import sys
from keras.applications import VGG16
from keras.applications.vgg16 import preprocess_input, decode_predictions
from keras.preprocessing.image import load_img, img_to_array
import matplotlib.pyplot as plt
img = load_img(sys.argv[1], target_size=(224, 224)) # 命令列第一個引數輸入圖片路徑,轉化為目標大小
img = img_to_array(img) #轉化格式
img = preprocess_input(img) #預處理
print("NCS")
devices = mvnc.enumerate_devices() #獲取連線到主機系統的神經計算裝置列表
device = mvnc.Device(devices[0]) #呼叫第一個NCS裝置
device.open() #開啟通訊
with open("graph", mode='rb') as f: #讀取圖檔案,轉化為二進位制流
graphfile = f.read()
graph = mvnc.Graph('aaaa') #初始化一個名為aaaa的圖
input_fifo,output_fifo=graph.allocate_with_fifos(device,graphfile) #建立輸入和輸出先進先出佇列,將圖載入到裝置
tensor=img.astype(numpy.float32) #輸入張量資料必須是輸入Fifo的RW_DATA_TYPE選項指定的資料型別。預設值為32位浮點
graph.queue_inference_with_fifo_elem(input_fifo,output_fifo,tensor,'user object') #將輸入張量寫入輸入Fifo並將其排隊以進行推理
output,user_obj=output_fifo.read_elem() #推理完成後,使用Fifo.read_elem()獲取推理結果。
result = decode_predictions(output.reshape(1, 1000)) #獲取結果
print(result) #輸出結果
# 關閉佇列、圖和裝置
input_fifo.destroy()
output_fifo.destroy()
graph.destroy()
device.close()
device.destroy()
9.執行predict-vgg16.py檔案預測此圖片
python predict-vgg16.py ~/Downloads/aaa.jpg
結果如下:
NCS
[[('n04350905', 'suit', 0.89990234), ('n04591157', 'Windsor_tie', 0.025924683), ('n03680355', 'Loafer', 0.024169922), ('n02883205', 'bow_tie', 0.019729614), ('n03832673', 'notebook', 0.0046310425)]]
可以看到,關於suit,即西裝的概率是最高的,為0.89990234,可知預測成功。vgg16不是預測人的model,因此不會出現人的預測結果。
有什麼問題可以一起討論。