Каскады 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, она приняла только некоторые часы.