I want to implement an on-the-fly training process for face detection. I'm not sure but it seems it's called online boosting.

Вefore, I have used OpenCV face detection with my own cascades, but I'm interested in technique which can "learn in process".

For example, If I train a boost classifer with 1000 marked images and then I look at the results on my test set, if I'm satisfied, the algorithm will finish. Otherwise, I will add 100 images more but then not retrain all 1100 images, just add 100 images to existing cascade, is it possible? It's also usefull for training in which can participate many people or computers.

What if I have big in-class difference, for example, frontal faces and rotated faces. Do I need to train 2 separate classifiers?


1 Answer 1


If you are asking about online learning using OpenCV's Cascade Classifier, I'm pretty sure it is not possible. The reason is that Cascade Classifier consists of number of simpler classifiers which are decision trees in case of OpenCV's face detection system. I don't know exactly, what decision tree algorithm is used, but as far as I know there are no algorithms supporting online learning (such an algorithm would incorporate tree restructuring which is quite inefficient). So, if the base "bricks" do not support online learning, the whole "building" will not support it either.

On other hand, if you ask whether it is possible in general, then the answer is "yes". All you need is to find algorithm that supports online learning (such as artificial neural networks) and adapt the whole face recognition system to support it. You may still use cascade structure and haar-like (or even newer local binary pattern) features, but base classifiers should be replaced.

However, in practise I would say "don't do it". Or at least search for simpler options. It is quite a lot of work, both - research and development.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.