Как мы создали надежную систему распознавания жестов с использованием стандартных 2D-камер

Жесты намерения

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

Поэтому неудивительно, что многие технологические компании снова и снова пытались заменить клавиатуры и мыши контроллерами жестов, которые могут регистрировать намерения пользователя по движениям руки или руки. В то время как некоторые из первых таких систем использовали проводные перчатки, современные подходы, как правило, полагаются на специальные камеры и алгоритмы компьютерного зрения. Самый известный пример - Microsoft Kinect, который был представлен в ноябре 2010 года и на момент своего выхода установил мировой рекорд Гиннеса как самое продаваемое потребительское устройство. Несмотря на первоначальный успех Kinect, контроллеры жестов не получили широкого распространения среди потребителей.

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

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

Набор данных «Шут»

Для обучения нашей системы мы использовали большой набор данных с короткими, плотно помеченными видеоклипами, которые были разыграны нашим сообществом рабочих. Набор данных содержит ~ 150 000 видео по 25 различным классам жестов человеческих рук, разделенных в соотношении 8: 1: 1 для обучения / разработки / тестирования; он также включает два класса без жестов, чтобы помочь сети различать определенные жесты и неизвестные движения рук. В видеороликах показаны люди-актеры, выполняющие стандартные жесты рук перед веб-камерой, такие как Проведение влево / вправо, Проведение двумя пальцами вверх / вниз или Прокручивание. Рука Вперед / Назад . Если вы хотите узнать больше об этом наборе данных, вам может быть интересно узнать, что мы выпустили значительный снимок по лицензии Creative Commons для некоммерческого использования.

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

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

Архитектура модели

В последние месяцы наша работа была сосредоточена на разработке и обучении нейронных сетей, которые эффективно используют наш растущий набор данных Jester. Мы изучили несколько архитектур, чтобы предложить решение, которое отвечает нашим требованиям к высокой производительности и создает минимальные накладные расходы времени выполнения. В конце концов, мы сошлись на архитектуре, которая содержит трехмерную сверточную сеть (3D-CNN) для извлечения пространственно-временных характеристик, рекуррентный слой (LSTM) для моделирования более длительных временных отношений и слой softmax, который выводит вероятности классов.

В отличие от 2D-CNN, которые хорошо обрабатывают изображения, 3D-CNN используют трехмерные фильтры, которые расширяют двумерные свертки во временную область. Видео обрабатываются как трехмерные «объемы» кадров. Использование таких 3D-фильтров в нижних слоях нейронной сети полезно, в частности, в задачах, в которых движение играет решающую роль. Выходные данные сети - это последовательность функций, каждую из которых можно рассматривать как сжатое представление небольшого входного видеосегмента.

Затем последовательность функций обрабатывается слоем LSTM, что позволяет установить более длительные временные зависимости. Во время тестирования мы используем тот факт, что рекуррентная сеть - это динамическая система, которая может перемещаться во времени. Во время обучения каждое повторяющееся скрытое состояние преобразуется в вектор вероятностей классов через слой softmax, и полученная последовательность прогнозов усредняется по времени. Усредненный вектор используется для вычисления потерь. Можно думать об этом как о способе попросить сеть как можно скорее вывести соответствующую метку, заставляя ее синхронизироваться с тем, что происходит в видео. Этот общий подход позволяет модели реагировать и выводить наилучшее предположение о правильном классе в режиме онлайн до полного завершения жеста.

Наша архитектура 3D-CNN представляет собой последовательность пар слоев с размером фильтра 1 и 3 в указанном порядке. Слои с размером фильтра 1 используются для интерпретации поканальных корреляций и уменьшения количества каналов для следующего уровня. Слои с размером фильтра 3 фиксируют пространственную информацию. Окончательная архитектура способна достичь скорости обработки 18 кадров в секунду с точностью 87% автономной проверки.

Полученные результаты

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

Система состоит из нескольких параллельных процессов, каждый из которых по отдельности отвечает за различные части системы: захват видео, сетевой вывод, оркестровка и обслуживание HTTP. Модель реализована в TensorFlow, и мы используем протоколы-буферы для сохранения и загрузки сетей. Это позволяет нам просматривать текущий поток веб-камеры вместе с результатами в веб-браузере и проверять качество прогнозов. Вы можете просмотреть более длинное видео с результатами здесь.