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

Возьмём для примера великое – “Назад в будущее”. Главное, что захватывает в фильме, это, конечно, сюжет. Но во сколько лет на какой просмотр вы узнали, что в конце фильма магазин "Две сосны" поменял своё название на "Одинокая сосна"? Это происходит потому, что Марти сбивает дерево на ферме Пибоди, влетев в прошлое на DeLorean DMC-12. В первый раз это тяжеловато увидеть, но это важная деталь сюжета.

А помните ли вы диван, на котором так уютно сидели “Друзьяв квартире Моники и Рейчел? Наверняка, у нас всех в памяти хранится его общий вид, но когда заходишь в магазин и хочешь купить такой же, вряд ли вспомнишь всё в деталях.

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

Но не беспокойтесь. В 2021 это больше не проблема, ведь теперь есть платформа компьютерного зрения Layer, которая смотрит кино вместе с вами. От неё никаким деталям не спрятаться и не скрыться. Давайте заглянем “под капот”?

Тот самый магазин в начале и конце фильма 

[Universal Pictures, Amblin Entertainment, 1985, кадр из фильма «Назад в будущее»]
Тот самый магазин в начале и конце фильма [Universal Pictures, Amblin Entertainment, 1985, кадр из фильма «Назад в будущее»]

Небольшое отступление

Это статья о компьютерном зрении и искусственных нейронных сетях. Она предполагает некоторое знакомство читателя с вопросом, поскольку текстов по данной тематике сейчас очень много как в нашем блоге, так и на Хабре в целом:

Нейросети даже в чайниках!
Нейросети даже в чайниках!

Поэтому какие-то вещи я буду опускать и считать, что читатель с ними уже знаком.

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

Здесь я рассказываю, кто мы такие

Мы – команда сервиса Layer внутри SberDevices. Мы занимаемся распознаванием всего-всего на видео и на изображениях, а наш основной продукт –  Layer Computer Vision Platform. Выше я закинул приманку с фильмами – это действительно одно из целевых применений нашей технологии, которое уже давно работает. Технологии, лежащие в основе нашего сервиса, позволяют распознавать актёров, локации, одежду, мебель, еду и много чего ещё (что-то в будущем) в момент, когда вы смотрите кинотеатр Okko. Сейчас, распознав, он даёт вам возможность посмотреть подробную информацию об актёре, купить билет в локацию, поискать похожие предметы одежды в Ozon или Lamoda, заказать у партнёров доставку еды, похожую на ту, что сейчас в кадре.

И хотя сегодня я в основном буду рассказывать на примере фильмов, на самом деле это далеко не всё, с чем мы работаем и как мы работаем. Например, мы подключаем Layer к партнёрам в формате B2B, работаем с телевидением и Youtube, да и чего мы только не делаем.
А если и нет – вы можете предложить нам сделать это.

Доступ к платформе Layer, в основном, предоставляется по веб-API, но возможна и интеграция других уровней.

Говоря простыми словами, вы отправляете в сервис изображение или серию изображений, а он даёт вам в ответ информацию, в зависимости от того, что вы хотите знать.

Немного интерфейса 

[Summit Entertainment, Kurtzman Orci Paper Products, 2013, кадр из фильма «Иллюзия обмана»]
Немного интерфейса [Summit Entertainment, Kurtzman Orci Paper Products, 2013, кадр из фильма «Иллюзия обмана»]
А вот так в деле

[Marvel Studios, LLC, 2018, кадр из фильма «Человек-муравей и Оса»]
А вот так в деле [Marvel Studios, LLC, 2018, кадр из фильма «Человек-муравей и Оса»]

В данный момент мы работаем с:

  1. Лицами – детекция и распознавание лиц на изображении.

  2. Локациями – определение места действия в кадре, с точностью до метро.

  3. Одеждой – детекция и поиск похожих элементов одежды (в магазинах-партнёрах), присутствующих в кадре.

  4. Мебелью – детекция и поиск похожих элементов интерьера, присутствующих в кадре.

  5. Едой – детекция блюд и пищевых продуктов с фиксированным набором классов в сверхсложных условиях, также есть возможность поиска похожей еды.

Распознанная локация

[Paramount Pictures (с), 1953, кадр из фильма “Римские каникулы”]
Распознанная локация [Paramount Pictures (с), 1953, кадр из фильма “Римские каникулы”]

Ещё несколько категорий находятся в процессе разработки или тестирования, перечисленное – лишь часть возможностей сервиса. Помните, что в заголовке я заявил, что Layer видит больше, чем ваш глаз? Это правда.

Человек не способен с такой скоростью отслеживать всё это веселье, происходящее во всех категориях предметов в кадре, а наша платформа способна.

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

Здесь я показываю, почему фильмы для алгоритмов – это здорово

Поскольку в основном я тут говорю о платформе в разрезе фильмов, расскажу подробнее почему распознавать что-либо в фильмах это особенно весело и задорно:

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

    Lumière, 1896, кадр из фильма «Прибытие поезда на вокзал Ла-Сьота». 
Это один из первых фильмов в истории
    Lumière, 1896, кадр из фильма «Прибытие поезда на вокзал Ла-Сьота». Это один из первых фильмов в истории
  2. В отличие от ADAS-задач или задач видео-аналитики, работа над распознаванием сущностей в кадре усложняется тем, что визуальный ряд фильмов ограничивается только лишь фантазией режиссера \ сценариста \ ИИ. Поэтому приходится жить и действовать в условиях, когда пришельцы могут быть с телом-помидором. И никак заранее не получится подготовить сеть к таким ситуациям. А с контекстом у алгоритмов пока сложновато.

    Вот как бывает в фильмах 

[Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”]
    Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”]
  3. Никто в своём уме не начнёт делать красивое боке (оптическое размытие заднего фона и объектов, не попавших в ГРИП) в камере на Тесле или в системе видеонаблюдения. В фильме это обязательно будет. Объекты, интересующие нас, могут при этом оставаться вне фокуса. Все прочие оптические, компьютерные эффекты и трипы режиссёра также создают проблемы.

    На этом кадре ГРИП проходит узкой полосой там, где люди. Еда на переднем фоне и всё, что на заднем, – размыто. Но от нас не спрячешься. 

[Impossible Films,Institut Català de les Empreses Culturals (ICEC), Movistar+, Radio Televisión Española (RTVE), Sentimentalfilm, Televisió de Catalunya (TV3), 2020, кадр из фильма «Соседи сверху»]
    На этом кадре ГРИП проходит узкой полосой там, где люди. Еда на переднем фоне и всё, что на заднем, – размыто. Но от нас не спрячешься. [Impossible Films,Institut Català de les Empreses Culturals (ICEC), Movistar+, Radio Televisión Española (RTVE), Sentimentalfilm, Televisió de Catalunya (TV3), 2020, кадр из фильма «Соседи сверху»]
  4. Сцены в фильмах обрываются и начинаются беспощадно, нередко подбрасывая сюрпризы. Например, там, где лежал апельсин, иногда может возникнуть баскетбольный мяч – по закону подлости тоже оранжевый и тоже круглый. Переход сцен, в целом, отлавливается по тому факту, что кадры сменились слишком резко, но не всегда. Так же резко сцена может вернуться и к предыдущей, но система уже потеряла все отслеживания. 

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

    Твой 2020 будет прекрасен
    Твой 2020 будет прекрасен

Здесь я углубляюсь в технические детали

Итак, как же всё в Layer устроено?

Я не буду касаться той части, которая не про компьютерное зрение и алгоритмы. Безусловно, в таком огромном и сложном сервисе есть развесистый бэкенд и фронтенд, и их устройство заслуживает отдельной статьи, а может и не одной. И они будут.

Поговорим сейчас про ML-часть.

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

Но кое-что всё же объединяет эти задачи. Чтобы что-то распознавать, это нужно сначала найти. Поэтому в любой из задач, в той или иной мере, первый этап – работа детектора. Обычно речь идёт о чем-то таком: подали на вход изображение – на выходе получили описывающие прямоугольники и классы объектов в них. Но в реальности детекторы мы используем в разных категориях и задачах очень разные: есть более универсальные, есть более специализированные, есть те, которые выдают эмбеддинги для объектов, и те, которые определяют маску объекта внутри описывающего прямоугольника. Но все они в итоге служат одной цели: найти объект, локализовать его позицию и формы как можно точнее, а также присвоить ему класс.

Абстрактная схема на примере уже устаревшего, но такого любимого Faster R-CNN – одного из самых популярных подходов в тяжеловесной детекции
Абстрактная схема на примере уже устаревшего, но такого любимого Faster R-CNN – одного из самых популярных подходов в тяжеловесной детекции

Без детектора в том или ином виде никак не обойтись. А вот происходящее за ним может сильно варьироваться в зависимости от целей и задач. Я покажу это на примере мебели: сначала мы посмотрим на базовый пайплайн с его вариациями, а затем поговорим о более “продвинутых” улучшениях, которые есть в нашем коммерческом решении.

Пример работы детектора для категории мебели 

[Waverly Films, Warner Bros., 2015, кадр из фильма «Стажёр»]
Пример работы детектора для категории мебели [Waverly Films, Warner Bros., 2015, кадр из фильма «Стажёр»]
Пример работы детектора для категории мебели (2)

[20th Century Fox, Summit Entertainment, Regency Enterprises, Weed Road Pictures, 2005, кадр из фильма «Мистер и миссис Смит»]
Пример работы детектора для категории мебели (2) [20th Century Fox, Summit Entertainment, Regency Enterprises, Weed Road Pictures, 2005, кадр из фильма «Мистер и миссис Смит»]

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

Шаг 1. Однажды найденное желательно не терять и отслеживать между кадрами, потому, что нужно работать с сущностями объектов, а не просто отдельными изображениями. Зная id объекта "сквозь" кадры, можно сократить объём вычислений, но, что ещё важнее, повысить точность работы при помощи агрегации результатов. Для человека такие вещи зачастую очевидны, а для алгоритмов компьютерного зрения представляют страшную проблему.

Используются для решения этой проблемы очень разные алгоритмы. Они могут быть основаны как на оптических потоках или корреляционных фильтрах (так называемые классические), так и на нейросетях. Но общая цель везде одна и проста – узнать, куда объект из текущего кадра денется на следующем.

Старенький трекер на оптическом потоке на примере дорожной аналитики (Источник: https://nanonets.com/blog/optical-flow/)
Старенький трекер на оптическом потоке на примере дорожной аналитики (Источник: https://nanonets.com/blog/optical-flow/)

Если говорить о конкретно нашем модуле мебели, то мы в основном используем SORT и Deep SORT базированные трекеры. В двух словах, такие алгоритмы работают не через сдвиги изображений или отслеживание конкретного объекта, а через связывание объектов на двух кадрах, например, по пересечению их прямоугольников или внешней похожести. Несмотря на то, что SORT основан на древнейших идеях, его к классике часто не относят из-за того, что применять стали позже других. По какой причине – никому не известно. Видимо, все просто на время его “потеряли”, но теперь, когда он показал себя блестяще в ряде задач и победил в соревновании трекеров MOT в 2016 году, все о нём резко вспомнили. В целом, эти алгоритмы намного понятнее, интерпретируемее, стабильнее и, если их правильно готовить, качественнее, чем другие подходы.

Шаг 2. Чтобы найденное затем распознать, его нужно загнать в специализированную сеть-энкодер и получить точные эмбеддинги. Если к этому моменту их ещё нет, потому что, возможно, мы уже отслеживаем объект и не хотим ещё раз их считать (или, наоборот, очень хотим).

Напомню, эмбеддинги – это векторы чисел, которые по сути являются математическим отображением визуального представления объекта. Эти векторы, в зависимости от метода, можно различным образом сравнивать между собой и получать меру "похожести" объектов:

Визуализация процесса
Визуализация процесса

Существует множество методов, как обучать подобные энкодеры. Но везде цель достигается через целевые функции. Они указывают модели, что объекты должны быть "сжаты" в N-мерное пространство так, чтобы похожие располагались в нём на более близком расстоянии друг к другу, а непохожие – дальше. 

И уж коль скоро такое расстояние может быть посчитано, то пространство называется метрическим. А весь подход – метрическим обучением.

Целевых функций для метрического обучения придумано множество, поскольку основная суть подхода в них. Покажу на примере Triplet Loss, поскольку эта целевая функция очень наглядная:

Визуальное представление целевой функции
Визуальное представление целевой функции

Математически это выглядит так:

Формула немного упрощена для наглядности
Формула немного упрощена для наглядности

Формула немного упрощена для наглядности и в ней всё крайне просто:

х – это вход, изображение;

f(x) – преобразование входного изображения к вектору размерности N, т.е. к эмбеддингам;

i – индекс входа;

a – изображение-якорь, текущее изображение, от которого отталкиваемся;

p – позитивный пример изображения, близкого к якорному;

n – негативный пример изображения, далёкого от якорного.

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

Шаг 3. Может быть так, что “в лоб” метрическое обучение не заработает и непохожие изображения будут оказываться близкими, а похожие – не особо. Помимо очевидных причин, вроде того, что данных слишком мало или сеть не тянет задачу, может возникнуть необходимость в преобразовании изображений объектов перед энкодером. Например, их может понадобиться выровнять, т.е. изменить таким образом, чтобы объекты имели максимально возможное совпадение визуальных признаков в 2D- или 3D-пространстве:

Просто о выравнивании
Просто о выравнивании

Может быть и так, что распознаванию мешают другие объекты, попавшие в описывающий прямоугольник, и без масок не обойтись:

Пример работы детектора с масками. 
Как можно видеть, маски тоже не всегда идеальны в реальной работе, но исключают нежелательные объекты. 

[Universal Pictures, Film4, DNA Films, 2014, кадр из фильма «Из машины»]
Пример работы детектора с масками. Как можно видеть, маски тоже не всегда идеальны в реальной работе, но исключают нежелательные объекты. [Universal Pictures, Film4, DNA Films, 2014, кадр из фильма «Из машины»]

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

Визуализация дистанции
Визуализация дистанции

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

Пример запроса и лучшего найденного эталона
Пример запроса и лучшего найденного эталона

На примере сверху показано по одному лучшему товару, но на деле, как правило, пользователь предпочитает видеть некий топ наиболее похожих. Часто это 5 или 10 лучших совпадений. Но мы покажем всё, что есть:

Итог, ради которого мы старались

[Bright/Kauffman/Crane Productions, Warner Bros. Television, 1994 — 2004, кадр из телесериала «Друзья»]
Итог, ради которого мы старались [Bright/Kauffman/Crane Productions, Warner Bros. Television, 1994 — 2004, кадр из телесериала «Друзья»]

Вот мы и прошли основные моменты на пути распознавания объектов в кадре на примере мебели. Но помимо этих основных пунктов, есть ещё масса нюансов, которые важно учитывать. Перечислю лишь некоторые из них:

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

    Hint: Лучше всего решать на этапе обучения, сразу объясняя модели, что так может и будет происходить, но помимо этого можно оценивать качество, можно ввести оценку неуверенности для эмбеддингов в модель. Здесь очень много путей для улучшений и этот пункт - один из ключевых моментов всего метрического обучения.

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

    Hint: С поиском всё решаемо, например. А вот с остальным – исключительно инженерное искусство разработки.

  3. В задаче могут быть проблемы с контекстом. Например, шкаф может продаваться и отдельно, и в составе гарнитура. Что именно ищут – вопрос.

  4. Качество распознавания сильно зависит от качества работы детектора и точности описывающего прямоугольника. Любая неточность – и в объект захватывается лишнее: фон или, что хуже, другой объект. Маски решают эту проблему лишь частично, зато добавляют новых.

  5. Фильмы – это ~24 кадра в секунду и 120 - 300 тысяч кадров в сумме. А значит, что у многих объектов возникнет ситуация, когда надо получить результат не с 1 изображения, а с серии. Часто - очень большой серии. И если даже объекты отслеживать, но не агрегировать правильным образом их эмбеддинги, то можно получить противоречащие результаты.

    Hint: Даже не пытайтесь усреднять все полученные для объекта векторы :) Огромная ошибка, которую очень любят совершать по неопытности. А вот грамотное взвешивание эмбеддингов может хорошо помочь.

Не обязательно все эти проблемы возникнут. Всё очень сильно зависит от задачи и конкретного случая. Какие-то сложности и вовсе не проявятся, другие окажутся критичными для такого применения.

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

Кроме того, я не стал затрагивать другие важные вопросы промышленной системы. Безусловно, всё описанное выше работает под огромной нагрузкой и при этом должно исполняться в реальном времени. Чтобы обеспечить это, мы потрудились и с научной, и с инженерной точки зрения. Хотелось бы рассказать вам в будущем и об этом.

И, как говорил один хитрый сыщик, ещё кое-что. Эта статья – в некотором роде анонс. На момент выпуска текста, мебели ещё нет в общедоступном применении, но всё уже работает, и в скором времени эта функциональность станет доступна всем пользователям умных устройств Sber. Мы будем очень рады вашим тестам и фидбеку. Хотя, быть может, что вы читаете этот текст не из 2021, и в вашем времени Layer давно стал неотъемлемой частью просмотра кино дома? :)

Здесь я прощаюсь

Если вам хочется узнать о нас больше, то мы есть в социальных сетях, у нас есть различные видео и один большой подкаст, где я много говорю о Layer. Я собрал эти ссылки в одном месте, и вы можете посмотреть \ послушать всё это вот тут.

А ещё мы всегда ищем новые кадры! Если компьютерное зрение – ваша профессия и вы хотите стать частью команды, пишите мне в Телеграм.

P.S. Несколько благодарностей:

  • Александру Коновалову - за потрясающие иллюстрации к этому посту.

  • Кристине Лавренюк - за огромный вклад в мотивацию и редактуру.

Комментарии (5)


  1. Vindicar
    14.09.2021 14:31
    +2

    Система повышения эффективности product placement, однако.


    1. WildChlamydia Автор
      14.09.2021 14:59

      Понимаю вашу мысль, но я бы не стал на это смотреть прямо так. Лично я, как человек и пользователь, вижу в своём проекте в первую очередь как раз таки пользу для зрителя. В своём подкасте я упоминаю этот пример, повторюсь: я когда смотрел "Детективное агентство Дирка Джентли", жутко захотел жёлтую кожаную куртку, которую постоянно носит ГГ. Я очень долго искал похожую, но на тот момент, года три назад, ничего не нашёл. У нас не особо популярны яркие цвета для мужчин. И я был бы очень рад, если б мне предложили любые похожие куртки.


  1. Exchan-ge
    14.09.2021 17:18
    +1

    Но во сколько лет на какой просмотр вы узнали, что в конце фильма магазин «Две сосны» поменял своё название на «Одинокая сосна»?


    При первом же просмотре.
    (когда после бури в нашем дворе рухнула одна из двух елок (оставленных строителями от усадьбы, стоявшей на том месте) — установка возле оставшейся елки одним из жителей дома довольно точной копии (без часов) таблички из фильма, с надписью «Lone Pine at Home» — не вызвала никаких вопросов ни у одного их жильцов дома :)


    1. WildChlamydia Автор
      14.09.2021 17:27

      Мощно, а фотографии не осталось этой таблички? Здорово, что столько фанатов серии, лично для меня один из лучших фильмов всех времён.


      1. Exchan-ge
        14.09.2021 21:54

        а фотографии не осталось этой таблички?


        Увы, нет — это было в те времена, когда мобильники уже были, но камер в них еще не было.
        А постоянно таскать с собой зеркалку было тяжело — была у меня мысль сфотографировать, но до реализации дело так и не дошло.

        Здорово, что столько фанатов серии


        Так один из самых известных фильмов :)
        (поколение Z — «Матрицу» вообще не смотрели, «ЗВ» смотрели с конца и абсолютно не фанатеют, зато про «Назад в будущее» в курсе все. Любимый детский фильм у них :)