domingo, 23 de enero de 2022

Identificación de audio a través de TinyML con Edge Impulse

 INTRODUCCIÓN

Este es otro ejemplo sencillo de TinyML llevado a la práctica, considerando la utilización de sensores de audio para la identificación de objetos o tipos de sonidos con técnicas de machine learning.


CASO DE USO

Al igual que el caso anterior de detección de movimiento, este tipo de sensores puede ser utilizado también para mantenimientos preventivos, los cuales al juntarse podrían lograr un mejor resultado al identificar inconvenientes. 

Otro caso particular, es el reconocimiento de voz,  que es utilizado en equipos como Alexa o en smartphones iphone al utilizar Siri y de "Ok Google" en androids, con la diferencia que estos necesitan permanentemente una conexión a internet, es decir, la inteligencia para la identificación de los sonidos no está en el celular sino en un servidor a miles de kilómetros, mientras que para el caso del microcrontrolador (MCU) no requiere de la conexión de internet para la identificación (una de las características de las soluciones de TinyML que profundizaremos posteriormente). A continuación un link con varios casos de uso de reconocimiento de voz Top 10 Voice Recognition Applications for Business (aimultiple.com), algunos de los cuales podrían beneficiarse de la tecnología TinyML.


CONFIGURACIÓN DE LA PRUEBA

Para este tipo de caso, uno de los temas que considero podría tener un gran impacto es el ruido de fondo, que puede alterar los resultados, por lo que el desarrollo del modelo en el ambiente en donde se requiera la detección podría ser un tema crítico, considerando esto, he aprovechado un ambiente ruidoso que tengo a la mano, una peluquería de mascotas donde mi esposa es la propietaria.

En una peluquería de mascotas tenemos muchos sonidos, el agua de la bañera, la secadora de pelo, el sonido de las tijeras, ladridos de las mascotas, conversaciones del personal, una llamada telefónica, entre otros.

Para efectos de facilitar la prueba y entendiendo que puedo hacer uso de algunos conjuntos de datos públicos, como por ejemplo de ladridos de perros (encontré también uno de conversaciones de personas, pero desistí de utilizarlo cuando vi que el tamaño era de 3.9G, lo cual implicaría más tiempo empezando solo por la descarga de datos), he considerado la identificación del sonido de la secadora de cabello, ladrido de perros y el resto lo considero como ruido.

Aprovecharé los leds del MCU para mostrar el sonido que ha logrado identificar, con lo cual la identificación quedaría de la siguiente forma:






ELEMENTOS

Por temas de movilización y reducir la dependencia del computador para la identificación de los sonidos para la fase de identificación (es decir, posteriormente al modelado), voy a usar solo al MCU y conectándolo a una toma dentro de la peluquería, con lo que dejaré de lado la carcasa de Arduino.



Secador de Grooming

Arduino Nano 33 BLE Sense



El componente de desarrollo del modelo es la plataforma de programación ML de borde denominada Edge Impulse facilita el desarrollo al implementar un esquema de selección de opciones muy amigable eliminando con esto el uso de programación (como python por ejemplo) permitiendo que nos podamos enfocar en otros elementos como las características de las variables, el modelo y sus hiperparámetros, lo cual reduce el tiempo de realización de la prueba.


FUENTE TEÓRICA PARA LA ELABORACIÓN DEL EJERCICIO

Introduction to Embedded Machine Learning (Introduction to Embedded Machine Learning | Coursera)

The Future of ML is Tiny and Bright (Tiny Machine Learning (TinyML) Professional Certificate | edX)


PASOS

1. Creación de proyecto Edge Impulse y conexión MCU: Tomamos como guía el modelo desarrollado en el curso de introducción de machine learning embebida de Coursera / Edge Impulse.











2. Recolección de datos: Se recopiló un total de 21 minutos de sonidos para el entrenamiento, de los cuales 10 minutos de ruido y 3 de la secadora en funcionamiento se lo hizo con el MCU directamente, los otros 7 de ladridos de perros a través de la fuente previamente indicada.













3. Entrenamiento y generación de modelo: Siguiendo la guía de Coursera, se probaron 2 tipos de bloques de procesamiento a fin de ver cuál de ellos nos muestra un mejor desempeño del modelo.

El primero que se probó fue MFCC como se muestra a continuación:











Y el nivel de precisión luego de la fase de modelamiento fue del 87.4% como se muestra en la siguiente imagen:






El otro bloque de procesamiento fue Spectrogram, como se observa a continuación:













Y el nivel de precisión con este bloque de procesamiento fue del 99%, que se muestra a continuación:





















Como se observa hay una mejora del 11.6% al utilizar el bloque Spectrogram versus el MFCC que es muy significativa por lo que utilizamos el segundo bloque mencionado para la implementación del modelo.


4. Implementación

Para esta fase, agregamos al código elaborado por la herramienta Edge Impulse, la parte correspondiente que asocia según el porcentaje de identificación detectado por cada tipo de sentido un color y cargamos en el MCU el código correspondiente.

Conectamos el MCU a una toma eléctrica dentro de la peluquería y validamos el comportamiento, lo cual se muestra a continuación en un video que hemos recortado para efectos de muestra:




Ruido ambiente (verde)


Secadora (azul)



Ladrido (rojo)



CONCLUSIONES

Como se puede observar, este es otro sencillo ejemplo de cómo se puede utilizar la tecnología de TinyML para detección en este caso de sonidos, que podría ser utilidad para el mantenimiento preventivo de equipos, así como de reconocimiento de voz. Recordemos que esta identificación no depende de una conexión a internet (a diferencia de nuestros celulares) y el dispositivo puede utilizar una pila sencilla para operar lo cual hace que pueda ser ubicado en lugares de difícil acceso y que el resultado de la identificación de sonido genere una acción que podría ser como la generación de una señal (alarma por ejemplo), apertura de alguna puerta o cualquier otra acción. 

Debido al ruido de ambiente, puede que sea conveniente integrar otros sensores como el de movimiento a fin de lograr una mayor precisión para la identificación de equipos que requieren mantenimiento.

Pero a más de ello, las herramientas de desarrollo como la plataforma de Edge Impulse facilitan mucho el análisis e integración de las diferentes variables que podrían profundizarse a fin de lograr una mayor precisión.

Finalmente a continuación un link con un caso real de mantenimiento preventivo.









viernes, 21 de enero de 2022

10 TIP's de Analítica Avanzada: Introducción

 



Este es primero de un total de 11 artículos sobre TIP's o recomendaciones de analítica avanzada, que iré publicando periódicamente a fin de facilitar el conocimiento sobre estos temas.

Es claro que al momento es imprescindible el poder utilizar los datos para la generación de nuevos negocios, optimización de recursos o generación de nuevos productos y/o servicios, lo cual al momento inclusive debido al COVID-19 se ha impulsado aún más la necesidad de utilizar técnicas de analítica avanzada para la toma de decisiones. Sin embargo, la inquietud que surge es cómo puedo hacer que esto sea efectivo, cuáles podrían ser las mejores prácticas o TIPs que me permitan llevarlo a la práctica y así alcanzar los beneficios que tanto se comentan, por lo que vamos a desarrollar una serie de artículos en donde se abordarán cada uno de estos TIPs y que serán liberados periódicamente.

En esta primera entrega vamos a mostrar el camino que seguiremos al respecto y realizaremos una breve descripción de este, para lo cual vamos a empezar describiendo cuáles son las claves que ha impulsado el interés en el uso de la analítica de datos:

  • Captura de datos: Los avances tecnológicos como por ejemplo sensores basados en el Internet de las cosas (IoT - Internet of Things), comercio electrónico, redes sociales, dispositivos móviles han impulsado la captura de gran cantidad de datos a muy bajo costo.
  • Almacenamiento de datos: La explosión en las capacidades de almacenamiento de datos tanto en entornos privados o a través de computación en la nube ha facilitado el almacenamiento seguro de datos mucho más que antes.
  • Procesamiento de datos: Los avances en las redes de telecomunicaciones ha permitido tener un acceso más efectivo y al procesamiento masivo de datos de manera rápida y eficiente.

Estos elementos claves ha permitido la explotación del uso de datos y muchas empresas empezaron a tratar de sacar provecho de los mismos, para lo cual es necesario plantearse ciertas preguntas claves, que permitan sacar valor de los datos, como por ejemplo: ¿Qué sucedió con las ventas, los costos, gastos, etc.?, ¿Cuántas ventas se hicieron? ¿Cuán a menudo se cierra un negocio? ¿En dónde existen mayores gastos?, entre otras preguntas. En la medida que se hacen estas preguntas es necesario utilizar ciertas herramientas y dependiendo de esto nos encontraremos en cierto nivel de maduración cuyo resultado reflejará cierto tipo de hallazgo y también el nivel de valor que esto agregará a la organización, lo cual se puede resumir en la siguiente lámina.



Para llevar a cabo el trabajo de analítica es conveniente seguir un proceso que vaya desde el conocer las necesidades hasta la ejecución de las acciones pertinentes para alcanzar los beneficios esperados, lo cual está simplificado en la siguiente imagen.





Cada una de grandes actividades del proceso descrito anteriormente nos ayudan establecer los pasos para a seguir, sin embargo, a pesar de que estos pasos han sido definidos a través de diferentes recomendaciones a nivel de la industria (como por ejemplo CRISP-DM, KDD o SEMMA) esto no ha sido suficiente para obtener valor a través de los datos ya que es necesario también tener en cuenta algunos aspectos adicionales o TIPs en cada una de estas fases, los cuales se detallan a continuación:



Estos TIPs están relacionados con cada una de las fases del proceso de analítica de la siguiente forma:





Y es así como terminamos esta introducción con la ruta que seguiremos en los próximos artículos en donde se expliquen cada uno de los TIPs de analítica avanzada.


BIBLIOGRAFIA
  • Creating a Data-Driven Organization, Practical Advice from the Trenches, Carl Anderson, 2015
  • Analytics best practices, Prashanth H Southekal, 2020


jueves, 13 de enero de 2022

TinyML un caso práctico de detección de movimiento con Edge Impulse

INTRODUCCION

Decidí ingresar al mundo de TinyML como un mecanismo de poder llevar los conceptos de IA a la práctica de una forma sencilla, para lo cual inicié con unos cursos y herramientas que me están permitiendo dar mis primeros pasos en este mundo.

Dado que esto fue con el objetivo de ir a la práctica, qué mejor que dejar la teoría a un lado y mostramos desde un inicio un ejemplo concreto.


CASO DE USO

Este ejemplo puede desarrollarse para mantenimientos preventivos de equipos industriales, en donde sensores de movimiento tienen embebido un algoritmo que permite evaluar el movimiento de los equipos y detectar anomalías que puedan indicar una posible falla y así llevar adelante mantenimientos preventivos, evitando con estos altos costos de mantenimientos correctivos, así como una parada en la elaboración de productos y su consiguiente perdida de ingresos.


OBJETIVO DE LA PRUEBA

Implementar un proyecto de TinyML que permita detectar el estado en el que se encuentra una impresora mostrando  la probabilidad del estado y activando un led con un color específico que facilite visualizar el estado detectado.


FUENTE PARA LA ELABORACIÓN DEL EJERCICIO

* Introduction to Embedded Machine Learning (Introduction to Embedded Machine Learning | Coursera)

* The Future of ML is Tiny and Bright (Tiny Machine Learning (TinyML) Professional Certificate | edX)


ELEMENTOS AMBIENTE DE PRUEBA

Los elementos considerados para la prueba son solo para mostrar la funcionabilidad, como tal, el equipo microcontrolador o MCU utilizado cuenta con al menos 9 sensores de los cuales solo se utiliza el de movimiento para la prueba. Para efectos de implementación se debería seleccionar un equipo especializado (menos sensores más barato) el cual incluya también un mecanismo de comunicación como conectividad wifi para enviar las anomalías encontradas, que para este ejemplo se lo podría asociar como la visualización de un color en particular.



EPSON L375
Arduino Nano 33 BLE Sense



ESTADOS DE LA IMPRESORA A DETERMINAR

Los estados sobre los cuales se realizará el aprendizaje y luego la evaluación son: Apagado (azul), Prender (verde), Impresión (rojo). Los colores indicados son los que se utilizarán como diagnóstico al momento de la evaluación del estado.


PASOS

1. Creación de proyecto Edge Impulse y conexión de MCUProject - Motion Detection | Coursera




2. Recolección de datos

Se ubicó la unidad de MCU junto con su carcasa sobre la impresora y se lo conectó a la laptop a través del cable USB (omitido en la siguiente imagen).


Ubicación de MCU para recolección de datos

Datos de entrenamiento de modelo: se recolecto 6 minutos de pruebas repartiendo 2 minutos por cada estado (Apagado, Prender, Impresión), cada muestra tuvo una duración de 10 segundos.

Imagen de onda de sensor estado Apagado


Imagen de onda de sensor estado Prender


Imagen de onda de sensor estado Impresión


Datos para prueba de modelo: se capturaron 30 segundos por cada estado


3. Entrenamiento y generación de modelo: Se siguieron los pasos para el entrenamiento y desarrollo del modelo considerando los siguientes elementos



Al momento de evaluar la red neuronal, se observó un nivel de precisión bajo, por lo que se realizaron algunas pruebas, ajustando los hiperparámetros del algoritmo a fin de mejorar el nivel de precisión, analizando también para esto la matriz de confusión procurando un nivel mayor de casos positivos válidos para cada estado, sin embargo, considerando las posibles limitaciones de capacidad del MCU y con el fin de no exceder la misma, se optó por limitar la red a 4 capas, cada una de 80 neuronas, lo cual según las pruebas, daba un nivel de precisión del 78.3% del modelo, positivos válidos del 76.9% en el estado de Impresión y del 57.9% del estado Prender, como se muestra en la siguiente imagen.




4. Implementación: Para efectos de generar una fácil visualización del estado detectado, se agregó en el código de arduino la activación del led dependiendo de cada estado (Apagado=azul, Impresión=rojo, Prender=verde). Al inicio se puso un umbral del 85% para la activación de cada led, sin embargo se observó que el sensor no alcanzaba dicho umbral en el estado Prender por lo que se lo redujo a 60% con el fin de asegurar su activación (esto tiene relación con al matriz de confusión y la probabilidad positivos válidos mencionado anteriormente).




A continuación se muestra un video con el MCU configurado con el algoritmo de detección en donde el led permite ver como los sensores detectan cada uno de los movimientos previamente programados.


Como se puede observar en el video, al inicio se ve el led encedido de color azul, lo cual indica que el sensor detecta el estado de Apagado, cuando se prende la impresora se activa el color verde y en el momento de la impresión se visualiza el color rojo. Sin embargo, si se observa detenidamente, al momento de encender la impresora, unos segundos después del verde se activa el rojo, lo cual es una muestra que el algoritmo necesita de cierto afinamiento, lo cual es el resultado que se mostró en la matriz de confusión (falsos positivos) y que podría mejorarse ajustando más los hiperparámetros de la red neuronal.

Como parte de la ejecución se muestra a continuación una imagen del panel de monitoreo de arduino que revela el % de acertividad o precisión detectado para cada movimiento, enfaticé por colores según los leds 3 ejemplos para efectos de mejor visualización, la corrida de la prueba solo muestra una parte del monitoreo para efectos solo de muestra.


También se puede observar que el led queda encendido en color azul lo cual simboliza el estado de Apagado aún a pesar que la impresora sigue encendida, esto es debido a que en el proceso de aprendizaje no se relevaron datos que permita al sensor diferenciar el momento en que se enciende o apaga el equipo, sino que se asoció la falta de movimiento con el estado de Apagado.


CONCLUSIONES

Como se puede observar, este tipo de implementación se pueden llevar a cabo de manera sencilla y a costos muy bajos, logrando con esto llevar a la práctica los conceptos de IA que para este caso estaría asociado con la detección de anomalías en equipos con el fin de evitar la parada de los mismos y la reducción de costos de mantenimientos al tratarlos como preventivos en lugar de correctivos.

La parte de ingeniería y análisis recaería principalmente en la elaboración y definición del modelo, tomando en cuenta también que el nivel de precisión de los modelos deben ser revisados periódicamente a fin de realizar ajustes que pueden darse por cambio en condiciones en la toma de las muestras así como del ambiente en producción.