Aplicaciones de Edge Impulse


Edge Impulse es una plataforma que como vimos en un post anterior nos permite desarrollar algoritmos de Machine Learning para implementarse en  dispositivos o sistemas embebidos, a lo que han venido a llamar sus creadores “TinyML” .


TinyML, que significa «aprendizaje automático diminuto» en español, es un campo en rápido crecimiento de tecnologías y aplicaciones de aprendizaje automático. Se enfoca en permitir que los dispositivos pequeños, como los microcontroladores, ejecuten análisis de datos de sensores directamente en el dispositivo, utilizando muy poca energía (generalmente en el rango de milivatios o menos).

En esencia, TinyML es la aplicación de la inteligencia artificial (IA) en dispositivos con recursos limitados. Para funcionar en estos entornos, los procesos de IA deben adaptarse para trabajar con menos potencia de procesamiento, menos espacio de almacenamiento y un consumo de energía reducido.

Esto permite una variedad de aplicaciones interesantes, como:

  • Dispositivos portátiles y wearables inteligentes que pueden analizar datos del sensor sin necesidad de una conexión constante a la nube.
  • Sensores inteligentes que pueden detectar y clasificar automáticamente eventos en su entorno.
  • Dispositivos del Internet de las cosas (IoT) que pueden tomar decisiones localmente en lugar de depender de la nube.

Esta plataforma de reciente creación puede ayudar a que no sea necesario entrar de manera tan profunda en el desarrollo del código, ya que es posible implementar nuestro algoritmo de Inteligencia Artificial ingresando una base de datos, ajustando todos los parámetros que respectan a nuestro sistema y entrenando el programa con diferentes casos de implementación arbitraria.

Por poner un ejemplo de grandes empresas , he aqui un resumen de algunas empresas que han Implementado Soluciones con Edge Impulse, en las que como vemos la NASA o el gigante BOSCH destacan entre otras:

Asimismo Edge Impulse cuenta con grandes clientes del mercado de la tecnología inteligente en conjunto de una gran gama de partners proveedores de dispositivos electrónicos y servicios web que demuestran su gran eficiencia para la entrega de soluciones.

La plataforma por el momento permite realizar proyectos de detección de objetos, reconocimiento de voz, o procesar gestos de un acelerómetro entre otras cosas, como podemos ver en el siguiente menú.

¿Cómo se Usa?

Para implementar un proyecto solo tienes que crear tu cuenta, indicar que tipo de proyecto quieres hacer y realizar la adquisición de datos.

La interfaz de la página es muy cómoda e intuitiva para el usuario como podemos ver en la siguiente imagen.

La plataforma entrega diversas alternativas para el ingreso de los datos, por ejemplo, si tiene un dispositivo que ya está midiendo datos, la plataforma permite recopilarlos para construir su propia base de datos.

Asimismo, en el caso de ya tener un conjunto de datos locales, este puede cargarse directamente.

Si se desea recopilar en tiempo real con algún kit de desarrollo compatible con la plataforma, se puede seleccionar la placa a utilizar y seguir las instrucciones entregadas por la plataforma. Algunos de los dispositivos MCU o CPU/GPU compatibles son los siguientes: Arduino Nano 33 BLE Sense, Espressif ESP-EYE (ESP32), Rapsberry Pi 4, RAKwireless WisBlock Modular System Diagram, entre otras.

Cuando la base de datos ya está cargada en la plataforma se debe crear un Impulse, que es la herramienta que se encarga de entrenar y procesar el modelo con los datos de nuestra base de datos. Una vez listos todos los pasos, la plataforma permite cargar el modelo creado en el microcontrolador designado para el proyecto.

Primer ejemplo de implementación de Edge Computing: Prueba de uso usando un smartphone

Dentro de nuestro teléfono inteligente contamos con un sensor conocido como sensor giroscopico, el cual detecta la velocidad angular y junto con un acelerómetro (que permite la rotación de la pantalla), podemos obtener coordenadas polares, las cuales son plasmadas dentro de Edge Impulse convirtiendo así a nuestro dispositivo en un sensor de movimiento para proyectos.

Antes de comenzar, estos son algunos de los requisitos que se necesitan antes de iniciar la recolección de datos y el entrenamiento del modelo:

  • Crear una cuenta de Edge Impulse (Es gratuita), explorela y familiarícese con las opciones y herramientas que brinda.
  • Tener un teléfono inteligente.
  • Acceso a internet o una red WIFI
  • Tener planificado 3 o más movimientos diferentes.

Recolección De Datos

Para este proyecto el primer movimiento serán sentadillas, el segundo será peinarse y el tercer movimiento será barrer. Cada toma de datos debe ser 50 rondas de 10 segundos con el fin de tener un análisis amplio para crear el modelo.

A continuación se presentan los pasos para obtener los datos:

  1. Enlazar el teléfono inteligente con la plataforma de EDGE IMPULSE, en la pestaña de dispositivo se selecciona la opción de «conectar un dispositivo», utilizando un teléfono inteligente.
  2. Se muestra un código QR que se debe escanear.
  3. En el teléfono inteligente seleccione la opción de «recolectar movimiento«
  4. Se coloca el nombre del movimiento a correr, con el tiempo de 10 segundos.
  5. Se comienza a grabar la sesión.
Recolección De Datos

En la pestaña de adquisición de datos se puede encontrar cada sesión que se tendrá desde el teléfono inteligente.

Recolección De Datos

Realización Del Modelo

Luego de haber recabado los datos de cada uno de los movimientos, se procede a realizar el modelo que va a identificar la probabilidad de que se esté realizando un movimiento en específico. En este caso solo utilizaremos las opciones Impulse Desing y Model Testing

Realización Del Modelo
Realización Del Modelo

En Impulse Desing.

En esta opción empezaremos a analizar los impulsos que se obtienen de las muestras realizadas, los impulsos se procesarán, se extraerán sus características y luego se usa un bloque de aprendizaje para clasificar nuevos datos.

Se hace clic en la opción Impulse Desing, la cual se compone de 3 subdivisiones que se deben completar en el orden que aparecen: Create Impulse, Spectral features, NN Classifier.

Al haber completado una, el punto gris que se encuentra al lado se pondrá de un color verde, que indica que se puede proceder a la siguiente subdivisión.

  • En Create Impulse: solamente se modificará dos bloques:Add a new processing block: Seleccionar la opción «Spectral Analysis» o Add a leraning block : Seleccionar la opción «Clasification (Keras)«, la cual automáticamente mostrará las muestras recabadas en el bloque «Output features». Guardar el impulso seleccionando «Save Impulse» que se encuentra en la parte inferior de la página.
  • En Spectral features: Dirigirse a la opción «Parameters«:
    • Se muestra la gráfica de una de las muestras
    • Seleccionar el cuadro blanco y arrastrarlo hasta la mitad del gráfico o donde se considere que el gráfico muestra la mejor forma del movimiento
    • No se modifica otro parámetro y seleccionar «Save parameters«
    • Cambiar la muestra en una pestaña que se encuentra en la parte superior de los gráficos
    • Repetir con cada una de las muestras.
    • Dirigirse a la opción «Generate features«
    • Seleccionar la opción «Generate features» que se encuentra en un cuadro verde en el bloque training set
  • En NN Classifier: Se muestran los parámetros pero en este caso no se modifican (Si se desean modificar, solo dirigirse al parámetro sin hacer clic y se da una pequeña definición del parámetro)
    • Seleccionar la opción «Start training«
    • Esperar a que se complete el entrenamiento y el punto esté en verde (Generalmente no debe tardar mucho, pero si ese es el caso, cancelar el entrenamiento y verificar que los pasos anteriores o las muestras estén correctos)
    • Luego de completar el entrenamiento, dirigirse al bloque «Model» y verificar el porcentaje obtenido en la precisión del modelo. Esto dependerá de la complejidad de los movimientos o la calidad con la que se recabaron.

Probando El Modelo

En esta opción se pondrá a prueba el modelo que ya procesó los datos y se entrenó en los pasos anteriores. Esto enumera todos los datos de las pruebas.

Probando El Modelo

En Model Testing:

  • Verificar que el teléfono esté conectado con la computadora en el mismo enlace
  • En las opciones del teléfono, seleccionar la opción «Switch to classification mode»
  • Esperar que el teléfono compile el modelo que se acaba de entrenar
  • Al terminar, el teléfono mostrará el mensaje de «Sampling» que indica que ya está tomando los movimientos para poder clasificarlos

En un periodo de 6 segundos, el modelo estará verificando la probabilidad (0 a 1) de que se esté realizando un movimiento, y lo mostrará en la pantalla del teléfono.

*Verificar que el teléfono se esté colocando de la misma forma en que se colocó para la toma de las muestras.

Resultados

Los movimientos que se presentan en el ejemplo forman parte de las actividades básicas de una rutina diaria como lo que es; la limpieza, el cuidado personal o realizar ejercicio. El modelo generadod es capaz de detectar un movimiento e indica la probabilidad (en porcentaje) de cual de los tres movimientos analizados se esta realizando. Con estos modelos se logra incrementar una toma de datos mucho más rápida y eficiente. Al entrenar el modelo en NN Classifier se puede obtener una precisión del 100%, para todas las muestras de los tres movimientos, lo que quiere decir que el modelo será completamente preciso en detectar el movimiento que se está realizando. También se observa que la tabla que muestra la probabilidad de confusión entre los tres movimientos y se observa que no hay coincidencias entre un movimiento y otro.Al realizar los movimientos en físico utilizando el teléfono, se diferencia con una probabilidad entre 1 y 0.98 cada movimiento en específico, por lo que el modelo debería clasificar de manera correcta qué movimiento se esta realizando en ese momento.

Segundo ejemplo de implementación de Edge Computing: Prueba de detección de un reloj de muñeca

Otra prueba para esta plataforma, puede ser construir un sistema que pueda reconocer y rastrear un objeto en específico a través de una cámara web ( a esto se le llama detección de objetos). En este caso el objeto escogido fue un reloj de muñeca y a diferencia del ejemplo anterior la plataforma empleada es una Raspberry Pi con su correspondiente cámara compatible.

Lo primero es instalar los requerimientos que necesita Edge Impulse para funcionar en una Raspberry 4. Para instalar estos requerimientos se deben seguir los pasos que indica la documentación .En términos simples, es ingresar los comandos y habilitar los puertos.

Estos son los comandos para Instalar Edge Impulse:

1) sudo apt update 
2) sudo apt upgrade 
3) curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - 
4) sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools gstreamer1.0 plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps 
5) npm config set user root && sudo npm install edge-impulse-linux -g --unsafe-perm

Al realizar todos los pasos, posteriormente debemos ejecutar el comando para ingresar a la plataforma:

edge-impulse-linux

Con esto se nos solicitará el correo y la clave con la que iniciamos sesión.

Tras ingresar el usuario y contraseña, nos pedirá seleccionar la cámara y darle un nombre, de esta forma ya tendremos nuestro dispositivo conectado a Edge Impulse.

En la pantalla anterior vemos como nos ha reconocido la cámara conectada por Raspberry Pi. Además desde el interfaz web podemos ver como tenemos reconocida la RPi y la cámara.

Con el equipo conectado, ya podemos recolectar datos, ya se de manera manual o tomando fotos, audio o video con la misma cámara conectada al dispositivo.

según muchos usuarios se recomienda tomar muestras de manera manual con el dispositivo que utilizaremos para el funcionamiento de la red neuronal, ya que al momento de implementar fotos arbitrarias de internet, el nivel de compatibilidad con las fotos será demasiado bajo y no funcionará de manera correcta de modo que es muy importante tomar en cuenta estas consideraciones para obtener buenos resultados. La recomendación general para este tipo de proyectos se utilicen entre 50 o 60 imágenes para hacer el entrenamiento, para nuestro ejemplo utilizamos 80 fotos tomadas con la misma web cam que conectamos a nuestra Raspberry. Es importante que las imágenes estén en los formatos que solicita la plataforma.

Una vez cargadas las imágenes en la plataforma, debemos habilitar la “labeling queue” o cola de etiquetado, para esto debemos seguir los siguientes pasos: Dashboard > Project info > Labeling method’ select ‘Bounding boxes (object detection)’

Ahora podemos etiquetar de imagen en imagen el objeto que queremos reconocer. Entrando en Data Acquisition y Lebeling queue.

Podemos desde la plataforma realizar los cortes en las Imágenes Seleccionadas para enseñarle al sistema que objetos es un reloj

Ya con todas las imágenes seleccionadas, podemos crear un impulso. Es importante destacar que las medidas son una restricción para el tipo de modelo que utilizaremos, para este caso se requieren dimensiones de 320 x 320, de lo contrario no nos permitirá ocupar el modelo seleccionado.

Tras guardar el Impulse, presionamos en Image en la ventana de la izquierda y posteriormente Save parameters

Posteriormente despues de Save parameters > Generate Features donde veremos los parámetros de entrenamiento de Datos

Ahora que ya se hizo el análisis de las imágenes ya es posible aplicar el entrenamiento del sistema, para este caso es la detección de objetos. Presionamos en el costado derecho donde dice Object detection.

Es importante recalcar que el modelo utilizado para este caso es el MobileNetV2 SSD FPN-Lite 320×320, lo cual realizaremos en la Configuración de Red Neuronal.

Ahora vamos a “Model testing”  para comparar nuestro modelo con los datos que quedaron en pruebas. Presionamos cualquiera de los datos de prueba y presionamos “show classsification” para ver la relación del dato con el modelo y veremos los Resultados del Testeo del Modelo

También es posible ver una muestra de la Relación del Dato con el Modelo, lo cual nos esta indicando que el modelo esta funcionando correctamente

Como sabemos que el modelo ya funciona, podemos ejecutarlo en nuestro dispositivo. Para ello, debemos ejecutar el siguiente comando en nuestra Raspberry después de cerrar el comando anterior de la Raspberry:

edge-impulse-linux-runner

De esta forma se comenzará a cargar el modelo en nuestro dispositivo para funcionar de manera local. Finalmente nos dará una IP local con un puerto especifico al cual podremos entrar para usar el equipo en tiempo real. Al introducir dicha IP ya tendemos el Modelo en Tiempo Real Ejecutado en Raspberry Pi,

Al ingresar en la IP teniendo la cámara conectada al dispositivo, podremos poner frente a la cámara el objeto con el que trabajamos para detectar lo ( recodemos que en nuestro caso utilizamos relojes de muñeca). Es por ello que en la dirección IP veremos el dispositivo detectado por el modelo local

Resumen

Edge Impulse se ha convertido en una herramienta invaluable para el desarrollo de soluciones de IA y redes neuronales, tanto en el ámbito industrial como doméstico. Su eficiencia y facilidad de uso la convierten en una opción ideal para agilizar el proceso de desarrollo e implementación, incluso para aquellos sin experiencia previa en IA.

Las ventajas de usar Edge Impulse son numerosas:

  • Ahorro de tiempo: La plataforma automatiza gran parte del trabajo pesado, desde la recopilación y preprocesamiento de datos hasta el entrenamiento e implementación de modelos. Esto permite a los desarrolladores enfocarse en la lógica específica de su aplicación y reducir significativamente el tiempo de desarrollo.
  • Facilidad de uso: La interfaz intuitiva de Edge Impulse facilita el uso de la herramienta, incluso para usuarios principiantes. No se requiere experiencia en programación para crear e implementar modelos de IA básicos.
  • Flexibilidad: Edge Impulse es compatible con una amplia gama de dispositivos y plataformas, lo que permite a los desarrolladores crear soluciones para una gran variedad de aplicaciones.
  • Escalabilidad: La plataforma puede adaptarse a las necesidades de proyectos de cualquier tamaño, desde pequeños prototipos hasta soluciones industriales a gran escala.
  • Comunidad: Edge Impulse cuenta con una comunidad activa y en constante crecimiento que ofrece soporte y recursos a los usuarios.

Además de las ventajas mencionadas, Edge Impulse también ofrece:

  • Funciones avanzadas: La plataforma incluye herramientas para la optimización de modelos, la gestión de dispositivos y el análisis de datos.
  • Seguridad y privacidad: Edge Impulse se compromete a proteger la seguridad y privacidad de los datos de los usuarios.

Además de los tres ejemplos que hemos visto en este blog, he aquí hay algunos ejemplos de cómo se puede usar Edge Impulse en diferentes sectores:

  • Industria: Edge Impulse se puede usar para crear soluciones de IA para el control de calidad, la predicción de mantenimiento y la optimización de procesos.
  • Hogar inteligente: Edge Impulse se puede usar para crear dispositivos inteligentes que puedan reconocer gestos, controlar la temperatura y la iluminación, y mucho más.
  • Cuidado de la salud: Edge Impulse se puede usar para desarrollar dispositivos de diagnóstico portátiles, sistemas de monitorización de pacientes y aplicaciones de asistencia médica.

En resumen, Edge Impulse es una herramienta poderosa y versátil que puede ayudar a los desarrolladores a crear e implementar soluciones de IA de manera rápida, eficiente y segura. Si está buscando una forma de agilizar el desarrollo de tu próxima aplicación de IA, Edge Impulse es una excelente opción.

Referencias

Como ejecutar algoritmos de IA en una RPI


Recientemente ha salido a la luz Roni Bandini, el programador, músico y escritor argentino de 49 años, que ha creado el ingenioso dispositivo Reggaeton Be Gone, diseñado para contrarrestar la música molesta de reguetón que reproduce el altavoz bluetooth de su vecino.

Utilizando inteligencia artificial y componentes de bajo costo, este dispositivo identifica y bloquea la música de reguetón enviada a través de altavoces bluetooth, generando interferencias que obligan al vecino a cambiar de ubicación (! o al menos esa era la idea hasta que su vecino cambió la ubicación de dicho altavoz!). Aunque reconocido localmente como un «héroe» por su invento, Bandini se muestra reticente a comercializarlo masivamente, prefiriendo compartir su conocimiento en talleres de contracultura maker pues además de este dispositivo, Bandini ha incursionado en la creación de otras máquinas innovadoras que fusionan literatura, tecnología y arte, como Rayuelomatic, BookSound y la expendedora de Literatura en Tickets.

El Reggaeton Be Gone utiliza inteligencia artificial, específicamente machine learning, para reconocer patrones sonoros y distinguir miles de canciones del género de reguetón. Su proyecto compuesto por componentes de bajo costo, como puede ser una raspberry pi , un receptor Bluetooth , un pulsador y una pequeña panta I2C, así como software de código abierto, monitorea la música que se está reproduciendo y la compara con un modelo previamente entrenado: si determina que la canción que esta «oyendo» es identificada como reguetón, intenta interferir con la señal enviada al altavoz bluetooth, con el objetivo de desconectar el altavoz o al menos dificultar la escucha para no ser molestado.

Al margen de que la idea nos pueda ser útil, sin duda al menos el concepto es claramente interesante porque nos acerca actual de como con un maquina tan limitada como puede ser un ESP32 o una Raspberry Pi (o incluso un smartphone antiguo), podemos ejecutar algoritmos de Deep Learning para cualquier cosa que se nos ocurra.

¿Como es posible ejecutar un algoritmo de IA en una maquina tan limitada?

Pues bien la clave está en Edge Impulse, una plataforma de desarrollo de aprendizaje automático (machine learning) y análisis de datos diseñada específicamente para dispositivos de «borde» o «edge» (como microcontroladores, dispositivos IoT, sensores, etc.), lo que se conoce como «TinyML«. Simplifica el proceso al permitir ingresar una base de datos, ajustar parámetros y entrenar el programa con diversos casos de implementación, lo cual elimina la necesidad de sumergirse profundamente en el desarrollo del código. La plataforma ofrece la posibilidad de realizar proyectos de detección de objetos, reconocimiento de voz, procesamiento de gestos de un acelerómetro, y más.

La plataforma permite a los desarrolladores recopilar datos de sensores, entrenar modelos de aprendizaje automático y desplegar estos modelos directamente en dispositivos de borde simplificando el desarrollo de aplicaciones de Machine Learning para dispositivos embebidos, ampliando las posibilidades de implementación en diversos campos.

Por cierto, Edge Impulse es una plataforma joven, pero grandes fabricantes de semiconductores respaldan su desarrollo. Por mencionar algunos están ARM, ST Electronics, Microchip, Nordic Semiconductor y Arduino. Podemos destacar sobre todo la colaboración con TinyML y Hackster.io. Con estos se implementan los algoritmos de aprendizaje máquina y se documentan los proyectos que se van desarrollando.

Implementación de algoritmos en minutos

Edge Impulse ofrece una plataforma intuitiva para implementar algoritmos de machine learning en cuestión de minutos, sin necesidad de ser un experto en la materia. La interfaz es muy amigable y es bastante intuitiva. Según la página oficial se puede implementar su proyecto en minutos (dejando de lado la etapa de aprendizaje).

¿Cómo funciona?

  1. Cree su cuenta: Regístrese en la plataforma Impulse y seleccione el tipo de proyecto que desea realizar :
    • Detección de objetos
    • Reconocimiento de voz ( que es el tipo de proyecto que ha usado Roni Bandini)
    • Procesamiento de gestos
    • Etc..
  2. Adquiera datos: Reúna o genere el conjunto de datos (dataset) que su proyecto necesita. En el caso de Roni Bandino por ejemplo han sido varios fragmentos de canciones. La plataforma le ofrece diversas opciones para obtener datos, como la carga de archivos CSV o la conexión a sensores en tiempo real.
  3. Cree un Impulse: Defina los parámetros de su modelo de machine learning y entrene el modelo con tu dataset utilizando la herramienta Impulse. La plataforma le guía a través del proceso con una interfaz amigable.
  4. Cargue el modelo: Descargue el modelo entrenado y cárguelo en su microcontrolador. Impulse le ofrece opciones para diferentes plataformas de hardware.

Ventajas:

  • Interfaz intuitiva: Fácil de usar, incluso para principiantes en machine learning.
  • Rápido y eficiente: Implementa algoritmos en minutos, sin necesidad de conocimientos avanzados de programación.
  • Versátil: Soporta diferentes tipos de proyectos de machine learning.
  • Flexible: Compatible con diversos microcontroladores y plataformas de hardware.

Ejemplos de proyectos:

  • Detección de objetos en imágenes
  • Reconocimiento de voz para control por voz
  • Clasificación de gestos con un acelerómetro
  • Análisis de datos de sensores en tiempo real

Impulse democratiza el acceso a la inteligencia artificial, permitiendo que cualquier persona pueda implementar algoritmos sofisticados en sus proyectos.

Otro ejemplo: clasificación de Movimientos con Edge Impulse con un Smartphone

Este tipo de proyectos explora la capacidad de Edge Impulse para tomar datos de sensores de movimiento en un smartphone y crear un modelo de machine learning

Concretaemente el proyecto que podemos ver en instructables se llevó a cabo utilizando la aplicación Edge Impulse en un smartphone, recopilando 50 rondas de 10 segundos para cada movimiento para clasificar tres movimientos cotidianos: sentadillas, peinarse y barrer.

Los datos se sincronizaron con la plataforma Edge Impulse para procesarlos, extraer características y entrenar un modelo de clasificación utilizando la función «Impulse Design«.

Se ajustaron los parámetros del modelo y se verificó su precisión en la sección «Model«. Luego, se probó el modelo en tiempo real seleccionando la opción «Switch to classification mode» en el smartphone, logrando una precisión del 100% en la clasificación de los movimientos. Los resultados demostraron la capacidad del modelo para identificar movimientos en vivo.

Destaca la sensibilidad del modelo a la posición del dispositivo durante las pruebas y pero el autor recomienda acciones para mejorar la robustez del modelo, experimentar con diferentes movimientos y considerar la implementación en una aplicación móvil para una interacción más intuitiva.

Con este sencillo proyecto vemos la utilidad de la plataforma para la creación de modelos de machine learning con smartphones.

Gran compatibilidad

Con Edge Impulse, los usuarios pueden capturar datos de sensores, etiquetarlos, entrenar modelos de aprendizaje automático utilizando técnicas como la visión por computadora, el procesamiento de señales y el análisis de audio, y luego implementar estos modelos en hardware de baja potencia. Esto permite la ejecución de inferencias

A medida que aumenta la popularidad de Edge Impulse se van agregando más tarjetas de desarrollo a la lista de sistemas compatibles. Esto permite que se pueda cargar fácilmente su modelo a tu plataforma final. Ya sea un móvil, una Raspberry Pi, un Arduino 33 BLE Sense o una OpenMV, podrá cargar su modelo. La lista es bastante extensa y si la pagina no tiene soporte nativo aún, puede convertir su modelo en una librería de C++ o Java. Esto le permitirá integrarlo a cualquier plataforma que desees, siempre que tenga la capacidad adecuada de procesamiento.

Referencias: