Каскады Хаара против LBP-каскадов в распознавании лиц
Я экспериментировал с обнаружением лица в OpenCV (Open Source Computer Vision Library) и обнаружил, что можно использовать каскады Haar для обнаружения лиц, поскольку некоторые из них снабжены OpenCV. Однако я заметил, что есть также несколько каскадов LBP. Проведя некоторое исследование, я обнаружил, что LBP обозначает локальные двоичные рисунки, а также может использоваться для распознавания лиц в соответствии с OpenCV Face Detection Documentation.
Что я хотел бы знать, это работает лучше? Какой из них работает быстрее, а какой более точный? Кажется, что LBP работает быстрее, но я тоже не уверен на 100%. Спасибо.
Ответы
Ответ 1
LBP быстрее (в несколько раз быстрее), но менее точен. (На 10-20% меньше Хаара).
Если вы хотите обнаружить лица во встроенной системе, я думаю, что LBP - это выбор, потому что он выполняет все вычисления в целых числах. Haar использует поплавки, которые являются убийцами для встроенных/мобильных.
Ответ 2
Каскад LBP может обучаться так же (или лучше), чем каскад Хаара, но из коробки каскад Хаара примерно в 3 раза медленнее, и в зависимости от ваших данных, на 1-2% лучше при точном обнаружении расположение лица. Это увеличение точности весьма значимо, поскольку распознавание лица может работать в диапазоне точности 95% +.
Ниже приведены некоторые результаты при использовании набора MUCT.
Правильное обнаружение отмечается, когда имеется по меньшей мере 50% -ное перекрытие между обнаруженной землей и обнаруженными координатами OpenCV.
Cascade:haarcascade_frontalface_alt2.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3635 | 55 | 63 | 5 |
|---------------------------------------------------|
Time:4m2.060s
против
Cascade:lbpcascade_frontalface.xml
Datafile:muct.csv
|---------------------------------------------------|
| Hits | Misses | False Detects | Multi-hit |
| 3569 | 106 | 77 | 3 |
|---------------------------------------------------|
Time:1m12.511s
Ответ 3
Мое личное мнение заключается в том, что вы должны изучить LBP для всех задач, связанных с обнаружением, просто потому, что обучение LBP может занять несколько минут, в то время как обучение HAAR может занять несколько дней для одного и того же набора данных и параметров обучения.
Заданный вами вопрос будет иметь различную производительность в зависимости от типа обнаруженной вещи, настроек обучения и параметров, используемых во время обнаружения, а также критериев для проверки каскадов.
Точность как каскадов HAAR, так и LBP зависит от наборов данных (положительных и отрицательных выборок), используемых для их обучения и параметров, используемых во время обучения.
в соответствии с Lienhart et al, 2002, в случае обнаружения лица:
- параметры
-numStages
, -maxDepth
и -maxWeakCount
должны быть достаточно высокими для достижения желаемых -minHitRate
и -maxFalseAlarmRate
.
- Обучение на основе дерева более точное, чем основанный на пнях,
- мягкий абабуст предпочтительнее дискретного и реального adaboost,
- минимальный размер учебной выборки имеет значение, но систематическое исследование об этом еще предстоит сделать.
также флаги, используемые в detectMultiScale(), приводят к резкому изменению скорости, а также точности в заданной аппаратной конфигурации.
для проверки каскада вы должны установить на набор данных и такой метод, как k-fold перекрестная проверка.
Ответ 4
Может быть, это будет полезно для вас:
Существует Simd Library, которая имеет реализация каскадных классификаторов HAAR и LBP. Он может использовать стандартные каскады HAAR и LBP от OpenCV. Эта реализация имеет оптимизацию SIMD с использованием SSE4.1, AVX2, AVX-512 и NEON (ARM), поэтому она работает в 2-3 раза быстрее, чем оригинальная реализация OpenCV.
Ответ 5
Кроме того, на этапах обучения LBP быстрее, чем Haar. С образцом 2000 pos и 300 отрицательным образцом, с использованием типа Haar, потребовалось около 5-6 дней, но с LBP это заняло всего несколько часов.