Los patinadores pueden reconocer fácilmente los trucos realizados por otros patinadores. Nuestro objetivo en este proyecto es enseñarle a la computadora a reconocer los trucos del skate. Dado un vídeo de un truco en patineta, ¿puede la computadora clasificar el truco con alta probabilidad? Desarrollamos un conjunto de datos y un modelo de aprendizaje automático que puede distinguir entre dos de los trucos de skate más comunes: ollies y kickflips.
Comenzamos reuniendo más de 200 videos cortos (de 1 a 2 segundos) de kickflips y ollies. Adaptamos el enfoque descrito en Hands on Computer Vision con Tensorflow a nuestro nuevo conjunto de datos. Los datos comienzan como un video, luego pasan a través de una red neuronal convolucional (CNN), luego a través de un modelo de memoria a corto plazo (LSTM) y finalmente a una salida de probabilidades de que el video represente cada clase de trucos.
Por ejemplo, aquí Stephen realiza un kickflip:
El modelo predice que se trata de un kickflip con probabilidad de 0,9, por lo que funciona bien. Descubrimos que los vídeos claros en los que se ve todo el cuerpo del patinador obtuvieron mejores resultados que los vídeos en los que solo se ven las piernas del patinador. También descubrimos que el modelo era capaz de predecir correctamente un kickflip bajando una escalera, a pesar de que todos los datos de entrenamiento eran de trucos en terreno plano. Esto muestra que el modelo pudo generalizarse a una situación nueva y diferente.
Para llevar este trabajo más allá, podemos agregar más trucos además de kickflips y ollies, así como combinaciones de trucos, por ejemplo, un kickflip trasero de 180. Con más datos de entrenamiento y más ajustes en el modelo, este podría volverse lo suficientemente bueno como para rivalizar con un patinador humano.
Gracias a Justin Wang y Vessela Ensberg por su ayuda en este proyecto.
Los datos de video etiquetados se encuentran en el directorio Tricks
de este repositorio. Hay dos subdirectorios, Ollie
, que contiene 108 vídeos de patinadores realizando un ollie, y Kickflip
, que contiene 114 vídeos de patinadores realizando un kickflip. Cada uno de los archivos de estos directorios es un clip corto, de unos 2 segundos, en formato .mov
(QuickTime). Para utilizar estos datos para el aprendizaje automático supervisado, entrene el modelo con los datos del directorio Tricks
, utilizando los subdirectorios como etiquetas.
Eres libre de utilizar estos datos con fines académicos, siempre que cites este trabajo.
Clasificando trucos de skate
Este proyecto, en las palabras más simples, clasifica los trucos del monopatín. Estamos intentando utilizar el aprendizaje automático para clasificar cada truco de skate. Hay muchos trucos de skate y elegimos dos para clasificarlos en el medio. Elegimos entre Ollie y Kickflip.
Entonces, ese algoritmo tomaría una entrada como la anterior y generaría una probabilidad de qué tan seguro es que sea un ollie o un kickflip.
16 de junio TODO:
23 DE JUNIO TODO:
30 DE JUNIO TODO:
7 de julio:
15 de julio:
21 de julio:
28 de julio:
4 de agosto:
Nuestro objetivo es crear un clasificador razonable de trucos para videoclips de 1 a 2 segundos. Planeamos utilizar los enfoques más convenientes y capaces para lograrlo.
Nuestro plan para el preprocesamiento de los datos es muestrear los videos hasta obtener una cantidad constante de fotogramas y resolución. Por ejemplo, cada vídeo puede constar de 30 fotogramas, cada uno de los cuales es una imagen de 480 x 360 (360p), de modo que cada vídeo se convierte en una matriz 3D (o tensor) con una dimensión de 480 x 360 x 30. Estas son las entradas al modelo. El color no es importante para la clasificación de trucos, por lo que también podemos transformarlo a blanco y negro.
La idea general es construir una red neuronal convolucional (CNN), siguiendo aproximadamente el enfoque de clasificación de imágenes.
Una CNN para imágenes combina información espacial local de píxeles cercanos mediante filtros de convolución. ¿Deberíamos hacer lo mismo con los píxeles que están muy juntos en el tiempo? El tutorial de Google utiliza una convolución 2D. ¿Hay alguna razón por la que no podamos usar una convolución 3D? Claro, tensorflow tiene uno. Y hay muchos artículos académicos populares que hacen exactamente esto. Ojalá podamos aprovechar estas ideas.