Usando RNN (LSTM) para sistema de reconhecimento de gestos

10

Estou tentando criar um sistema de reconhecimento de gestos para classificar gestos ASL (American Sign Language) , então minha entrada deve ser uma sequência de quadros de uma câmera ou de um arquivo de vídeo, em seguida, ele detecta a sequência e a mapeia para a correspondência aula (dormir, ajudar, comer, correr, etc.)

O problema é que eu já construí um sistema semelhante, mas para imagens estáticas (sem movimento incluído), ele foi útil para traduzir alfabetos apenas nos quais a construção de uma CNN era uma tarefa simples, pois a mão não se move muito e o a estrutura do conjunto de dados também era gerenciável porque eu estava usando keras e talvez ainda pretenda fazê-lo (todas as pastas continham um conjunto de imagens para um sinal específico e o nome da pasta é o nome da classe desse sinal ex: A, B, C ..)

Minha pergunta aqui, como posso organizar meu conjunto de dados para poder inseri-lo em uma RNN em keras e quais funções devo usar para treinar efetivamente meu modelo e quaisquer parâmetros necessários, algumas pessoas sugeriram usar a classe TimeDistributed, mas eu não tenha uma ideia clara de como usá-lo a meu favor e leve em consideração o formato de entrada de todas as camadas da rede.

considerando também que meu conjunto de dados consistiria em imagens, provavelmente precisarei de uma camada convolucional, como seria possível combinar a camada conv na camada LSTM (quero dizer em termos de código).

Por exemplo, imagino que meu conjunto de dados seja algo como isto

estrutura do conjunto de dados

A pasta denominada 'Executar' contém 3 pastas 1, 2 e 3, cada pasta corresponde ao seu quadro na sequência

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Portanto, o Run_1 conterá um conjunto de imagens para o primeiro quadro, Run_2 para o segundo quadro e Run_3 para o terceiro, o objetivo do meu modelo é ser treinado com essa sequência para gerar a palavra Run .

Anasovich
fonte
Qual conjunto de dados você está usando para o ASL?
Sam Johnson
Desculpe, mas gravamos nosso próprio conjunto de dados e não conseguimos divulgá-lo publicamente, não foi tanto assim e não deu a precisão esperada.
Anasovich
É certamente factível e não se parece com muita codificação extra do artigo mencionado abaixo, mas não estou falando por experiência própria, pois não é uma arquitetura que eu usei antes. Esperemos que este artigo irá apontar na direção certa: machinelearningmastery.com/cnn-long-short-term-memory-networks
Ollie Graham

Respostas:

2

Com base no meu entendimento, isso parece se resumir a um problema de classificação de várias classes (cada conjunto / sequência de gestos com as mãos eventualmente corresponde a uma palavra / símbolo). Uma arquitetura RNN / LSTM / GRU é um ótimo lugar para começar, mas será computacionalmente caro e bastante lento para treinar. No entanto, se você precisa absolutamente de um ou mais desses fatores, depende de como seus dados estão estruturados e se pode tratar suas imagens como um conjunto, e não como uma sequência.

Aqui estão algumas idéias em potencial:

  1. Comece configurando uma camada CNN para cada pasta "RUN_ *", junto com dropoute / ou flatteningentre cada camada.

  2. Comece configurando um único vetor longo representando todos os estágios da sequência e adicione duas camadas de CNNs, também com dropoute / ou flattening.

Isso levará alguma exploração e ajuste para ver o que funciona melhor e você precisará escolher as métricas de avaliação que deseja otimizar (por exemplo, precisão / recall)

A razão pela qual estou sugerindo uma CNN é porque, em certos casos, as CNNs podem fornecer desempenho semelhante a um modelo recorrente, mas por uma fração do custo. Infelizmente, é difícil dizer com pouca ou nenhuma informação sobre seus dados.

ngopal
fonte