我正在尝试从caffe模型动物园运行预训练的googlenet模型(没有微调)。 model和deploy.prototxt都是从https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
下载的以下是我使用的代码:
RichTextBox
看起来模型加载很好,但无论输入如何,它总是输出相同的类(885)。可能是什么原因?
UPD:实际上同样的问题适用于其他模型,无论我是否意味着减法,只是总是检测到的类会改变为某些不同的类。
答案 0 :(得分:2)
我可以看到代码的一些问题。首先,您应该在设置均值之前使用np.transpose
,因为在caffe.io.load
中,图像仍然具有形状(224,224,3)。其次,您需要将图像从[0,1]重新缩放到[0,255]。此外,caffe期望图像按特定顺序排列。 Small explanation is given here。因此,您必须将默认RGB更改为BGR格式。
我建议使用变压器caffe.io.transformer
,它可以干净地打包所有这些转换。
对于您的示例,带变换器的代码将是:
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_mean('data', np.array([104,117,123]))
transformer.set_transpose('data',(2,0,1))
transformer.set_channel_swap('data',(2,1,0))
transformer.set_raw_scale('data', 255.0)
image_path = 'cat.jpg'
img = caffe.io.load_image(image_path)
img = caffe.io.resize( img, (224, 224, 3) )
net.blobs['data'].reshape(1,3,224,224)
net.blobs['data'].data[:,:,:] = transformer.preprocess('data',img)
output = net.forward()
out = net.blobs['prob'].data[0].flatten()
labels = np.loadtxt(labels_file, str, delimiter='\t')
print(np.argmax(out))
print ('output label : ' + labels[out.argmax()])