EigenFaces Facial Recognition

Jon Keto
CSE455 Computer Vision
Project 4 Artifact
Experiment 1 | Experiment 2 | Experiment 3

Experiment 1

Results

Average Face

Eigen Faces


Apparently there was a bug in my code that I did not realize until too late that caused all of my faces to be recognized as smiling_cropped/01.tga. Here is some sample output. A little disappointing. This was using 27 eigen faces. I could plot the data, but it would not be very interesting.

Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/20.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 672.647
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/21.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 583.075
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/22.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 310.085
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/23.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 293.478
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/24.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 384.744
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/25.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 373.356
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/26.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 413.45
Loaded faces from 'eigen.faces.27'
Loaded users from 'user.base.27'
Face 'smiling_cropped/27.tga' recognized as being closest too:
0: nonsmiling_cropped/01; MSE: 348.017
  

This is trying to mark 20 faces with 10 eigen faces calculated and parameters .4 .5 .01. I found some faces, but not exact matches, but the accuracy was very low. This is probably because my range was incorrect. If the faces do not fall within the range selected it will try to find the 20 best "faces" that are near to the face in the range.

The errors are pretty reasonable. They come close to faces, to the left and to the right, below, but not exactly over students faces. It might be a philosophical argument whether the over-"head" projector is a face or not.

1. According to other plots I have seen in the past and with this quarter it seems as though the algorithm does not improve effectiveness linearly with the number eigenfaces used. This coupled with the time increase when calculating the eigen faces it is better to not create eigen faces from all the training data.

2. IMG_0031 was not very successful either. I think the parameters are incorrect.



Conclusion

Experiment 2

Results

I can't find the elf, but if I change the parameters to .3 .5 .1 I can find the man. Apparently I need to keep working on my code.

Here is the corner of the man's head. The arguments are .4 .5 .01.

The elf found a false positive. I assume this is because the training data did not include enough images to create an average face between a baby face and an adult face. There was also a false negative produced by too the iterations. This is why I found the corner of this dudes head and not the baby face.

Apparently the painting of Mao at the forbidden does not have enough contrast to be found easily. The shading might not be natural enough to be recognized as a face.

Finding my coworkers from Omation failed pretty badly. I think this is because the step was too large being set to .05. The I think the scale at which the faces would be found most frequently was skipped. An indicator is that there are large patches of asphalt marked. Meaning there were not enough candidates found at other scale levels. This makes me think that the step is wrong. The parts of people marked are a little too large, so increasing the range may help as well. My closed eyes and mohawk may have made it hard to find me.

I think this image was unsuccessful because of the bright light shining on the side of my head as well as the contrasting shadows on the mountains behind me. In combination these will cause the algorithm to ignore me and find some 'real' face on the face of the mountain.

Experiment 3

I was going to have a third experiment to test some interesting phenomena. Why try to find a face that is on someone's head? Why not try to find it in toast? People have been doing this, so why can't eigen faces?

Unfortunately the image descriptors are incorrect, so I could not run the experiments, but it is a neat idea to see whether you could find the faces in these images. Note: the pooh image is the 'control'. The test is to see whether we can find Michael or Jesus.