2016-01-26 247 views
0

我正在嘗試使用python腳本使用預先訓練的網絡來提取功能值。這裏是我的腳本:pyCaffe不會給出與命令行界面相同的結果

import numpy as np 
import matplotlib.pyplot as plt 
from PIL import Image 
import caffe 

caffe.set_device(0) 
caffe.set_mode_gpu() 
net=caffe.Net('blobs-Test-Eval.prototxt', 'best_snapshot_iter_4553.caffemodel', caffe.TEST) 
im=np.array(Image.open('Test/D_4051.png')) 
im_input = im[np.newaxis, np.newaxis, :, :] 
net.blobs['data'].reshape(*im_input.shape) 
net.blobs['data'].data[...]=im_input 
out=net.forward() 
print out['fc8'] 

現在圖像D_4051應該某處0.002之間返回一個分數 - 0.006,但python腳本返回[2.99469399]從我的測試設置的任何圖像。很明顯,我的代碼沒有做我想做的事情,但從我發現的文檔和示例中,我不確定哪裏出了問題。

謝謝!

回答

1

當您使用python界面時,您必須注意測試圖像的格式應與用於訓練的圖像相同。例如,像素值爲[0..1]或[0..256],RGB順序或BGR順序,平均相減等。只有在預處理測試圖像與訓練圖像完全一樣的情況下,才能獲得合理的結果。

一些有用的例子:http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb

+0

感謝您的回覆。我現在運行它的圖像實際上是其中一個測試圖像,它具有從命令行界面成功提取的fc8功能。我只是試圖在python 1圖像中一次做同樣的事情。從我所能告訴的所有預處理都在第一層的.prototxt文件中進行處理: – theShmoo

+0

圖層名稱:「data」 類型:「ImageData」 top:「data」 top:「標籤」 包括{ 相:TEST } transform_param { 鏡:假 crop_size:96 mean_file: 「trainingMean.binary」 } image_data_param { 源: 「Test.txt的」 \t的batch_size:1 } } – theShmoo

相關問題