I want to use GMM for image classification. So, I have extracted SIFT features from each image in the corpus. Then, I apply EM algorithm to learn GMM parameters (I have coded it in matlab). I get very low Recognition rates for unseen images when I test the model on larger number of classes (>=4). Who can explain this result ? Thanks.
Are you trying to model the distribution of the SIFT descriptors using GMM? Are you using the actual 128-element descriptors? If so, then you are trying to model a distribution in a 128-dimensional space, which is not likely to work well.
You need to reduce the dimensionality. If you insist on using GMM, then the simplest thing to try is to use principal components analysis (PCA) to reduce the dimensionality of your descriptors. I would not use more than 10 dimensions. Here is a paper, that tried kernel density estimation on reduced SIFT descriptors among other things.
Alternatively, you could try other algorithms, such as Bag Of Features, or the Pyramid Match Kernel.
Professor Andrew Moore has worked actively on using Gaussian Mixture Models along with Expectation Maximization in order to find the GMM parameters. He could probably contacted at his email address.
The general problem with unsupervised learning is that it typically requires a very-very large data set. Otherwise it will start classifying images based on 'less important' features rather than the more important features.
In addition, reducing the number of features obtained via SIFT could probably make your model significantly better.This could be done via preprocessing the image and :
1) Cropping less important parts.
2) Smoothing the image.
3) Reducing the color range/binarizing the image.
However, care must be taken to do these things.
All in all, I find the results of unsupervised classification of images 'poor' and 'unreliable'.
Based on posted answers, I will try to add the following steps in the model process:
- a preprocessing-step on images in corpus before applying SIFT
- a postprocessing-step on images after applying SIFT such that PCA to reduce dimensions of features
Thanks again for your help