Project 4 - Eigenfaces
CSE 455 - Computer Vision
Winter 2012
By: Josh Scotland
Results
- Recognition
- Cropping & Finding Faces
- Verifying Faces
- Extra Credit
Recognition
In
this experiment, all eigenfaces are in the dimension of 25 pixels by 25
pixels. Using the non-smiling faces of the 33 students to compute 10
eigenfaces, we obtain the following results:
Average Face:
10 Eigenfaces (highest eigenvalue on the left):
The following graph shows the results of running the recognizing program with different numbers of eigenfaces:
Questions:
- Describe the trends you see in your plots. Discuss the tradeoffs; how many eigenfaces should one use? Is there a clear answer?
I
ran the program on every user with variation of 1-33 eigen faces at
granularity of 2. I was impressed that even with one eigenface, 8 faces
were correctly matched. The results continue to climb quickly until at
9 eigenfaces with a matching of 23 faces. There was a dip of matched
faces with 11 eigenfaces. Interestingly, the results max out to 24
correct matches when the number of eigenfaces reaches 31. The "best"
number of faces would be around 9 or 13 because that is the smallest
representative size that has the highest accuracy. There is no clear answer.
- 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?
-->
You can see the goatee and cheeks are what makes the first face match
the second. The rank of the corresponding non-smiling image ranks
somewhat close at a distance of 3. Thus, the match is reasonable.
-->
You can see the mouth, nose, and glasses are what makes the first face
match the second. The rank of the corresponding non-smiling image ranks
at a reasonable distance of 9. Again, the match is reasonable. If the
skin color was taken into account, better results would follow.
Cropping Faces & Finding Faces
Scale from 0.45 to 0.55, step 0.01.
As you can see, the highest valued
face is the wall. There are too many false positives. However, at least
the program did find the two faces if the number of boxes increases.
The issue is that the trick of multiplying each potential match's mean
squared error by the match's distance from the face mean and dividing
by its variance didn't work out so well.
Scale from 0.45 to 0.55, step 0.02.
Turned out well. I had a slightly
bigger image before and for some reason it identified a pocket on my
shirt as a better face. I think it looked better because of the
lighting in the scene. There is a light source from the left side of
the image that created a nice facial shadow from my shirt pocket.
Scale from 0.65 to 0.75, step 0.02.
Turned out well again. If the scale
is higher, then parts of the wall get identified. This can be resolved
by manipulating the MSE some more.
Scale from 0.75 to 0.85, step 0.2.
Not too accurate, but then again,
there is a lot of noise in the image. The cool thing is that some of
the phantom faces are correctly identified. However, many clear (to us
humans) faces are being missed.
Verifying Faces
Questions:
- What MSE thresholds did you try? Which one worked best? What search method did you use to find it?
I tried values
between 10000 and 150000. I searched by plotting the results and
narrowed down which one was best (essentially a binary search). I'm not
going to lie -- this was really tedious even with scripting.
- Using the best MSE threshold, what was the false negative rate? What was the false positive rate?
The best threshold was around 50000. The false negative rate was 10/33 and the false positive rate was 13/33.
Extra Credit
- Implemented the speedup (in the code, not enabled)
- Implemented a faster sorting algorithm for the speedup
- Implemented morph face