Lars Bull
3/13/2009
CSE 455
Project 4
|
Eigenfaces for Recognition
|
|
|
Finding Faces
crop, min scale: 0.45, max scale: 0.55, scale step: 0.01, Eigenfaces: 10 non-smiling, 25x25 pixels

min scale: 0.33, max scale: 0.33, scale step: 0.01, Eigenfaces: 10 non-smiling, 25x25 pixels

Eigenfaces: 10 non-smiling, 25x25 pixels

min scale: 0.45, max scale: 0.55, scale step: 0.01, Eigenfaces: 10 non-smiling, 25x25 pixels


Click for more group images
min scale: 0.79, max scale: 0.87, scale step: 0.04, Eigenfaces: 10 non-smiling, 20x20 pixels

There were certainly a lot of false positives in face detection, unfortunately. I can't say I know exactly why, but a lot of things just look like faces. Some modifications I made allowed the program to avoid most of the areas where it would come across these pitfalls, but it also allowed it to focus more on areas that had face-like qualities, so oftentimes hands, throats, ears, and flesh-colored objects come back as false positives. The thing that confused me the most is when its face would partially overlap a real face; sometimes I'd get half a face, or eyes, or a chin, but it didn't seem to always want to settle on a face. Some of this was extremely sensitive to scale, so small modifications would cause a box to shift (like with the box that only contains a mouth on the left of the previous image).
Stepping from .45 to .55 by .01 seemed to be a pretty good way to pick up faces in pictures that were rather clean. Unfortunately, it seems like the detector can get easily hung up on imperfections in the image at times, so wide ranges like that wasn't perfect for just any image. It's especially important to take note of the size of the image and size of the eigenfaces before setting scales, since the scale will make the eigenface relatively bigger or smaller against the scaled image. One can get a good idea of what size is needed for the scale simply by glancing at the picture.
|
|
|
Verifying Faces
I started off using a value around 60000 for the threshold and had some decent success immediately; there were only 6 false negatives and 4 false positives. My method for learning which direction to move in was simply looking through the list for the remaining incorrect results and taking into account which had the most nearby values, as well as how much of a buffer there was between the current threshold and nearby MSE values that could cause another bad result. I adjusted it upward a bit, trying 66000 and then 70000, eventually settling there (at 70000) with 5 false negatives and 3 false positives, leaving 40/48 correct results.
|
|
|
Extra Credit
I implemented the first whistle, the faster eigenvector algorithm that replaces the very slow and bloated default algorithm. It successfully allows me quick creation of eigenfaces at any size I desire.
I made improvements to the finder's ability to locate faces by using colors; I find the individual averages for red, green, and blue in a subimage and check to see if those values meet certain conditions (> or < certain values or even equations involving relationships to the other color averages), which kept the program from finding 'faces' in areas that are in no way colored like a face.
Finally, I also tested the face detector on animals (third whistle) and found that is indeed capable of locating animal faces:
min scale: 0.5, max scale: 0.5, scale step: 0.01, Eigenfaces: 10 non-smiling, 45x45 pixels

Unfortunately, I did not have the images (nor time to get or use them) to train on an animal set.
|
|
|
|
|