使用 Caffe 提取图像特征用于自定义图像分类器

Extract image features using Caffe for custom image classifier

我想获取预构建的caffe 模型第6 层的输出并在其上训练SVM。我的目的是构建一个自定义图像分类器,用户可以在其中创建自定义图像 类,并在这些 类 中对输入图像进行分类,而不是 imagenet classes.Here 是伪代码:

#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)

您应该使用 Net class,而不是 Classifier。因此,您只需要调用 net.forward().

注意两点:

  1. 预处理您的输入图像。请参阅 Transformer class here 以供参考。
  2. 如果仅使用

    提取特征
    features = net.blobs['fc6'].data
    

    您的数组将被下一个 forward() 调用覆盖。请确保您正在执行 深度复制 ,例如

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