Метод Виолы-Джонса для распознавания лиц

искусственный интеллект алгоритм OpenCV модульный тест

Для этого типа применения распознавания лиц оно обычно делится на несколько этапов:

  1. Распознавание лиц. Область, в которой распознается лицо. и ряд исправлений.

  2. Выравнивание лица. Калибровка лица относится к поиску таких мест, как нос, глаза, рот и т. д. на изображении.
    Face Detect & align
    Как показано на рисунке, красный прямоугольник выполняет обнаружение, а белая точка выполняет калибровку.

  3. Распознавание информации. Анализируйте и идентифицируйте информацию, такую ​​как пол и возраст.

Каждый из этих трех вопросов, возможно, представляет собой очень широкую область исследований, над которой стоит проделать большую работу. В этой статье представлены лишь некоторые краткие сведения.

Распознавание лиц

Метод Виолы-Джонса

Традиционным алгоритмом распознавания лиц является алгоритм Виолы-Джонса. Функция распознавания лиц в OpenCV также использует этот алгоритм. Он состоит из трех основных этапов: функции, подобные Хаару, классификатор Adaboost и каскадный классификатор Cascade.

Хаар-подобные черты

Так называемая особенность Хаара на самом деле хорошо изучена. Хаар-подобные функции напоминают следующее изображение:

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

feature=sum(white)-sum(black)

Но таких черт в картине много. Согласно статье Виолы-Джонса, в изображении 24*24 будет целых 180 000 признаков, подобных Хаару (конкретный метод расчета будет обсуждаться позже). Итак, мы можем представить технику интегрального изображения. Интегральное изображение — это изображение того же размера, что и исходное изображение, за исключением того, что значение пикселя каждой точки представляет собой сумму всех значений пикселя ее верхнего левого угла. Как показано
Integral Image

На таком изображении мы записываем значение пикселя определенной точки как ii(x), затем, когда мы хотим вычислить сумму всех пикселей в области D, используем ii(4)-ii(2)-ii(3 )+ ii(1) достаточно. Это может значительно сократить время вычислений и повысить эффективность.

Адабуст метод

С функциями очень легко получить отличительную функцию. Это могут сделать обычные методы SVM и методы KNN. Но хотя сам расчет не сложен, особенностей Хаара все же слишком много. Особенно сейчас, когда разрешение картинок исчисляется тысячами. Очень важно выбрать из этих признаков подходящие. Практический результат разработки состоит в том, что мы можем объединить множество слабых классификаторов в один сильный классификатор. Это метод Adaboost. Математически это можно выразить так:

F(x) =Σαf(x)

где F — сильный классификатор, а f — слабый классификатор. x — вектор признаков, а α — вес. Adaboost — это способ сериализации, который должен пройти много шагов. Возьмите пример.
Adaboost example

На изображении выше каждая точка данных имеет метку класса, поэтому давайте установим красный цвет на 1, а зеленый на -1. Каждая точка данных также имеет вес wt. Все начальные веса равны 1.

Давайте посмотрим на это по желанию.

ada eg2

Кажется, совсем неправильно. Мы можем выбрать относительно хороший после нескольких переводов. Хотя выглядит как бардак.

ada eg3

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

ada eg4

В это время была обнаружена новая проблема Аналогично мы классифицируем точки данных под текущими весами.

ada eg5

После этого вес ошибочно разделенных точек увеличивается, и деление выполняется снова.

ada eg6

После нескольких повторений на основе нескольких линейных классификаторов (или слабых классификаторов) может быть построен нелинейный классификатор (сильный классификатор). Более того, этот классификатор также относительно хорошо справился с задачей классификации.
ada 6

Я также сделал гифку, чтобы показать эффект.
adaboost

Каскадный классификатор

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

Cascade Classifier

результат

В статье Виолы и Джонса для обнаружения фронтальных лиц построено в общей сложности 38 слоев классификаторов. Было использовано 4916 лиц, размеченных вручную и настроенных на разрешение 24*24. Результаты теста следующие:
results
results-2