J'ai expérimenté la détection de visages dans OpenCV (Open Source Computer Vision Library) et j'ai découvert que l'on pouvait utiliser des cascades Haar pour détecter des visages car plusieurs d'entre eux sont fournis avec OpenCV. Cependant, j'ai remarqué qu'il existe également plusieurs cascades LBP. Après avoir fait quelques recherches, j'ai trouvé que LBP signifie Local Binary Patterns, et il peut également être utilisé pour la détection de visage, selon la OpenCV Face Detection Documentation .
Ce que je voudrais savoir, c'est qui fonctionne mieux? Lequel est plus rapide et le plus précis? Il semble que LBP fonctionne plus rapidement, mais je n'en suis pas sûr à 100% non plus. Merci.
LBP est plus rapide (quelques fois plus rapide) mais moins précis. (10-20% de moins que Haar).
Si vous voulez détecter des visages sur un système embarqué, je pense que LBP est le choix, car il fait tous les calculs en nombres entiers. Haar utilise des flotteurs, ce qui tue les systèmes embarqués/mobiles.
Une cascade LBP peut être formée pour fonctionner de manière similaire (ou meilleure) que la cascade Haar, mais hors de la boîte, la cascade Haar est environ 3 fois plus lente, et selon vos données, environ 1-2% mieux pour détecter avec précision l'emplacement de un visage. Cette augmentation de précision est assez importante étant donné que la détection de visage peut fonctionner dans la plage de précision de 95% +.
Voici quelques résultats lors de l'utilisation de l'ensemble de données MUCT .
Une détection correcte est notée lorsqu'il y a au moins un chevauchement de 50% entre les coordonnées de vérité du sol et OpenCV détectées.
Cascade:haarcascade_frontalface_alt2.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3635 | 55 | 63 | 5 |
|---------------------------------------------------|
Time:4m2.060s
contre:
Cascade:lbpcascade_frontalface.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3569 | 106 | 77 | 3 |
|---------------------------------------------------|
Time:1m12.511s
Mon opinion personnelle est que vous devriez examiner LBP pour toutes les tâches liées à la détection simplement parce que la formation LBP peut prendre quelques minutes tandis que la formation HAAR peut prendre des jours pour le même ensemble de données de formation et les mêmes paramètres.
La question que vous avez posée aura des performances différentes selon le type de chose détectée, les paramètres d'entraînement et les paramètres utilisés lors de la détection ainsi que les critères de test des cascades.
La précision des cascades HAAR et LBP dépend des ensembles de données (échantillons positifs et négatifs) utilisés pour leur formation et des paramètres utilisés pendant la formation.
selon Lienhart et al, 2002 , dans le cas de la détection des visages:
-numStages
, -maxDepth
et -maxWeakCount
les paramètres doivent être suffisamment élevés pour atteindre -minHitRate
et -maxFalseAlarmRate
.en outre, les indicateurs utilisés dans detectMultiScale () entraînent un changement drastique de vitesse et de précision sur une configuration matérielle donnée.
pour tester la cascade, vous devez vous contenter d'un ensemble de données et d'une méthode telle que k-fold validation croisée .
Peut-être que cela vous sera utile:
Il y a un Simd Library , qui a un implémentation des classificateurs en cascade HAAR et LBP. Il peut utiliser les casscades HAAR et LBP standard d'OpenCV. Cette implémentation a des optimisations SIMD avec l'utilisation de SSE4.1, AVX2, AVX-512 et NEON (ARM), donc elle fonctionne 2 à 3 fois plus rapidement que l'implémentation OpenCV originale.
En outre, dans les étapes de formation, LBP est plus rapide que Haar. Avec un échantillon de 2000 pos et un échantillon de 300 négatifs, une formation utilisant le type Haar, il a fallu environ 5-6 jours pour terminer, mais avec LBP, cela n'a pris que quelques heures.