我想使用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训练这些功能?
答案 0 :(得分:1)
这里有两个问题:
使用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中进行分类。