Журнал / польза

Как машины видят людей (и котов)

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

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

Более того, если специалиста по картинкам спросить, можно ли ML-методами изучать, например, современный фильм (24 или 30 FPS, размер порядка 1,5 Гб на минуту), то он удивится: такое в работу не пойдёт никогда.

При ML-анализе видео обычно имеют дело с тысячами небольших файлов по 3–5 секунд — с FPS 5 кадров в секунду и разрешением 112 на 112 пикселей. То есть ML-видеоанализ — это буквально пиксель-хантинг, замешенный на хорошем знании математики.

Расскажем о важных задачах и методах, которые используют в компьютерном видеоанализе.

Classification

Когда через Classification прогоняют картинку, получают ответ на вопрос «Что это?». На фото — тихоокеанский лайнер, кошка, лицо ребёнка? А в случае с видео отвечают на вопрос «Что тут происходит?».

На входе — короткое видео, на выходе — распределение вероятностей того, какое действие изображено.

Самый простой вариант — разделить видео на кадры и обучиться на всех кадрах независимо через свёрточную нейросеть (такие нейронки заточены на распознавание образов). А после — усреднить вероятности. Если на видео кот поднимает передние лапы, то по паре кадров мы уже можем понять, что кот прыгает.

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

Late Fusion

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

Кадры пропускают через свёрточную нейросеть (CNN), а после полученные эмбеддинги выпрямляют в строку. Затем строку пропускают через классификатор, который показывает тип действия.

Однако у Late Fusion есть ограничения. Например, если проанализировать видео, на котором кот прыгает, то можно понять, что у него поднимаются и опускаются лапы. А что, если кот просто тянется наверх — и прыгать не собирается? Низкоуровневые признаки могут помешать нам получить адекватный результат. Этого можно избежать, если прогонять через CNN не кадры в отдельности, а итоговую строку.

Иногда используют другой метод — Slow Fusion. В нём вместо двухмерной свёрточной нейросети используют трёхмерную CNN, пропуская через модель все кадры сразу.

В отличие от линейных слоёв, у свёрточных нейросетей есть важное свойство — shifting invariants. Неважно, когда и где на картинке появилась кошачья морда, свёрткой можно пройтись и найти исходный фрейм. Однако так теряется temporal invariants — больше нельзя найти на видео момент, в котором кот именно прыгнул.

Re-Identification

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

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

Чаще всего используют Triplet Loss — это метод, который вычисляется на основе троек. ML-специалист пишет энкодер, который будет группировать объекты из одного класса и отделять объекты из другого класса. Однако такой метод тяжеловато работает со сложными датасетами и большими видео: триплетов много, количество растёт с размером датасета — и число «плохих» троек будет расти.

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

Другой метод — Central Loss. Он группирует объекты из одного класса. Для каждого класса он считает центроиды и приближает эмбеддинг объекта к этому центроиду.

Такой метод активно используют стартапы, которые «идентифицируют» одежду по фотографиям людей. В таком случае берут Central Loss, а к нему ещё Triplet Loss. Центроиды считаются по текущему batch отдельно для positive- и для negative-класса.

Object Tracking

И наконец, обучение ML-моделей позволяет натурально «пасти котов» на видео.

Представим, что у нас есть видео с движущимся объектом (мы уже поняли с каким). Наша задача — с высокой вероятностью знать, что кот, которого мы выделили на видео в момент времени t, будет тем же самым котом в момент t + 1000 секунд.

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

К примеру, в 2021 году система Object Tracking на авиаремонтном предприятии заметила, что сотрудник не положил на место специальный ключ (однако ключ вроде бы лежал на месте). Когда инструмент проверили, оказалось, что сотрудник просто забыл его во время ремонта в технической полости лайнера, испугался — и положил на полку похожий инструмент, который он нашёл в другом цеху. Ключ достали, работнику сделали замечание, лайнер улетел благополучно.

Есть несколько способов решать задачу трекинга объектов:

  • Tracking by Detection. При этом способе трекер выделяет объекты, а детектор «поправляет» выделение и присылает id.
  • SORT. В этом методе сперва выделяют объект, а после с помощью метода predict пытаются предсказать его положение в момент времени t. Этот фреймворк даже не смотрит в картинку, не учитывает внешность объекта. А ещё в этом методе происходит множество identity switch.
  • Deep SORT — это SORT с re-id-сеткой. Дополнительно Matching Cascade позволяет мэтчить текущие объекты с теми, что потеряли один, два и более треков назад.

На видео обнаружено что-то вроде заключения

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