Умные фотографии ВКонтакте |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-02-28 20:58 Умные фотографии ВКонтакте Мы живём в эпоху мультимедиа, когда самым простым и распространённым способом самовыражения является цифровая фотография. Наши пользователи выкладывают десятки миллионов картинок каждый день, при этом на каждом четвёртом изображении присутствуют лица, нередко — самих пользователей социальной сети. Довольно часто автор контента или люди на фотографии являются смежными вершинами в графе друзей. Механизм отметок друзей на фотографиях существует очень давно, но с развитием мобильных платформ ручная разметка становится нетривиальной задачей. С целью упростить эту процедуру и помочь пользователям уведомлять своих друзей о новом контенте мы предлагаем три инструмента:
Движок Каждое лицо обладает рядом уникальных признаков, делающих его индивидуальным и узнаваемым среди множества других. Существует большое количество способов выделения таких признаков, но лучшим на сегодняшний день является класс методов на основе глубинных нейронных сетей. Мы перепробовали различные архитектуры и остановились на state-of-the-art глубинных остаточных сетях (Deep Residual Networks) [1, 2, 3]. Нейронная сеть переводит двумерное изображение лица в пространство векторных представлений, используя апостериорный опыт, полученный на обучающей выборке. Векторы располагаются близко друг к другу в евклидовом пространстве для лиц одного и того же человека, и далеко — для разных людей. Построив проекцию многомерных векторов на плоскость, можно заметить внутренние особенности модели. Например, наша модель не особо удачно будет идентифицировать маленьких детей, вплоть до неразличения их полов, поскольку в обучающей выборке были только подростки и взрослые. Для того, чтобы нейронная сеть смогла сформировать векторное представление, лицо необходимо выделить среди других объектов и обозначить его чёткие границы. Для этого используется детектор на основе каскадов свёрточных нейронных сетей [4]. Каждое найденное лицо получает определенный вес, который можно трактовать как уверенность детектора в том, что найденный объект является лицом. Посчитанные границы расширяются в зависимости от исходного размера головы и отображаются на фотографии в виде окаймляющего лицо прямоугольника. Каскадный детектор состоит из трёх нейронных сетей: Proposal Network — для генерации областей-кандидатов, Refinement Network — для отсеивания неподходящих областей и Output Network — для формирования окончательной области и ключевых точек лица. Такой порядок включения сетей обеспечивает высокую скорость детектирования. Помимо вычисления границ нейронной остаточной сети также необходимо дополнительное выравнивание и центрирование изображения лица. Модуль предобработки, используя информацию о расположении глаз и носа, вычисляет углы поворота, наклона и отклонения головы, а затем смещает и поворачивает изображение таким образом, чтобы центр рамки совпадал с точкой, а угол наклона головы был околонулевым. Чем значительнее производилась трансформация и чем больше углы поворота и наклона головы, тем меньший вес будет назначен данному изображению лица. После вычисления векторного представления по нормализованному изображению лица каждый вектор получает определённый вес w в зависимости от решений детектора и модуля предобработки. При первичной обработке профиля мы стараемся построить наиболее релевантное векторное представление внешнего вида и для этого анализируем как можно больше фотографий пользователя. Необходимость в таком подходе порождена рядом предпосылок.
В процессе построения модели каждый обработчик углубляется в историю профиля, анализируя до тридцати фотографий. На каждом изображении производится локализация лиц и построение векторного представления — на этом же этапе отбрасываются векторы с малым весом: запредельными углами поворота или наклона, недостаточной резкости, масштаба и реалистичности. После этого ставится задача выявления внешнего вида истинного владельца профиля. От того, насколько точно установлен владелец, зависят подсказки всех его друзей. Мы используем наивный, но достаточно действенный подход, базирующийся на том, что человек похож на самого себя в разные моменты времени и при различных обстоятельствах в большей степени, чем на других людей, и что лицо владельца будет встречаться чаще, нежели лица других людей. Ради интереса мы посчитали, сколько наши пользователи загрузили аватарок. В среднем на активного пользователя приходится 3,2 фотографии в профиле. А вот медианное значение существенно меньше — либо у активного пользователя намного больше трёх фотографий, либо всего одна. С помощью методов кластеризации [5], натравленных на признаки прошедших фильтрацию лиц, мы находим наиболее плотную и многочисленную группу изображений, которую и ассоциируем с истинным владельцем. Векторные представления, построенные по выбранным изображениям, образуют матрицу — многосессионную модель профиля (или просто эталон). Для биометрических подсказок и автоматических отметок мы решаем две различные задачи: поиск похожих и верификацию. Первая задача решается на закрытом множестве, поскольку мы считаем, что лицо на фотографии может принадлежать личности только из списка друзей пользователя. В этом случае мы просто пересортировываем список по метрике схожести признаков. Вторая задача предполагает открытое множество, поскольку при верификации мы должны точно установить личность из списка друзей, а человек на фотографии может не входить даже в социальные графы друзей самого пользователя. Поиск похожих подразумевает сравнение вида «один ко многим», но выполняется для достаточно большого числа запросов одновременно. Чтобы облегчить нагрузку на БД, для векторных представлений используется сжатие с потерями [6], в ходе которого количество бит для хранения модели в нашем случае снижается в восемь раз. Несмотря на потери при упаковке данных, точность поиска возможных друзей практически не меняется. В момент времени, когда новая фотография загрузилась в альбом пользователя, вызывается функция поиска, поведение которой определяется временем, прошедшим с момента предыдущей загрузки фотографии. Загруженная картинка попадает на один из обработчиков, который анализирует её и строит векторные представления найденных лиц. 23 % пользователей загружают фотографии в свои альбомы или на стену по одной, а 77% — сразу по несколько штук.
В совокупности на вычислительном кластере ВКонтакте запущено 650 унифицированных обработчиков, каждый из которых получает задачу с прикрепленной фотографией и списком друзей загрузившего её пользователя. Большая часть обработчиков производит свои вычисления на графических картах. Для верификации используется оригинальное несжатое векторное представление лиц, но сравнение вида «один к одному» производится на усечённом множестве до пяти претендентов, отобранных поиском похожих. Движок позволяет обрабатывать десятки миллионов фотографий в сутки, при этом время обработки одной фотографии занимает 0,5 - 1,5 сек. В текущей версии мы постарались минимизировать ошибки подсказок, установив сильные ограничения на минимальный размер лиц и весовые коэффициенты — решения детектора и предобработки. Это позволяет нам проставлять отметки на каждой пятой загружаемой фотографии и выводить верную подсказку в девяти из десяти случаев. Источники
Источник: m.vk.com Комментарии: |
|