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開發人員作爲示例提供的。它隱藏了必要的預處理,這可能取決於應用程序。總之,你應該定義你自己的**分類器類。 –