How to recognize an object from a small training set of images? Given a small training set of images (say, around 6 max) of the same object, how to measure how likely is another query image to contain the given object?

The training images are "clean", i.e. only the original object is present. On the other hand, the query images normally contain only an object of the same class (i.e. if the training images contain a mango, the query images will be definitely fruits, although maybe not mangoes). The query images have varied backgrounds, though.  

I tried SURF and FLANN (from OpenCV), with various values of Hessian, but it's not very accurate: it works for certain images but not for others. Maybe it's because of the nature of the objects I'm training to detect? Any pointers would be appreciated. Thanks!
Few reasons i could think of are:


Size of your training set is very small. Larger training sets have always been the key for accuracy.
Each algorithm will have some drawback like SURF is not good at viewpoint change and illumination change. So if the test images vary from the training images in case of illumination and viewpoint, results on those data will be poor.I don't know how FLANN works.