Я пытаюсь создать систему распознавания жестов для классификации жестов ASL (американский язык жестов) , поэтому мой ввод должен представлять собой последовательность кадров либо из камеры, либо из видеофайла, затем он обнаруживает последовательность и сопоставляет ее с соответствующей занятия (спать, помогать, есть, бегать и т. д.)
Дело в том, что я уже построил подобную систему, но для статических изображений (без движения) это было полезно для перевода алфавитов только в тех случаях, когда создание CNN было простой задачей, так как рука не двигается так много, а структура набора данных также была управляемой, так как я использовал keras и, возможно, все еще намеревался это сделать (каждая папка содержала набор изображений для определенного знака, а имя папки - это имя класса этого знака, например: A, B, C , ..)
Мой вопрос здесь, как я могу организовать свой набор данных, чтобы иметь возможность вводить его в RNN в кератах и какие определенные функции я должен использовать для эффективной тренировки моей модели и любых необходимых параметров, некоторые люди предложили использовать класс TimeDistributed, но я не иметь четкое представление о том, как использовать его в мою пользу, и принять во внимание форму ввода каждого слоя в сети.
Кроме того, учитывая , что мой набор данных будет состоять из изображений, я , возможно , понадобится сверточного слой, как было бы целесообразно объединить сопу слой в LSTM один (я имею в виду с точки зрения кода).
Например, я представляю, что мой набор данных примерно такой
Папка с именем «Run» содержит 3 папки 1, 2 и 3, каждая папка соответствует своему фрейму в последовательности
Таким образом, Run_1 будет содержать некоторый набор изображений для первого кадра, Run_2 для второго кадра и Run_3 для третьего, цель моей модели - научиться использовать эту последовательность для вывода слова Run .
источник
Ответы:
Исходя из моего понимания, это, кажется, сводится к проблеме классификации нескольких классов (каждый набор / последовательность жестов в конечном итоге соответствует слову / символу). Архитектура RNN / LSTM / GRU - отличное место для старта, но она будет дорогой в вычислительном отношении и довольно медленной для обучения. Однако то, нужен ли вам один или несколько из них, зависит от того, как структурированы ваши данные, и от того, сможете ли вы обрабатывать изображения как набор, а не последовательность.
Вот несколько потенциальных идей:
Начните с настройки слоя CNN для каждой папки «RUN_ *»,
dropout
а такжеflattening
между ними и / или между ними.Начните с настройки одного длинного вектора, представляющего все этапы последовательности, затем добавьте пару слоев CNN, также с
dropout
и и / илиflattening
.Это потребует некоторого изучения и настройки с вашей стороны, чтобы увидеть, что работает лучше, и вам нужно будет выбрать метрики оценки, для которых вы хотите оптимизировать (например, точность / отзыв)
Причина, по которой я предлагаю CNN, заключается в том, что в некоторых случаях CNN могут обеспечивать производительность, аналогичную текущей модели, но за небольшую часть стоимости. К сожалению, сложно сказать практически без информации о ваших данных.
источник