Computer Vision (CSE 455), Winter 2012
Name: Daseul Lee
main --eigenfaces 10 25 25 nonsmiling_cropped/list.txt eig.face
2. Compute a userbase using the same set of images.main --constructuserbase eig.face nonsmiling_cropped/list.txt base.user
3. Figure out whether each picture matches a correct user in the userbase.main --recognizeface smiling_cropped/smiling-1.tga base.user eig.face 10
4. Repeat the above steps using different number of eigenfaces to be computed, e.g. 1, 3, 5, ... , 31, 33.The number of correct face recognition increases with the number of eigenfaces used; however, at about 5 eigenfaces, there is not much differences in the rate of correct recognition. If we use more eigenfaces, then accuracy may increase(maybe slightly) however the performance would be not as fast. To get the best result, we could use a good sample faces to find eigenfaces and only use a good threshold number, in my case 5.
Q2 : 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?image 4 is recognized as image 17. However, it was the 5th closest image in a sorted list.
main --recognizeface smiling_cropped/smiling-4.tga base.user eig.face 10
Loaded faces from 'eig.face'
Loaded users from 'base.user'
Face 'smiling_cropped/smiling-4.tga' recognized as being closest too:
0: nonsmiling_cropped/neutral-17; MSE: 61533.9
1: nonsmiling_cropped/neutral-13; MSE: 71181.6
2: nonsmiling_cropped/neutral-19; MSE: 74426.3
3: nonsmiling_cropped/neutral-25; MSE: 78570.6
4: nonsmiling_cropped/neutral-4; MSE: 85656.2
5: nonsmiling_cropped/neutral-18; MSE: 105442
6: nonsmiling_cropped/neutral-22; MSE: 117551
7: nonsmiling_cropped/neutral-27; MSE: 126268
8: nonsmiling_cropped/neutral-24; MSE: 130913
9: nonsmiling_cropped/neutral-32; MSE: 139686
main --findface elf.tga nosmile_eig10.face 0.45 0.55 0.01 crop 1 crop_elf.tga
2. With a portrait on the web, find a face in that image by cropping one best face.main --findface joker.tga nosmile_eig10.face 0.5 0.7 0.05 crop 1 crop_joker.tga
3. Find faces in "group_neutral (1).tga" by marking.main --findface "group\group_neutral (1).tga" nosmile_eig10.face 0.55 0.75 0.05 mark 2 mark_group_neutral1.tga
4. With several pictures of at least 4 people, find faces in each image by marking.main --findface "group\group_neutral (11).tga" nosmile_eig10.face 0.55 0.75 0.05 mark 4 mark_group_neutral11.tga
main --findface group3.tga nosmile_eig10.face 0.5 0.7 0.02 mark 20 mark_group3.tga
main --findface "group\oldclass_neutral.tga" nosmile_eig10.face 0.65 0.85 0.05 mark 33 mark_oldclass_neutral.tga
1. Elf : 0.45, 0.55, 0.01
2. portrait : 0.5, 0.7, 0.05
3. group1 : 0.55, 0.7, 0.05
4. group of 4 people : 0.55, 0.75, 0.05
5. group of random people : 0.5, 0.7, 0.2
6. old class picture : 0.65, 0.85, 0.05
1. Elf : found face correctly
2. portrait : found face correctly
3. group1 : found face correctly
4. group of 4 people : the hand of third person is mistaken as a face because of the contrast in regions above and below hands
is similar to eyebrows of a face.
5. group of random people : 10 out of 20 people are recognized; some people's face is not oriented toward the front or partically hidden, which might have caused the error.
Some people's clothes are recognized as face because its contrast in color is similar to that in contour of a face.
6. old class picture : 14 out of 32 people are recognized; some people's eyes are closed or their face is not oriented toward the front, causing false
negatives. Also, clothes and the edge between the desk and the background is mistakenly recognized as a face for the same possible reason described above,
adding to false positive.
main --eigenfaces 6 25 25 nonsmiling_cropped\list.txt nosmile_eig6.face
2. Use the same set of images to compute a userbase.main --constructuserbase nosmile_eig6.face nonsmiling_cropped\list.txt nosmile.user
3. Verify each user in the userbase against his/her smiling picture to find false negative, and against someone else's smiling picture to find false positive.main --verifyface smiling_cropped\smiling-1.tga nosmile.user nonsmiling_cropped/neutral-1 nosmile_eig6.face 90000.0
main --verifyface smiling_cropped\smiling-1.tga nosmile.user nonsmiling_cropped/neutral-2 nosmile_eig6.face 90000.0
4. Try different threshold to find the best one that results in the fewest false positives and false negatives.Threshold | False Negative | False Positive |
80,000 | 7/33 | 2/33 |
90,000 | 5/33 | 3/33 |
100,000 | 4/33 | 5/33 |
110,000 | 4/33 | 7/33 |
120,000 | 4/33 | 8/33 |
I tried 80000, 90000, 100000, 110000 and 120000 and 90000 worked best. To find this threshold, I started out with 80000(which is a number used in a sample command in Readme.txt) and incremented the number by 10000 while calculating the number of false negatives. It decreased as the threshold increases; however, at some point the number of false negative does not change much. And starting from this threshold that did not make a big difference in false negaitve rate, I did verifyface against a picture that is not of a user to find false positive. By decrementing the threshold by 10000, I could see the false positive rate decreases but then again stablizes. After collecting data, I summed the number of false positive and false negative for each threshold and found 90000 resulted in the fewest error.
Q2: Using the best MSE threshold, what was the false negative rate? What was the false positive rate?Using 90000, the false negative rate is 5/33(0.1515), and the false positive rate is 3/33(0.0909).