Обучение компьютеров классификации видео

Содержание

  1. Введение
  2. Мотивация
  3. Предпосылки
  4. Понимание и подготовка данных
  5. Извлечение видеокадров
  6. Создание набора данных для обучения и тестирования
  7. Модельная архитектура и обучение
  8. Оценка
  9. Заключение и дальнейшая работа
  10. использованная литература

1. Введение

Видео можно определить как серию изображений / кадров, извлеченных за период времени, что вводит новое измерение в кадры / изображения во временном направлении.

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

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

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

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

2. Мотивация

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

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

3. Предпосылки

Предполагается, что читатель знаком со следующими темами глубокого обучения:

  • Сверточная нейронная сеть
  • Долговременная кратковременная память
  • Трансферное обучение
  • Обратное распространение
  • Категориальная кросс-энтропийная потеря
  • Оптимизатор (в частности, Адам, Надам)
  • Керас и Tensorflow
  • Выбывать

4. Понимание и подготовка данных

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

UCF50 (Университет Центральной Флориды, 50) - это набор данных, используемый для анализа различных типов проблем распознавания действий. Он состоит из реалистичных видеороликов различных видов деятельности, собранных с YouTube. Он состоит из 50 различных типов категорий действий, где есть 25 групп видео для каждой категории действий. Более того, все 50 категорий действий сгруппированы в 5 различных типов действий следующим образом:

  • Виды спорта
  • Человеческое взаимодействие
  • Движение тела
  • Игра на музыкальных инструментах
  • Взаимодействие человека с объектом

Подготовка данных:

Во-первых, чтобы избежать ненужных вычислительных затрат, я изменил размер всех кадров / изображений, извлеченных из видео, где image_height и image_width являются их размерами. Теперь, поскольку видео представляет собой набор серий кадров за период времени, поэтому мы можем извлечь очень большое количество кадров, но из-за ограничения вычислительной мощности максимальное количество обучающих изображений, передаваемых как одна последовательность для каждого класса, составляет ограничено 2000 кадрами на видео, представленными max_seq_length.

После этого я создал список классов, на которых я буду тренировать свою модель. Здесь я использовал 12 классов, а именно WalkingWithDog, Basketball, Swing, HorseRace, PushUps, Rowing, Diving, Drumming, GolfSwing, JavelinThrow, Kayaking, PullUps из-за ограничения вычислительной мощности, но можно выбрать большее количество классов для обучения модели.

5. Извлечение видеокадров

Теперь создается функция extract_frame для извлечения кадров из видео, чтобы видео можно было распаковать перед процессом обучения, что в конечном итоге экономит много времени на обучение. Для выполнения этой задачи в OpenCV есть класс под названием VideoCapture, который помогает в захвате видеофайлов, последовательностей изображений и т. Д. Теперь извлеченные видеокадры изменяются до размера (image_height, image_width). Но здесь следует отметить, что значение пикселя кадров находится в диапазоне от 0 до 255, поэтому мы будем нормализовать кадры, чтобы значение пикселя было от 0 до 1, чтобы оно стало инвариантным к масштабу после нормализации . После этого 2000 кадров из каждого класса случайным образом выбираются и добавляются к списку функций, а метки, соответствующие каждому классу, добавляются в список меток, и, наконец, метки классов преобразуются в векторы с горячим кодированием.

Итак, после этой предварительной обработки у нас есть два массива NumPy: один - это функции (24000, 64, 64, 3), где 24000 - общее количество кадров (общее количество кадров = количество кадров в каждом классе * количество классов), (64 , 64) - это размер кадров, 3 - это количество каналов (RGB), а другой массив NumPy - это метки (24000,).

6. Создание наборов данных для обучения и тестирования.

Теперь я разделил функции и метки массивов NumPy, чтобы создать обучающий и тестовый набор данных, сохранив shuffle = True.

7. Архитектура модели и обучение

Подход-1

Здесь я сначала попробовал архитектуру модели ConvLSTM2D, которая вдохновлена ​​моделью, определенной в статье Сверточная сеть LSTM: подход машинного обучения для прогнозирования текущей погоды в отношении осадков, составленный Xingjian Shi et al. [1]

Идея, лежащая в основе модели ConvLSTM2D, аналогична долгосрочной краткосрочной памяти (LSTM), но вместо применения плотных полносвязных слоев для соединения различных вентилей в LSTM здесь используются фильтры свертки.

Теперь давайте поймем разницу между ConvLSTM и обычным LSTM, используя блог Кристофера Олаха [2]. LSTM имеет 3 ворот:

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

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

Теперь в ConvLSTM2D вместо использования плотного слоя в двух комбинациях функций мы будем использовать ядра свертки размером (3,3) и перемещать их по карте функций для обработки кадра и извлечения из него пространственных функций. После обработки этих данных слоем ConvLSTM2D мы получаем на выходе карту объектов размером 64 * 64 * 3. После этого полученная карта характеристик пропускается через слой Dropout с коэффициентом отсева = 0,2. После этого мы применили сплющивание и передали его на плотный слой с 256 нейронами и функцией активации ReLU. Наконец, он проходит через другой плотный слой с блоком активации softmax для классификации данных.

Используемая архитектура модели:

Здесь я использовал категориальную кросс-энтропийную потерю и оптимизатор Адама для обучения модели.

Результаты:

Наконец, предложенная архитектура была оценена, и производительность была измерена путем количественной оценки эффекта максимального количества кадров. Сначала мы поняли, как работать с видеоданными, затем извлекли кадры, обучили модель классификации видео и, наконец, получили сопоставимую точность 73,8% на тестовых данных. Из графика ниже видно, что после некоторой эпохи потери при проверке начали расти по сравнению с потерей при обучении. Это означает, что наша модель нуждается в некоторой настройке.

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

Подход-2

Теперь мы пытаемся придумать некоторую модель, которая не только извлекает пространственную информацию из видеокадров, но также извлекает из них временную информацию. Для этого в прошлом многие авторы предлагали различные архитектуры. Подобно обучению сети свертки 3D на всем видео, объединение двух потоков, которые работают параллельно (предложено Katparthy et al.), Но этот подход не будет работать для более длительных видео, поскольку он не обрабатывает зависимости более длинных последовательностей. Песня. и др. »предложили подход использования свертки во временной области для извлечения признаков и подачи извлеченных признаков в небольшой пул сетевых объектов LSTM. Но использование слишком глубокой сверточной сети может увеличить время обучения модели.

Поэтому вместо того, чтобы строить сверточную нейронную сеть с нуля для решения нашей задачи, я повторно использовал существующий VGG-16, обученный на разных наборах данных.

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

VGG-16 - это 16-слойная сеть, в которой весь сверточный слой имеет ядра / фильтры размером 3x3 с шагом = 1 и заполнением = одинаковое. Все слои максимального пула имеют ядра размером (2x2) и шагом = 2. Чтобы узнать больше о VGG-16, нажмите здесь.

Здесь я использовал VGG-16 в качестве инструмента разработки функций, поэтому вместо изучения всей сети VGG-16 отбрасываются последние плотно связанные слои. Мы заменили последние полностью связанные уровни VGG-16 на стратегию под названием Global Average Pooling. Для каждой категории проблемы классификации Global Average Pooling помогает нам создать одну карту функций в последнем плотном сверточном слое.

По сути, мы удалили плотные слои из верхней части карты функций и заменили их средним значением каждой карты функций и ввели их в слой softmax.

Теперь можно подумать, в чем преимущество выполнения этой дополнительной задачи?

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

Архитектура ВГГ-16:

Здесь следует отметить, что, поскольку используется предварительно обученный слой VGG-16, поэтому перед обучением модели нам необходимо заморозить ее (trainable = False), чтобы она не обновлялась во время обратное распространение.

После этого мы передали модель VGG-16 на слой с распределением по времени, который позволяет применять слой к каждому временному срезу ввода. Это помогает избежать риска обнаружения разных функций разными потоками свертки, применяя один и тот же слой к разным входам и создавая один выход для каждого входа.

Теперь выходные данные слоя с временным распределением (video_frames_encoded) передаются в сеть LSTM. Мы определили модель следующим образом:

Давайте посмотрим на сводку модели:

Здесь я использовал 5 плотно связанных скрытых слоев с 1024, 512, 526, 128, 64 нейронными единицами вместе со слоем исключения между ними, который определяет% нейронов, которые будут удалены из каждого слоя.

Гиперпараметры во время тренировки:

Модель обучалась в течение 30 эпох с начальной скоростью обучения 0,0001 и размером пакета 64. Однако после обучения модели на различных значениях скорости обучения я получил значение наименьших потерь и лучшую точность при скорости обучения 0,002.

Здесь я использовал оптимизатор Adam с Nesterov Momentum (так как он позволяет избежать застревания в седловой точке).

8. Оценка

Наконец, предложенная архитектура была оценена и производительность была измерена. На этот раз точность тестовых данных значительно улучшилась, а потери при проверке также были уменьшены по сравнению с потерями при обучении. Я получил точность примерно 90% с потерей обучения 0,15 и потерей валидации 0,18.

9. Заключение и дальнейшая работа

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

Вы можете получить доступ к коду из здесь.

Для улучшения решения необходимо внести многочисленные изменения, такие как:

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

10. Ссылки

  1. Https://dl.acm.org/doi/10.5555/2969239.2969329
  2. Https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43793.pdf
  3. Https://ieeexplore.ieee.org/document/8422654
  4. Https://arxiv.org/abs/1502.04681
  5. Https://arxiv.org/abs/1711.08200
  6. Https://arxiv.org/abs/1510.07712
  7. Https://papers.nips.cc/paper/2014/file/a14ac55a4f27472c5d894ec1c3c743d2-Paper.pdf
  8. Https://arxiv.org/abs/1510.00562
  9. Https://arxiv.org/abs/1511.03476
  10. Https://papers.nips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
  11. Https://colah.github.io/posts/2015-08-Understanding-LSTMs/

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