ISTA 552 --- Group study on Computer Vision

(previous)     Assignment Nine

For due dates and relative value, see the course web page.

This assignment must be done individually


Big picture

In this assignment we will use a support vector machine to classify images. I particular, we will build a classifier that can identify face images from non-face images. The classifier depends on reducing the images to a feature vectors. For this we will use a very naive one, but you may want to experiment with features that are more sensible.

You should extrapolate from this assignment the ability to classify almost anything into two classes based on training data. Of course, how well it works depends on how effectively your representation maps the two classes into different areas of the feature space.


You can do this assignment in either Matlab or C/C++.

Information for those working in C/C++ who want to use my libraries.


Assignment specification

This assignment has one main part and some initial preprocessing , both of which are required for undergrads and grads.

There are a number of ways to extend this assignment. If you try something interesting, let the TA know so he can consider giving you modest extra credit (max one full mark extra).

In this assignment, you will build a face detector with the help of a Support Vector Machine (SVM).  You will be provided with a software implementation of an SVM and training data  to build the classifier with.

A set of 200 training images (faces and non faces) are provided here.  Preprocessing involves extracting features from these images to provide as input to the SVM. For the purposes of this assignment you may use a naive set of features - the pixel intensities of the image. Note that this means the images may need to be converted to black and white and possibly blurred and sub-sampled. Each image will be represented as a vector of intensity values. You may think of it as unrolling the image matrix into one long vector.

These vectors are then provided as input to the SVM software. Executables for the appropriate for the graphics machines are here
        svm-train,
        svm-predict,
        svm-scale.
If you would like to use a different platform, you will find that it is easy to build these from the source code provided on the libsvm site.

There is a README file available that tells you how the input is  to be formatted and how to use the software. Note that many of the options for using the software (choice of kernels, error margin etc) are optional and that the default functionality is sufficient for the purposes of this assignment. You're welcome to experiment with these options, but please be sure to include any resulting observations in the README file you turn in. Visit the libsvm page to see some examples and choices on how to use this software.

3. Finally, once the classifier or model is built, you will need to see how well your face detector is doing by classifying some test images which again consist of faces and non faces.  The test data can be downloaded from here.

What to hand in

1. A README file that will report the initial preprocessing you did to the data, options used for the SVM and the accuracy results on the test and training data. Comment on the results.

2. Your code for the assignment. Assuming that the TA has access to the images, he should be able to run your code to do any preprocessing as well as to generate the input files for the SVM and verify your results.

Some useful tools

You may use one of Matlab, C/C++, or the program "kjb_image" convert to black and white, to subsample, or blur the images. There is a man page for kjb image. You may need:
            MANPATH: ~kobus/doc/man
            PATH:       : ~kobus/bin/linux_x86_64_c2

Acknowledgments

The data for this assignment was obtained from Dr. Libor Spacek's Computer Vision research page and is not to be published/printed/sold/distributed.  Please refer to http://cswww.essex.ac.uk/mv/allfaces/index.html  for the complete copyright information.

The software provided for the Support Vector Machine is called libsvm (version 2.86) and is copyrighted as given here.