CSE 576 Project 3 - Artifact Results


Experiment 1

average face
Eigenface #1 Eigenface #2 Eigenface #3 Eigenface #4 Eigenface #5
Eigenface #6 Eigenface #7 Eigenface #8 Eigenface #9 Eigenface #10

Using the non-smiling students database I generated the average face plus the top ten eigenfaces. Each face was resized to be 25x25 pixels in dimension. The results are displayed is the table above. Using this model for faces I tried to identify which student was which in the smiling students database. A plot of the results is below. Ploted on the x-axis is the number of eigenfaces and on the y-axis is the number of face identified correctly. Notice how the performance appears to level off once the number of eigenfaces in more than fifteen.

These results lead me to believe that after a certain point using more eigenfaces can only bring incremental improvements in performance.

The algorithm did make quite a few mistakes at times when trying to identify faces. In situations where the algorithm failed, as the number of eigenfaces increased, so did the ranking of the true identity of the person in the photo. Here are a few comical failures.

Original Face

Reconstructed Face

Matched Face

Original Face

Reconstructed Face

Matched Face

Original Face

Reconstructed Face

Matched Face


Experiment 2

Here are some results of the cropping and marking capabilities of the program.

Source Image

Cropped Image
min_scale = 0.45, max_scale = 0.55, scale step = 0.01

Source Image

Cropped Image
min_scale = 0.2, max_scale = 0.4, scale step = 0.01

Source Image

Marked Image
min_scale = 1.0, max_scale = 1.10, step = 0.01

Source Image

Marked Image
min_scale = 1.0, max_scale = 1.10, scale_step = 0.01

Source Image

Marked Image
min_scale = 0.45, max_scale = 0.55, step = 0.01

Discussion

The cropping results look good, but the marking results are far from perfect. The poor performance in the marking photos could be attributed to a couple of things. For one, there are smiling faces in the group shots. The model was trained on non-smiling faces. Also, the algorithm has to deal with a lot of visual "clutter" in the group photo, that is there is a lot of texture that could have the same kind of variations that are present in faces.


Bells & Whistles

I implemented the speed-up for eigenfaces that computes the eigenvectors of A*A^t*A instead of A^T*A. This speed-up things greatly. I also fit a gaussian to the variances of the training images. When trying to find faces I threw out sections of the image where the variance was above and below two standard deviations from the mean of the variances of the input images. This usually helped eliminate 20 percent of the locations searched in the image and sped up the find face routine.

I implemented, but did not test the verify face routine. :(