ECE1390 Selected Topics in Circuit and Systems – VLSI Circuits and Systems for Pattern Recognition Final Project, Part I Visual Object Detection with Support Vector Machine Part I Goal: To train a SVM to detect human faces, test training results and analyze performance issues. Preparation 1. Download (and compile, if applies) the following files: SVMFu SVM classification package (by Ryan Rifkin, MIT) MIT CBCL (Center for Biological and Computational Learning) face data set Receiver operating characteristic (ROC) tabulation Perl script roc.pl (from ECE1930 course web page) Shell script svm.csh for performance analysis automation (from ECE1930 course web page) 2. Train a two-class SVM. Run svmfutrain training routine on svm.train.normgrey histogram-equalized, normalized face data set for a linear kernel function (default) with C=10. 3. Test classification results. Run svmfutest testing routine on svm.test.normgrey test set. 4. Analyze performance. Run roc.pl Perl script to tabulate ROC curve Plot ROC curve (using gnuplot or matlab) Note: Refer to svm.csh script for an example of automating steps 1 through 4. Make sure to use proper command line parameters for each of simulation. Questions 1. What does a ROC curve mean (hint: this is simple, if you know Perl)? Explain. 2. What is a good choice of kernel function? Try polynomial and Gaussian kernels with various parameters. Plot ROC curves on the same figure for the best three cases: linear SVM, best polynomial kernel, best Gaussian kernel. Which kernel gives the best results? How many support vectors (SVs) do you get for each case? Open question: can you do better with another inner-product based valid kernel (i.e., satisfying Mercer’s conditions)? Note: remember from class that C is a “punishment” constant for misclassified points for the non-separable data case. 3. What sampling window dimensions are sufficient for detecting faces? For the three best kernels plot ROC curves for 19x19 pixel resolution (natural data set resolution), 16x16 pixels, 11x11 pixels. What is the classification performance loss? Plot the number of support vectors versus input dimensionality (i.e., 121, 256, 361) for each of three kernels (one figure per kernel). Can you think of ways to improve classification performance for a fixed number of dimensions (hint: not necessarily square window)? Open question: what is the improvement in classification performance for other sample window shapes? How many dimensions do you save for the same classification performance? 4. How does image resolution affect the classification performance? Plot ROC curves for the three best kernels (one figure per kernel) comparing results for the data at full resolution (8 bits) and quantized to 7, 6, 5 and 4 bits. 5. How does feature extraction affect the classification performance? Try different methods of feature extraction (e.g., Haar wavelets) and compare the results (plot a figure with all ROC curves). Refer to C. Papageorgiou, et. al. ICCV’98 paper. Which method is the best? 6. How do support vectors look like? Rerun the simulation for 16x16 pixels and 11x11 pixels inputs (two cases) using: the best polynomial kernel, 4-bit image resolution and your best feature extraction method. Pick and show (subjectively: most atypical) faces (two) and non-faces (two). How many support vectors are there in each of the two cases? 7. How does the number of support vectors affect the classification performance? How can one reduce the number of support vectors? Try to reduce the number of support vectors (e.g., by coming up with a way to discard the most irrelevant SVs). Rerun the experiments in 6 with only 160 and 128 4-bit SVs (two cases). Plot the ROC results on the same figure. 8. Create a table containing detection rate (horizontal entries) for each of the case above for false positive rates of 0.1 to 0.9 (linearly spaced with 0.1 interval – 9 columns).