Sandesh Sharma
Sandesh Sharma

Reputation: 1084

Extract CNN features using Caffe and train using SVM

I want to extract features using caffe and train those features using SVM. I have gone through this link: http://caffe.berkeleyvision.org/gathered/examples/feature_extraction.html. This links provides how we can extract features using caffenet. But I want to use Lenet architecture here. I am unable to change this line of command for 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

And also, after extracting the features, how to train these features using SVM? I want to use python for this. For eg: If I get features from this code:

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

Then, how can I train these features using SVM by defining my own classes?

Upvotes: 2

Views: 3456

Answers (2)

Wajih
Wajih

Reputation: 791

Very lagged reply, but should help. Not 100% what you want, but I have used the VGG-16 net to extract face features using caffe and perform a accuracy test on a small subset of the LFW dataset. Exactly what you needed is in the code. The code creates classes for training and testing and pushes them into the SVM for classification.

https://github.com/wajihullahbaig/VGGFaceMatching

Upvotes: 0

mprat
mprat

Reputation: 2481

You have two questions here:

  1. Extracting features using LeNet
  2. Training an SVM

Extracting features using LeNet

To extract the features from LeNet using the extract_features.bin script you need to have the model file (.caffemodel) and the model definition for testing (.prototxt).

The signature of extract_features.bin is here:

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]

So if you take as an example val prototxt file this one (https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/train_val.prototxt), you can change it to the LeNet architecture and point it to your LMDB / LevelDB. That should get you most of the way there. Once you did that and get stuck, you can re-update your question or post a comment here so we can help.

Training SVM on top of features

I highly recommend using Python's scikit-learn for training an SVM from the features. It is super easy to get started, including reading in features saved from Caffe's format.

Upvotes: 2

Related Questions