emlearn
Aprendizaje automático para microcontroladores y sistemas integrados. Entrene en Python, luego haga inferencia en cualquier dispositivo con un compilador C99.

Estado
Mínimamente útil . Utilizado en docenas de proyectos por docenas de desarrolladores.
Características clave
Inferencia infantil
- Código C99 portátil
- No se requiere libc
- Sin asignaciones dinámicas
- El archivo de encabezado único incluye
- Soporte de Integer/Matemáticas de punto fijo (algunos métodos)
- Se puede integrar/integrarse con otros idiomas a través de C API
Capacitación conveniente
- Usar Python con Scikit-Learn o Keras
- El clasificador C generado también es accesible en Python
MIT con licencia
Bibliotecas de apoyo
- emlearn-micropython. Motor de aprendizaje automático eficiente para Micrypthon, usando emlearn.
Se puede utilizar como una alternativa de código abierto a los árboles de clasificación MATLAB, árboles de decisión utilizando MATLAB Coder para la generación de código C/C ++. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Soporte modelo
Clasificación:
-
eml_trees : Sklearn.RandomForestClassifier, Sklearn.ExtratreesClassifier, Sklearn.DecisionTreeClassifier -
eml_net : sklearn.multilayerpercePtron, keras.sequential con capas totalmente conectadas -
eml_bayes : Sklearn.GaussianAnivebayes
Regresión:
-
eml_trees : Sklearn.RandomForestRegressor, Sklearn.ExtratreesRegressor, Sklearn.DecisionTreeRegor -
eml_net : keras.sequential con capas totalmente conectadas ( emlearn.convert(model, method='loadable', return_type='regressor') )
Detección / detección de anomalías sin supervisión / atípico
-
eml_distance : Sklearn.ellipticenvelope (Distancia de Mahalanobis) -
eml_mixture : Sklearn.GaussianMixture, Sklearn.BayesiangaussianMixture
Extracción de características:
-
eml_audio : melspectrogram
Soporte de plataforma
Probado en ejecución en AVR ATMEGA, ESP8266, ESP32, ARM Cortex M (STM32), Linux, Mac OS y Windows.
Debe trabajar en cualquier lugar que tenga el compilador C99 en funcionamiento.
Instalación
Instalar desde PYPI
pip install --user emlearn
Uso
El uso básico consiste en 3 pasos:
- Entrena tu modelo en Python
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- Conviertalo en código C
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- Use el código C
Clasificadores simples
#include "sonar.h"
const int32_t length = 60 ;
int16_t values [ length ] = { ... };
// using generated "inline" code for the decision forest
const int32_t predicted_class = sonar_predict ( values , length ):
// ALT: using the generated decision forest datastructure
const int32_t predicted_class = eml_trees_predict ( & sonar , length ): REGRESOR NET NEUNAL
Copie el archivo .h generado, eml_net.h y eml_common.h en su proyecto, luego, luego
#include "nnmodel.h" // the generated code basedon on keras.Sequential
float values [ 6 ] = { ... };
const float_t predicted_value = nnmodel_regress1 ( values , 6 );
if ( predicted_value == NAN ) {
exit ( -1 );
}
// Process the value as needed
// Or, passing in a result array directly if more than 1 output is generated
float out [ 2 ];
EmlError err = nnmodel_regress ( values , 6 , out , 2 );
if ( err != EmlOk )
{
// something went wrong
}
else {
// predictions are in the out array
} Para obtener un código ejecutable completo, consulte comenzar.
Para la documentación completa, consulte ejemplos, la guía del usuario.
Que contribuye
Consulte el código fuente, asegúrese de instalar el submódulo Unity también con git submodule update --init
Antes de cometer cualquier código, ejecute las pruebas por ./test.sh e instale el módulo localmente con pip install ./ -v
Colaboradores
Citas
Si usa emlearn en un trabajo académico, consulte a él usando:
@misc{emlearn,
author = {Nordby, Jon AND Cooke, Mark AND Horvath, Adam},
title = {{emlearn: Machine Learning inference engine for
Microcontrollers and Embedded Devices}},
month = mar,
year = 2019,
doi = {10.5281/zenodo.2589394},
url = {https://doi.org/10.5281/zenodo.2589394}
}Hecho con emlearn
emlearn se ha utilizado en los siguientes trabajos (entre otros).
Si está utilizando EMlearn, ¡háganoslo saber! Por ejemplo, puede enviar una solicitud de inclusión en este ReadMe, o crear un problema en GitHub.
- Detección de anomalías TinyML para máquinas industriales con ciclos de servicio periódicos por Luciano Sebastián Martinez Rau et. Alabama. de la Universidad de Mid Suecia. Diseñó un sistema que identifica los ciclos de trabajo inadecuados de los procesos industriales, desarrollados para una cinta transportadora en minería. Se usó un clasificador para detectar estados del sistema y para formar una secuencia de estados. Esto podría clasificarse en estados normales o anormales. Proba varios clasificadores en microcontroladores NRF52840 y RP2040, y encontraron que MLP y el bosque aleatorio tienen lo mejor.
- Documento conciso: Hacia las huellas digitales radiométricas a bordo completamente integradas en un sistema integrado de Wenqing Yan de la Universidad de Uppsala. Los sistemas de huellas dactilares radiométricos aprovechan las características únicas de la señal de la capa física que se originan en las imperfecciones de hardware individuales para identificar dispositivos transmisores. Los autores demostraron un sistema que se ejecuta en un NRF52833. Probaron para detectar uno de los 32 dispositivos de transmisión y alcanzaron una precisión promedio del 92%. Usó un clasificador de bosque aleatorio y descubrió que 10 árboles alcanzaron muy cerca de la misma actuación que 40 árboles.
- IoT Next Generation Smart Grid Meder (NGSM) para detección de electrodomésticos domésticos basados en el aprendizaje profundo y Linux integrado por Noor El-Deen M. Mohamed et. Al en la Universidad de Helwan en El Cairo, Egipto. Desarrolló un medidor de red inteligente para los hogares que pueden detectar cuándo se están ejecutando diferentes electrodomésticos. Esto se realiza utilizando un modelo de monitoreo de carga de energía (NILM), que se implementó utilizando una red neuronal. El sistema se ejecuta en Linux integrado utilizando un sistema Allwinner F1C200S en chip. Usado emlearn en lugar de tensorflow lite para tener un enfoque más ligero.
- C-HAR: reconocimiento de actividad humana basada en medición compresiva por Billy Dawton et. Alabama. Probado utilizando la detección de compresión con solo 5 Hz de muestreo reconoce acciones como "caminar", "escribir" y "comer". Usó emlearn para implementar los modelos basados en RandomForest en una placa adolescente 4.1. Descubrieron que podían alcanzar alrededor del 90% de precisión, pero con una tasa de muestreo 4 veces menor y un tiempo de ejecución 2 veces menor en comparación con los enfoques de detección comprimidos existentes.
- Pequeño aprendizaje automático para análisis de estabilidad postural en tiempo real por Veysi Adın et.al. Probó un algoritmo de análisis de balanceo para desplegar en un NRF52840 nórdico (ARM Cortex M4). Comparó el modelo de la red neuronal artificial (ANN) con bosques aleatorios y bayes ingenuos gaussianos. Descubrió que Ann tenía el mejor rendimiento en relaciones de señal / ruido más bajas, pero ese bosque aleatorio tenía el tiempo de inferencia más bajo y un rendimiento similar en casos de SNR altos.
- Micro Random Forest: una implementación local de alta velocidad de un método de ubicación de fallas de aprendizaje automático para sistemas de energía de distribución por Miguel Jiménez aparicio et.al en Sandia National Laboratories. Desarrolló un método de localización de fallas que utiliza la firma de la onda de viaje. Probado 4 modelos RandomForest de diferentes tamaños, el rendimiento evaluado en una red de energía simulada. Usado emlearn para portar los modelos al chip TMS320F28379D, un DSP de la serie C2000 de los instrumentos de Texas. Descubrió que el tiempo de ejecución total era de 1.2 ms, de los cuales solo 10 US fueron utilizados por el clasificador.
- Seguimiento de frecuencia de respiración remota en posición estacionaria utilizando el movimiento y los sensores acústicos de los oídos por Tousif Ahmed et.al en Samsung Research. Desarrolló un sistema con micrófono y acelerómetro en auriculares para estimar la frecuencia respiratoria del usuario. Probó varios modelos como la regresión logística, el perceptrón de múltiples capas y el bosque aleatorio. Usó emlearn para convertir el modelo en C y ejecutar en Samsung Galaxy Buds 2 auriculares. Descubrió que el consumo de batería era lo suficientemente bajo como para que pudiera funcionar continuamente.
- Detección de ataque inteligente para redes IoT por Yang Yang. Implementó un sistema de detección de intrusos para redes IoT. Usado clasificador de bosque aleatorio que se ejecuta en NRF52840 nórdico usando RTO contiki-ng. Además de la inferencia en el dispositivo, también ejecutaron los clasificadores en el simulador de red de dispositivos COOJA IoT.
- Nodo del sensor inalámbrico eficiente en energía a través de la inteligencia de borde por Abhishek P. Damle et al. Los datos de acelerómetro usados en un nodo del sensor Wireless para clasificar el comportamiento del ganado de pastoreo, en pie, pastoreo, caminando, mentiroso y reflexionar. Usó emlearn para compilar un árbol de decisión para implementar en el módulo Microchip WLR089U0 (microcontrolador ATSAMR34X con transceptor Lora integrado). Las mejores características se seleccionaron utilizando la eliminación de características recursivas (RFE), la poda de complejidad de costos se utilizó para ajustar la complejidad de los árboles de decisión. Muestran que la energía requerida para transmitir disminuye 50 veces haciendo extracción de características y clasificación de acuerdo en comparación con el envío de datos del sensor sin procesar.
- LPWAN y el aprendizaje automático integrado como habilitadores para la próxima generación de dispositivos portátiles por Ramon Sanchez-Iborra. La viabilidad evaluada de ejecutar modelos TinyML en un nodo del sensor Lorawan. Usó un ATMEGA 328P, con MPU6050 IMU, GY-NEO6MV2 GPS y RN2483 Lorawan Tranceiver. Descubrió que el código para comunicarse con los Feriferales tomó considerablemente más SRAM/Flash que el modelo ML. Pudo ajustar un bosque aleatorio con 50 árboles (flash), o un perceptrón de múltiples capas con 5 capas y 10 neuronas por capa (unión a SRAM).
- Una comparación entre las sillas de ruedas de poder asistidas por empuje adaptativas convencionales y basadas en la intención de usuarios de M. Khalili, G. Kryt, HFM van der Loos y JF Borisoff. Implementó una estimación de intención de usuario para sillas de ruedas, para dar al usuario una asistencia eléctrica personalizada controlada. Usado emlearn para ejecutar el clasificador RandomForest en un microcontrolador adolescente. Descubrió que el modelo de microcontrolador en tiempo real funcionó de manera similar a los modelos fuera de línea.
- C-AVDI: detección e identificación de vehículos acústicos basados en medición compresiva por Billy Dawton et.al. Implementó la detección y clasificación de las motocicletas y los automóviles del sonido. Utilizado sistema de detección comprimido utilizando un frontend analógico y ADC que se ejecuta a una muestra baja. Usó un EMLlearn RandomForest en un microcontrolador adolescente para realizar la clasificación.
- Un marco de extremo a extremo para el sistema de detección de intrusos de red basado en el aprendizaje automático de Gustavo de Carvalho Bertoli et.al. Implementó un sistema de detección de exploración TCP. Utilizó un árbol de decisión y usó emlearn para generar código para un módulo / netfilter de kernel de Linux para hacer la detección. Fue probado en una protección de una sola placa Rasperry Pi 4, y se descubrió que la sobrecarga de rendimiento era negligente.
- Hacia un brazalete electromiográfico: una comparación de algoritmos de aprendizaje automático integrado por Danilo Demarchi, Paolo Motto Ros, Fabio Rossi y Andrea Mongardi. Detectaron diferentes gestos manuales basados en datos electromiográficos (SEMG). Comparó el rendimiento de diferentes algoritmos de aprendizaje automático, de emlearn y tensorflow lite. Encontré emlearn RandomForest y Naive Bayes para dar buena precisión con muy buen consumo de energía.
- ¿Quién me lleva? Reconocimiento de usuario basado en TinyDL en dispositivos personales restringidos por Ramon Sanchez-Iborra y Antonio F. Skarmeta. Usó emlearn para implementar un modelo para detectar quién usa un dispositivo portátil en particular, analizando los datos del acelerómetro. Se usó un perceptrón de múltiples capas, que se ejecuta en AVR ATMEGA328P.
- Objetos inteligentes frugales habilitados para TinyML: desafíos y oportunidades de Ramon Sanchez-Iborra y Antonio F. Skarmeta. Creó un modelo para seleccionar automáticamente qué método de transmisión de radio usar en un dispositivo IoT. Ejecutando en el dispositivo Arduino Uno (AVR8). Perceptrón de múltiples capas probado, árbol de decisión y bosque aleatorio de emlearn. Comparó el rendimiento con Sklearn-Porter, y descubrió que el bosque aleatorio es más rápido en emlearn, mientras que el árbol de decisiones más rápido en Sklearn-Porter. Comparó EMILEN MLP con el SVM de Micromlgen y descubrió que el MLP EMLIARN es más preciso y menor tiempo de inferencia.
- Un enfoque de aprendizaje automático para la detección de malware de Android en tiempo real por NGOC C. Lê et al. Creó un modelo C ++ para detectar malware. Utilizó un conjunto de características de ingeniería a mano y un bosque aleatorio de EMlearn como clasificador. Ejecutando en dispositivos Android.
- Riot OS tiene un paquete para emlearn. Riot OS Emlearn Ejemplo del paquete. Su sistema de compilación ejecuta automáticamente esta prueba en decenas de diferentes tableros de hardware.