Использование RNN (LSTM) для системы распознавания жестов

10

Я пытаюсь создать систему распознавания жестов для классификации жестов ASL (американский язык жестов) , поэтому мой ввод должен представлять собой последовательность кадров либо из камеры, либо из видеофайла, затем он обнаруживает последовательность и сопоставляет ее с соответствующей занятия (спать, помогать, есть, бегать и т. д.)

Дело в том, что я уже построил подобную систему, но для статических изображений (без движения) это было полезно для перевода алфавитов только в тех случаях, когда создание CNN было простой задачей, так как рука не двигается так много, а структура набора данных также была управляемой, так как я использовал keras и, возможно, все еще намеревался это сделать (каждая папка содержала набор изображений для определенного знака, а имя папки - это имя класса этого знака, например: A, B, C , ..)

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

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

Например, я представляю, что мой набор данных примерно такой

структура набора данных

Папка с именем «Run» содержит 3 папки 1, 2 и 3, каждая папка соответствует своему фрейму в последовательности

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Таким образом, Run_1 будет содержать некоторый набор изображений для первого кадра, Run_2 для второго кадра и Run_3 для третьего, цель моей модели - научиться использовать эту последовательность для вывода слова Run .

Анасович
источник
Какой набор данных вы используете для ASL?
Сэм Джонсон
Извините, но мы записали наш собственный набор данных и не смогли опубликовать его публично, он не был таким уж большим и не дал ожидаемой точности.
Анасович
Это, безусловно, выполнимо и не выглядит как слишком много дополнительного кода из статьи, упомянутой ниже, но я не говорю из опыта, так как это не та архитектура, которую я использовал раньше. Надеюсь, эта статья укажет вам правильное направление: machinelearningmastery.com/cnn-long-short-term-memory-networks
Олли Грэм,

Ответы:

2

Исходя из моего понимания, это, кажется, сводится к проблеме классификации нескольких классов (каждый набор / последовательность жестов в конечном итоге соответствует слову / символу). Архитектура RNN / LSTM / GRU - отличное место для старта, но она будет дорогой в вычислительном отношении и довольно медленной для обучения. Однако то, нужен ли вам один или несколько из них, зависит от того, как структурированы ваши данные, и от того, сможете ли вы обрабатывать изображения как набор, а не последовательность.

Вот несколько потенциальных идей:

  1. Начните с настройки слоя CNN для каждой папки «RUN_ *», dropoutа также flatteningмежду ними и / или между ними.

  2. Начните с настройки одного длинного вектора, представляющего все этапы последовательности, затем добавьте пару слоев CNN, также с dropoutи и / или flattening.

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

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

ngopal
источник