问题
I have been experimenting with face detection in OpenCV (Open Source Computer Vision Library), and found that one could use Haar cascades to detect faces as there are several of them provided with OpenCV. However, I have noticed that there are also several LBP cascades. After doing some research, I found that LBP stands for Local Binary Patterns, and it can also be used for face detection, according to the OpenCV Face Detection Documentation.
What I would like to know is, which works better? Which one performs faster, and which one is more accurate? It seems that LBP performs faster, but I'm not 100% sure about that either. Thanks.
回答1:
LBP is faster (a few times faster) but less accurate. (10-20% less than Haar).
If you want to detect faces on an embedded system, I think LBP is the choice, because it does all the calculations in integers. Haar uses floats, which is a killer for embedded/mobile.
回答2:
An LBP cascade can be trained to perform similarly (or better) than the Haar cascade, but out of the box, the Haar cascade is about 3x slower, and depending on your data, about 1-2% better at accurately detecting the location of a face. This increase in accuracy is quite significant given that face detection can operate in the 95%+ accuracy range.
Below are some results when using the MUCT dataset.
A correct detection is noted when there is at least a 50% overlap between the ground-truth and OpenCV detected coordinates.
Cascade:haarcascade_frontalface_alt2.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3635 | 55 | 63 | 5 |
|---------------------------------------------------|
Time:4m2.060s
vs:
Cascade:lbpcascade_frontalface.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3569 | 106 | 77 | 3 |
|---------------------------------------------------|
Time:1m12.511s
回答3:
My personal opinion is that you should look into LBP for all detection related tasks simply because LBP training can take minutes while HAAR training can take days for the same training data set and parameters.
The question you have asked will have a different performance depending on the type of thing being detected, the training settings and the parameters used during detection as well as the criteria for testing the cascades.
The accuracy of both HAAR and LBP cascades depend on the data sets (positive and negative samples) used for training them and the parameters used during training.
according to Lienhart et al, 2002, in the case of face detection:
- your
-numStages
,-maxDepth
and-maxWeakCount
parameters should be sufficiently high to achieve the desired-minHitRate
and-maxFalseAlarmRate
. - tree based training is more accurate than stump based,
- gentle adaboost is preferable to discrete and real adaboost,
- the min size of training sample matters but a systematic study about it has yet to be done.
also, flags used in detectMultiScale() yield a drastic change in speed as well as accuracy on a given hardware configuration.
for testing the cascade you should settle on a data set and a method such as k-fold cross validation.
回答4:
May be it will useful for you:
There is a Simd Library, which has an implementation of HAAR and LBP cascade classifiers. It can use standard HAAR and LBP casscades from OpenCV. This implementation has SIMD optimizations with using of SSE4.1, AVX2, AVX-512 and NEON(ARM), so it works in 2-3 times faster then original OpenCV implementation.
回答5:
Also, in training stages, LBP is faster than Haar. With 2000 pos sample and 300 neg sample, training using Haar type, it took about 5-6 days to complete, but with LBP, it took only some hours.
来源:https://stackoverflow.com/questions/8791178/haar-cascades-vs-lbp-cascades-in-face-detection