0

我想获得预构建caffe模型的第6层的输出并在其上训练SVM。我的目的是建立一个自定义图像分类,用户可以创建自定义图像类,以及输入图像的类之间进行分类,而不是imagenet classes.Here是伪代码:使用Caffe为自定义图像分类器提取图像特征

#input 
file='cat.jpg' 
image=caffe.io.load_image(file) 

#model 
net = caffe.Classifier('deploy.prototxt','model.caffemodel') 

#compute activation at layer 6 --- Need help here. Will net.forward help? will the activation be retained? 

#extract features from layer 6: 

features = net.blobs['fc6'].data[4][:,0, 0] 


#SVM 
category=svm.predict(features) 
print get_category_name(category) 
+0

那么,什么是问题? –

回答

5

您应该使用Net而不是Classifier。因此,您只需致电net.forward()即可。

有两点需要注意:

  1. 预处理的输入图像。请参阅Transformerhere以供参考。
  2. 如果你只用

    features = net.blobs['fc6'].data 
    

    您的阵列将在下一个forward()调用所覆盖提取的特征。一定要执行深拷贝,如

    features = net.blobs['fc6'].data.copy() 
    
+0

为什么网而不是分类器?分类器本身完成所有图像处理的权利? – farizrahman4u

+0

仅仅因为分类器是由Caffe开发人员作为示例提供的。它隐藏了必要的预处理,这可能取决于应用程序。总之,你应该定义你自己的**分类器类。 –