Pull to refresh

Распознавание пола в изображениях и видео

Reading time 8 min
Views 51K
В данной статье представлен алгоритм распознавания пола, обладающий точностью 93.1% [1]. Статья не требует каких-либо предварительных знаний в области обработки изображений или машинного обучения. После прочтения статьи читатель будет в состоянии выполнить рассмотренный алгоритм самостоятельно.



Введение


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

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

Перейдем к задаче определения пола по изображению лица. Каждое изображение лица мы хотим отнести либо к классу мужчин, либо к классу женщин. Нужен некий механизм, который будет решать, к какому классу отнести фотографию. В такой постановке проблема выглядит как типичная задача машинного обучения: есть набор маркированных примеров двух классов: М и Ж. «Маркированных» значит, что каждой фотографии поставлен в соответствие пол изображенного на ней человека. Таким образом, нам нужен некоторый классификатор.

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

Другим подходом является использование некоторых отношений пикселей. Разработано огромное количество таких отношений или характеристик (features). Исследование применимости конкретного типа характеристик является ключевым этапом многих задач компьютерного зрения.

Характеристики


Для решения задачи распознавания пола, авторами статьи Boosting Sex Identification Performance[1], предлагается использовать рассмотренный ниже набор простых характеристик (simple features).

Для простоты пронумеруем все пиксели в изображении: – означает яркость пикселя с порядковым номером . Рассмотрим следующий набор характеристик ():


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

  1. — false (0)
  2. — false (0)
  3. — false (0)
  4. — true (1)
  5. — true (1)

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

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

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

Данная задача эффективно решается с помощью алгоритма AdaBoost[2][3], целью которого является выбор небольшого набора ценных характеристик из очень большого начального массива.

Подготовка данных и обучение классификатора


Начнем с подготовки данных. Для обучения и тестирования мы будем использовать базу лиц FERET[4][5]. Она содержит различные фотографии 994 человек (591 мужчин, 403 женщины), причем, для каждого человека приводится несколько фотографий, сделанных в разных позах.



На каждой фотографии необходимо найти глаза, вырезать интересующую нас область и уменьшить ее до размера , так чтобы результат был аналогичен следующему шаблону:



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

В результате предварительной обработки имеем два набора картинок:



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

Таким образом, необходимо

  • Для каждой фотографии составить вектор двоичных характеристик (слабых классификаторов), содержащий элементов
  • «Упаковать» такие векторы всех фотографий в две матрицы: и
  • Составить соответствующие им векторы выходных данных, в которых элемент принимает значение 1, если фотография принадлежит мужчине, иначе 0

На рисунке ниже представлены матрицы входных и выходных данных. Такую пару необходимо составить как для обучающей выборки, так и для проверочной выборки.

Теперь попытаемся разобраться с алгоритмом обучения «на словах». Немногим ниже приведена формальная схема алгоритма AdaBoost.

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



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

А теперь формальная процедура обучения.

Обучающие примеры: , где — изображение, в случае женского пола, в случае мужского.

Инициализируем вектор весов :

  • , если i-я картинка женского пола
  • , если i-я картинка мужского пола

где и количество примеров женского и мужского пола соответственно.

Для (где T – количество характеристик, которое мы хотим выбрать)

  1. Нормализация весов, так чтобы .
  2. Для каждого слабого классификатора, , считаем ошибку классификации с учетом весов: . Для каждого примера ошибка принимает значение либо 0 в случае корректной классификации, либо в случае неверной. Так как , то .
  3. Выбираем классификатор с наименьшей ошибкой и смотрим, как он классифицирует данные.
  4. Обновляем весовые коэффициенты.

    Если пример классифицирован неверно (т.е. ),

    .

    Иначе

    ,

    где

    .

Результирующий классификатор представлен формулой:



Попытаемся оценить диапазон значений, которые может принимать . Мы уже отмечали, что принимает значения на отрезке . Теперь предположим, что для некоторого классификатора . Очевидно, что в этом случае . Однако будет ли выбран такой классификатор алгоритмом, описанным выше? Очевидно, что не будет, потому что в обучающей выборке всегда найдется такой классификатор , полученный с помощью операции отрицания , для которого и . Легко видеть, что если пример был классифицирован правильно, то его вес уменьшается умножением на , и таким образом, примеры, классифицированные неправильно (сложные примеры) получают больший вес.

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

Учитывая размеры входных матриц, выбор первых 1000 характеристик стандартным алгоритмом AdaBoost занимает около 10 часов (Intel Core i7). Стандартным, значит, пробегая по всем характеристикам. Существуют версии алгоритма, которые работают со случайными характеристиками из всего набора, однако их описание выходит за рамки данной статьи. Время обучения 10 часов является приемлемым результатом для данной задачи, так как это одноразовая операция.

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

Результаты


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



Рассмотрим зависимость точности классификации от количества использованных характеристик.

Отметим, что график получен с помощью данных из базы лиц FERET, которые AdaBoost «не видел» на этапе обучения. Максимальная точность в 93.1% достигается при использовании 911 характеристик. Авторы данного подхода сообщают точность 94.3%, что очень близко к полученному показателю. Разница в 1.2% может возникнуть из-за разного разбиения на обучающую и проверочную выборки. Также в данной статье для поиска глаз использовался собственный алгоритм, точность которого отличается от точности расстановки глаз человеком в базе FERET.

Однако что если классификатор обучился распознавать только ту базу, на которой он был обучен?! Похожий эффект возникает, когда ученик, готовясь к экзамену просто заучивает формулы, задачи, примеры, без понимания сути. Такой ученик способен решить только те задачи, которые он уже видел, и не способен распространить свои знания на новые проблемы. Данный эффект в машинном обучении называется overfitting (переобучение) и является серьезной проблемой в распознавании. Противоположный ему эффект носит название generalization (обобщение).

Для проверки способности обобщать воспользуемся еще одной базой лиц — Bosphorus Database [6][7]. Она состоит из фотографий 105 человек. База содержит до 35 различных выражений лица на каждого человека.

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

Тестовая выборка включает 1300 фотографий (727 М и 573 Ж). Максимальная точность в 91% достигается при 954 характеристиках. Отметим, что отметка в 90% достигается уже при 100 характеристиках.

Эти два графика, а также видео, которые присутствуют в статье, демонстрируют высокую точность работы данного подхода на данных, которые он «не видел» на этапе обучения. Именно поэтому он считается state-of-the-art алгоритмом для распознавания пола.

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



Ссылки


  1. S. Baluja, and H. Rowley, «Boosting Sex Identification Performance», International Journal of Computer Vision, v. 71 i. 1, January 2007
  2. Y. Freund and R. Shapire, «A decision-theoretic generalization of on-line learning and an application to boosting», Journal of Computer and System Sciences, 1996 pp. 119-139
  3. Y. Freund and R. Shapire, «A Short Introduction to Boosting», Journal of Japanese Society for Artificial Intelligence, 14(5):771-780, September, 1999
  4. P.J. Phillips, H. Moon, S.A. Rizvi and P.J. Rauss, «The FERET evaluation methodology for face recognition algorithms», IEEE Trans. Pattern Analysis and Machine Intelligence, Vol. 22, pp. 1090-1104, 2000
  5. http://www.itl.nist.gov/iad/humanid/feret/feret_master.html
  6. Bosphorus Database
  7. A. Savran, B. Sankur, M. T. Bilge, «Comparative Evaluation of 3D versus 2D Modality for Automatic Detection of Facial Action Units», Pattern Recognition, Vol. 45, Issue 2, p767-782, 2012.
Tags:
Hubs:
+90
Comments 68
Comments Comments 68

Articles