Как это сделано: поиск ваших портретов в музеях

Даже неудачная реализация неоригинальной идеи мгновенно получает тысячи анонсов в новостях, если это исходит от Google. Разберемся как работает новая функция мобильного приложения Google Arts & Culture, предназначенного для изучения экспонатов из музейных коллекций: поиск двойников пользователей на классических картинах. Программа способна сравнивать лица на загруженных в нее фотографиях с коллекцией полотен в своей базе и находить среди них наиболее похожие.

Для начала объясню свой критицизм. Почему идея неоригинальная? Поиск изображения по образцу известен давно. Когда люди догадались проиндексировать архив живописи точно неизвестно, но например сайт «Найди себя в искусстве» появился в интернете 19 января 2017 года. Вот результат его работы:

Ну что-же, совпадение пола и положения головы верно подмечены. С внешностью сложнее. Не лучше работает и приложение Google:

НИКФИ тоже экспериментировал в этом направлении (в 2016 году), однако вместо каталога живописных портретов мы собрали базу данных свыше 1000 знаменитостей России, и создали телеграм-бота @NIKFI_bot который подскажет, на кого из знаменитостей похоже ваше лицо:

Похож ли Леонардо Вильгельм Ди Каприо на Владимира Ильича Ульянова-Ленина, решать вам. Стоит добавить, что в начале 2016 года «Ленфильм» предложил Ди Каприо сыграть Ленина.
Похож ли Леонардо Вильгельм Ди Каприо на Владимира Ильича Ульянова-Ленина, решать вам. Стоит добавить, что в начале 2016 года «Ленфильм» предложил Ди Каприо сыграть Ленина.
Оказывается, черты человеческого лица далеко не уникальны, и не позволяют быть уверенным на 100% в однозначной идентификации. Хотя, наш НИКФИ-бот иногда творит чудеса и правильно определяет личность подозреваемого:

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

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

Длина вектора признаков может быть от 32 до 1-2 тысяч чисел. Тогда идея поиска по фотографии проста:

1. Обработаем каталог живописных портретов, и для каждого вычислим вектор признаков. Сохраним признаки в базе данных.

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

3. Найдем в базе данных векторы признаков живописных портретов, которые почти совпадают с вектором признаков селфи пользователя.

4. Это и будут результаты поиска похожих портретов.

Совпадение векторов измеряется известными в математике формулами, например Евклидово расстояние или косинусное расстояние между векторами вполне подойдут. Чтобы ускорить поиск нужно избавиться от полного перебора всей базы данных. Для этого применяются стандартные методы из систем управления базами данных, либо секретные алгоритмы индексации, например как у российской компании Ntech Lab.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *