Skip to content

Latest commit

 

History

History
153 lines (108 loc) · 7.97 KB

README_ES.md

File metadata and controls

153 lines (108 loc) · 7.97 KB

Paseos virtuales en Google Street View

For the english version, click here.

Durante la cuarentena que estamos pasando debido a la pandemia del COVID-19 nuestro derecho a caminar libremente por la calle se ha visto mermado en pos del bien común. Muchas fronteras están cerradas y viajar está casi totalmente prohibido en la mayoría de países.

Virtual Walks es un proyecto que usa modelos de Estimación de Pose con redes neuronales LSTM para simular paseos por Google Street View. Para la estimación de la pose se ha adaptado el modelo PoseNet , y la detección de acciones se ha realizado con celdas LSTM desarrolladas sobre TensorFlow 2.0.

Este proyecto es capaz de simular paseos en todas las calles del mundo en las que haya Google Street View.

Tensorflow 2.0, Selenium y Python 3.7 son las tecnologías principales utilizadas en este proyecto.

Funcionamiento

PoseNet ha sido combinado con un modelo LSTM para inferir la acción que la persona está haciendo. Una vez que se ha detectado la acción, ésta se pasa al controlador, que interactúa con Google Street View.

  1. Una ventana de Selenium Firefox se abre.

  2. Utilizando la webcam, el sistema toma fotos de la persona, que hará una de las cuatro acciones permitidas

    • Estar quieto
    • Andar
    • Girar a la derecha
    • Girar a la izquierda
  3. Para cada foto, PoseNet infiere la posición de las articulaciones principales.

  4. Se hacen grupos de cinco frames, empezando por un frame que debe cumplir ciertos umbrales de confianza en las articulaciones. A partir de la primera imagen, algunas articulaciones son inferidas entre frames contiguos.

  5. Cada grupo de frames se pasa a un modelo de red recurrente con una red neuronal que predice la acción.

  6. La acción predicha se envía al controlado, que interactúa con Google Street View para moverse acorde a ella.

Ahora mismo hay otro modelo que puede ser utilizado para ejecutar este programa. En lugar de una LSTM, se calcula la velocidad de las articulaciones en cada uno de los cinco frames y se envía a un modelo PCA y posteriormente a una RNN, que predice la acción. El modelo por defecto es el LSTM ya que consideramos que es metodológicamente más correcto y hemos obtenido mayor precisión.

Como la predicción podría ser mucho más rápida que la velocidad media de un paseo (dependiendo de las especificaciones del ordenador en el que se está ejecutando), una acción solo puede ser ejecutada cada 0.5 segundos. Este parámetro es modificable en el archivo de configuración.

Ejemplo de caso de uso

Como se puede observar en la imagen, el esqueleto se infiere de la imagen y la acción es predicha y ejecutada.

Example walk in Paris

Instalación y uso

Recuerda que se necesita una webcam para utilizar este programa.

Se recomienda instalar en un entorno nuevo de Python 3.7 para evitar problemas y conflictos de versiones.

Instala tensorflowjs, requerido para utilizar ResNet

pip install tensorflowjs

Clona e instala el repositorio tfjs-to-tf que incluye las dependencias para interpretar modelos de grafo de tensorflowjs.

Clona el repositorio git

git clone https://github.com/Moving-AI/virtual-walk.git

Instala las dependencias

pip install -r requirements.txt

Descarga los modelos ejecutando el archivo download_models. Este archivo descargará los modelos de PoseNet (MobileNet y ResNet con los dos tipos de stride, 16 y 32), LSTM, PCA, scaler y red neuronal. El link para descargar los modelos por separado puede encontrarse más abajo.

cd virtual-walk
python3 download_models.py

Finalmente, puedes ejecutar execute.py para probarlo.

python3 execute.py

Consideraciones a tener en cuenta:

  • Nuestra experiencia utilizando el modelo nos dice que un ambiente con poca luminosidad se prefiere a otro muy luminoso.
  • El sistema es sensible a la posición de la webcam.

En general, una posición similar a la del GIF debería ser usada.

Links a nuestros modelos

Entrenamiento

El apartado de entrenamiento es el más débil en este proyecto debido a la falta de datos de entrenamiento y capacidad de procesamineto. Nuestros datos iniciales consistieron en 40 minutos de grabaciones. En cada vídeo una persona aparecía ejecutando una acción específica durante un período de tiempo. Como se discutirá más adelante, nuestros modelos tienden a sobreajustar a pesar de tener un sistema funcional. Un ejemplo de los datos de entrenamiento se puede observar en la siguiente image:

Los modelos que hemos entrenado pueden ser descargados ejecutando el archivo download_models. En las imágenes se muestra el proceso de entrenamiento:

Para entrenar otro modelo LSTM, el repositorio cuenta con la clase DataProcessor. Puede procesar los vídeos localizados en una carpeta, leyendo los frames válidos de un archivo labels.txt y generando un CSV con los datos de entrenamiento. Este archivo puede ser utilizado en train.py para generar un nuevo modelo LSTM. La localización de este modelo se pasaría a la clase WebcamPredictor y el sistema localizaría este nuevo modelo.

Próximos pasos

  • Generar más datos de entrenamiento. En este proyecto se ha tratado de conseguir el Mínimo Producto Viable y la robustez nunca ha sido el objetivo principal. Como se puede ver en los resultados del entrenamiento, parece que el modelo no sobreajusta. Sin embargo, los datos de entrenamiento y test son muy similares porque en los vídeos aparecen personas haciendo acciones en bucle. De esta forma, suponemos que el modelo tendrá un sobreajuste subyacente que solo podría ser detectado con más datos de entrenamiento en condiciones de iluminación y posición diferentes.

  • Girar a izquierda y derecha no son predichos con la misma precisión, a pesar de tratarse de acciones simétricas. Una reflexión especular de las coordenadas podría ser usada para dotar al modelo de más consistencia a la hora de predecir giros.

Autores

License

This project is under MIT license. See LICENSE for more details.

Agradecimientos