На лице написано: как работает компьютерное распознавание лиц

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

Алгоритмы (технологии)

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


1. Найти

Попытки научить компьютер находить лицо на фотографиях проводились еще с начала 1970-х годов. Было испробовано множество подходов, но важнейший прорыв произошел существенно позднее – с созданием в 2001 году Полом Виолой и Майклом Джонсом метода каскадного бустинга, то есть цепочки слабых классификаторов. Хотя сейчас есть и более хитрые алгоритмы, можно поспорить, что и в вашем сотовом телефоне, и в фотоаппарате работает именно старый добрый Виола – Джонс. Все дело в замечательной быстроте и надежности: даже в далеком 2001 году средний компьютер с помощью этого метода мог обрабатывать по 15 снимков в секунду. Сегодня эффективность алгоритма удовлетворяет всем разумным требованиям. Главное, что нужно знать об этом методе, – он устроен удивительно просто. Вы даже не поверите насколько.

  1. Шаг 1. Убираем цвет и превращаем изображение в матрицу яркости.
  2. Шаг 2. Накладываем на нее одну из квадратных масок – они называются признаками Хаара. Проходимся с ней по всему изображению, меняя положение и размер.
  3. Шаг 3. Складываем цифровые значения яркости из тех ячеек матрицы, которые попали под белую часть маски, и вычитаем из них те значения, что попали под черную часть. Если хотя бы в одном из случаев разность белых и черных областей оказалась выше определенного порога, берем эту область изображения в дальнейшую работу. Если нет – забываем про нее, здесь лица нет.
  4. Шаг 4. Повторяем с шага 2 уже с новой маской – но только в той области изображения, которая прошла первое испытание.

Почему это работает? Посмотрите на признак [1]. Почти на всех фотографиях область глаз всегда немного темнее области непосредственно ниже. Посмотрите на признак [2]: светлая область посередине соответствует переносице, расположенной между темными глазами. На первый взгляд черно-белые маски совсем не похожи на лица, но при всей своей примитивности они имеют высокую обобщающую силу.

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

Как собрать каскад? Хотя каждый этап наложения маски дает очень большую ошибку (реальная точность ненамного превышает 50%), сила алгоритма – в каскадной организации процесса. Это позволяет быстро выкидывать из анализа области, где лица точно нет, и тратить усилия только на те области, которые могут дать результат. Такой принцип сборки слабых классификаторов в последовательности называется бустингом (подробнее о нем можно прочитать в октябрьском номере «ПМ» или здесь). Общий принцип такой: даже большие ошибки, будучи перемножены друг на друга, станут невелики.

2. Упростить

Найти особенности лица, которые позволили бы идентифицировать его владельца, означает свести реальность к формуле. Речь идет об упрощении, причем весьма радикальном. Например, различных комбинаций пикселей даже на миниатюрном фото 64 × 64 пикселя может быть огромное количество – (28)64 × 64 = 232768 штук. При этом для того, чтобы пронумеровать каждого из 7,6 млрд людей на Земле, хватило бы всего 33 бита. Переходя от одной цифры к другой, нужно выкинуть весь посторонний шум, но сохранить важнейшие индивидуальные особенности. Специалисты по статистике, хорошо знакомые с такими задачами, разработали множество инструментов упрощения данных. Например, метод главных компонент, который и заложил основу идентификации лиц. Впрочем, в последнее время сверточные нейросети оставили старые методы далеко позади. Их строение довольно своеобразно, но, по сути, это тоже метод упрощения: его задача – свести конкретное изображение к набору особенностей. 

Шаг 1


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

Шаг 2.

Сдвигаем маску на фиксированный шаг, снова перемножаем и снова записываем среднее в карту признаков.

Шаг 3.

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

Шаг 4.

Уменьшаем размер наших карт: берем несколько соседних пикселей (например, квадрат 2×2 или 3×3) и переносим на следующий уровень только одно максимальное значение. То же самое проводим для карт, полученных со всеми другими масками.


COM_SPPAGEBUILDER_NO_ITEMS_FOUND