1

我按照过滤器可视化分类示例中的说明fc6从预训练模型(bvlc 参考模型)中获取对文件夹中多个不同图像的(完全连接的 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即可读取和打开?

4

1 回答 1

1

您只访问响应的一个元素fc6(第四个)。可能是输出中的这个元素对于您测试它的输入类型是退化的。尝试查看整个fc6响应。

此外,我不确定您使用的是什么模型,但您确定这个特定模型期望它的mean参数是每通道平均值而不是每像素?

顺便说一句,您正在使用oversample您的输入(中的默认选项caffe.Classifier.predict),这意味着您获得的输出实际上是对稍微不同的输入图像(不同的裁剪+镜像)的 10 个响应的平均值。您可能希望使用禁用此选项

scores = net.predict([input_image], oversample=False)
于 2015-08-04T05:04:00.107 回答