Технологии и модели для нашей будущей системы компьютерного зрения создавались и совершенствовались постепенно и в разных проектах нашей компании — в Почте, Облаке, Поиске. Вызревали как хороший сыр или коньяк. Однажды мы поняли, что наши нейросети показывают отличные результаты в распознавании, и решили свести их в единый b2b-продукт — Vision, — которым мы теперь пользуемся сами и предлагаем воспользоваться вам.
Сегодня наша технология компьютерного зрения на платформе Mail.Ru Cloud Solutions успешно трудится и решает очень сложные практические задачи. В её основе лежит ряд нейронных сетей, которые обучены на наших дата-сетах и специализируются на решении прикладных задач. Все сервисы крутятся на наших серверных мощностях. Вы можете интегрировать в свои приложения публичный API Vision, через который доступны все возможности сервиса. API быстродействующий — благодаря серверным GPU среднее время отклика внутри нашей сети на уровне 100 мс.
Заходите под кат, там подробный рассказ и много примеров работы Vision.
В качестве примера сервиса, в котором мы сами используем упомянутые технологии распознавания лиц, можно привести Events. Одним из его компонентов являются фотостойки Vision, которые мы ставим на различных конференциях. Если вы подойдёте к такой фотостойке, сфотографируетесь на встроенную камеру и введёте свою почту, система сразу найдёт среди массива фотографий те из них, на которых вас запечатлели штатные фотографы конференции, и при желании найденные фотографии отправит вам на почту. Причём речь не о постановочных портретных снимках — Vision распознает вас даже на самом заднем плане в толпе посетителей. Конечно, распознают не сами фотостойки, это лишь планшеты в красивых подставках, которые просто фотографируют гостей на свои встроенные камеры и передают информацию на серверы, где и происходит вся магия распознавания. И мы не раз наблюдали, какое удивление вызывает эффективность технологии даже у специалистов по распознаванию изображений. Ниже мы расскажем о некоторых примерах.
1. Наша модель Face Recognition
1.1. Нейронная сеть и скорость обработки
Для распознавания мы используем модификацию модели нейронной сети ResNet 101. Average Pooling в конце заменен полносвязным слоем по аналогии с тем, как это сделано в ArcFace. Однако размер векторных представлений равен 128, а не 512. Наша обучающая выборка содержит около 10 млн фотографий 273 593 персон.
Модель работает очень быстро благодаря тщательно подобранной архитектуре серверной конфигурации и вычислениям на GPU. На получение ответа от API в наших внутренних сетях уходит от 100 мс — сюда входит детектирование лица (обнаружение лица на фото), распознавание и возвращение PersonID в ответе API. При больших объёмах входящих данных — фотографий и видео — гораздо больше времени будет уходить на передачу данных сервису и на приход ответа.
1.2. Оценка эффективности модели
А вот определение эффективности работы нейросетей — задача очень неоднозначная. Качество их работы зависит от того, на каких дата-сетах обучались модели и оптимизировались ли они под работу с конкретными данными.
Оценивать точность своей модели мы начинали с популярного верификационного теста LFW, но он слишком маленький и простой. После достижения 99,8 % точности от него уже нет толка. Есть хорошее соревнование для оценки моделей распознавания — Megaface на нем мы постепенно добрались до 82 % rank 1. Тест Megaface состоит из миллиона фотографий — дистракторов, — и модель должна уметь хорошо отличать несколько тысяч фотографий знаменитостей из датасета Facescrub от дистракторов. Однако, очистив тест Megaface от ошибок, мы выяснили, что на очищенном варианте достигаем точности 98 % rank 1 (фотографии знаменитостей вообще довольно специфичны). Поэтому создали отдельный идентификационный тест, похожий на Megaface, но c фотографиями «обычных» людей. Дальше улучшали точность распознавания на своих датасетах и ушли далеко вперед. Кроме того, мы используем тест качества кластеризации, который состоит из нескольких тысяч фотографий; он симулирует разметку лиц в облаке пользователя. В данном случае кластеры — это группы похожих лиц, по группе на каждого распознаваемого человека. Качество работы мы проверяли на настоящих группах (истинных).
Конечно, ошибки распознавания бывают у любой модели. Но такие ситуации часто разрешаются с помощью тонкой подстройки порогов под конкретные условия (для всех конференций мы используем одни и те же пороги, а, к примеру, для СКУД приходится пороги сильно повышать, чтобы было меньше ложноположительных срабатываний). Подавляющее большинство посетителей конференций были распознаны нашими фотостойками Vision правильно. Иногда кто-нибудь смотрел на обрезанную превьюшку и говорил: «Ваша система ошиблась, это не я». Тогда мы открывали фотографию целиком, и оказывалось, что на фотографии действительно есть этот посетитель, только снимали не его, а кого-то другого, просто человек случайно оказался на заднем плане в зоне нерезкости. Более того, нейронная сеть зачастую корректно распознаёт даже когда не видна часть лица, или человек стоит в профиль, а то и вообще вполоборота. Система может распознать человека, даже если лицо попало в область оптических искажений, скажем, при съёмке широкоугольным объективом.
1.3. Примеры тестирования в сложных ситуациях
Ниже представлены примеры работы нашей нейронной сети. На вход подаются фотографии, которые она должна промаркировать с помощью PersonID — уникального идентификатора лица. Если у двух и более изображений будет одинаковый идентификатор, значит, по мнению моделей, на этих фотографиях изображён один человек.
Сразу отметим, что при тестировании нам доступны различные параметры и пороги моделей, которые мы можем настраивать для достижения того или иного результата. Публичное API оптимизировано под максимальную точность на общих кейсах.
Начнём с самого простого, с распознавания лица в фас.
Ну, это было слишком легко. Усложним задачу, добавим бороду и пригоршню лет.
Кто-то скажет, что это тоже было не слишком сложно, ведь в обоих случаях лицо видно целиком, алгоритму доступно много информации о лице. Ладно, повернём Тома Харди в профиль. Эта задача гораздо сложнее, и на её успешное решение с сохранением низкого уровня ошибок мы потратили немало сил: подбирали обучающую выборку, продумывали архитектуру нейросети, оттачивали функции потерь и совершенствовали предварительную обработку фотографий.
Наденем на него головной убор:
К слову, это пример особенно сложной ситуации, поскольку здесь сильно закрыто лицо, а на нижнем снимке ещё и глубокая тень, скрывающая глаза. В реальной жизни люди очень часто меняют свою внешность с помощью тёмных очков. Сделаем то же самое и с Томом.
Хорошо, попробуем накидать фотографии из разных возрастов, и на этот раз поставим опыт на другом актёре. Возьмём гораздо более сложный пример, когда возрастные изменения проявляются особенно ярко. Ситуация не надуманная, встречается сплошь и рядом, когда нужно сравнить фотографию в паспорте с лицом предъявителя. Ведь первую фотографию в паспорт клеют, когда владельцу 20 лет, и к 45 человек может очень сильно преобразиться:
Считаете, что главный спец по невыполнимым миссиям не сильно изменился с возрастом? Думаю, что даже немногие люди объединили бы верхние и нижние фотографии, настолько сильно мальчик изменился за эти годы.
Нейросети сталкиваются с изменениями внешности гораздо чаще. Например, иногда женщины могут сильно поменять свой образ с помощью косметики:
Теперь ещё больше усложним задачу: пусть на разных фотографиях закрыты разные части лица. В таких случаях алгоритм не может сравнить образцы целиком. Однако Vision хорошо справляется с подобными ситуациями.
Кстати, на фотографии лиц бывает очень много, например, на общем снимке зала могут уместиться больше 100 человек. Эта непростая ситуация для нейросетей, поскольку многие лица могут быть по-разному освещены, кто-то вне зоны резкости. Однако если фотография сделана с достаточным разрешением и качеством (не менее 75 пикселей на квадрат, покрывающий лицо), Vision сможет определить его и распознать.
Особенность репортажных фотографий и изображений с камер наблюдения заключается в том, что люди часто бывают размытыми, потому что оказались вне зоны резкости или двигались в этот момент:
Также от изображения к изображению может сильно меняться интенсивность освещения. Это тоже часто превращается в камень преткновения, многие алгоритмы испытывают большие сложности с корректной обработкой слишком тёмных и слишком светлых изображений, не говоря уже о точном сопоставлении. Напомню, что для достижения такого результата нужно определённым образом настроить пороги, в публичном доступе этой возможности ещё нет. Для всех клиентов у нас используется одна и та же нейросеть, у неё заданы пороги, подходящие под большинство практических задач.
Недавно мы выкатили новую версию модели, которая с высокой точностью распознаёт азиатские лица. Раньше это было большой проблемой, которая даже получила название «расизм машинного обучения» (или «нейронных сетей»). Европейские и американские нейросети хорошо распознавали европеоидные лица, а с монголоидными и негроидными всё обстояло гораздо хуже. Вероятно, в том же Китае ситуация была с точностью наоборот. Всё дело в обучающих дата-сетах, которые отражают доминирующие типы лиц в той или иной стране. Впрочем, ситуация меняется, сегодня эта проблема стоит далеко не так остро. Vision не испытывает никаких затруднений с представителями разных рас.
Распознавание лиц — это лишь одно из множества применений нашей технологии, Vision можно научить распознавать что угодно. Например, автомобильные номера, в том числе в сложных для алгоритмов условиях: под острыми углами, грязные и трудночитаемые номера.
2. Практические примеры использования
2.1. Контроль физического доступа: когда двое идут по одному пропуску
С помощью Vision можно реализовать системы учёта прихода и ухода сотрудников. У традиционной системы на основе электронных пропусков есть очевидные недостатки, например, можно пройти вдвоём по одному бейджу. Если же пропускную систему (СКУД) дополнить Vision, она будет честно фиксировать, кто и когда пришёл/ушёл.
2.2. Учёт рабочего времени
Этот сценарий использования Vision тесно связан с предыдущим. Если дополнить пропускную систему нашим сервисом распознавания лиц, она сможет не только замечать нарушения пропускного режима, но и регистрировать фактическое пребывание сотрудников в здании или на объекте. Иными словами, Vision поможет честно учитывать, кто и во сколько пришёл на работу и ушёл с ней, а кто вообще прогулял, даже если коллеги его прикрыли перед начальством.
2.3. Видеоаналитика: отслеживание людей и безопасность
Отслеживая людей с помощью Vision можно точно оценивать реальную проходимость торговых зон, вокзалов, переходов, улиц и многих других общественных мест. Также большую помощь наш трекинг может оказать в контроле доступа, к примеру, на склад или в иные важные служебные помещения. И конечно же, отслеживание людей и лиц помогает решать задачи безопасности. Поймали кого-то за воровством в вашем магазине? Занесите его PersonID, который вернул Vision, в чёрный список вашего ПО для видеоаналитики, и в следующий раз система сразу предупредит охрану, если этот тип опять у вас появится.
2.4. В торговле
Ритейл и различный обслуживающий бизнес заинтересован в распознавании очередей. С помощью Vision можно распознать, что это не случайное скопление людей, а именно очередь, и определить её длину. И затем система сообщает ответственным о возникновении очереди, чтобы разобрались в ситуации: либо это наплыв посетителей и нужно вызвать дополнительных работников, либо кто-то халтурит со своими рабочими обязанностями.
Ещё одна интересная задача — отделение сотрудников компании в зале от посетителей. Обычно система обучается отделять объекты в определённой одежде (дресс-код) или с каким-то отличительным признаком (фирменный платок, бейдж на груди и так далее). Это помогает точнее оценивать посещаемость (чтобы сотрудники одним своим присутствием не «накручивали» статистику нахождения людей в зале).
С помощью распознавания лиц вы можете оценивать и вашу аудиторию: какова лояльность посетителей, то есть сколько людей возвращаются в ваше заведение и с какой частотой. Посчитать, сколько уникальных посетителей приходит к вам за месяц. Чтобы оптимизировать расходы на привлечение и удержание, можно выяснить и изменение посещаемости в зависимости от дня недели и даже времени суток.
Франчайзеры и сетевые компании могут заказать оценку по фотографиям качества брендирования различных розничных точек: наличие логотипов, вывесок, плакатов, баннеров и так далее.
2.5. На транспорте
Другой пример обеспечения безопасности с помощью видеоаналитики — определение оставленных вещей в залах аэропортов или вокзалов. Vision можно обучить распознавать объекты сотен классов: предметы мебели, сумки, чемоданы, зонты, различные виды одежды, бутылки и так далее. Если ваша система видеоаналитики обнаруживает бесхозный объект и распознаёт его с помощью Vision, то подаёт сигнал службе безопасности. Схожая задача связана с автоматическим определением нестандартных ситуаций в общественных местах: кому-то стало плохо, или кто-то курит в неположенном месте, или человек упал на рельсы, и так далее — все эти паттерны системы видеоаналитики могут распознавать через API Vision.
2.6. Документооборот
Ещё одно интересное будущее применение Vision, которое мы сейчас разрабатываем — распознавание документов и их автоматический парсинг в базы данных. Вместо того, чтобы вручную вбивать (или ещё хуже, вписывать) бесконечные серии, номера, даты выдачи, номера счетов, реквизиты банков, даты и места рождения и множество других формализованных данных, можно будет сканировать документы и автоматически отправлять их по защищённому каналу через API в облако, где система будет на лету эти документы распознает, отпарсит и вернёт ответ с данными в нужном формате для автоматического внесения в базу данных. Сегодня Vision уже умеет классифицировать документы (в том числе в PDF) — различает паспорта, СНИЛС, ИНН, свидетельства о рождении, о браке и другие.
Конечно, все эти ситуации нейросеть не способна обработать из коробки. В каждом случае под конкретного заказчика строится новая модель, учитывается множество факторов, нюансов и требований, подбираются дата-сеты, проводятся итерации обучения-тестирования-настройки.
3. Схема работы API
«Входными воротами» Vision для пользователей является REST API. На вход он может принимать фотографии, видеофайлы и трансляции с сетевых камер (RTSP-потоки).
Чтобы воспользоваться Vision, нужно зарегистрироваться в сервисе Mail.ru Cloud Solutions и получить токены доступа (client_id + client_secret). Аутентификация пользователей выполняется по протоколу OAuth. Исходные данные в телах POST-запросов отправляются в API. А в ответ клиент получает от API результат распознавания в JSON-формате, причём ответ структурированный: он содержит информацию о найденных объектах и их координатах.
Пример ответа
{
"status":200,
"body":{
"objects":[
{
"status":0,
"name":"file_0"
},
{
"status":0,
"name":"file_2",
"persons":[
{
"tag":"person9"
"coord":[149,60,234,181],
"confidence":0.9999,
"awesomeness":0.45
},
{
"tag":"person10"
"coord":[159,70,224,171],
"confidence":0.9998,
"awesomeness":0.32
}
]
}
{
"status":0,
"name":"file_3",
"persons":[
{
"tag":"person11",
"coord":[157,60,232,111],
"aliases":["person12", "person13"]
"confidence":0.9998,
"awesomeness":0.32
}
]
},
{
"status":0,
"name":"file_4",
"persons":[
{
"tag":"undefined"
"coord":[147,50,222,121],
"confidence":0.9997,
"awesomeness":0.26
}
]
}
],
"aliases_changed":false
},
"htmlencoded":false,
"last_modified":0
}
В ответе есть интересный параметр awesomeness — это условная «крутость» лица на фотографии, с его помощью мы выбираем лучший снимок лица из последовательности. Мы обучили нейросеть предсказывать вероятность, что снимку поставят лайк в соцсетях. Чем качественнее снимок и улыбчивее лицо, тем больше awesomness.
В API Vision используется такое понятие, как спейс (space). Это инструмент для создания разных множеств лиц. Примеры спейсов — чёрные и белые списки, списки посетителей, сотрудников, клиентов и т. д. Для каждого токена в Vision можно создать до 10 спейсов, в каждом спейсе может быть до 50 тыс. PersonID, то есть до 500 тыс. на один токен. При этом количество токенов на один аккаунт не ограничено.
Сегодня API поддерживает следующие методы определения и распознавания:
- Recognize/Set — определение и распознавание лиц. Автоматически присваивает PersonID каждому уникальному лицу, возвращает PersonID и координаты найденных лиц.
- Delete — удаление конкретного PersonID из базы данных персон.
- Truncate — очистка всего спейса от PersonID, полезно если он использовался как тестовый и нужно обнулить базу для продакшена.
- Detect — определение объектов, сцен, автомобильных номеров, достопримечательностей, очередей и т. п. Возвращает класс найденных объектов и их координаты
- Detect для документов — детектирует конкретные типы документов РФ (отличает паспорт, снилс, инн и пр.).
Также мы в скором времени заканчиваем работу над методами для OCR, определения пола, возраста и эмоций, а также решения задач мерчендайзинга, то есть для автоматического контроля выкладки товаров в магазинах. Полную документацию по API вы найдёте здесь: https://mcs.mail.ru/help/vision-api
4. Заключение
Сейчас через публичный API можно получить доступ к распознаванию лиц на фотографиях и видео, поддерживается определение различных объектов, автомобильных номеров, достопримечательностей, документов и целых сцен. Сценариев применения — море. Приходите, тестируйте наш сервис, ставьте перед ним самые каверзные задачи. Первые 5000 транзакций — бесплатно. Быть может, он окажется «недостающим ингредиентом» для ваших проектов.
Доступ к API можно моментально получить при регистрации и подключении Vision. Всем хабрапользователям — промокод на дополнительные транзакции. Пишите в личку адрес электронной почты, на который регистрировали аккаунт!