Detección de palabras clave TinyML para controlar las luces RGB
Componentes y suministros
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
La premisa
El aprendizaje automático en el borde es extremadamente útil para crear dispositivos que pueden realizar tareas "inteligentes" con mucha menos programación y diagramas de flujo lógicos en comparación con el código tradicional. Es por eso que quería incorporar la detección de palabras clave en el borde que pueda reconocer ciertas palabras y luego realizar una tarea basada en lo que se dijo.
Hardware
Este proyecto solo tiene un componente:un Arduino Nano 33 BLE Sense. La magia real ocurre en el modelo de aprendizaje automático. El Arduino Nano 33 BLE Sense está lleno de sensores, que incluyen un micrófono, una IMU de 9 ejes, un sensor ambiental y un sensor de gestos / proximidad / color / luz ambiental (APDS-9960). El microcontrolador es un nRF52840 que se ejecuta a 64MHz y contiene 1MB de memoria flash y 256KB de RAM. Este proyecto también utiliza su LED RGB integrado para mostrar el color actual.
Configuración de Edge Impulse
Comencé creando un nuevo proyecto en Edge Impulse y luego instalé la herramienta CLI de Edge Impulse. Para obtener más instrucciones sobre cómo hacerlo, visite la página de instrucciones de instalación. Esto permite que Arduino Nano se comunique con el servicio en la nube para recibir comandos y enviar datos de sensores automáticamente. Descargué el firmware de Edge Impulse más reciente y lo transmití a la placa haciendo doble clic en el botón de reinicio para que ingrese al modo de cargador de arranque. Luego ejecuté flash_windows.bat
para transferirlo.
En el símbolo del sistema ejecuté edge-impulse-daemon
y siguió al asistente para configurarlo. Ahora el Nano aparece en la lista de dispositivos del proyecto, lo que permite tomar y cargar muestras como parte del conjunto de datos de entrenamiento / prueba.
Recolección de muestras
El entrenamiento de un modelo de aprendizaje automático requiere datos y bastante. Quería tener los siguientes modos para la tira de LED RGB:
- En
- Desactivado
- Rojo
- Verde
- Azul
Obtuve aproximadamente 1 minuto de sonido para cada modo en el que repetí repetidamente la palabra en intervalos de 1-2 segundos y los dividí.
Pero tener estas muestras no es suficiente, ya que el ruido de fondo y otras palabras darán una lectura falsa. Afortunadamente, Edge Impulse ya proporciona un conjunto de datos prediseñado para el ruido y las palabras "desconocidas", por lo que utilicé su herramienta "Cargar datos existentes" para cargar estos archivos de audio en los datos de entrenamiento.
Finalmente, reequilibré el conjunto de datos para tener la división recomendada 80-20 para los datos de entrenamiento y prueba, respectivamente.
Entrenamiento del modelo
Ahora, armado con una hora de datos de entrenamiento y muchas etiquetas, llegó el momento de entrenar un modelo. El impulso que diseñé toma audio como datos de series de tiempo con un tamaño de ventana de 1 segundo y un aumento de ventana de 500ms. Luego pasa a través de un bloque MFCC a un bloque de red neuronal de Keras.
El bloque MFCC permite configurar cómo se procesará el audio, junto con un espectograma que muestra las frecuencias de forma visual.
Dejé la configuración de la red neuronal como en su mayoría predeterminada, pero también hice algunas modificaciones. Primero, cambié el umbral mínimo de confianza de 0,80 a 0,70 y agregué un poco de aumento de datos en forma de ruido adicional y bandas de tiempo de enmascaramiento. Esto ayuda a la NN a evitar un ajuste excesivo del modelo, ya que tiene datos más diversos con los que trabajar.
Implementación en Arduino Nano 33 BLE Sense
El Arduino Nano 33 BLE Sense actúa como un micrófono siempre activo que muestrea continuamente el audio y detecta si se ha hablado una de las palabras clave. Una vez que se encuentra uno, la palabra clave se convierte en un índice que se utiliza para decodificar el color deseado. Para la palabra clave de encendido o apagado, el LED se establece en negro o gris claro.
Descargué el modelo como una biblioteca y lo agregué al IDE de Arduino, luego compilé y mostré el código al Nano.
Código
- RGBLEDKeywordDetection
RGBLEDKeywordDetection C / C ++
/ * Ejemplos de Edge Impulse Arduino * Copyright (c) 2020 EdgeImpulse Inc. * * Por la presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia * de este software y los archivos de documentación asociados (el "Software"), negociar * en el Software sin restricciones, incluidos, entre otros, los derechos * de uso, copia, modificar, fusionar, publicar, distribuir, sublicenciar y / o vender * copias del Software, y permitir a las personas a las que pertenece el Software * proporcionado para hacerlo, sujeto a las siguientes condiciones:* * El aviso de copyright anterior y este aviso de permiso se incluirán en * todas las copias o partes sustanciales del Software. * * EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O * IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, * IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS * AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑOS U OTRA * RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJA DE, * FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS NEGOCIACIONES EN EL SOFTWARE *. * /// Si su objetivo tiene memoria limitada, elimine esta macro para ahorrar 10K de RAM. # Defina EIDSP_QUANTIZE_FILTERBANK 0 / ** * Defina el número de cortes por ventana de modelo. P.ej. una ventana de modelo de 1000 ms * con cortes por ventana de modelo establecida en 4. Da como resultado un tamaño de corte de 250 ms. * Para más información:https://docs.edgeimpulse.com/docs/continuous-audio-sampling * / # define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3 / * Incluye ------------------- --------------------------------------------- * / # incluir#include #include
Proceso de manufactura
- Tendencias y consejos de seguridad de IIoT para 2020
- Computación perimetral y en la nube para IoT:una breve historia
- ¿Por qué Edge Computing para IoT?
- Kontrons KBox A-150-WKL para aplicaciones IoT Edge con uso intensivo de datos
- Núcleos de brazo diseñados para dispositivos TinyML
- Beneficios del Edge Computing para la cristalización de la IA
- Cuatro pasos para garantizar el éxito en Edge Computing
- Microsoft lanza Azure Edge Zones para aplicaciones 5G
- La necesidad del código abierto en el perímetro (eBook)
- Sistema de detección química para bajos niveles de concentración
- 3 razones para mantener los dispositivos de detección de gas