Умные фотографии ВКонтакте

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Умные фотографии ВКонтакте

Мы живём в эпоху мультимедиа, когда самым простым и распространённым способом самовыражения является цифровая фотография. Наши пользователи выкладывают десятки миллионов картинок каждый день, при этом на каждом четвёртом изображении присутствуют лица, нередко — самих пользователей социальной сети. Довольно часто автор контента или люди на фотографии являются смежными вершинами в графе друзей. Механизм отметок друзей на фотографиях существует очень давно, но с развитием мобильных платформ ручная разметка становится нетривиальной задачей. С целью упростить эту процедуру и помочь пользователям уведомлять своих друзей о новом контенте мы предлагаем три инструмента:

  1. Детектирование и локализация лиц. Отмечать друзей на фотографиях станет намного удобнее — после загрузки фотографии мы автоматически определим положение лиц, и пользователи смогут моментально отметить своих друзей.
  2. Биометрические подсказки. Тултип со списком возможных друзей приобрёл новый вид сортировки. Если лицо достаточно хорошо распознаётся, то на первые пять позиций мы помещаем наиболее вероятных друзей. Оставшаяся часть списка остаётся отсортированной по частоте взаимодействий.
  3. Автоматические отметки. Если система, отвечающая за распознавание, уверенно верифицировала определённого друга на загруженной фотографии, то она предложит подтвердить источнику его кандидатуру и включить автоматическую разметку. После того, как источник даёт согласие, система самостоятельно начинает обрабатывать загружаемые фотографии и создавать новые отметки, а его друзья получают уведомления.

Движок

Каждое лицо обладает рядом уникальных признаков, делающих его индивидуальным и узнаваемым среди множества других. Существует большое количество способов выделения таких признаков, но лучшим на сегодняшний день является класс методов на основе глубинных нейронных сетей. Мы перепробовали различные архитектуры и остановились на state-of-the-art глубинных остаточных сетях (Deep Residual Networks) [1, 2, 3]. Нейронная сеть переводит двумерное изображение лица в пространство векторных представлений, используя апостериорный опыт, полученный на обучающей выборке. Векторы располагаются близко друг к другу в евклидовом пространстве для лиц одного и того же человека, и далеко — для разных людей.

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

Для того, чтобы нейронная сеть смогла сформировать векторное представление, лицо необходимо выделить среди других объектов и обозначить его чёткие границы. Для этого используется детектор на основе каскадов свёрточных нейронных сетей [4]. Каждое найденное лицо получает определенный вес, который можно трактовать как уверенность детектора в том, что найденный объект является лицом. Посчитанные границы расширяются в зависимости от исходного размера головы и отображаются на фотографии в виде окаймляющего лицо прямоугольника.

Каскадный детектор состоит из трёх нейронных сетей: Proposal Network — для генерации областей-кандидатов, Refinement Network — для отсеивания неподходящих областей и Output Network — для формирования окончательной области и ключевых точек лица. Такой порядок включения сетей обеспечивает высокую скорость детектирования.

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

Пайплайн построения векторного представления лиц

После вычисления векторного представления по нормализованному изображению лица каждый вектор получает определённый вес w в зависимости от решений детектора и модуля предобработки.

При первичной обработке профиля мы стараемся построить наиболее релевантное векторное представление внешнего вида и для этого анализируем как можно больше фотографий пользователя. Необходимость в таком подходе порождена рядом предпосылок.

  • Значительная изменчивость внешнего вида пользователей: стилевая, возрастная, послевечериночная etc.
  • Запредельные для распознавания углы поворота головы при фотосъёмке — некоторые пользователи вполне обоснованно полагают, что друзья узнают их лучше в профиль или с необычного ракурса.
  • Наличие на фотографии двух или более лиц.

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

Слева направо: не самый удачный ракурс, несколько лиц на одном изображении, значительное возрастное изменение

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

Пример вычисления наиболее плотного и многочисленного кластера лиц для эталона
Ради интереса мы посчитали, сколько наши пользователи загрузили аватарок. В среднем на активного пользователя приходится 3,2 фотографии в профиле. А вот медианное значение существенно меньше — либо у активного пользователя намного больше трёх фотографий, либо всего одна.

С помощью методов кластеризации [5], натравленных на признаки прошедших фильтрацию лиц, мы находим наиболее плотную и многочисленную группу изображений, которую и ассоциируем с истинным владельцем. Векторные представления, построенные по выбранным изображениям, образуют матрицу — многосессионную модель профиля (или просто эталон).

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

Сопоставление образца x с матрицей эталонов Y: индекс i означает порядковый номер эталона, j - векторного представления лица в эталоне. Процесс верификации векторного представления, T - постоянный порог принятия решения о совпадении.

Поиск похожих подразумевает сравнение вида «один ко многим», но выполняется для достаточно большого числа запросов одновременно. Чтобы облегчить нагрузку на БД, для векторных представлений используется сжатие с потерями [6], в ходе которого количество бит для хранения модели в нашем случае снижается в восемь раз. Несмотря на потери при упаковке данных, точность поиска возможных друзей практически не меняется.

Процесс квантования векторных представлений. Словари из 256 слов для каждого подвектора составляются на обучающей выборке с помощью методов кластеризации.

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

23 % пользователей загружают фотографии в свои альбомы или на стену по одной, а 77% — сразу по несколько штук.
  • Если пользователь не загружал фотографии несколько минут, то составляется список его друзей и формируется запрос на передачу их эталонов из key-value хранилища в обработчик. Полученные векторы сжимаются, и создаётся компактная структура для быстрого поиска ближайших соседей, которая кэшируется в оперативную память на непродолжительное время. Каждому вектору лица от исходной картинки ставится в соответствие от одного до пяти претендентов, чьи представления оказались наиболее близкими по L2-норме.
  • Если пользователь загружает несколько фотографий подряд в течение пары минут, то функция поиска, начиная со второй фотографии, обращается непосредственно к кэшу. Это значительно снижает нагрузку на чтение из хранилища, а также ускоряет работу процесса поиска.
Схема выполнения команды поиска при загрузке фотографии в альбом. Слева — операционный поток для первой фотографии, справа — для последующих, загружаемых непосредственно за первой. Для поиска похожих используется метод ближайших соседей.
В совокупности на вычислительном кластере ВКонтакте запущено 650 унифицированных обработчиков, каждый из которых получает задачу с прикрепленной фотографией и списком друзей загрузившего её пользователя. Большая часть обработчиков производит свои вычисления на графических картах.

Для верификации используется оригинальное несжатое векторное представление лиц, но сравнение вида «один к одному» производится на усечённом множестве до пяти претендентов, отобранных поиском похожих.

Движок позволяет обрабатывать десятки миллионов фотографий в сутки, при этом время обработки одной фотографии занимает 0,5 - 1,5 сек. В текущей версии мы постарались минимизировать ошибки подсказок, установив сильные ограничения на минимальный размер лиц и весовые коэффициенты — решения детектора и предобработки. Это позволяет нам проставлять отметки на каждой пятой загружаемой фотографии и выводить верную подсказку в девяти из десяти случаев.

Источники

  1. Deep Residual Learning for Image Recognition. Kaiming He Xiangyu Zhang Shaoqing Ren Jian Sun, arXiv:1512.03385v1. 2015.
  2. A Discriminative Feature Learning Approach for Deep Face Recognition. Yandong Wen, Kaipeng Zhang, Zhifeng Li, Yu Qiao, ECCV 2016.
  3. NormFace: L2 HyperSphere Embedding for Face Verification Feng Wang, Xiang Xiang, Jian Cheng, Alan L. Yuille. ACM MM 2017.
  4. Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks. Kaipeng Zhang, Zhanpeng Zhang, Zhifeng Li, Yu Qiao. arXiv:1604.02878. 2016.
  5. Data Clustering: Algorithms and Applications. Charu C. Aggarwal, Chandan K. Reddy. 2013 by Chapman and Hall/CRC, 652 p.
  6. Optimized Product Quantization for Approximate Nearest Neighbor Search. Tiezheng Ge, Kaiming He, Qifa Ke, Jian Sun. CVPR 2013.

Источник: m.vk.com

Комментарии: