Grant Musick

SN:8931827

CSEP 576

Project 4

 

 

Basic Approach:

 

Most of the methods are implemented in what I hope was a fairly standard way. However, I wanted to comment on the findFace method because it was so large and pretty much left up to us to implement as we wished.

 

For the findFace method, I essentially looped through the picture pixel-by-pixel looking at some subset of pixels to see what was their MSE score. If the score was below 2000, which was chosen based on some experiments, then the sub-image was defined to be a face candidate. I stored all of these candidates in a list, then sorted them after all the computations were done. I then looped through the candidates in order and selected the top N candidates with a caveat. I checked the images to make sure they were not “too close” geographically to other candidates on the image. The idea is that faces can’t stack on top of each other, so if another top candidate was physically close to other top candidates, then it was probably the same image. These “repeat” images were excluded from the final choice.

 

 

Average Image and EigenFaces:

 

Images have been scaled from 25 X 25 to 50 X 50 for easier viewing.

 

Average:

 

Face 0

Face 1

Face 2

Face 3

Face 4

Face 5

Face 6

Face 7

Face 8

Face 9

 

 

 

 

isFace Results:

 

Below is a chart for the eigenface recognition efficiency using the isFace method against the smiling faces where the face recognition boundary was set to an MSE of 2000. The recognition efficiency did not really start to take off until around 14 eigenfaces. Note that 100 percent recognition was never achieved even with 32 eigenfaces. However, the MSE for the lone face that was not recognized was 2086, just outside the boundary.

 

 

 

 

 

recognizeFace results:

 

The rate of efficient increases based on the number of eigenfaces slows dramatically after 6 faces and essentially plateaus at 14. There really seems to be no point in choosing between fast and accurate for this algorithm. The max accuracy can be obtained for two or three times the computational effort of the fast version but with four times the accuracy.

 

 

 

Something interesting not shown in the chart is that even though the numbers form a smooth curve, the particular pictures that are correctly recognized shift around quite a bit. For instance, I noticed that some pictures would be recognized for a stretch of four or six eigenfaces, then they would suddenly stop being recognized. Others would always be recognized and yet others would never be recognized.

 

As can be seen by the output below, sometimes when there was a non-recognition the answer did not even show up on the list and other times it was just a couple of items below:

 

Source

Prog. Answer

 

Loaded faces from 'nosmile_eig10.face'

Loaded users from 'nosmile10.user'

Face 'smiling_cropped\s00.tga' recognized as being closest too:

0: nonsmiling_cropped/02; MSE: 33028.3

1: nonsmiling_cropped/31; MSE: 44153.5

2: nonsmiling_cropped/20; MSE: 64580.1

3: nonsmiling_cropped/17; MSE: 66357.4

4: nonsmiling_cropped/11; MSE: 68272.8

5: nonsmiling_cropped/24; MSE: 69266.7

6: nonsmiling_cropped/25; MSE: 69419.4

7: nonsmiling_cropped/30; MSE: 78329.2

8: nonsmiling_cropped/16; MSE: 78917.7

9: nonsmiling_cropped/29; MSE: 79682.1

10: nonsmiling_cropped/05; MSE: 80272.6

11: nonsmiling_cropped/23; MSE: 85576.4

12: nonsmiling_cropped/14; MSE: 86796.5

13: nonsmiling_cropped/18; MSE: 88916.8

14: nonsmiling_cropped/12; MSE: 96156.2

 

 

Source

Prog. Ans. 1

Prog. Ans. 2

Prog. Ans. 3

 

Loaded faces from 'nosmile_eig10.face'

Loaded users from 'nosmile10.user'

Face 'smiling_cropped\s02.tga' recognized as being closest too:

0: nonsmiling_cropped/31; MSE: 4925.09

1: nonsmiling_cropped/23; MSE: 35388.9

2: nonsmiling_cropped/02; MSE: 40716.1

3: nonsmiling_cropped/15; MSE: 54046.2

4: nonsmiling_cropped/17; MSE: 63373.7

5: nonsmiling_cropped/21; MSE: 69962.9

6: nonsmiling_cropped/03; MSE: 75431.8

7: nonsmiling_cropped/14; MSE: 76794.3

8: nonsmiling_cropped/19; MSE: 79281.9

9: nonsmiling_cropped/12; MSE: 80688.4

10: nonsmiling_cropped/24; MSE: 83858.2

11: nonsmiling_cropped/25; MSE: 85282

12: nonsmiling_cropped/22; MSE: 86852.9

13: nonsmiling_cropped/05; MSE: 88546.2

14: nonsmiling_cropped/11; MSE: 91357.5

 

 

Cropping and Finding Faces:

 

My cropping experiments were mixed. For instance, it seemed to work well when finding a face from the IMG_8267 image as you can see below (scale from .45 to .55 with step of .01):

 

But when I tried to find a face with this photo (scale ˝):

 

All I got was this despite trying many different scales and steps:

 

 

 

 

My marking experiments went a bit better. I ran a series of experiments with the marked files and had some interesting results. For instance, I had great success with this photo (all of the class photos were done with scale between .45 and .55 with step .01):

 

 

 

I did okay with this one:

 

 

 

And not so well with these two:

 

 

 

The following import picture came up with this (scaled ˝) using 10 eigenfaces and searching for 8 faces between .40 and .50 with steps of .01:

 

 

 

I’m not really sure in any of these cases why it is picking up non-face areas. It is not clear to me why wood or cloth would be closer to face-space than an actual face. Perhaps if these images were being processed in color, then some of the ambiguities would disappear since skin color would provide a lot of extra accuracy i.e. a piece of wood paneling or a gray suit does not look like skin.