
Обращали ли вы когда-нибудь внимание на то, сколько всего в кадре упускает наш мозг при просмотре фильма? Каждый раз, когда вы пересматриваете своё любимое кино, вы замечаете что-то новое.
Возьмём для примера великое – “Назад в будущее”. Главное, что захватывает в фильме, это, конечно, сюжет. Но во сколько лет на какой просмотр вы узнали, что в конце фильма магазин «Две сосны» поменял своё название на «Одинокая сосна»? Это происходит потому, что Марти сбивает дерево на ферме Пибоди, влетев в прошлое на DeLorean DMC-12. В первый раз это тяжеловато увидеть, но это важная деталь сюжета.
А помните ли вы диван, на котором так уютно сидели “Друзья” в квартире Моники и Рейчел? Наверняка, у нас всех в памяти хранится его общий вид, но когда заходишь в магазин и хочешь купить такой же, вряд ли вспомнишь всё в деталях.
В момент просмотра фильма, мы часто сфокусированы на сюжете и происходящем на переднем плане, из-за чего можем упускать детали, без которых фильм может показаться не столь продуманным.
Но не беспокойтесь. В 2021 это больше не проблема, ведь теперь есть платформа компьютерного зрения Layer, которая смотрит кино вместе с вами. От неё никаким деталям не спрятаться и не скрыться. Давайте заглянем “под капот”?
![Тот самый магазин в начале и конце фильма [Universal Pictures, Amblin Entertainment, 1985, кадр из фильма «Назад в будущее»] Тот самый магазин в начале и конце фильма [Universal Pictures, Amblin Entertainment, 1985, кадр из фильма «Назад в будущее»]](https://habrastorage.org/getpro/habr/upload_files/cc2/a7f/eb0/cc2a7feb0c3d46a23b6ea55555e6a665.png)
Небольшое отступление
Это статья о компьютерном зрении и искусственных нейронных сетях. Она предполагает некоторое знакомство читателя с вопросом, поскольку текстов по данной тематике сейчас очень много как в нашем блоге, так и на Хабре в целом:

Поэтому какие-то вещи я буду опускать и считать, что читатель с ними уже знаком.
Но в общем же, я всё равно постараюсь сохранить баланс и построить повествование таким образом, чтобы удовольствие получил как подкованный читатель, так и не очень близко знакомый с темой. Так что не важно, кинолюбитель ли вы и зашли сюда узнать о том, как сделана эта классная распознавалка из, например, 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, кадр из фильма «Иллюзия обмана»]](https://habrastorage.org/getpro/habr/upload_files/c12/1b1/cda/c121b1cdaea2263df50e89f4a462f519.png)
![А вот так в деле [Marvel Studios, LLC, 2018, кадр из фильма «Человек-муравей и Оса»] А вот так в деле [Marvel Studios, LLC, 2018, кадр из фильма «Человек-муравей и Оса»]](https://habrastorage.org/getpro/habr/upload_files/f21/597/ca8/f21597ca81da6d74374580bdc9044f5b.png)
В данный момент мы работаем с:
-
Лицами – детекция и распознавание лиц на изображении.
-
Локациями – определение места действия в кадре, с точностью до метро.
-
Одеждой – детекция и поиск похожих элементов одежды (в магазинах-партнёрах), присутствующих в кадре.
-
Мебелью – детекция и поиск похожих элементов интерьера, присутствующих в кадре.
-
Едой – детекция блюд и пищевых продуктов с фиксированным набором классов в сверхсложных условиях, также есть возможность поиска похожей еды.
![Распознанная локация [Paramount Pictures (с), 1953, кадр из фильма “Римские каникулы”] Распознанная локация [Paramount Pictures (с), 1953, кадр из фильма “Римские каникулы”]](https://habrastorage.org/getpro/habr/upload_files/477/4c1/77a/4774c177a20a35248a79145601b5f120.png)
Ещё несколько категорий находятся в процессе разработки или тестирования, перечисленное – лишь часть возможностей сервиса. Помните, что в заголовке я заявил, что Layer видит больше, чем ваш глаз? Это правда.
Человек не способен с такой скоростью отслеживать всё это веселье, происходящее во всех категориях предметов в кадре, а наша платформа способна.
Конечно, если рассматривать задачи отдельно, то точность пока не везде лучше человеческой, но по сумме, с учётом скорости распознавания и количества обрабатываемой в момент времени информации, вполне можно заявить – система обходит зрителя.
Здесь я показываю, почему фильмы для алгоритмов – это здорово
Поскольку в основном я тут говорю о платформе в разрезе фильмов, расскажу подробнее почему распознавать что-либо в фильмах это особенно весело и задорно:
-
Кинематографу около ста лет и только промышленных фильмов, без учёта арт, грайнд и прочего хауса, а главное, без учёта сериалов, уже вышло более 330 000. Все они из разных эпох, сняты с использованием разной техники, у них разное качество, цвет и прочее.

Lumière, 1896, кадр из фильма «Прибытие поезда на вокзал Ла-Сьота». Это один из первых фильмов в истории -
В отличие от ADAS-задач или задач видео-аналитики, работа над распознаванием сущностей в кадре усложняется тем, что визуальный ряд фильмов ограничивается только лишь фантазией режиссера \ сценариста \
ИИ. Поэтому приходится жить и действовать в условиях, когда пришельцы могут быть с телом-помидором. И никак заранее не получится подготовить сеть к таким ситуациям. А с контекстом у алгоритмов пока сложновато.![Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”] Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”]](https://habrastorage.org/r/w780q1/getpro/habr/upload_files/622/476/e62/622476e623a83d7158ff41a0080797bf.jpeg)
Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”] -
Никто в своём уме не начнёт делать красивое боке (оптическое размытие заднего фона и объектов, не попавших в ГРИП) в камере на Тесле или в системе видеонаблюдения. В фильме это обязательно будет. Объекты, интересующие нас, могут при этом оставаться вне фокуса. Все прочие оптические, компьютерные эффекты
итрипы режиссёратакже создают проблемы.![На этом кадре ГРИП проходит узкой полосой там, где люди. Еда на переднем фоне и всё, что на заднем, – размыто. Но от нас не спрячешься. [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, кадр из фильма «Соседи сверху»]](https://habrastorage.org/r/w1560/getpro/habr/upload_files/bb9/c58/cfb/bb9c58cfbd06100bc6b65e2762b752f7.png)
На этом кадре ГРИП проходит узкой полосой там, где люди. Еда на переднем фоне и всё, что на заднем, – размыто. Но от нас не спрячешься. [Impossible Films,Institut Català de les Empreses Culturals (ICEC), Movistar+, Radio Televisión Española (RTVE), Sentimentalfilm, Televisió de Catalunya (TV3), 2020, кадр из фильма «Соседи сверху»] -
Сцены в фильмах обрываются и начинаются беспощадно, нередко подбрасывая сюрпризы. Например, там, где лежал апельсин, иногда может возникнуть баскетбольный мяч – по закону подлости тоже оранжевый и тоже круглый. Переход сцен, в целом, отлавливается по тому факту, что кадры сменились слишком резко, но не всегда. Так же резко сцена может вернуться и к предыдущей, но система уже потеряла все отслеживания.
-
Кино снимают все нации, с, зачастую, очень разной культурой и мировоззрением, а значит нельзя ожидать, что, например, еда или одежда будут ограничены вашим пониманием этого термина. Например:

Твой 2020 будет прекрасен
Здесь я углубляюсь в технические детали
Итак, как же всё в Layer устроено?
Я не буду касаться той части, которая не про компьютерное зрение и алгоритмы. Безусловно, в таком огромном и сложном сервисе есть развесистый бэкенд и фронтенд, и их устройство заслуживает отдельной статьи, а может и не одной. И они будут.
Поговорим сейчас про ML-часть.
Все задачи, как вы догадываетесь, разные. Локации, еда, одежда, лица, мебель – несравнимые вещи, у всех в кадре свои законы. Локации, чаще всего, сменяются одна за другой, при этом герой иногда весь фильм может проходить в одной и той же одежде, она не часто сменяется резко. Зато она есть в подавляющем большинстве фильмов, а вот еда фигурирует нечасто и очень редко нормально различима (реже, чем вы думаете, обратите внимание при следующем просмотре). Кроме того, актёры, которые появятся на экране, заранее известны, а локации и еда – нет. Людей в кадре можно продолжать отслеживать и когда лицо пропало, но всё ещё видно тело, а куда делась еда – уже не узнать. И так далее.
Но кое-что всё же объединяет эти задачи. Чтобы что-то распознавать, это нужно сначала найти. Поэтому в любой из задач, в той или иной мере, первый этап – работа детектора. Обычно речь идёт о чем-то таком: подали на вход изображение – на выходе получили описывающие прямоугольники и классы объектов в них. Но в реальности детекторы мы используем в разных категориях и задачах очень разные: есть более универсальные, есть более специализированные, есть те, которые выдают эмбеддинги для объектов, и те, которые определяют маску объекта внутри описывающего прямоугольника. Но все они в итоге служат одной цели: найти объект, локализовать его позицию и формы как можно точнее, а также присвоить ему класс.

Без детектора в том или ином виде никак не обойтись. А вот происходящее за ним может сильно варьироваться в зависимости от целей и задач. Я покажу это на примере мебели: сначала мы посмотрим на базовый пайплайн с его вариациями, а затем поговорим о более “продвинутых” улучшениях, которые есть в нашем коммерческом решении.
![Пример работы детектора для категории мебели [Waverly Films, Warner Bros., 2015, кадр из фильма «Стажёр»] Пример работы детектора для категории мебели [Waverly Films, Warner Bros., 2015, кадр из фильма «Стажёр»]](https://habrastorage.org/getpro/habr/upload_files/093/a98/41a/093a9841ad44afd17b4ecf203d2f8735.png)
![Пример работы детектора для категории мебели (2) [20th Century Fox, Summit Entertainment, Regency Enterprises, Weed Road Pictures, 2005, кадр из фильма «Мистер и миссис Смит»] Пример работы детектора для категории мебели (2) [20th Century Fox, Summit Entertainment, Regency Enterprises, Weed Road Pictures, 2005, кадр из фильма «Мистер и миссис Смит»]](https://habrastorage.org/getpro/habr/upload_files/c5a/3b1/164/c5a3b11641302a25c9e2be70c506d362.png)
Есть три шага, которые могут быть (или не быть, в зависимости от задачи) после этапа детекции (или даже вместо него) и формируют простейшую последовательность действий для подобных решений.
Шаг 1. Однажды найденное желательно не терять и отслеживать между кадрами, потому, что нужно работать с сущностями объектов, а не просто отдельными изображениями. Зная id объекта «сквозь» кадры, можно сократить объём вычислений, но, что ещё важнее, повысить точность работы при помощи агрегации результатов. Для человека такие вещи зачастую очевидны, а для алгоритмов компьютерного зрения представляют страшную проблему.
Используются для решения этой проблемы очень разные алгоритмы. Они могут быть основаны как на оптических потоках или корреляционных фильтрах (так называемые классические), так и на нейросетях. Но общая цель везде одна и проста – узнать, куда объект из текущего кадра денется на следующем.

Если говорить о конкретно нашем модуле мебели, то мы в основном используем 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, кадр из фильма «Из машины»]](https://habrastorage.org/getpro/habr/upload_files/512/04d/47d/51204d47d16988eaad939ea923ba4e5a.png)
Продравшись сквозь все эти неприятности и применив или не применив описанные выше решения, в конце концов, мы получаем хорошие и рабочие эмбеддинги каждого объекта. Теперь мы можем сравнивать этот объект с эталонами в базе:

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

На примере сверху показано по одному лучшему товару, но на деле, как правило, пользователь предпочитает видеть некий топ наиболее похожих. Часто это 5 или 10 лучших совпадений. Но мы покажем всё, что есть:
![Итог, ради которого мы старались [Bright/Kauffman/Crane Productions, Warner Bros. Television, 1994 — 2004, кадр из телесериала «Друзья»] Итог, ради которого мы старались [Bright/Kauffman/Crane Productions, Warner Bros. Television, 1994 — 2004, кадр из телесериала «Друзья»]](https://habrastorage.org/getpro/habr/upload_files/777/3d6/fb1/7773d6fb12ffd71fb5470c21acd54cf1.png)
Вот мы и прошли основные моменты на пути распознавания объектов в кадре на примере мебели. Но помимо этих основных пунктов, есть ещё масса нюансов, которые важно учитывать. Перечислю лишь некоторые из них:
-
Сильные отклонения в визуальных представлениях и\или качестве между искомым изображением и изображениями в индексе могут привести к тому, что все расстояния съедут или не будут работать вообще.
Hint: Лучше всего решать на этапе обучения, сразу объясняя модели, что так может и будет происходить, но помимо этого можно оценивать качество, можно ввести оценку неуверенности для эмбеддингов в модель. Здесь очень много путей для улучшений и этот пункт — один из ключевых моментов всего метрического обучения.
-
В самом индексе миллионы или даже десятки миллионов товаров. Многие из них похожи на искомый, но не являются желательным ответом. При этом искать нужно моментально, а ассортимент постоянно обновляется: что-то пропадает из наличия, что-то появляется, а актуальными нужно быть всегда.
Hint: С поиском всё решаемо, например. А вот с остальным – исключительно инженерное искусство разработки.
-
В задаче могут быть проблемы с контекстом. Например, шкаф может продаваться и отдельно, и в составе гарнитура. Что именно ищут – вопрос.
-
Качество распознавания сильно зависит от качества работы детектора и точности описывающего прямоугольника. Любая неточность – и в объект захватывается лишнее: фон или, что хуже, другой объект. Маски решают эту проблему лишь частично, зато добавляют новых.
-
Фильмы – это ~24 кадра в секунду и 120 — 300 тысяч кадров в сумме. А значит, что у многих объектов возникнет ситуация, когда надо получить результат не с 1 изображения, а с серии. Часто — очень большой серии. И если даже объекты отслеживать, но не агрегировать правильным образом их эмбеддинги, то можно получить противоречащие результаты.
Hint: Даже не пытайтесь усреднять все полученные для объекта векторы 🙂 Огромная ошибка, которую очень любят совершать по неопытности. А вот грамотное взвешивание эмбеддингов может хорошо помочь.
Не обязательно все эти проблемы возникнут. Всё очень сильно зависит от задачи и конкретного случая. Какие-то сложности и вовсе не проявятся, другие окажутся критичными для такого применения.
Увы, но развитие темы выходит за рамки запланированного и разумного объема. Возможно, что в будущем я углублюсь в детали и посвящу отдельные статьи перечисленным пунктам, поскольку решений в каждом очень много и рассуждать хочется долго.
Кроме того, я не стал затрагивать другие важные вопросы промышленной системы. Безусловно, всё описанное выше работает под огромной нагрузкой и при этом должно исполняться в реальном времени. Чтобы обеспечить это, мы потрудились и с научной, и с инженерной точки зрения. Хотелось бы рассказать вам в будущем и об этом.
И, как говорил один хитрый сыщик, ещё кое-что. Эта статья – в некотором роде анонс. На момент выпуска текста, мебели ещё нет в общедоступном применении, но всё уже работает, и в скором времени эта функциональность станет доступна всем пользователям умных устройств Sber. Мы будем очень рады вашим тестам и фидбеку. Хотя, быть может, что вы читаете этот текст не из 2021, и в вашем времени Layer давно стал неотъемлемой частью просмотра кино дома? 🙂
Здесь я прощаюсь
Если вам хочется узнать о нас больше, то мы есть в социальных сетях, у нас есть различные видео и один большой подкаст, где я много говорю о Layer. Я собрал эти ссылки в одном месте, и вы можете посмотреть \ послушать всё это вот тут.
А ещё мы всегда ищем новые кадры! Если компьютерное зрение – ваша профессия и вы хотите стать частью команды, пишите мне в Телеграм.
P.S. Несколько благодарностей:
-
Александру Коновалову — за потрясающие иллюстрации к этому посту.
-
Кристине Лавренюк — за огромный вклад в мотивацию и редактуру.
ссылка на оригинал статьи https://habr.com/ru/articles/574892/

![Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”] Вот как бывает в фильмах [Four Square Productions, 1978, кадр из фильма “Нападение помидоров-убийц”]](https://habrastorage.org/getpro/habr/upload_files/622/476/e62/622476e623a83d7158ff41a0080797bf.jpeg)
![На этом кадре ГРИП проходит узкой полосой там, где люди. Еда на переднем фоне и всё, что на заднем, – размыто. Но от нас не спрячешься. [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, кадр из фильма «Соседи сверху»]](https://habrastorage.org/getpro/habr/upload_files/bb9/c58/cfb/bb9c58cfbd06100bc6b65e2762b752f7.png)

Добавить комментарий