0
votes

I have a confusion regarding Support Vector Machine (SVM).

I am implementing facial expression recognition using SVM in OpenCV libraries. I have a classifier trained from a collection of seven basic human expressions (neutral, happy, sad, surprise, anger, fear, and disgust) from various people. Let us just say a new person comes in and SVM tries to predict this person. Would it guess correctly (or at least recognize it with lower recognition rate)?

I tried to do this and check using cross-validation (where I separate training and test set), and after many iteration the recognition rate averages around 50%. However, if I test on facial images it already learns in training set, the recognition rate boosts up to 90%.

This paper which also does facial expression recognition says:

We base our method on the machine learning system of Support Vector Machines (SVMs). A face feature tracker gathers a set of displacements from feature motion in the video stream. These are subsequently used to train an SVM classifier to recognize previously unseen expressions

So my main question is,

Does this mean SVM cannot predict an unseen sample (a new person mimicking one of the expresions mentioned above) correctly ?

Hope someone can help and I hope I am clear enough

P.S what I mean by unseen expression is that a new person (that the SVM hasn't seen before) but the person mimicks one of the expression I mentioned above. not other expressions.

3
what you want is generalization. quality of generalization depends on the samples and features you've chosen for training. Normally you use only x % of your training samples for training and use the rest for testing the generalization. Testing for your (used for training) training set doesnt make much sense. So in general you split the training set randomly and train. if generalization isnt good enough, reset and choose different randomly chosen samples for training. If you dont get good results, acquire more samples or choose different features. - Micka

3 Answers

0
votes

"previously unseen expressions" simply means unseen sample, the model can be svm, decision tree or other classification model.

I think the reason why the precision is decrease in unseen facial images is related to the feature you choose, which might be highly related to to the specific person. feature selection method can help, L1 regulization in model(L1-SVM) might help.

0
votes

Of course an SVM can predict unseen expressions correctly -- this is what is actually meant by "generalization". It can't however, predict other human expressions than the one you collected in the training set (which is not an issue here).

And, naturally, predicting unseen faces is harder than predicting data with which the model has been trained. So, no worry, just use your machine as you already did. If you want to decrease the generalization error, on the other hand, you can try using other features.

0
votes

I#m not sure how to understand your question...

First you seem to have a problem in generalization for recognizing your known expressions, which are (neutral, happy, sad, surprise, anger, fear, and disgust).

Normally the aim of using a machine learning would be to classify a new face image to one of those expressions. the learned generalization would be to identify those expression on unknown faces (or just new/unknown images of known faces).

But you ask to classify to new expressions, for example confused, which wasnt topic in the whole learning process and isnt related to the known expressions (e.g. if confused would be a mixture of surprise and anger)? Afaik that's not possible. What you could do would be to have one class unknown expression. Whenever you recognize unknown expression you would save those information. From all those collected samples of unknown expression you could manually or automatically try to separate new expression clusters!