Una breve introducción al Tiny Machine Learning

Tiny Machine Learning es el conjunto de técnicas que permiten llevar la inteligencia artificial a pequeños dispositivos de bajo costo y bajo consumo para procesar información y tomar decisiones en el mismo lugar donde se generan los datos. Acompañame a descubrir de qué se trata este fascinante campo y cuáles son sus aplicaciones.

Introducción

En el último año, a partir de la aparición de Chat GPT, hemos sido bombardeados con noticias sobre la Inteligencia Artificial y cómo está revolucionando el mundo. Casi a diario podemos leer noticias, no siempre serias y confiables, sobre los empleos que dejarán de existir, las capacidades casi mágicas de la IA generativa o cuanto falta para que las máqinas dominen a la humanidad.

El tiempo dirá cuán acertadas o no fueron estas predicciones. Sin embargo, hay un campo de IA menos espectacular, pero igualmente interesante, conocido como Machine Learning, que ha estado trabajando en silencio durante varios años y que brinda resultados efectivos en un gran número de aplicaciones prácticas.

En este artículo, intentaré proporcionarte una visión general de este fascinante campo. Veremos en qué consiste, en qué casos es conveniente su utilización, las distintas técnicas que emplea y cómo se implementa en dispositivos pequeños.

¿Para qué necesitas Machine Learning?

Imagina que quieres diseñar un sistema para controlar la temperatura de tu invernadero, para que se mantenga estable dentro de ciertos valores aunque cambien las condiciones del exterior. Seguramente necesitarás un sensor para medir la temperatura del interior y actuadores como un calentador y un ventilador, para aumentar o disminuir su valor según sea necesario.

El problema no es de difícil solución. Conociendo el valor de temperatura óptimo que debes mantener, solo resta escribir un programa para que se encienda el calentador si la temperatura medida es menor y se apague si este valor es superado, y que se encienda el ventilador si la temperatura aumenta todavía más.

Esta forma de resolver un problema se denomina algorítmica porque se basa en un algoritmo o método que realiza una serie de acciones a partir de los datos que recibe. Está claro qué se debe hacer y también es claro y evidente cómo funciona el algoritmo.

Un problema de perros y gatos

Ahora imagina una situación diferente: tienes un comedero o alimentador para mascotas y quieres que provea una ración de alimento a tu gato cuando éste se acerca.

Seguramente podrías resolver el problema agregando un sensor de proximidad por ultrasonido o infrarrojo para que, cuando el gato esté cerca, se active el comedero y le dé una ración de comida.

Pero, ¿qué ocurre si resulta que también tienes un perro que se come la comida del gato? ¿Cómo puedes hacer para que el alimentador funcione con el gato pero no con el perro?

El problema del alimentador de mascotas (Fuente: Xiaomi)

La solución podría ser que incluyas una cámara que tome una imagen cuando el sensor de distancias detecte que algo se acerca. Bien, pero una vez que tienes la imagen, ¿cómo distingues en ella al perro del gato? ¿Qué algoritmo debes diseñar para diferenciar entre las dos mascotas? ¿Cuáles son las diferencias entre ellos? ¿El largo de las orejas o los bigotes? Finalmente, ¿cómo codificas esa información en un algoritmo?

Evidentemente, este problema no se puede resolver (o es muy difícil de hacerlo) por el método algorítmico clásico y es aquí cuando conviene echar mano de una técnica alternativa como el Machine Learning.

Veamos un poco mas de que se trata y como funciona.

¿Qué es Machine Learning?

El Machine Learning, o aprendizaje automático, es una técnica o conjunto de técnicas que permiten que un algoritmo matemático sea capaz de identificar patrones a través de un procedimiento de entrenamiento.

Durante este entrenamiento, el algoritmo o modelo va ajustando sus parámetros internos para obtener los resultados deseados.

Machine learning o aprendizaje automático
Un modelo de ML “aprende” durante su entrenamiento

Esta técnica se denomina aprendizaje supervisado y si bien existen variaciones sobre esta idea, es la mas común y fácil de implementar.

Existen distintos tipos de modelos, según la tarea que deba desempeñar. Tenemos por ejemplo los que se basan en métodos de regresión, los que emplean árboles de decisión o los que usan redes neuronales, sólo por citar algunos.

Aplicaciones de Machine Learning

Como vimos en el ejemplo anterior, el Machine Learning es particularmente útil cuando sabes que hay una relación entre los datos que utilizas (una imagen, por ejemplo) y su significado (un gato), pero esta relación es desconocida o extremadamente compleja para codificarla usando métodos tradicionales.

Si bien el reconocimiento o clasificación de imágenes es uno de los ejemplos más empleados, existe un sin número de aplicaciones que se pueden beneficiar de la aplicación del ML. Algunos ejemplos son:

  • Detección temprana de fallas en máquinas o motores a partir del análisis de las vibraciones que producen empleando los datos provistos por un acelerómetro.
  • Prevención de incendios forestales al analizar los datos provenientes de sensores como humedad, temperatura y presencia de compuestos orgánicos en el aire.
  • Detección del llanto de un bebé a partir del sonido captado con un micrófono.

Y cientos o miles de aplicaciones más. Como puedes apreciar, estas aplicaciones analizan grandes cantidades de datos provistos por distintos tipos de sensores y buscan en ellos ciertos patrones que indiquen que algo está sucediendo: que un motor fallará pronto, que se está iniciando un incendio o que un bebé ha comenzado a llorar.

Aplicaciones de Machine learning
Detector de incendios forestales usando ML (Fuente: Edge Impulse)

En todos estos casos no hay una relación clara y sencilla entre los datos y los eventos que se intentan detectar que puedan ser resumidos en una fórmula matemática o un algoritmo que se pueda llevar a algún lenguaje de programación. Sin embargo, haciendo uso del ML puedes detectar esos patrones y resolver estos problemas con éxito.

Tiny ML: inteligencia artificial en Arduino

Aunque no seas del todo consciente de ello, desde hace años estas empleando machine learning en tu vida cotidiana. Por ejemplo, cada vez que tu teléfono mejora una foto o aplicas un filtro para publicarla en una red social, hay un algoritmo de ML por detrás que hace ese trabajo.

Cloud computing

En un caso como el anterior, el proceso comúnmente no se realiza en el teléfono mismo, sino que la imagen es enviada a un servidor donde es procesada por el algoritmo de ML y luego devuelta a tu dispositivo modificada. Obviamente, para eso necesitas una conexión a Internet y energía suficiente (como la que tiene la batería del teléfono) para mantenerla.

Este es un ejemplo de lo que llamamos cloud computing, porque el procesamiento de la imagen no se realiza en el mismo dispositivo que la tomó sino en un lugar de la nube de Internet.

Edge computing

¿Pero que sucede si no cuentas con una conexión permanente a Internet, o si tu dispositivo no tiene la suficiente capacidad de proveer energía para mantenerla? ¿O si no puedes emplear un dispositivo caro como un teléfono sino que tiene que ser muy barato porque debes instalar cientos o miles de ellos, tal como un Arduino por ejemplo?

En ese caso no puedes contar con que el procesamiento se haga en la nube sino que deberás hacerlo localmente, en el mismo dispositivo.

Esto es lo que generalmente se denomina Edge computing y la forma en que se usa el machine learning sería lo que llamamos Tiny Machine Learning.

Tiny ML: Clasificador de imágenes con un ESP32 CAM

Gracias al aumento en la potencia de los procesadores, la creación de módulos específicos para el procesamiento de algoritmos de ML como redes neuronales en hardware y el mejoramiento de las técnicas y algoritmos, hoy puedes implementar soluciones de Tiny ML sobre placas que cuestan unos pocos dólares y funcionan durante meses alimentadas por baterías o paneles solares.

Desarrollando un proyecto de Tiny Machine Learning

El proceso completo de un proyecto de Tiny ML puede seguir diferentes caminos. En primer lugar, debes decidir si te servirá utilizar un modelo preentrenado o si entrenarás uno tú mismo. Para aplicaciones comunes como el reconocimiento de imágenes, se pueden encontrar modelos preentrenados que ahorran mucho tiempo de preparación.

Si este es el caso, puedes descargar uno de estos modelos “listos para usar”, incluirlo en tu aplicación y listo.

Modelos preentrenados para descargar en MaixHub, plataforma del fabricante chino Sipeed

Si ningún modelo preentrenado se adapta a tus necesidades, deberás tomarte el trabajo de entrenarlo. En este caso el proceso será un poco más largo y consistirá en los siguientes pasos:

Preparación de los datos

En primer lugar debes obtener los datos necesarios para realizar el entrenamiento, como imágenes, audios o datos numéricos.

En general, estos datos requieren una revisión para asegurarte de que sean útiles, no sean redundantes, estén completos y no tengan errores, entre otros aspectos. Luego, debes etiquetar estos datos. Por ejemplo, si estás desarrollando una aplicación para un comedero de gatos, debes agregar la etiqueta “Gato” a las imágenes que contengan un gato y la etiqueta “No Gato” a las que no lo tengan.

Selección del modelo y entrenamiento

Seguidamente debes seleccionar el tipo de modelo más adecuado para tu aplicación, ya que hay una amplia variedad disponible, orientados a distintas aplicaciones.

Una vez elegido el modelo como ya dije debes entrenarlo, lo que implica proporcionarle los datos etiquetados que ya tienes preparados para que el modelo ajuste sus parámetros para obtener la salida que estás esperando. En nuestro ejemplo el entrenamiento es cuando el modelo “aprende” a detectar un gato en una imagen.

Los procesos de preparación de datos y entrenamiento del modelo generalmente se hacen localmente en una computadora o empleando un servicio basado en la nube. Si el trabajo que debe realizar el modelo es complicado, el entrenamiento puede requerir mucho poder de procesamiento y por lo tanto un tiempo considerable.

Herramientas

La preparación de datos, entrenamiento del modelo y prueba del mismo se puede realizar al menos de dos formas:

  • Empleando Python en algún entorno de desarrollo como Visual Studio Code o herramientas específicas como Jupyter Notebook o Google Colab, donde se emplean librerías especializadas de Python como Pandas, Numpy, Scikit Learn, Tensorflow, etc. Esto requiere conocer como funcionan estas librerías y los modelos.
  • Usando un servicio en la web como Edge Impulse o MaixHub, que se hacen cargo de algunos procesos con lo que el procedimiento se vuelve mas sencillo.
Fragmento de un ejemplo en Google Colab
Iniciando un proyecto con Edge Impulse

Deployment

Finalmente, una vez completado el entrenamiento, debes descargar el modelo en tu placa. Esto se denomina deployment.

En esta etapa es cuando integras el modelo ya entrenado a tu código para que funcione con el resto del programa (por ejemplo, el que realiza el movimiento del motor para darle alimento al gato).

Los programas que hacen uso de modelos de ML muy a menudo están escritos en C/C++ por una cuestión de velocidad. Sin embargo, si no hay requisitos de velocidad muy exigentes, también se puede emplear Micropython.

Placas para Tiny Machine Learning

¿Que placa necesitas para correr aplicaciones de Tiny Machine Learning?

En realidad, cualquier placa puede ejecutar aplicaciones de Tiny ML. Mira este enlace, es una demostración de que se puede implementar una red neuronal en un Arduino UNO. Sin embargo, para aplicaciones prácticas se requiere más poder de procesamiento y memoria que lo que ofrece un UNO. Y mientras más complejas sean las aplicaciones y los modelos empleados, se necesitarán aún más recursos.

Puntualmente, las características que debes observar al elegir una placa para Tiny ML son las siguientes:

  • Poder de procesamiento: Procesador de 32 bits, mas de un núcleo.
  • Frecuencia de trabajo: Mientras mayor sea, menos demorará en procesarse el modelo.
  • Cantidad de memoria: Los modelos complejos ocupan mas memoria.
  • Módulos de hard adicionales: Los modelos de ML requieren de mucho cálculo numérico, sobre todo de vectores y matrices, así que si el procesador cuenta con un módulo dedicado a este tipo de cálculos se notará en una mejora del rendimiento. También hacen una gran diferencia bloques para manejar video o audio implementados directamente en el hard.
  • Sensores incorporados: El Tiny ML consiste en trabajar con datos como los que provienen de diferentes sensores, así que si estos están incorporados en la placa mejor. Por ejemplo sensores de temperatura, acelerómetros, micrófonos, conectores para cámaras, etc.

Ejemplos de placas

A continuación algunas placas que reúnen algunas o todas las características mencionadas, con un precio entre un par de centenares a menos de cincuenta dólares.

Google Coral
NVIDIA Jetson Nano
Raspberry Pi
Sipeed Maixduino
Arduino Nano 33 BLE Sense

Conclusiones

En este artículo hice un recorrido breve por los conceptos fundamentales del Tiny Machine Learning, sus aplicaciones y ventajas, el proceso de desarrollo y te hice algunas recomendaciones a la hora de elegir una placa para que realices tus propios proyectos.

Tiny Machine Learning abre nuevas fronteras para la implementación de la inteligencia artificial en dispositivos pequeños y económicos. Con su capacidad para procesar información y tomar decisiones localmente, se espera que esta tecnología desencadene una gama de aplicaciones innovadoras e impulse el desarrollo de dispositivos más inteligentes y autónomos en nuestro día a día.

¡Espero que esta explicación haya sido de tu interés! Si tienes alguna pregunta o sugerencia, no dudes en dejarla en la sección de comentarios.

Enlaces

Proyecto Jupyter (Jupyter Notebook)

Google Colab

Edge Impulse

MaixHub

Wiki de productos de Sipeed

Documentación del Arduino Nano 33 BLE Sense

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias