Emlearn
Aprendizado de máquina para microcontrolador e sistemas incorporados. Treine em Python e depois inferência em qualquer dispositivo com um compilador C99.

Status
Minimamente útil . Usado em dezenas de projetos por dezenas de desenvolvedores.
Principais recursos
Inferência incorporada
- Código C99 portátil
- Não é necessário libc
- Sem alocações dinâmicas
- O arquivo de cabeçalho único inclui
- Suporte a inteira/matemática de ponto fixo (alguns métodos)
- Pode ser incorporado/integrado a outros idiomas via API C
Treinamento conveniente
- Usando Python com Scikit-Learn ou Keras
- O classificador C gerado também é acessível no Python
MIT licenciado
Bibliotecas de suporte
- Emlearn-Micropython. Motor de aprendizado de máquina eficiente para Micropython, usando o Emlearn.
Pode ser usado como uma alternativa de código aberto às árvores de classificação do MATLAB, árvores de decisão usando o codificador MATLAB para geração de código C/C ++. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Suporte ao modelo
Classificação:
-
eml_trees : sklearn.randomforestclassifier, sklearn.extratreesclassifier, sklearn.decisionTreeClassifier -
eml_net : sklearn.multilayerperceptron, keras.vential com camadas totalmente conectadas -
eml_bayes : sklearn.gaussiannaivebayes
Regressão:
-
eml_trees : sklearn.randomforestregressor, sklearn.extratreesregressor, sklearn.decisiontreeregressor -
eml_net : KERAS.SECENCIAL com camadas totalmente conectadas ( emlearn.convert(model, method='loadable', return_type='regressor') ))
Detecção não supervisionada / Outlier / Detecção de Anomalia
-
eml_distance : sklearn.ellipticenvelope (distância de Mahalanobis) -
eml_mixture : sklearn.gaussianmixture, sklearn.bayesiangaussianmixture
Extração de recursos:
-
eml_audio : Melspectrograma
Suporte da plataforma
Testado em execução no AVR ATMEGA, ESP8266, ESP32, CORTEX M (STM32), Linux, Mac OS e Windows.
Deve trabalhar em qualquer lugar que tenha o compilador C99 funcionando.
Instalação
Instale a partir de Pypi
pip install --user emlearn
Uso
O uso básico consiste em 3 etapas:
- Treine seu modelo em Python
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- Converte -o em código C
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- Use o código C
Classificadores 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 ): Regressor da rede neural
Copie o arquivo .h gerado, o eml_net.h e eml_common.h em seu projeto, então
#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 um código executável completo, consulte o início.
Para documentação completa, consulte Exemplos, o Guia do Usuário.
Contribuindo
Confira o código -fonte, certifique -se de instalar o submódulo Unity com git submodule update --init
Antes de comprometer qualquer código, execute os testes por ./test.sh e instale o módulo localmente com pip install ./ -v
Colaboradores
Citações
Se você usar emlearn em um trabalho acadêmico, faça referência a ele 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}
}Feito com Emlearn
emlearn tem sido usada nos seguintes trabalhos (entre outros).
Se você estiver usando o Emlearn, informe -nos! Você pode, por exemplo, enviar uma solicitação de inclusão de puxar neste Readme ou criar um problema no Github.
- Detecção de anomalia de tinyml para máquinas industriais com ciclos de serviço periódicos de Luciano Sebastián Martinez Rau et. al. da Universidade Mid Suécia. Projetou um sistema que identifica ciclos de serviço inadequados de processos industriais, desenvolvidos para uma correia transportadora na mineração. Um classificador foi usado para detectar estados do sistema e para formar uma sequência de estados. Isso poderia então ser categorizado em estados normais ou anormais. Testes vários classificadores nos microcontroladores NRF52840 e RP2040, e encontraram MLP e floresta aleatória para executar o melhor.
- Artigo conciso: em direção à impressão digital radiométrica a bordo totalmente integrada em um sistema incorporado ao Wenqing Yan, da Universidade Uppsala. Os sistemas de impressão digital radiométricos aproveitam as características exclusivas do sinal da camada física originárias de imperfeições individuais de hardware para identificar dispositivos de transmissores. Os autores demonstraram um sistema em execução em um NRF52833. Eles testaram para detectar um dos 32 dispositivos transmitidos e alcançaram 92% de precisão média. Usou um classificador de floresta aleatório e descobriu que 10 árvores atingiam muito perto do mesmo desempenho que 40 árvores.
- IoT Próxima geração Medidor de grade inteligente (NGSM) para detecção de eletrodomésticos na ponta, com base no aprendizado profundo e no Linux incorporado por Noor El-Deen M. Mohamed et. AL na Universidade de Helwan, no Cairo, Egito. Desenvolveu um medidor de grade inteligente para famílias que podem detectar quando diferentes aparelhos estão em execução. Isso é feito usando um modelo de desagregação de energia / monitoramento de carga não intrusivo (NILM), que implementou usando uma rede neural. O sistema é executado no Linux incorporado usando um sistema AllWinner F1C200SS-ON-CHIP. Utilizou o Emlearn em vez de o Tensorflow Lite para ter uma abordagem mais leve.
- C-HAR: reconhecimento de atividade humana baseada em medição compressiva por Billy Dawton et. al. Testado usando a detecção de compressivo com apenas 5 Hz de amostragem reconhece ações como "caminhada", "digitação" e "comer". Usou a Emlearn para implantar os modelos baseados em Forest Random em uma placa Teensy 4.1. Descobriram que eles poderiam atingir cerca de 90% de precisão, mas com taxa de amostragem 4 vezes menor e 2 vezes menor tempo de execução em comparação com as abordagens de detecção compactada existentes.
- Pequeno aprendizado de máquina para análise de estabilidade postural em tempo real por Veysi Adın et.al. Testou um algoritmo de análise de oscilação para implantar em um nórdico NRF52840 (ARM Cortex M4). Comparou o modelo de rede neural artificial (RNA) com florestas aleatórias e bayes ingênuos gaussianos. Descobriram que a RNA tinha o melhor desempenho sob taxas mais baixas de sinal / ruído, mas essa floresta aleatória teve o menor tempo de inferência e desempenho semelhante em casos de SNR altos.
- Micro Random Forest: Uma implementação local de alta velocidade de um método de localização de falhas de aprendizado de máquina para sistemas de energia de distribuição por Miguel Jimenez Aparicio et.al nos Laboratórios Nacionais de Sandia. Desenvolveu um método de localização de falhas que usa a assinatura da onda de viagem. Testado 4 modelos de forestes aleatórias de tamanho diferente, avaliadas no desempenho em uma rede de energia simulada. Utilizou o Emlearn para portar os modelos para o chip TMS320F28379D, um DSP da série C2000 da Texas Instruments. Descobriram que o tempo total de execução era de 1,2 ms, dos quais apenas 10 EUA foram usados pelo classificador.
- Rastreamento de taxa de respiração remota na posição estacionária usando os sensores de movimento e acústica dos ouvidos por Tousif Ahmed et.al na pesquisa da Samsung. Desenvolveu um sistema usando microfone e acelerômetro em fones de ouvido para estimar a taxa de respiração do usuário. Testou vários modelos, como regressão logística, perceptron de várias camadas e floresta aleatória. Utilizou o Emlearn para converter o modelo para C e executar nos fones de ouvido Samsung Galaxy Buds 2. Descobriram que o consumo de bateria era baixo o suficiente para que pudesse funcionar continuamente.
- Detecção de ataques inteligentes para redes de IoT por Yang Yang. Implementou um sistema de detecção de intrusão para redes de IoT. Utilizou o classificador florestal aleatório em execução no Nordic NRF52840 usando RTOs contiki-ng. Além da inferência no dispositivo, eles também executaram os classificadores no simulador de rede de dispositivos COOJA IoT.
- Nó do sensor sem fio eficiente em termos de energia através da inteligência de borda de Abhishek P. Damle et al. Utilizou dados do acelerômetro em um nó do sensor de wireless para classificar o comportamento do gado pastoreio, em pé, pastando, caminhando, mentindo e ruminando. Utilizou a Emlearn para compilar uma árvore de decisão para implantar no módulo Microchip WLR089U0 (microcontrolador ATSAMR34X com transceptor de LORA integrado). Os melhores recursos foram selecionados usando a eliminação de recursos recursivos (RFE), a poda da complexidade de custos foi usada para ajustar a complexidade das árvores de decisão. Eles mostram que a energia necessária para a transmissão diminui é 50 vezes fazendo extração de recursos e classificação em comparação em comparação com o envio dos dados do sensor bruto.
- LPWAN e aprendizado de máquina incorporado como facilitadores para a próxima geração de dispositivos vestíveis de Ramon Sanchez-Iborra. Avaliou a viabilidade de executar modelos de tinyML em um nó do sensor de Lorawan. Utilizou um ATMEGA 328p, com GPS MPU6050 IMU, GY-NEO6MV2 e RN2483 LORAWAN Tranceiver. Descobriram que o código para se comunicar com os Feriféricos levou consideravelmente mais SRAM/Flash do que o modelo ML. Foi capaz de ajustar uma floresta aleatória com 50 árvores (ligado ao flash) ou um perceptron de várias camadas com 5 camadas e 10 neurônios por camada (SRAM ligado).
- Uma comparação entre as cadeiras de rodas com base de energia e ativadas por intenção de intenção convencional por M. Khalili, G. Kryt, HFM van der Loos e JF Borisoff. Implementou uma estimativa de intenção do usuário para cadeiras de rodas, a fim de dar ao usuário um assistente de poder personalizado controlado. Usou a Emlearn para executar o classificador Randomforest em um microcontrolador adolescente. Descobriram que o modelo de microcontrolador em tempo real teve um desempenho semelhante aos modelos offline.
- C-AVDI: Detecção e identificação de veículos acústicos baseados em medição compressiva por Billy Dawton et.al. Implementou a detecção e classificação de motocicletas e carros que passam do som. Utilizou o sistema de detecção compactado usando um frontend analógico e o ADC em execução em um amostrado baixo. Usou um EMLELEN RandomForest em um microcontrolador adolescente para executar a classificação.
- Uma estrutura de ponta a ponta para o sistema de detecção de intrusão de rede baseado em aprendizado de máquina por Gustavo de Carvalho Bertoli et.al. Implementou um sistema de detecção de varredura TCP. Ele usou uma árvore de decisão e usou o EMLELEN para gerar código para um módulo / netfilter do kernel Linux para fazer a detecção. Foi testado em um computador de placa única Rasperry Pi 4, e a sobrecarga de desempenho foi negligenciada.
- Em direção a uma braçadeira eletromiográfica: uma comparação de algoritmos de aprendizado de máquina incorporada por Danilo Demarchi, Paolo Lotto Ros, Fabio Rossi e Andrea Mongardi. Detectou diferentes gestos manuais com base nos dados eletromiográficos (SEMG). Comparou o desempenho de diferentes algoritmos de aprendizado de máquina, da EMLELEN e TENSORFLOW LITE. Encontraram o Emlearn Randomforest e o ingênuo Bayes para dar boa precisão com muito bom consumo de energia.
- Quem está me usando? Reconhecimento de usuários baseado em TinyDL em dispositivos pessoais restritos por Ramon Sanchez-Iborra e Antonio F. Skarmeta. Usou a Emlearn para implementar um modelo para detectar quem está usando um dispositivo vestível específico, analisando dados do acelerômetro. Foi utilizado um perceptron de várias camadas, em execução no AVR ATMEGA328P.
- Objetos inteligentes frugais habilitados para Tinyml: desafios e oportunidades de Ramon Sanchez-Iborra e Antonio F. Skarmeta. Criou um modelo para selecionar automaticamente qual método de transmissão de rádio usar em um dispositivo IoT. Executando no dispositivo Arduino UNO (AVR8). Testado perceptron de várias camadas, árvore de decisão e floresta aleatória da EMLELEN. Comparou o desempenho com o Sklearn-Porter, e descobriu que a floresta aleatória é mais rápida no EMLELEN, enquanto a árvore de decisão mais rápido em Sklearn-Pumer. Comparou o MLP EMLELENHO com o SVM da Micromlgen e achou que o MLP EMLELENHE era mais preciso e menor tempo de inferência.
- Uma abordagem de aprendizado de máquina para detecção de malware Android em tempo real de NGOC C. Lê et al. Criou um modelo C ++ para detectar malware. Usou um conjunto de características de engenharia manual e uma floresta aleatória da Emlearn como classificador. Executando em dispositivos Android.
- O Riot OS tem um pacote para a Emlearn. Exemplo de pacote EMLELEN RIOT OS. Seu sistema de construção executa automaticamente esse teste em dezenas de diferentes placas de hardware.