Face recognition algorithms - image-processing

I am trying to work with MSRA-CFW dataset for face recognition. I have tried two algorithms for this dataset:
Eigenfaces and
FisherFaces
Eigenfaces, as expected, performed poorly (because of its sensitivity to variations in light and head orientation). However even FisherFaces did not give satisfactory results.
Which algorithm should I use for this dataset? Or maybe even for any other dataset. Would convolutional neural networks work in this setting ? Also LBP features are provided with this dataset. Would these be better than convolutional neural networks ?
Thanks

There is a recent face recognition library that I tested and which is based on a paper from Google. It has the best recognition rate from an open source ~92%)
https://cmusatyalab.github.io/openface/
Internally it uses convolutional neural networks model trained on 500K face.
The only problem is that it doesn't recognize an unknown person, and it sees it as the nearest face from the database.

Related

Is there any alternative to convolutional neural networks to classify Images?

Deep learning is famous for classifying images into different categories. However, I am interested to use any other machine learning model which is capable of classifying the images. The images are about 2000 and are in png format. Does anybody know any machine learning model which can be applied in python to classify images other than Deep learning models.
You can take a look to SVMs (scikit-learn). I can advise you to extract features from images first, with SIFT or SURF for example.
EDIT: SIFT and SURF are using the principle of convolution, but it exists plenty of other feature descriptors.

Facial recognition and classifying unknowns with neural networks

As far as I understand, neural networks aren't good at classifying 'unknowns', i.e. items that do not belong to a learned class. But how do face detection/recognition approaches usually determine that no face is detected/recognised in a region? Is the predicted probability somehow thresholded?
Summary
It is true that neural networks are inherently not good at classifying 'unknowns' because they tend to overfit to the data that they have been trained on, if the underlying structure of the neural network is complex enough. However, there are multiple ways to go about reducing the affects of overfitting. For example, one technique that is used for this is called dropout. Another example can be batch normalization. Despite these techniques, the best way to reduce the affects of overfitting is to use more data.
For the facial recognition example that you have given above, it is common that the models that have been trained have 'seen' a huge amount of data. This means that there are very few 'unknowns' and even if there are, the neural network has learned how to tell if there are facial features present or not. This is because certain structures of neural networks are really good at telling if there is a pattern of features present in the input data. This helps the neural networks to learn if the image that is being input has certain features/patterns in it or not. If the these features are found then the input data is classified as face otherwise it is not.

Is there most simple dataset for CNN training?

I'm searching for 2-class convolutional neural network problem published as paper using smallest-dataset.
Generally CNN requires millions of images to train ,but I found it successfully works with hundreds to thousands of 2-class images through augmentation. I need to prove it by citing other best practices.
The similar case I found is "Mitosis detection in breast cancer histology images with deep neural networks" it trained on 190 positive samples and other images on the background. and it had quite successful result.
Is there another successful 2-class problem CNN research with small dataset?

OpenCV Haar classifier - is it an SVM

I'm using an OpenCV Haar classifier in my work but I keep reading conflicting reports on whether the OpenCV Haar classifier is an SVM or not, can anyone clarify if it is using an SVM? Also if it is not using an SVM what advantages does the Haar method offer over an SVM approach?
SVM and Boosting (AdaBoost, GentleBoost, etc) are feature classification strategies/algorithms. Support Vector Machines solve a complex optimization problem, often using kernel functions which allows us to separate samples by working in a much higher dimension feature space. On the other hand, boosting is a strategy based on combining lots of "cheap" classifiers in a smart way, which leads to a very fast classification. Those weak classifiers can be even SVM.
Haar-like features are a kind of features based in integral images and very suitable for Computer Vision problems.
This is, you can combine Haar features with any of the two classification schemes.
It isn't SVM. Here is the documentation:
http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html#haar-feature-based-cascade-classifier-for-object-detection
It uses boosting (supporting AdaBoost and a variety of other similar methods -- all based on boosting).
The important difference is related to speed of evaluation is important in cascade classifiers and their stage based boosting algorithms allow very fast evaluation and high accuracy (in particular support training with many negatives), at a better balance point than an SVM for this particular application.

How does HOG feature descriptor training work?

There doesn't seem to be any implementations of HOG training in openCV and little sources about how HOG training works. From what I gathered, HOG training can be done in real time. But what are the requirements of training? How does the training process actually work?
As with most computer vision algorithms, Google Scholar is your friend :) I would suggest reading a few papers on how it works. Here is one of the most referenced papers on HoG for you to start with.
Another tip when researching in computer vision is to note the authors of the papers you find interesting, and try to find their websites. They will tend to have an implementation of their algorithms as well as rules of thumb on how to use them. Also, look up the references that are sited in the paper about your algorithm. This can be very helpful in aquiring the background knowledge to truly understand how the algorithm works and why.
Your terminology is a bit mixed up. HOG is a feature descriptor. You can train a classifier using HOG, which can in turn be used for object detection. OpenCV includes a people detector that uses HOG features and an SVM classifier. It also includes CascadeClassifier, which can use HOG, and which is typically used for face detection.
There is a program in OpenCV called opencv_traincascade, which lets you train a cascade object detector, an which gives you the option to use HOG. There is a function in the Computer Vision System Toolbox for MATLAB called trainCascadeObjectDetector, which does the same thing.

Resources