Machine Learning con Raspberry Pi. Primeros pasos y algunos proyectos curiosos e interesantes.

Thursday, November 22, 2018

Machine Learning con Raspberry Pi. Primeros pasos y algunos proyectos curiosos e interesantes.


Escrito por Fran Ramírez (@cybercaronte) Investigador de seguridad informática en Eleven Paths y también en el departamento de Ideas Locas CDO de Telefónica. Escritor del libro "Microhistorias: anecdotas y curiosidades de la historia de la informática" y "Docker: SecDevOps".

Raspberry Pi es un ordenador de bajo coste (unos 40€ según modelo) y reducido tamaño el cual se puede destinar para múltiples aplicaciones casi en cualquier ámbito. El modelo actual más potente es Raspberry Pi 3 Model B+, el cual incorpora un procesador quad-core de 64 bits a 1,4GHz  WiFi,  salida HDMILAN y Bluetooth aparte de multitud de placas para proyectos que se pueden colocar a modo tarjetas de expansión (se denominan “shields”). También llevan un puerto para tarjetas microSD en las cuales podemos instalar el S.O. Linux compatible que queramos.

A pesar de su reducido tamaño, Raspberry Pi ofrece unas aceptables características técnicas para ejecutar algunas fases de proyectos de Machine Learning y también para crear un entorno de aprendizaje (laboratorio) por muy poco dinero. Pero, por otro lado, también tenemos que tener en cuenta las limitaciones debido sobre todo a la escasa potencia de su GPU, poca memoria RAM y un microprocesador no demasiado potente. Pero realmente, donde Raspberry tiene el mayor problema a la hora de ejecutar tareas de Machine Learning es en la fase de entrenamiento. A no ser que sean muy sencillas, este proceso debe de realizarse con un ordenador un poco más potente (preferiblemente y según complejidad, usando GPU). Por otro lado, Raspberry Pi es totalmente capaz de ejecutar un modelo de Machine Learning ya entrenado para casi cualquier tarea.

Figura 1. Raspberry Pi. Fuente.


Este artículo está dividido en dos partes bien definidas. La primera está orientada sobre todo a crear y configurar un entorno de laboratorio de prácticas con Raspberry Pi para poder aprender Machine Learning y sus frameworks y utilidades más populares. En la segunda parte, publicamos una lista de proyectos que nos han llamado la atención, tanto por lo espectacular de los resultados como por ser un gran instrumento para aprender a la vez que nos divertimos creando un proyecto.


Parte 1: Raspberry como laboratorio:

Python: este es el lenguaje de programación preferido para realizar todo tipo de proyectos de Machine Learning, por lo que será el primer elemento a instalar en nuestro entorno Raspberry Pi. En este enlace puedes encontrar instrucciones para su instalación. En estos enlaces tienes un curso completo que hemos realizado nosotros en el blog y que puedes seguir también en tu Raspberry Pi sin problema:


OpenAI Gym: es posible instalar OpenAI Gym en Raspberry Pi y comenzar a practicar algunos de los entornos de juegos más sencillos, empezando por ejemplo por los tutoriales que ya hemos publicado aquí en nuestro blog de LUCA:

Parte 5. Cómo entrenar a tu Inteligencia Artificial jugando videojuegos. Aprende Q-Learning con el juego “Taxi”, parte 2 de 2.


Figura 2. Ejemplo de ejecución OpenAI Gym de los entornos Breakout y MsPacman.

TensorFlow: esta famosa librería de Google desde su versión 1.9 ya se puede instalar sin problemas en una Raspberry Pi. La instalación es bastante sencilla, en este enlace está detallado todo el proceso de instalación. También están disponibles nuestros tutoriales sobre TensorFlow que ya hemos publicado también por aquí:


Keras: es una API escrita en Python capaz de ejecutarse junto a TensorFlow la cual ofrece la capacidad de implementar redes neuronales de alto nivel para Deep Learning. Permite por otro lado implementar redes neuronales de una manera rápida, modular y sencilla. En este enlace tienes las instrucciones de uso oficiales para su instalación. En el siguiente enlace te explicamos cómo crear redes neuronales con Keras que podrás practicar también en tu Raspberry Pi:

Jupyter Notebook: es un editor que nos permite crear y compartir documentos con código fuente, fórmulas, ecuaciones, visualizaciones, etc. Esta aplicación es ampliamente utilizada en todo tipo de campos relacionado con la ciencia de datos, modelos estadísticos, etc lo que le convierte en una herramienta ideal para Machine Learning. Para saber más sobre Jupyter, puedes consultar el capítulo 2 de Python para todos donde explicamos qué son los Jupyter Notebooks:

Parte 2: Algunos proyectos divertidos e interesantes

Chatbot basado en Machine Learning: utilizando un clasificador de texto con Machine Learning, el autor de este proyecto ha creado un programa utilizando Python y el módulo NLTK, usando también un bot de Telegram. La ventaja es que todo el entrenamiento utiliza un dataset existente de la BBC que contiene 2225 documentos entre los años 2004 y 2005 divididos en categorías como negocios, entretenimiento, política, deportes, etc. El autor recomienda realizar el entrenamiento previamente en un portátil, ya que en un MacBook Air del 2013 y tardó sólo 15 minutos y con la Raspberry Pi tuvo que abortar el proceso porque no tenía claro cuándo iba a terminar (esto también depende del tipo de Raspberry Pi que usemos). En este enlace tienes un artículo donde hablamos de los bot y los chatbots y explicamos cómo crear uno de manera sencilla.


Figura 3. Ejemplo de ejecución del chatbot. Fuente.


Detección de objetos usando Deep Learning y una Raspberry Pi: este proyecto nos permitirá, utilizando una cámara (normalmente la Pi Cámara) a identificar objetos como coches, frutas, electrodomésticos, etc. La arquitectura o modelo utilizado para la detección de objetos es YOLO (You Only Look Once) y según su autor, se consigue en menos de 20 líneas de código. El método es bastante curioso ya que primero tenemos que utilizar 100 fotografías mínimo por objeto que queramos identificar. Luego utilizando un programa para etiquetar imágenes como LabelImg, manualmente se identifican los objetos que queramos luego utilizar para el entrenamiento (tarea un poco tediosa). Finalmente se entrenará el modelo en una máquina con GPU. Algo que destacar es la utilización de un contenedor Docker que realiza todo este trabajo en el equipo que hayamos seleccionado para el entrenamiento. Finalmente, la predicción de nuevas imágenes se realizará con la Raspberry Pi y la cámara. Interesante proyecto sobre todo para aprender cómo funciona la detección de objetos.

Figura 4. Detección de vehículos usando Raspberry Pi en este proyecto. Fuente.


Robot autónomo con Arduino, Pi Cámara y Raspberry Pi: este proyecto requiere además de la Raspberry Pi, un Arduino Uno para el control de motores y dirección del vehículo y una Raspberry Pi junto a la Pi Cámara para realizar el reconocimiento de imágenes. El objetivo es hacer un vehículo que sea capaz de seguir una línea pintada en el circuito pero además, sea capaz de anticipar cuándo se acerca una curva. También es capaz de detectar colores para mantener el vehículo dentro de la calzada. Interesante proyecto que nos acerca, al menos a un nivel muy básico, a cómo funcionan los vehículos autónomos.

Figura 5. Proyecto del robot autónomo terminado. Fuente.

Creando música con Deep Learning y N-Synth Super: este atractivo proyecto nos invita a descubrir nuevas músicas y sonidos usando machine learning. Open NSynth es una interface física experimental que utiliza algoritmos de machine learning desarrollados por Google´s Brain Magenta Team, el cual tiene como misión explorar nuevos sonidos utilizar redes neuronales profundas. El corazón de este proyecto es una Raspberry Pi 3 aunque será necesario construir y adquirir algunos otros componentes sencillos (todo está perfectamente explicado en la página web del proyecto). En este vídeo se explica perfectamente todo el proyecto y cómo funciona:




Cámara de seguridad inteligente: este proyecto también necesita de un Arduino UNO para poder construirlo. En principio, no utiliza machine learning pero nos ofrece una instalación sencilla de una cámara de seguridad capaz de detectar movimiento y a la vez realizar panorámicas del entorno de observación. Nos ha parecido interesante ya que puede ser útil como base para realizar un proyecto más complejo usando Machine Learning y reconocimiento de imágenes. Un buen punto de inicio para empezar con nuestro propio proyecto de electrónica y Machine Learning.




DIY Cámara Raspberry con redes neuronales: este proyecto utiliza la red neuronal Inception-v3 de Google en una Raspberry Pi para detectar y reconocer objetos (y no requiere conexión a Internet). Utiliza como hemos comentado una Raspberry Pi, unos altavoces, una Pi Cámara y una batería. Funciona colocando el objeto que queramos identificar delante del dispositivo y este al reconocerlo escucharemos qué tipo de objeto es por los altavoces. La red neuronal se entrena con un dataset llamado ImageNet el cual consiste en una gran colección de imágenes divididas en 1000 clases, donde cada clase pertenece a un objeto. Según el autor, la Raspberry Pi tarda alrededor de 10 segundos en reconocer en objeto. Interesante proyecto para aprender y explorar de nuevo el mundo de las redes neuronales y la visión artificial. Otro proyecto interesante relacionado con este que además nos sirve de base para utilizar Machine Learning es este scanner 3D usando Raspberry Pi y Kinect (de la XBox). Los sensores Kinect están ahora a muy buen precio de segunda mano en tiendas de videojuegos y son una gran elemento para proyectos de Machine Learning (ya hablaremos en otro artículo específicamente de Kinect y Machine Learning).

Figura 6. Componentes del proyecto cámara Raspberry Pi con Deep Learning. Fuente.













Espejo mágico: si tienes un portátil que no funcione pero tenga intacta la pantalla, no lo tires porque este proyecto utiliza precisamente ese tipo de pantalla para crear un espejo inteligente. La base del proyecto es una Raspberry Pi 3 con algunos componentes extras como la pantalla recuperada el portátil o un marco de madera para colocar un cristal (según el autor, el coste total no supera los 90€). El software utilizado es MagicMirror2, una plataforma para Raspberry Pi especialmente diseñada para este tipo de proyectos. Existe una gran comunidad detrás de este proyecto el cual además de ofrecer una API abierta y muy completa para programar nuestros propios módulos, existen otros que permiten reconocimiento facial y muchos otros relacionados con Machine Learning. El resultado final es bastante espectacular, donde tendremos un espejo que en función por ejemplo, de quién se esté mirando, le ofrecerá una u otra información interesante.
Figura 7. Espejo mágico en ejecución. Fuente.

DeepPiCar: coche autónomo con Raspberry Pi, este es otro proyecto de vehículo autónomo. Además utiliza una CNN (Red Neuronal Convolucional). Es una réplica de un vehículo desarrollado por NVIDIA llamado Dave-2. Para realizar el proyecto será necesario invertir un poco más pero aún así el total no llega a los 100€. Este es sin duda alguna el proyecto que utiliza el modelo de Machine Learning más complejo que hemos visto hasta ahora. Aparte de ser una CNN, el código de DeepPicar ha sido desarrollado por el MIT y se llama DeepTesla, el cual ofrece una implementación casi exacta a la utilizada en vehículo de NVIDIA Dave-2. El paper oficial de DeepPicar puedes encontrarlo en este enlace.

Figura 8. DeepPiCar. Fuente.

Detector de Papa Noel: y ya que estamos cerca de las fiestas de Navidad, este curioso y divertido proyecto de visión artificial nos permite utilizar Deep Learning y una Raspberry Pi para detectar a Papa Noel. El clasificador de imágenes ha sido especialmente entrenado para detectar a Santa Claus utilizando Keras. El proceso es el siguiente, se carga el modelo en Keras, se accede a la cámara de la Raspberry Pi, se aplica Deep Learning para detectar si Papa Noel está en el encuadre y finalmente acceso a las GPIO de la Raspberry para hacer sonar música en caso de ser detectado. Un divertido y llamativo proyecto en el cual también se aprende sobre Machine Learning.

Figura 9. Detector de Papa Noel. Fuente.
Estas son sólo algunas de las posibilidades y proyectos para utilizar una Raspberry Pi en el mundo del Machine Learning. Seguro que volveremos con más proyectos. Happy Hacking!



Para mantenerte al día con LUCA visita nuestra página web, y no olvides seguirnos en TwitterLinkedIn YouTube.

No comments:

Post a Comment