我正在尝试使用python脚本使用预先训练的网络提取特征值。这是我的剧本:
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]]的任何图像。很明显,我的代码没有按照我的意愿去做,但是从我发现的文档和示例中,我不确定是什么问题。
谢谢!
答案 0 :(得分:1)
使用python界面时,必须注意测试图像的格式应与用于训练的图像相同。例如,像素值为[0..1]或[0..256],RGB顺序或BGR顺序,平均减法等。只有当您对测试图像进行预处理与训练图像完全相同时,才能获得合理的结果。
一些有用的例子:http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb