使用 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()
.
注意两点:
- 预处理您的输入图像。请参阅
Transformer
class here 以供参考。
如果仅使用
提取特征
features = net.blobs['fc6'].data
您的数组将被下一个 forward()
调用覆盖。请确保您正在执行 深度复制 ,例如
features = net.blobs['fc6'].data.copy()
我想获取预构建的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()
.
注意两点:
- 预处理您的输入图像。请参阅
Transformer
class here 以供参考。 如果仅使用
提取特征features = net.blobs['fc6'].data
您的数组将被下一个
forward()
调用覆盖。请确保您正在执行 深度复制 ,例如features = net.blobs['fc6'].data.copy()