使用Caffe提取CNN功能并使用SVM训练

时间:2016-04-18 19:09:43

标签: svm caffe convolution conv-neural-network pycaffe

我想使用caffe提取功能并使用SVM训练这些功能。我已经浏览了这个链接:http://caffe.berkeleyvision.org/gathered/examples/feature_extraction.html。此链接提供了我们如何使用caffenet提取功能。但我想在这里使用Lenet架构。我无法改变Lenet的这一行命令:

  ./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 leveldb

此外,在提取功能后,如何使用SVM训练这些功能?我想用python。例如:如果我从此代码获得功能:

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

然后,如何通过定义自己的类来使用SVM训练这些功能?

2 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 使用LeNet提取功能
  2. 培训SVM
  3. 使用LeNet提取功能

    要使用extract_features.bin脚本从LeNet中提取要素,您需要拥有模型文件(.caffemodel)和用于测试的模型定义(.prototxt)。

    extract_features.bin的签名在这里:

    Usage: extract_features  pretrained_net_param  feature_extraction_proto_file  extract_feature_blob_name1[,name2,...]  save_feature_dataset_name1[,name2,...]  num_mini_batches  db_type  [CPU/GPU] [DEVICE_ID=0]
    

    因此,如果您以val prototxt文件为例(https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/train_val.prototxt),您可以将其更改为LeNet架构并将其指向LMDB / LevelDB。这应该会让你在那里大部分时间。一旦你这样做并卡住了,你可以重新更新你的问题或在这里发表评论,以便我们提供帮助。

    在功能上培训SVM

    我强烈建议您使用Python scikit-learn来训练来自这些功能的SVM。它非常容易上手,包括阅读从Caffe格式保存的功能。

答案 1 :(得分:0)

非常落后的回复,但应该有所帮助。 不是100%你想要的,但我使用VGG-16网络使用caffe提取面部特征,并对LFW数据集的一小部分进行精度测试。您需要的正是代码中的内容。该代码创建用于训练和测试的类,并将它们推送到SVM中进行分类。

https://github.com/wajihullahbaig/VGGFaceMatching