Открыть сервис

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

Метод Виолы — Джонса — это алгоритм машинного обучения, предназначенный для обнаружения объектов на цифровых изображениях в реальном времени. Разработанный в 2001 году Полом Виолой и Майклом Джонсом, метод стал первым практическим решением для высокоскоростного распознавания лиц, обеспечивающим скорость обработки, достаточную для работы на вычислительных мощностях того времени. Алгоритм базируется на комбинации трёх ключевых идей: интегральное представление изображения, признаки Хаара и каскадная структура классификаторов, обученных с помощью алгоритма AdaBoost.

История

До появления метода Виолы — Джонса задача распознавания лиц на изображениях решалась преимущественно методами, основанными на корреляции шаблонов, нейронных сетях или анализе главных компонент (метод собственных лиц). Эти подходы, хотя и демонстрировали приемлемую точность, были крайне ресурсоёмки и не могли работать в реальном времени на стандартных процессорах. В 2001 году Пол Виола и Майкл Джонс, работавшие в компании Mitsubishi Electric Research Laboratories (MERL), опубликовали статью «Rapid Object Detection using a Boosted Cascade of Simple Features», в которой представили принципиально новый алгоритм. Основной целью авторов было создание системы, способной обрабатывать видеопоток с частотой не менее 15 кадров в секунду при минимальном уровне ложных срабатываний. Алгоритм был впервые публично продемонстрирован на конференции IEEE Conference on Computer Vision and Pattern Recognition (CVPR) в 2001 году.

Основные компоненты

Метод Виолы — Джонса объединяет три ключевых технологических решения, каждое из которых по отдельности не является новым, но их комбинация обеспечила прорыв в производительности.

Интегральное представление изображения

Для быстрого вычисления признаков, описывающих прямоугольные области изображения, используется интегральное представление. Интегральное изображение — это матрица того же размера, что и исходное изображение, в которой каждый элемент в точке (x, y) равен сумме яркостей всех пикселей, расположенных левее и выше данной точки, включая её саму. Формально:

\[ I(x, y) = \sum_{i=0}^{x} \sum_{j=0}^{y} S(i, j) \]

где \(S(i, j)\) — яркость пикселя исходного изображения. Благодаря этому представлению сумма яркостей пикселей в любом прямоугольнике может быть вычислена за константное время (всего за четыре операции обращения к массиву), независимо от размера прямоугольника. Это критически важно для скорости, так как алгоритм проверяет тысячи прямоугольных признаков на каждом этапе.

Признаки Хаара

В качестве базовых дескрипторов изображения используются признаки Хаара (Haar-like features), названные в честь вейвлетов Хаара. Эти признаки представляют собой шаблоны, состоящие из двух или трёх прямоугольных областей (чёрных и белых), наложенных на изображение. Значение признака вычисляется как разность сумм яркостей пикселей в белой и чёрной областях. Виола и Джонс использовали три типа признаков:

Для окна обнаружения размером 24×24 пикселя полный набор признаков Хаара насчитывает около 180 000 вариантов (с учётом масштаба и положения). Большинство из них неинформативны, поэтому для отбора наиболее значимых используется алгоритм AdaBoost.

Каскадная структура классификаторов

Ключевая идея для достижения высокой скорости — каскад классификаторов. Вместо того чтобы применять все признаки к каждому окну изображения, алгоритм использует цепочку (каскад) последовательных этапов (стадий). Каждый этап представляет собой слабый классификатор, обученный на небольшом подмножестве наиболее информативных признаков. Окно, прошедшее все этапы каскада, считается содержащим искомый объект (например, лицо). Если на любом этапе окно не проходит проверку (классифицируется как «не объект»), оно немедленно отбрасывается, и дальнейшая обработка не производится.

Ранние этапы каскада состоят из очень простых классификаторов (например, всего из 2–3 признаков) и отбрасывают большинство фоновых окон. Более поздние этапы, требующие больше вычислительных ресурсов, обрабатывают лишь малую долю окон, потенциально содержащих объект. Типичный каскад для распознавания лиц содержит от 10 до 40 этапов. При этом около 80–90% всех окон отбрасываются уже на первых двух-трёх этапах.

Обучение

Обучение детектора по методу Виолы — Джонса является контролируемым процессом и требует размеченного набора данных. Для обучения классификатора распознаванию лиц используется алгоритм AdaBoost (Adaptive Boosting). AdaBoost последовательно строит композицию из слабых классификаторов (в данном случае — пороговых решающих деревьев глубины 1, называемых «пнями»), каждый из которых обучен на одном признаке Хаара. На каждом шаге алгоритм увеличивает вес ошибочно классифицированных примеров, заставляя следующий классификатор фокусироваться на сложных случаях. В результате формируется сильный классификатор, состоящий из нескольких сотен или тысяч слабых классификаторов, но для каждого этапа каскада отбирается лишь небольшое их количество (обычно 10–20).

Процесс обучения каскада итеративен:

  1. Начальный этап обучается на полном наборе данных, настраивая порог так, чтобы пропустить почти все положительные примеры (лица) при допустимом уровне ложных срабатываний.
  2. Все окна, прошедшие первый этап (включая ложные срабатывания), передаются на второй этап.
  3. Второй этап обучается на этих данных, снова настраиваясь на высокую полноту.
  4. Процесс повторяется, пока не будет достигнута заданная точность или не исчерпаются признаки.

Применение

Метод Виолы — Джонса получил широкое распространение в системах компьютерного зрения, где требуется быстрое обнаружение объектов. Основные области применения:

В России метод активно использовался в системах распознавания лиц для контроля доступа и в программном обеспечении для фото- и видеокамер. До появления более точных нейросетевых методов (в частности, свёрточных нейронных сетей) алгоритм Виолы — Джонса был стандартом де-факто для задач обнаружения лиц.

Ограничения

Несмотря на высокую скорость, метод Виолы — Джонса имеет ряд существенных недостатков:

Влияние и наследие

Метод Виолы — Джонса стал важной вехой в истории компьютерного зрения. Он впервые продемонстрировал возможность практического обнаружения лиц в реальном времени на стандартном оборудовании. Алгоритм был реализован в библиотеке OpenCV (начиная с версии 1.0) и до середины 2010-х годов оставался основным инструментом для распознавания лиц. Несмотря на вытеснение нейросетевыми методами, он продолжает использоваться в приложениях с ограниченными вычислительными ресурсами (например, во встраиваемых системах, на микроконтроллерах) и в образовательных целях для изучения основ машинного зрения. Идея каскадной структуры классификаторов, впервые предложенная в этом методе, оказала влияние на разработку многих последующих алгоритмов обнаружения объектов.

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →