Узнайте, как разработать систему идентификации лиц с использованием каскадного классификатора хаара.

Система идентификации лица - это технология, позволяющая идентифицировать лицо человека по цифровому изображению или видеокадру из видеоисточника.

См. 1-ю часть этого блога здесь для идентификации лиц с использованием библиотеки Dlib и обучения модели распознавания лиц.



Классификатор Хаара Каскад основан на методе Вейвлета Хаара для анализа пикселей изображения на квадраты по функциям. При этом используются концепции «целостного изображения» для вычисления обнаруженных «особенностей». Haar Cascades использует алгоритм обучения Ada-boost, который выбирает небольшое количество важных функций из большого набора, чтобы дать эффективный результат классификаторам, а затем использовать каскадные методы для обнаружения лица на изображении.

Каскадный классификатор Хаара основан на алгоритме обнаружения Виолы-Джонса, который обучается с учетом некоторых входных лиц и лиц, не являющихся лицами, и обучения классификатора, который идентифицирует лицо.

Алгоритм распознавания лиц альта

  1. Особенности Хаара:

Функции Хаара похожи на эти ядра свертки, которые используются для обнаружения присутствия этой функции в данном изображении.

Обнаружение ребер с использованием ядер свертки:

Учитывая входное изображение и ядро ​​свертки, мы помещаем ядро ​​в угол и выполняем умножение свертки, сдвигая ядра.

Этот метод используется для обнаружения разных типов ребер с использованием разных ядер.

Функция Хаара похожа на ядро в CNN, за исключением того, что в CNN значения ядра определяются путем обучения, а характеристика Хаара определяется вручную.

Вот некоторые особенности Хаара. Первые два - это «краевые элементы», используемые для обнаружения краев. Третий - это «линейный объект», а четвертый - «четырехугольник», который, скорее всего, используется для обнаружения наклонной линии.

Когда в образе девушки применены черты лица.

Каждая функция дает одно значение, которое вычисляется путем вычитания суммы пикселей под белым прямоугольником из суммы пикселей под черным прямоугольником.

Каждая деталь волос имеет какое-то сходство, позволяющее идентифицировать часть лица.

Виола-Джонс использует 24 * 24 в качестве базового размера окна и вычисляет вышеуказанные характеристики по всему изображению, сдвигаясь на 1 пиксель.

Если мы рассмотрим все возможные параметры характеристик волос, такие как положение, масштаб и тип, мы в конечном итоге вычислим около 160000+ функций. Поэтому нам нужно оценить огромный набор функций для каждых 24 * 24 PX.

Поэтому, чтобы избежать этого, у нас есть идея избегать избыточных функций и выбирать только те функции, которые нам очень полезны. Это можно сделать с помощью AdaBoost.

AdaBoost:

Как указывалось ранее, в детекторе может быть около 160000 + значений характеристик при базовом разрешении 24 * 24, которые необходимо вычислить. Но следует понимать, что только несколько наборов функций будут полезны среди всех этих функций для идентификации лица. AdaBoost используется для удаления избыточных функций и выбора только соответствующих функций.

Например, функция обнаружения вертикального края полезна при обнаружении носа, но не имеет значения при обнаружении губ.

AdaBoost используется для получения лучших функций из всех этих 160000+ функций. Эти функции также называются слабыми классификаторами. После того, как эти функции найдены, взвешенная комбинация всех этих функций используется при оценке и принятии решения о том, имеет ли данное окно лицо или нет. Каждая из выбранных функций (слабых классификаторов) считается допустимой для включения, если они, по крайней мере, могут работать лучше, чем случайное угадывание (обнаруживает более половины случаев). Каждый из слабых классификаторов соответствует определению части лица. Результат слабого классификатора является двоичным, если он идентифицировал часть лица или нет.

Adaboost создает сильный классификатор как линейную комбинацию этих слабых классификаторов.

Сильный классификатор = линейная сумма слабых классификаторов

F( x ) = ∑ ( αᵢ * fᵢ( x ) )

здесь αᵢ - соответствующие веса каждому слабому классификатору fᵢ (x)

Каскадирование:

Для каждого окна 24 * 24 нам нужно вычислить 2500 релевантных функций, которые AdaBoost выбирает из 160 000 функций. Учитывая входное изображение, нам нужно переместить наше окно 24 * 24 по всему изображению и вычислить 2500 функций для каждого окна, взять линейную комбинацию всех выходных данных и посмотреть, превышает ли она определенный порог или нет.

  • Основной принцип алгоритма распознавания лиц Виолы-Джонса - многократно сканировать детектором одно и то же изображение - каждый раз с новым размером.
  • Даже если изображение должно содержать одно или несколько лиц, очевидно, что слишком большое количество оцененных подокон все равно будет негативным (не-лицом).
  • Таким образом, алгоритм должен сосредоточиться на быстром отбрасывании лиц, не являющихся лицами, и тратить больше времени на вероятные области лица.
  • Следовательно, единый строгий классификатор, сформированный из линейной комбинации всех лучших характеристик, не годится для оценки в каждом окне из-за затрат на вычисления.

Вместо того, чтобы рассчитывать 2500 функций для каждого окна, мы используем идею каскадов. Мы делаем выборку из 2500 функций в x различных каскадов. Теперь мы можем линейно определить, есть ли лицо в разных каскадах. Если cascadeᵢ находит лицо на изображении, то изображение передается в следующий каскад. Если лицо не найдено, это каскад, мы можем перейти к следующему окну. Это снижает временную сложность.

Работа каждого этапа используется для определения того, является ли данное подокно определенно лицом или может быть лицом. Данное подокно немедленно отбрасывается как не лицо, если оно выходит из строя на каком-либо этапе.

Алгоритм распознавания лиц Виолы-Джонса обучен, и веса сохраняются на диске. Все, что мы делаем, это берем особенности из файла и применяем их к нашему изображению, если лицо присутствует на изображении, мы получаем местоположение лица.

Вы можете найти реализацию распознавания лиц в файле OpenCV haarcascade_frontalface_default.xml здесь.

Код:

После идентификации лица или нескольких лиц на изображении мы можем реализовать систему распознавания лиц с глубоким обучением, которая может классифицировать данное лицо по распознаванию лица.

Используйте модель открытого лица с предварительно обученными весами, чтобы предсказать 128-мерное вложение лица, которое в дальнейшем можно использовать для обучения задаче классификации или поиска сходства двух лиц с использованием евклидова расстояния.

Для распознавания лиц с использованием открытого лица каскадные классификаторы не дают сравнительно большей точности, чем использование библиотеки dlib. См. Реализацию открытого лица и распознавания лиц в других разделах этого блога здесь.



Спасибо за чтение

Пожалуйста, дайте 👏🏻 хлопки, если вам нравится блог