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

В этой статье я расскажу, как мы можем построить нейронную сеть для автоматической идентификации человеческих действий. Хотя это кажется простой и тривиальной задачей для человека, искусственной системе это сложно сделать. Распознавание действий на основе видео направлено на решение этой проблемы путем определения различных действий из видеоклипов. Это важная задача для понимания видео с широкими приложениями в различных областях, таких как безопасность (Meng, Pears, and Bailey 2007), здравоохранение (Gao et al. 2018) и анализ поведения (Poppe 2010). К практическим применениям распознавания видеодействий относятся мониторинг поведения пожилых людей для улучшения условий проживания с уходом, автоматизированные системы видеонаблюдения и многое другое.

Цель этой статьи - предоставить учебное пособие для нашего проекта с открытым исходным кодом AutoVideo (GitHub), всеобъемлющего и простого в использовании набора инструментов для распознавания действий при видео. В этом руководстве вы узнаете:

(1) как обучить нейронную сеть, которая может предсказывать действия человека;

(2) как использовать инструменты автонастройки, чтобы сэкономить ваши усилия по настройке гиперпараметров;

(3) как обучить модель на ваших пользовательских наборах данных.

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

Обзор

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

Начиная

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

Установка:

Чтобы установить пакет, убедитесь, что в вашей системе Linux / MacOS установлены Python 3.6 и pip. Сначала установите следующие пакеты:

pip3 install torch
pip3 install torchvision

Затем пакет AutoVideo можно установить, просто используя:

pip3 install autovideo

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

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

d3mIndex,video,label
0,Brushing_my_waist_lenth_hair_brush_hair_u_nm_np1_ba_goo_0.avi,0
1,brushing_raychel_s_hair_brush_hair_u_cm_np2_ri_goo_2.avi,0
2,Haarek_mmen_brush_hair_h_cm_np1_fr_goo_0.avi,0
3,Haarek_mmen_brush_hair_h_cm_np1_fr_goo_1.avi,0
4,Prelinger_HabitPat1954_brush_hair_h_nm_np1_fr_med_26.avi,0
5,brushing_hair_2_brush_hair_h_nm_np1_ba_med_2.avi,0

Папка мультимедиа должна содержать видео файлы. Вы можете обратиться к нашему примеру набора данных hmdb6 в Google Диске. Мы также подготовили hmdb51 и ucf101 на Google Диске для тестирования. Чтобы опробовать руководство, вы можете загрузить набор данных hmdb6 здесь. Затем вы можете распаковать набор данных и поместить его в наборы данных.

Проведение экспериментов:

Интерфейс основан на Axolotl, нашей высокоуровневой абстракции D3M. Ниже приведен минимальный пример выполнения задачи распознавания действий на примере видео с использованием предварительно обученных весов (обученных на подвыборке набора данных hmdb6). Давайте начнем!

Загрузить набор данных:

Подготовьте свой набор данных в формате D3M, как указано выше, и поместите его в папку наборов данных. В этом примере мы использовали hmdb-6 (Google-Drive) (подвыборку из HMDB-51, содержащую только 6 классов). Мы используем служебную функцию set_log_path () для настройки системы регистрации для эксперимента. train_table_path - это путь к обучающему CSV-файлу с именами видеофайлов и информацией о метках. train_media_dir указывает папку мультимедиа, содержащую видеофайлы, а target_index указывает индекс столбца, содержащего метку вывода. Информация

Предварительная обработка:

После чтения файла поезда csv, затем мы предварительно обрабатываем набор данных, извлекая кадры из видео в train_media_dir и сохраняем их в каталоге папки frames. Для этого мы используем служебную функцию extract_frames из пакета autovideo следующим образом:

Модель сборки:

В нашем пакете мы поддерживаем 7 моделей распознавания действий. В этом примере мы использовали TSN в качестве модели распознавания видео. Функция build_pipeline () возвращает конвейер, который состоит из сквозной обучаемой модели. Ниже приведен пример построения конвейера.

Настройка гиперпараметров:

В приведенной выше функции пользователи могут настроить словарь конфигурации (config) в функции build_pipeline () для обучения различных алгоритмы с разными гиперпараметрами. Мы указали некоторые значения гиперпараметров (например, скорость обучения, количество эпох и т. Д.), Чтобы продемонстрировать использование. Полный список поддерживаемых гиперпараметров можно найти здесь. Каждая модель в AutoVideo обернута как примитив, который содержит некоторые гиперпараметры. Пример ТСН находится здесь. Все гиперпараметры можно указать при построении конвейера, передав их в configdictionary выше.

Тренироваться:

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

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

Confidence Scores: 
[[0.0692555  0.06158188 0.02618745 0.05211503 0.10426781 0.68659234]
...
[0.00917702 0.01555088 0.00744944 0.00688883 0.02226333 0.9386706 ]]

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

Наконец, вы можете найти полный пример кода для приведенных выше фрагментов кода в examples / fit.py. Чтобы обучить модель с помощью функции fit (), просто запустите:

python3 examples/fit.py

Вывод:

Мы можем загрузить веса обученной модели, полученные с помощью функции fit (), чтобы определить действие на примере видео или вычислить точность на тестовом наборе. Образец демонстрационного видео вместе с предварительно натренированными весами можно скачать здесь. Пример обнаружения действия в демонстрационном видео можно найти ниже:

Вот GIF, иллюстрирующий результат демонстрационного видео:

В качестве альтернативы мы можем использовать обученную модель для вычисления точности на тестовом наборе. Здесь мы используем функцию production () из autovideo для получения прогнозов из набора тестов, а затем вычисляем точность с помощью служебной функции compute_accuracy_with_preds ().

Здесь test_table_path указывает тестовый CSV-файл, содержащий пути к видеофайлам вместе с информацией об их ярлыках, а test_media_dir указывает медиа-каталог, содержащий видеофайлы.

Полный код для вычисления точности на тестовом наборе можно найти на examples / producti.py. Вы можете запустить этот пример, используя:

python3 examples/produce.py

Модуль поиска:

Помимо подбора моделей с заданными конфигурациями, пользователи также могут использовать тюнеры для автоматического поиска конвейеров (то есть моделей и гиперпараметров) на основе данных. Наша текущая система поддерживает два типа тюнеров, включая случайный поиск и Hyperopt. Чтобы использовать автоматический поиск, вам необходимо установить ray-tune и hyperopt с:

pip3 install 'ray[tune]' hyperopt

Ниже приведен пример интерфейса для запуска модуля поиска.

Загрузить данные:

Давайте загрузим наборы данных для поездов и проверок, указав пути к CSV-файлам в train_table_path и valid_table_path. Поисковик использует train_dataset для обучения модели, используя набор гиперпараметров, созданных поисковиком в каждой выборке. Лучшая конфигурация гиперпараметров в конце поиска - это те, которые имеют наибольшую точность в действительном_данных.

Инициализировать модуль поиска:

Здесь пользователи могут инициализировать модуль поиска для указанного выше набора данных с помощью RaySearcher. Пользователи также могут определить пространство поиска (поддерживается как непрерывное, так и дискретное пространство) в дополнение к указанию алгоритма поиска (случайный v / s гиперопт). В приведенном ниже примере мы использовали HyperOpt Search.

Поиск:

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

Полный код поисковика можно найти в examples / search.py, который можно запустить с помощью следующей команды:

python3 examples/search.py

Резюме:

Чтобы узнать больше об этом проекте, загляните здесь. Команда активно разрабатывает дополнительные функции для проекта, в том числе графический пользовательский интерфейс с инструментами визуализации и добавляет дополнительные задачи по пониманию видео. Цель - сделать распознавание видео доступным и простым для всех. Надеюсь, вам понравится эта статья.