Вы видите распознавание лиц везде, от камеры видеонаблюдения на крыльце вашего дома до сенсора на вашем iPhone X. Но как именно распознавание лиц работает для классификации лиц, учитывая большое количество функций как ввод и поразительное сходство между людьми?

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

Подробное описание классификаторов Хаара можно увидеть в статье Пола Виолы и Майкла Джонса Быстрое обнаружение объектов с использованием усиленного каскада простых функций, ссылка на которую находится здесь. Обратите внимание, что статья посвящена математике и предполагает знание терминологии машинного обучения. Если вам нужен обобщенный общий обзор, обязательно продолжайте читать!

Создание каскадного классификатора Хаара

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

Алгоритм можно разделить на четыре этапа:

  • Расчет характеристик Хаара
  • Создание целостных образов
  • Использование Adaboost
  • Реализация каскадных классификаторов

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

Расчет характеристик Хаара

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

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

Создание целостных образов

Не вдаваясь в математику, стоящую за этим (посмотрите статью, если вам это интересно), интегральные изображения существенно ускоряют вычисление этих характеристик Хаара. Вместо вычисления каждого пикселя он создает подпрямоугольники и ссылки на массивы для каждого из этих подпрямоугольников. Затем они используются для вычисления характеристик Хаара.

Важно отметить, что почти все функции Хаара будут нерелевантными при обнаружении объекта, потому что важны только функции самого объекта. Однако как определить лучшие характеристики, представляющие объект, из сотен тысяч функций Хаара? Здесь в игру вступает Adaboost.

Adaboost Обучение

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

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

Последний шаг объединяет этих слабых учеников в сильных с помощью каскадных классификаторов.

Реализация каскадных классификаторов

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

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

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

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

Каскады Хаара в коде

Реализовать это в код на удивление легко с помощью функции OpenCV CascadeClassifier.

import numpy as np
import cv2
f_cascade = cv2.CascadeClassifier("face.xml")
e_cascade = cv2.CascadeClassifier("eye.xml")
image = cv2.imread("actor.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = f_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = e_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow('img',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

Другой тип подхода с использованием функции OpenCV detectMultiScale можно увидеть в статье GeeksForGeeks здесь. Чтобы узнать об обнаружении лиц в режиме реального времени, ознакомьтесь с этой статьей для кода на Java, C ++ и Python.

Применение каскадов Хаара

Применение этой технологии огромно в самых разных областях. Некоторые из наиболее важных приложений перечислены ниже:

  • Распознавание лиц. Подобно тому, как iPhone X использует распознавание лиц, другие электронные устройства и протоколы безопасности могут использовать каскады Хаара для определения допустимости пользователя для безопасного входа в систему.
  • Робототехника. Роботизированные машины могут «видеть» свое окружение для выполнения задач с помощью распознавания объектов. Например, это можно использовать для автоматизации производственных задач.
  • Автономные транспортные средства. Автономным транспортным средствам необходимо знать свое окружение, и каскады Хаара могут помочь идентифицировать объекты, такие как пешеходы, светофоры и тротуары, чтобы принимать более обоснованные решения и повышать безопасность.
  • Поиск изображений и распознавание объектов. Помимо распознавания лиц, можно искать любые объекты с помощью алгоритма компьютерного зрения, такого как каскады Хаара.
  • Сельское хозяйство. Классификаторы Хаара можно использовать для определения того, летают ли вредные насекомые на растения, что снижает нехватку продуктов питания, вызванную вредителями.
  • Промышленное использование: классификаторы Хаара могут использоваться, чтобы позволить машинам обнаруживать и распознавать определенные объекты, автоматизируя многие задачи, которые раньше могли выполнять только люди.

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

TL;DR

  • Каскады Хаара - это алгоритмы обнаружения объектов машинного обучения.
  • Они используют функции Хаара для определения вероятности того, что определенная точка является частью объекта.
  • Алгоритмы повышения используются для получения сильного прогноза на основе комбинации «слабых» учащихся.
  • Каскадные классификаторы используются для запуска алгоритмов повышения на разных частях входного изображения.
  • Убедитесь, что для каскадов Хаара проведена оптимизация против ложноотрицательных результатов.
  • Используйте OpenCV для самостоятельной реализации каскадной модели Хаара.

Дальнейшее чтение

Если вы хотите больше поговорить о каскадах Хаара или о чем-то еще, назначьте встречу: Календарно! Для получения информации о проектах, над которыми я сейчас работаю, подпишитесь на мою рассылку новостей! Вот ссылка подписаться. Если вы заинтересованы в подключении, подписывайтесь на меня в Linkedin, Github и Medium.