Каскады Haar против каскадов LBP в обнаружении лица
я экспериментировал с обнаружением лиц в OpenCV (библиотека компьютерного зрения с открытым исходным кодом) и обнаружил, что можно использовать каскады Хаара для обнаружения лиц, поскольку некоторые из них снабжены OpenCV. Однако я заметил, что существует также несколько каскадов LBP. После проведения некоторых исследований я обнаружил, что LBP означает локальные двоичные шаблоны, и его также можно использовать для распознавания лиц, согласно OpenCV Документация Обнаружения Лица.
Что Я хотел бы знать, что работает лучше? Кто работает быстрее, а кто точнее? Кажется, что LBP работает быстрее, но я не на 100% уверен в этом. Спасибо.
5 ответов
LBP быстрее (в несколько раз быстрее), но менее точен. (На 10-20% меньше, чем Haar).
Если вы хотите обнаружить лица во встроенной системе, я думаю, что LBP-это выбор, потому что он выполняет все вычисления в целых числах. Хаар использует поплавки, что является убийцей для встроенных/мобильных устройств.
каскад LBP можно обучить выполнять аналогично (или лучше), чем каскад Haar, но из коробки каскад Haar примерно в 3 раза медленнее и в зависимости от ваших данных примерно на 1-2% лучше точно определять местоположение лица. Это увеличение точности довольно значительно, учитывая, что распознавание лиц может работать в диапазоне точности 95%+.
Ниже приведены некоторые результаты при использовании MUCT dataset.
правильное обнаружение замечено когда существует по крайней мере 50% перекрытие между наземной правдой и обнаруженными координатами OpenCV.
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
мое личное мнение заключается в том, что вы должны изучить LBP для всех задач, связанных с обнаружением, просто потому, что обучение LBP может занять минуты, а обучение HAAR может занять дни для одного и того же набора данных и параметров обучения.
заданный вами вопрос будет иметь различную производительность в зависимости от типа обнаруживаемой вещи, настроек обучения и параметров, используемых при обнаружении, а также критериев тестирования каскадов.
точность каскады HAAR и LBP зависят от наборов данных (положительных и отрицательных выборок), используемых для их обучения, и параметров, используемых во время обучения.
по данным Lienhart et al, 2002, в случае обнаружения лица:
- код
-numStages
,-maxDepth
и-maxWeakCount
параметры должны быть достаточно высокими для достижения желаемого-minHitRate
и-maxFalseAlarmRate
. - обучение на основе дерева является более точным, чем пень на основе,
- нежный adaboost предпочтительнее дискретного и реального adaboost,
- минимальный размер учебной выборки имеет значение, но систематическое исследование об этом еще предстоит сделать.
кроме того, флаги, используемые в detectMultiScale (), дают резкое изменение скорости, а также точности в данной конфигурации оборудования.
для тестирования каскада вы должны поселиться на наборе данных и такой метод, как k-fold крест проверка.
может быть, это будет полезно для вас:
есть Библиотека Simd, имеющего реализация классификаторов каскада HAAR и LBP. Он может использовать стандартный Хаара и ЛБП casscades с использованием OpenCV. Эта реализация имеет оптимизацию SIMD с использованием SSE4.1, AVX2, AVX-512 и NEON (ARM), поэтому он работает в 2-3 раза быстрее, чем оригинальная реализация OpenCV.
кроме того, на этапах обучения LBP быстрее, чем Haar. С образцом 2000 pos и образцом 300 neg, тренировка используя тип Haar, она приняла около 5-6 дней для того чтобы завершить, но с LBP, она приняла только некоторые часы.