我按照filter visualization和classification示例中的说明,对来自预训练模型(bvlc参考模型)的文件夹中的多个不同图像进行fc6
(完全连接的layer6)响应但对于所有图像,我得到相同的矢量。
这是我使用的代码:
import caffe
caffe.set_mode_cpu()
net = caffe.Classifier(MODEL_FILE, PRETRAINED,
mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1),
channel_swap=(2,1,0),
raw_scale=255,
image_dims=(256, 256))
filenames = next(os.walk(path))[2]
fc6Respose=[]
for i in range(0,len(filenames)):
input_image = caffe.io.load_image(path+filenames[i])
scores = net.predict([input_image])
feat = net.blobs['fc6'].data[4]
fc6Respose.append(feat)
PS:有没有简单的方法将这些数据存储在一个文件(如txt或csv)中,以后可以使用,不用Python就能读取和打开?
答案 0 :(得分:1)
您只访问fc6
响应的单个元素(第四个)。可能是输出中的这个元素对于您测试它的输入类型是简并的。尝试查看整个fc6
响应。
此外,我不确定您使用的是哪种型号,但是您确定此特定型号希望其mean
参数是每通道均值而不是每像素吗?
顺便说一句,您使用oversample
作为输入(caffe.Classifier.predict
中的默认选项),这意味着您获得的输出实际上是10个响应的平均值不同的输入图像(不同的裁剪+镜像)。您可能希望使用
scores = net.predict([input_image], oversample=False)