Estoy tratando de construir un sistema de reconocimiento de gestos para clasificar los gestos ASL (lenguaje de señas americano) , por lo que se supone que mi entrada es una secuencia de fotogramas, ya sea desde una cámara o un archivo de video, luego detecta la secuencia y la asigna a su correspondiente clase (dormir, ayudar, comer, correr, etc.)
La cuestión es que ya he construido un sistema similar, pero para las imágenes estáticas (sin movimiento incluido), fue útil para traducir alfabetos solo en los que construir una CNN fue una tarea sencilla, ya que la mano no se mueve tanto y el la estructura del conjunto de datos también era manejable ya que estaba usando keras y tal vez todavía tenía la intención de hacerlo (cada carpeta contenía un conjunto de imágenes para un signo en particular y el nombre de la carpeta es el nombre de clase de este signo, por ejemplo: A, B, C , ..)
Mi pregunta aquí, ¿cómo puedo organizar mi conjunto de datos para poder ingresarlo en un RNN en keras y qué ciertas funciones debo usar para entrenar eficazmente mi modelo y los parámetros necesarios, algunas personas sugirieron usar la clase TimeDistributed pero no lo hago Tengo una idea clara de cómo usarlo a mi favor y tener en cuenta la forma de entrada de cada capa en la red.
También teniendo en cuenta que mi conjunto de datos consistiría en imágenes, probablemente necesitaré una capa convolucional, ¿cómo sería factible combinar la capa conv en la LSTM (quiero decir en términos de código)?
Por ejemplo, imagino que mi conjunto de datos es algo como esto
La carpeta llamada 'Ejecutar' contiene 3 carpetas 1, 2 y 3, cada carpeta corresponde a su marco en la secuencia
Entonces Run_1 contendrá un conjunto de imágenes para el primer cuadro, Run_2 para el segundo cuadro y Run_3 para el tercero, el objetivo de mi modelo es ser entrenado con esta secuencia para dar salida a la palabra Ejecutar .
fuente
Respuestas:
Según mi comprensión, esto parece reducirse a un problema de clasificación de varias clases (cada conjunto / secuencia de gestos con las manos finalmente corresponde a una palabra / símbolo). Una arquitectura RNN / LSTM / GRU es un gran lugar para comenzar, pero será computacionalmente costoso y bastante lento para entrenar. Sin embargo, si realmente necesita uno o más de estos depende de cómo estén estructurados sus datos y de si puede tratar sus imágenes como un conjunto, en lugar de una secuencia.
Aquí hay algunas ideas potenciales:
Comience configurando una capa CNN para cada carpeta "RUN_ *", junto con
dropout
y / oflattening
entre cada capa.Comience configurando un único vector largo que represente todas las etapas de la secuencia, luego agregue un par de capas de CNN, también con
dropout
y / oflattening
.Esto requerirá un poco de exploración y ajuste para ver qué funciona mejor y deberá elegir con las métricas de evaluación para las que desea optimizar (por ejemplo, precisión / recuperación)
La razón por la que sugiero una CNN es porque, en ciertos casos, las CNN pueden proporcionar un rendimiento similar a un modelo recurrente, pero a una fracción del costo. Desafortunadamente, es difícil saberlo con poca o ninguna información sobre sus datos.
fuente