Skip links

Probando Edge Impulse

¿Qué es Edge Impulse?

Edge Impulse es una plataforma que permite desarrollar algoritmos de Machine Learning para implementarse en  dispositivos o sistemas embebidos, a esto se le llama “TinyML”. Esta plataforma ayuda a que no sea necesario entrar de manera tan profunda en el desarrollo del código, ya que es posible implementar nuestro algoritmo 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.

La plataforma permite realizar proyectos de detección de objetos, reconocimiento de voz, o procesar gestos de un acelerómetro entre otras cosas.

Tipo de Implementación en Edge Impulse

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.

Empresas que han Implementado Soluciones con Edge Impulse
Partners de Tecnología de Edge Impulse

Si necesitas saber más a detalle que es el Machine Learning y el TinyML, Edge Impulse tiene una introducción muy completa dentro de su documentación, puedes revisarla en el siguiente enlace:

https://docs.edgeimpulse.com/docs/what-is-embedded-machine-learning-anyway

¿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.

Interfaz de Edge Impulse

La plataforma entrega diversas alternativas para el ingreso de los datos, por ejemplo, si tienes un dispositivo que ya está midiendo datos, la plataforma te permite recopilarlos para construir tu base de datos. En el caso de ya tener un conjunto de datos locales, este puede cargarse directamente.

Alternativas para el Ingreso de Datos en Edge Impulse

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

En el caso de querer profundizar en las especificaciones de las compatibilidades de esta plataforma, Edge Impulse entrega un listado muy completo de las placas compatibles y de que manera sincronizarlas con la plataforma. Lo puedes encontrar en el siguiente enlace:

https://docs.edgeimpulse.com/docs/development-platforms/fully-supported-development-boards

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.

Probando Edge Impulse

Para probar esta plataforma, decidimos 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. El objeto escogido fue un reloj de muñeca.

Lo primero es instalar los requerimientos que necesita Edge Impulse para funcionar en una Raspberry. Para instalar estos requerimientos se deben seguir los pasos que indica la documentación en el siguiente link:

https://docs.edgeimpulse.com/docs/development-platforms/officially-supported-cpu-gpu-targets/raspberry-pi-4

En términos simples, es ingresar los comandos y habilitar los puertos.

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.

Cámara Conectada por Raspberry Pi
Raspberry y Webcam Conectadas a Plataforma

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

En nuestra experiencia, recomendamos 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. Es muy importante tomar en cuenta estas consideraciones para tener resultados.

Se recomienda que 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.

Imágenes Cargadas

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)’

Ubicación de la Configuración

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

Lebeling Queue
Cortes en las Imágenes Seleccionadas

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.

Parámetros de Impulse

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

Parámetros de Imagen
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.

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.

Resultados del Testeo del Modelo
Muestra de la Relación del Dato con el Modelo

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. Finalemente nos dará una IP local con un puerto especifico al cual podremos entrar para usar el equipo en tiempo real.

Modelo 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, en nuestro caso utilizamos relojes de muñeca.

Dirección IP y Dispositivo Detectado por el Modelo Local

Para más detalle sobre la implementación de un ejemplo como este, uno de los Ingenieros fundadores de Edge Impulse publicó un tutorial básico del paso a paso para realizar un ejemplo pequeño de como detectar objetos:

Tutorial del Canal Oficial de Edge Impulse

En nuestra experiencia, consideramos que Edge Impulse es una herramienta extremadamente útil, ya sea para soluciones de carácter industrial, como domestico. La enorme eficiencia que entrega esta herramienta nos permite ahorrar muchísimo tiempo en el desarrollo e implementación de códigos que requieran inteligencia artificial y redes neuronales, ya que hace prácticamente todo el trabajo con unos pocos sencillos pasos.

Si te interesa saber más y requieres de asesorías o desarrollos para un proyectos que requieran detección de objetos, rostros, personas, sonidos, fallas o datos de sensores con inteligencia artificial, no dudes en contactarnos para resolver tus dudas:
https://wisely.cl/contacto/