Testing recognition with cropped class images


Procedure

1. Use the cropped, non-smiling students (in class_nonsmiling_cropped) to compute 10 eigenfaces. Show the average face and eigenfaces.

eigen_face_0
eigen_face_1
eigen_face_2
eigen_face_3
eigen_face_4
eigen_face_5
eigen_face_6
eigen_face_7
eigen_face_8
eigen_face_9

Questions

1.Describe the trends you see in your plots. Discuss the tradeoffs; how many eigenfaces should one use? Is there a clear answer?
Obviously as you use more eigenfaces, the training data will match better because the eigenfaces are more distinctive and taylored toward individual sets of features. Whereas if you have only a few eigenfaces they can only capture the more general features of peoples faces. The tradeoff is the time it takes to compute the extra faces as well as the data storage and extra time in computing the algoritms. There is a slight downside to having more eigenfaces as well, they become more specific to the training data and might not mesh well with other different/foreign data sets. There is no real clear answer accept to choose somewhere in the middle so that you get slightly more distinctive features but aren't stuck with the extra overhead or overly specific data.

2. You likely saw some recognition errors in step 3; show images of a couple. How reasonable were the mistakes? Did the correct answer at least appear highly in the sorted results?
As the number of eigenfaces rose, clear patterns became evident. Some faces matched with themselves even with small sets of eigenfaces and always remained that way-matched correctly. Other faces never matched with themselves, but they ended up matching with one distinct face for the entire range of eigenfaces. Most of the faces switched to their own fairly quickly and there was exponential drop off in the gains w/ increased number of eigenfaces as the number of faces got into the late teens (~17 or 18 and onward).


Verify Face



Procedure

1. Use the cropped, non-smiling students to compute 6 eigenfaces.

eigen_face_0
eigen_face_1
eigen_face_2
eigen_face_3
eigen_face_4
eigen_face_5

2. Use the same set of images to compute a userbase.

3. Have the program verify the cropped, smiling student images in the smiling userbase. Test by verifying each student against his or her smiling face, as well as each student against a smiling face which is of someone else.

Every student matched with their own face. No student among the first 10 that I tested matched eachother and the mse values between pictures was on the order of 10,000 to several hundred thousand between different students. The mse between a student and their own picture was 0.

4. Experiment with various thresholds to find the one that gives the fewest false positives and fewest false negatives Questions

1. What MSE thresholds did you try? Which one worked best? What search method did you use to find it? With the lower mse threshold I got less false positives, less true negatives, but also fewer true positives. With the higher mse threshold I got more false positives, but also more true positives; it let more things/matches slide which resulted in more "positive matches". I started looking for thresholds on orders of magnitude so I started with 1, then 50, then 100, 500, 2000 and 10000 for a few pictures to get an idea of ranges that would work. I ended up testing all the pictures with a threshold of 500, 25000, and 60000.

2. Using the best MSE threshold, what was the false negative rate? What was the false positive rate? All the rates were rather mixed. The one for 25000 was alright. It wouldn't do very well as a security system as I got several false positives and ended up with about a 20 percent false positive rate. False negative was a bit better.

Cropping and finding faces

Procedure

1. Use the 10 eigenfaces file computed in the previous problem.

eigen_face_0
eigen_face_1
eigen_face_2
eigen_face_3
eigen_face_4
eigen_face_5
eigen_face_6
eigen_face_7
eigen_face_8
eigen_face_9


2. Use your program to crop the elf.tga image. Use min_scale,max_scale, step parameters of .45, .55, .01. You should be able to successfully crop the image; if not, work on your code!

This picture was rather difficult to crop. I tried to fix my code for this portion of the assignment for several days to no avail. I believe I have followed the guise of the assignment and fail to see how I could drastically improve my results. Obviously, they could look better, however I can't figure out how to make them prettier.
cropped image using 0.45,0.55,0.01 parameters
better cropped image using 0.10, 0.20, 0.01 parameters

3. Find a digital picture of yourself; if you really don't have one, use any portrait on the web. Use your program to crop the picture.
original image
cropped image

4. Experiment with min_scale, max_scale, and step parameters to find ones that work robustly and accurately. Smaller values of scale worked favorably for me. They also took less time to compute which was nice. In smaller pictures like the elf and George Bush pictures, the scale did not seem to have as large an effect and the smaller scales seemed to work.


4. Find and try another group photo. This could be of family and/or friends, or one from the web. The photo should have at least four faces. Questions 1. What min_scale, max_scale, and scale step did you use for each image? I tested mostly on small pictures with scales between 0.1 and 0.4 in an attempt to save on time. 2. Did your attempt to find faces result in any false positives and/or false negatives? Discuss each mistake, and why you think they might have occurred. I tried a few pictures of houses and it couldn't detect anything fortunately. However my face detection method did not produce the results that I had hoped for. I'm not entirely sure what went wrong.