На лице написано
Взять кредит, оформить визу, да и просто запустить смартфон последней модели – сделать все это сегодня невозможно без участия алгоритмов распознавания лиц. Они помогают полицейским в расследованиях, музыкантам – на сцене, но понемногу превращаются во всевидящее око, следящее за всеми нашими действиями онлайн и офлайн.
Алгоритмы (технологии)
Определить человека по фото с точки зрения компьютера означает две очень разные задачи: во-первых, найти лицо на снимке (если оно там есть), во-вторых, вычленить из изображения те особенности, которые отличают этого человека от других людей из базы данных.
Найти
Попытки научить компьютер находить лицо на фотографиях проводились еще с начала 1970-х годов. Было испробовано множество подходов, но важнейший прорыв произошел существенно позднее – с созданием в 2001 году Полом Виолой и Майклом Джонсом метода каскадного бустинга, то есть цепочки слабых классификаторов. Хотя сейчас есть и более хитрые алгоритмы, можно поспорить, что и в вашем сотовом телефоне, и в фотоаппарате работает именно старый добрый Виола – Джонс. Все дело в замечательной быстроте и надежности: даже в далеком 2001 году средний компьютер с помощью этого метода мог обрабатывать по 15 снимков в секунду. Сегодня эффективность алгоритма удовлетворяет всем разумным требованиям. Главное, что нужно знать об этом методе, – он устроен удивительно просто. Вы даже не поверите насколько.
Почему это работает? Посмотрите на признак [1]. Почти на всех фотографиях область глаз всегда немного темнее области непосредственно ниже. Посмотрите на признак [2]: светлая область посередине соответствует переносице, расположенной между темными глазами. На первый взгляд черно-белые маски совсем не похожи на лица, но при всей своей примитивности они имеют высокую обобщающую силу.
Почему так быстро? В описанном алгоритме не отмечен один важный момент. Чтобы вычесть яркость одной части изображения из другой, понадобилось бы складывать яркость каждого пикселя, а их может быть много. Поэтому на самом деле перед наложением маски матрица переводится в интегральное представление: значения в матрице яркости заранее складываются таким образом, чтобы интегральную яркость прямоугольника можно было получить сложением всего четырех чисел.
Как собрать каскад? Хотя каждый этап наложения маски дает очень большую ошибку (реальная точность ненамного превышает 50%), сила алгоритма – в каскадной организации процесса. Это позволяет быстро выкидывать из анализа области, где лица точно нет, и тратить усилия только на те области, которые могут дать результат. Такой принцип сборки слабых классификаторов в последовательности называется бустингом (подробнее о нем можно прочитать в октябрьском номере «ПМ»). Общий принцип такой: даже большие ошибки, будучи перемножены друг на друга, станут невелики.
Упростить
Найти особенности лица, которые позволили бы идентифицировать его владельца, означает свести реальность к формуле. Речь идет об упрощении, причем весьма радикальном. Например, различных комбинаций пикселей даже на миниатюрном фото 64 × 64 пикселя может быть огромное количество – (28)64 × 64 = 232768 штук. При этом для того, чтобы пронумеровать каждого из 7,6 млрд людей на Земле, хватило бы всего 33 бита. Переходя от одной цифры к другой, нужно выкинуть весь посторонний шум, но сохранить важнейшие индивидуальные особенности. Специалисты по статистике, хорошо знакомые с такими задачами, разработали множество инструментов упрощения данных. Например, метод главных компонент, который и заложил основу идентификации лиц. Впрочем, в последнее время сверточные нейросети оставили старые методы далеко позади. Их строение довольно своеобразно, но, по сути, это тоже метод упрощения: его задача – свести конкретное изображение к набору особенностей.