Deep learning framework by BAIR
Created by
Yangqing Jia
Lead Developer
Evan Shelhamer
In this tutorial, we will extract features using a pre-trained model with the included C++ utility. Note that we recommend using the Python interface for this task, as for example in the filter visualization example.
Follow instructions for installing Caffe and run scripts/download_model_binary.py models/bvlc_reference_caffenet from caffe root directory.
If you need detailed information about the tools below, please consult their source code, in which additional documentation is usually provided.
We’ll make a temporary folder to store things into.
mkdir examples/_temp
Generate a list of the files to process. We’re going to use the images that ship with caffe.
find `pwd`/examples/images -type f -exec echo {} \; > examples/_temp/temp.txt
The ImageDataLayer we’ll use expects labels after each filenames, so let’s add a 0 to the end of each line
sed "s/$/ 0/" examples/_temp/temp.txt > examples/_temp/file_list.txt
In practice, subtracting the mean image from a dataset significantly improves classification accuracies. Download the mean image of the ILSVRC dataset.
./data/ilsvrc12/get_ilsvrc_aux.sh
We will use data/ilsvrc212/imagenet_mean.binaryproto in the network definition prototxt.
Let’s copy and modify the network definition.
We’ll be using the ImageDataLayer, which will load and resize images for us.
cp examples/feature_extraction/imagenet_val.prototxt examples/_temp
Now everything necessary is in place.
./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 leveldb
The name of feature blob that you extract is fc7, which represents the highest level feature of the reference model.
We can use any other layer, as well, such as conv5 or pool3.
The last parameter above is the number of data mini-batches.
The features are stored to LevelDB examples/_temp/features, ready for access by some other code.
If you meet with the error “Check failed: status.ok() Failed to open leveldb examples/_temp/features”, it is because the directory examples/_temp/features has been created the last time you run the command. Remove it and run again.
rm -rf examples/_temp/features/
If you’d like to use the Python wrapper for extracting features, check out the filter visualization notebook.
Let’s remove the temporary directory now.
rm -r examples/_temp