- BrainTools - https://www.braintools.ru -
Привет! С вами Кирилл Тузов, Data Scientist в команде видеоаналитики бэк-офиса Wildberries & Russ.
Камеры видят всё. Вопрос в том, распознают ли наши алгоритмы, что именно они видят, — и насколько быстро, надёжно и без тонны ручной работы это происходит. В этой статье я расскажу, как мы используем Self-Supervised, Zero-Shot и мультимодальные модели, чтобы приблизиться к максимально возможной эффективности.
Видеоаналитикой называют любые подходы и алгоритмы, которые позволяют в автоматическом режиме отслеживать видеопоток и находить интересующие события или объекты.
Мы говорим об аналитике в контексте складских операций, и тут для бизнеса могут быть полезны следующие задачи:
Предотвращение фродовых действий — отслеживание нарушений и реагирование [1] на них в прямом эфире.
Контроль техники безопасности. Не посещают ли сотрудники запретные зоны? Носят ли необходимую экипировку? Как выполняют действия, связанные с опасностью травматизма?
Контроль за логистикой — процессами упаковки, погрузки и разгрузки.
Отслеживание перемещения исполнителей и техники по территории складов и ПВЗ. Оптимизируем не только внешнюю, но и внутреннюю логистику!
Традиционный ответ на подобный набор запросов таков:
Выделяется множество разных ML-задач: image, classification, object, detection, action, recognition и т. д.
Для каждой задачи — собственная архитектура.
Используется большое число разных разметок, потому что для каждой модели разметка должна быть выполнена отдельно и в уникальном формате.
Видеоаналитика Wildberries выполняется в довольно сложных условиях: 100+ складов общей площадью более 3 млн кв. м и 50+ тыс. ПВЗ, подключённых к системе видеоаналитики. В сумме — более 100 тыс. камер.
И сами камеры, и типы обзора различаются — в зависимости от помещения и других условий видимости. Видеопоток также бывает нечётким и шумным.
Что касается инцидентов, мы отслеживаем достаточно редкие события — около 200 штук в день. Поиск инцидентов для создания датасетов не отличается от поиска иголок в стоге сена.
С такими вводными целый зоопарк разнообразных, независимых друг от друга моделей тяжело поддерживать даже технически: один видеофайл или одну картинку нужно прогнать через несколько моделей параллельно. А мы ожидаем, что кейсы будут работать в онлайн-режиме.
При большом количестве моделей и редкости нужных объектов ручная разметка становится узким горлышком, которое сильно затрудняет масштабирование и движение вперёд.
Что делать? Создавать универсальную модель, которая поможет упростить архитектуру и сократить трудозатраты.
Первый шаг — Self-Supervised Learning (самостоятельная супервизия, самоконтроль).
Мы хотим обучить единую модель, которая сможет качественно обрабатывать видео и генерировать универсальные представления из них. При этом мы будем обучать модель на сырых неразмеченных данных. Задача будет формулироваться так, чтобы её можно было контролировать автоматически.
Как проходит обучение [2]? Например, прячем от модели часть видео и просим её восстановить этот фрагмент, чтобы измерить качество работы модели. Когда ребёнок учится говорить, он не понимает смысл слов, так что ему повторяют [3] одно и то же много раз для механического запоминания [4] и осознания контекста. Так и с моделью: скармливаем ей большое количество видео, ничего не объясняя, и она учится самостоятельно определять, что происходит.
Модель генерирует низкоразмерные эмбеддинги, которые учитывают и передают связи между объектами, их расположением в кадре и действиями.
Как пример хорошей реализации предлагаю рассмотреть модель VideoMAE. В архитектуре у неё лежит декодер-энкодер. MAE = Masked AutoEncoder (маскированный автоэнкодер).
Модель получает видео с частичной маскировкой участков, которые должна восстановить, и за счёт этих действий учит связь между кадрами и контекст происходящего:

Разбиваем небольшой видеоклип на фиксированное количество кадров — 16 или 24. Разбиваем каждый кадр на фиксированное количество ячеек и рандомно выбираем малый объём данных, которые сохраним (несколько ячеек, 5–10% всей информации).
Далее передаём объём данных энкодеру. Задача декодера — восстановить изначальный вид видео. При этом мы будем измерять качество только на тех данных, которые были скрыты при обучении.
В версии VideoMAE V2 авторы развили идею: кроме маскировки входных видеопотоков можно добавлять маскировку в пространстве эмбеддингов и прятать около 50%.

В этой модели также оптимизирован процесс обучения и есть поддержка тяжёлых Backbones — порядка миллиарда параметров. На выходе — модель, которая умеет генерировать качественные эмбеддинги и показывает отличные результаты на целом ряде задач.
Например, в Action Classification по метрике Top 5 Accuracy модель занимает первое место на нескольких бенчмарках и является на данный момент State-of-the-Art.

В других рейтингах модель также держит высокие позиции. Например, пятое и четвёртое место на датасетах Kinetics-400 и Kinetics-600 соответственно.
Temporal Action Localization — ещё один пример задачи, которую решает модель. Мы предполагаем, что в видео не одно, а несколько событий, и задача в том, чтобы предсказать, когда именно они происходят. В качестве предсказания модель выдаёт набор действий и время их начала и окончания.
По метрике Mean Average Precision (mAP) модель занимает четвёртое и пятое место в нескольких датасетах FineAction и THUMOS’14. Это хорошие позиции для повышенной сложности.

Как ещё одну задачу со звёздочкой рассмотрим Spatio-Temporal Action Detection. Теперь важно не только то, когда действие происходит, но и где конкретно в кадре оно происходит. На выходе мы ожидаем от модели получить покадровый набор Bounding Boxes и описание самого действия. По метрике Mean Average Precision (mAP) модель снова занимает первое место, являясь State-of-the-Art на датасете AVA-Kinetics. Великолепно!

Что нам даёт модель, обученная через Self-Supervised подход?
Один Backbone — множество задач. Вместо того чтобы заводить и поддерживать целый ряд независимых тяжёлых моделей, мы обучаем один тяжёлый Backbone, к которому можно подключать головы для даунстрим-задач.
Обучение без разметки. Backbone обучается на огромном количестве сырых неразмеченных данных.
Масштабируемость. Благодаря единому фундаменту систему легко развивать. Чтобы подключить новый сценарий, мы делаем новую специализированную голову и обучаем её на сравнительно небольшом объёме данных.
Устойчивость к шуму и реальным условиям. Благодаря тому, что модель обучается на больших объёмах данных, куда включены все возможные виды обзора, ожидаемые на складах и ПВЗ, она может работать устойчиво в любых условиях.
Помогут Zero-Shot и мультимодальные модели!
Zero-Shot подход заставляет предсказывать по текстовому описанию детекции, классы и объекты, которых могло не быть в обучающей выборке в явной форме.
Допустим, модель не видела зебру при обучении, но она знает, как выглядят полоски и как выглядит лошадь. Если ей сказать, что зебра — это полосатая лошадь, она сможет её распознать:

Этого можно достичь, если при построении и обучении модели объединить пространство визуальных и текстовых признаков.
Посмотрим, как это происходит на примере модели CLIP. У модели есть два входа: текстовый и картиночный. При обучении мы подаём ей соответствующие пары:

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

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

Современные визуально-языковые модели — мощный инструмент, который по текстовому описанию может решать большое количество задач. Быть классификатором и детектором изображений, описывать найденные объекты, читать тексты на разных языках и «понимать» контекст.
Кроме изображений современные модели хорошо решают даунстрим-задачи, связанные с видеофрагментами.
Вот пример, как модель решает задачу Structured Video Captioning (структурированное описание происходящих событий в заданном формате):


Однако мы в Wildberries & Russ работаем на огромных объёмах данных, и наша производительность всё-таки ограничивается некоторыми физическими препятствиями. Возможно, в будущем видеоаналитика сведётся к языковым моделям, но сейчас это сложно реализовать. Пока нам доступно лишь использование в асинхронном режиме — для решения очерченного круга задач.
Что это за задачи?
Во-первых, Zero-Shot разметка или предразметка данных. Мультимодальные модели могут полностью создать разметку, если контекст задачи позволяет, либо быть мощным ассистентом для асессора.
Во-вторых, фильтрация ложных срабатываний. Пусть предыдущая архитектура генерирует детекции, а мы для улучшения качества будем дополнительно их прогонять через языковую модель.
В-третьих, современные модели могут автоматически описывать инцидент. Фиксируем срабатывание, берём видеоклип и просим модель описать, что происходит.
Но не забываем [5] об осторожности! Чтобы получать качественные ответы, нужно использовать целый набор техник и максимально сократить количество степеней свободы VLM:
детально объяснять контекст: что, где, когда, как;
использовать выходы других моделей как подсказку;
чётко сформулировать задачу, задать формат вывода;
давать Few-Shot примеры.
На самом деле — это тема для отдельного доклада. Дайте знать, если вам интересно!
Построить универсальную архитектуру, которая будет устойчива к масштабированию, — возможно! Она будет выглядеть так:

Ещё раз пошагово. Берём сырой видеопоток, подаём его на вход единому Backbone. При этом Backbone обучается на том же сыром материале — мы собираем его без дополнительной разметки. Backbone генерирует низкоразмерные эмбеддинги, которые идут на специализрованные головы.
По срабатывании голов мы в асинхронном режиме прогоняем данные через мультимодальные модели и получаем качественную фильтрацию выходов. А также автоматически пополняем датасеты и завершаем их разметку для дообучения голов.
Какие преимущества даёт этот подход?
Заметное сокращение наших усилий на разметку. Часть задач мы можем разместить полностью автоматически. Для другой части появляется мощный ИИ-ассистент.
Сокращение независимых мощных моделей, которые сложно содержать для качественной работы всей системы. Теперь у нас одно или несколько универсальных ядер, куда мы навешиваем легковесные головы.
Упрощение внедрения новых классов и сценариев. Раньше для этого требовалось предразметить огромное количество данных, что создавало непомерно крупные датасеты. Сейчас подключение нового сценария может сводиться к изменению текстового промпта.
Какие выводы я сделал, пока разбирался с моделями?
Система должна быть гибкой, потому что она работает на больших данных, по разнообразным сценариям и в сложных условиях. Обеспечить гибкость помогает Self-Supervised Learning. Это направление располагает моделями, которые способны генерировать качественные эмбеддинги и представления.
Мультимодальные модели позволяют значительно сократить усилия на подключение новых сценариев и поддержку текущих за счёт автоматической обработки данных.
Комбинируя эти методы, можно создать крепкий универсальный пайплайн, который будет хорошо справляться со всеми вызовами и испытаниями в видеоаналитике.
Буду рад обсудить наши решения в комментариях. И желаю удачи в экспериментах с видеоаналитикой!
Разборы, новости, экспертиза наших разработчиков и вакансии — в телеграм-канале [6], подписывайтесь!
Автор: Azunyasha
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/19020
URLs in this post:
[1] реагирование: http://www.braintools.ru/article/1549
[2] обучение: http://www.braintools.ru/article/5125
[3] повторяют: http://www.braintools.ru/article/4012
[4] запоминания: http://www.braintools.ru/article/722
[5] забываем: http://www.braintools.ru/article/333
[6] телеграм-канале: https://t.me/wb%5C_tech
[7] Источник: https://habr.com/ru/companies/wildberries/articles/940530/?utm_campaign=940530&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.