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

far*_*n4u 0 python computer-vision neural-network caffe conv-neural-network

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

#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)
Run Code Online (Sandbox Code Playgroud)

Fla*_*ara 5

你应该使用Netclass而不是Classifier.因此,你只需要打电话net.forward().

要注意两件事:

  1. 预处理输入图像.请参阅此处Transformer课程以供参考
  2. 如果您使用just提取功能

    features = net.blobs['fc6'].data
    
    Run Code Online (Sandbox Code Playgroud)

    您的阵列将被下一次forward()调用覆盖.确保您正在执行深层复制,例如

    features = net.blobs['fc6'].data.copy()
    
    Run Code Online (Sandbox Code Playgroud)