eMlearn
Apprentissage automatique pour le microcontrôleur et les systèmes intégrés. Train à Python, puis effectuez une inférence sur n'importe quel appareil avec un compilateur C99.

Statut
Peu utile . Utilisé dans des dizaines de projets par des dizaines de développeurs.
Caractéristiques clés
Inférence intégrée
- Code C99 portable
- Aucun libc requis
- Aucune allocation dynamique
- Le fichier d'en-tête unique inclut
- Prise en charge des mathématiques entières / points fixes (certaines méthodes)
- Peut être intégré / intégré à d'autres langues via l'API C
Formation pratique
- Utilisation de Python avec Scikit-Learn ou Keras
- Le classificateur C généré est également accessible à Python
MIT sous licence
Soutenir les bibliothèques
- Emlearn-microphython. Moteur d'apprentissage automatique efficace pour Micropython, en utilisant EMLARN.
Peut être utilisé comme alternative open source aux arbres de classification MATLAB, arbres de décision utilisant le codeur MATLAB pour la génération de code C / C ++. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Support du modèle
Classification:
-
eml_trees : Sklearn.RandomForestClassifier, Sklearn.ExtratreesClassifier, Sklearn.decisiontreClassifier -
eml_net : Sklearn.MultilayerperPtron, Keras.Sellential avec des couches entièrement connectées -
eml_bayes : Sklearn.GaussiannaiveBayes
Régression:
-
eml_trees : Sklearn.RandomForestRegressor, Sklearn.ExtratreesRegressor, Skary.DecisiontreeRgressor -
eml_net : Keras.Sequential avec des couches entièrement connectées ( emlearn.convert(model, method='loadable', return_type='regressor') )
Détection non surveillée / aberrante / détection d'anomalies
-
eml_distance : Sklearn.EllipticeNevelope (Distance Mahalanobis) -
eml_mixture : Sklearn.GaussianMixture, Sklearn.BayesiangaussianMixture
Extraction de caractéristiques:
-
eml_audio : MELSPECTROGRAM
Prise en charge de la plate-forme
Testé en cours d'exécution sur AVR Atmega, ESP8266, ESP32, ARM Cortex M (STM32), Linux, Mac OS et Windows.
Devrait fonctionner n'importe où qui a un compilateur C99 fonctionnant.
Installation
Installer à partir de PYPI
pip install --user emlearn
Usage
L'utilisation de base se compose de 3 étapes:
- Formez votre modèle à Python
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- Le convertir en code C
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- Utilisez le code C
Classificateurs 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 ): Régresseur neural neural
Copiez le fichier .h généré, le eml_net.h et eml_common.h dans votre projet, puis
#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
} Pour un code exécutable complet, voir le démarrage.
Pour la documentation complète, voir des exemples, le guide de l'utilisateur.
Contributif
Consultez le code source, assurez-vous d'installer également le sous-module Unity avec git submodule update --init
Avant de commettre un code, exécutez les tests par ./test.sh et installez le module localement avec pip install ./ -v
Contributeurs
Citations
Si vous utilisez emlearn dans un travail académique, veuillez le référer en utilisant:
@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}
}Fait avec Emlearn
emlearn a été utilisé dans les travaux suivants (entre autres).
Si vous utilisez Emlearn, faites-le nous savoir! Vous pouvez par exemple soumettre une demande de traction d'inclusion dans cette lecture ou créer un problème sur GitHub.
- Détection d'anomalies TinyMl pour les machines industrielles avec des cycles de service périodiques par Luciano Sebastián Martinez Rau et. al. de l'Université du Mid Suède. Conçu un système qui identifie les cycles de service inappropriés des processus industriels, développés pour un tapis roulant dans l'exploitation minière. Un classificateur a été utilisé pour détecter les états du système et pour former une séquence d'états. Cela pourrait ensuite être classé en états normaux ou anormaux. Teste plusieurs classificateurs sur les microcontrôleurs NRF52840 et RP2040, et a trouvé le MLP et la forêt aléatoire pour faire le meilleur.
- Papier concis: vers des empreintes digitales radiométriques embarquées entièrement intégrées sur un système intégré par Wenqing Yan de l'Université Uppsala. Les systèmes d'empreintes digitales radiométriques tirent parti des caractéristiques de signal de couche physique unique provenant d'imperfections matérielles individuelles pour identifier les dispositifs de l'émetteur. Les auteurs ont démontré un système fonctionnant sur un NRF52833. Ils ont testé pour en détecter un sur 32 dispositifs de transfert et ont atteint une précision moyenne de 92%. A utilisé un classificateur de forêt aléatoire et a constaté que 10 arbres atteignirent très près de la même performance que 40 arbres.
- IoT Next Generation Smart Grid Metter (NGSM) pour la détection des appareils électroménagers à bord basé sur l'apprentissage en profondeur et les Linux intégrés par Noor El-Deen M. Mohamed et. AL à l'Université Helwan au Caire, Égypte. Développer un compteur intelligent pour les ménages qui peuvent détecter lorsque différents appareils sont en cours d'exécution. Cela se fait à l'aide d'un modèle de désagrégation énergétique / de surveillance de la charge non intrusif (NILM), qui a mis en œuvre à l'aide d'un réseau neuronal. Le système fonctionne sur Linux intégré à l'aide d'un système sur puce Allwinner F1C200S. Utilisé Emlearn au lieu de TensorFlow Lite pour avoir une approche plus légère.
- C-HAR: Reconnaissance d'activité humaine basée sur la mesure de la compression par Billy Dawton et. al. Testé à l'aide de détection de compression avec seulement 5 samplérate Hz reconnaît des actions telles que la "marche", la "typage" et "manger". Utilisé Emlearn pour déployer les modèles basés sur RandomForest dans une carte Teensy 4.1. Ont constaté qu'ils pouvaient atteindre une précision d'environ 90%, mais avec un taux d'échantillonnage 4 fois inférieur et un temps d'exécution 2 fois plus faible par rapport aux approches de détection comprimées existantes.
- L'apprentissage automatique minuscule pour l'analyse de stabilité posturale en temps réel par Veysi Adın et.al. Testé un algorithme d'analyse du balancement pour le déploiement sur un NORC NRF52840 (ARM Cortex M4). Modèle de réseau neuronal artificiel (ANN) avec des forêts aléatoires et des Bayes naïfs gaussiens. Ont constaté qu'Ann avait les meilleures performances sous des rapports signal / bruit plus bas, mais que la forêt aléatoire avait le temps d'inférence le plus faible et des performances similaires dans des cas de SNR élevés.
- Micro Random Forest: une mise en œuvre locale à grande vitesse d'une méthode d'emplacement de défaut d'apprentissage automatique pour les systèmes d'alimentation de distribution par Miguel Jimenez Aparicio et.Al chez Sandia National Laboratories. A développé une méthode de localisation des défauts qui utilise la signature de l'onde de voyage. Testé 4 modèles RandomForest de dimension de différentes tailles, les performances évaluées sur un réseau d'alimentation simulé. Emlearn a utilisé pour porter les modèles sur la puce TMS320F28379D, un DSP de série C2000 de Texas Instruments. Ont constaté que le temps d'exécution total était de 1,2 ms, dont seulement 10 États-Unis étaient utilisés par le classificateur.
- Suivi de la vitesse de respiration à distance en position stationnaire en utilisant le mouvement et les capteurs acoustiques des perceptes d'oreille par Tousif Ahmed et.al à Samsung Research. Développé un système utilisant le microphone et l'accéléromètre sur les écouteurs pour estimer le taux de respiration du porteur. A testé divers modèles tels que la régression logistique, le perceptron multicouche et la forêt aléatoire. Emlearn utilisé pour convertir le modèle en C et fonctionner sur Samsung Galaxy Buds 2 écouteurs. Ont constaté que la consommation de batterie était suffisamment faible pour qu'elle puisse fonctionner continuellement.
- Détection d'attaque intelligente pour les réseaux IoT par Yang Yang. Implémentation d'un système de détection d'intrusion pour les réseaux IoT. Utilisé un classificateur de forêt aléatoire fonctionnant sur Nordic NRF52840 en utilisant des RTO Contiki-NG. En plus de l'inférence sur les appareils, ils ont également exécuté les classificateurs dans le simulateur de réseau de périphérique COOJA IOT.
- Nœud de capteur sans fil économe en puissance à travers l'intelligence de bord par Abhishek P. Damle et al. Utilisé des données d'accéléromètre sur un nœud de capteur Wirelesess pour classer le comportement des bovins de pâturage, dans la position debout, le pâturage, la marche, le mensonge et la rumination. EMLARN utilisé pour compiler un arbre de décision pour le déploiement dans le module Microchip WLR089U0 (microcontrôleur ATSAMR34X avec émetteur-récepteur LORA intégré). Les meilleures fonctionnalités ont été sélectionnées en utilisant l'élimination récursive des fonctionnalités (RFE), l'élagage de la complexité des coûts a été utilisé pour régler la complexité des arbres de décision. Ils montrent que l'énergie requise pour transmettre a baissé de 50 fois en effectuant l'extraction et la classification des fonctionnalités à bord par rapport à l'envoi des données du capteur brut.
- LPWAN et l'apprentissage automatique intégré en tant que catalyseurs pour la prochaine génération d'appareils portables par Ramon Sanchez-Iborra. Évalué la faisabilité de l'exécution de modèles TinyML sur un nœud de capteur Lorawan. Utilisé un atmega 328p, avec MPU6050 IMU, GY-Neo6MV2 GPS et RN2483 Lorawan Tranceiver. Ont constaté que le code pour communiquer avec les Pheripherals a pris beaucoup plus de SRAM / Flash que le modèle ML. A pu s'adapter à une forêt aléatoire avec 50 arbres (limité du flash), ou un perceptron multicouche avec 5 couches et 10 neurones par couche (SRAM Bound).
- Une comparaison entre les fauteuils roulants assistés par PushRIM Adaptive Adaptive Adaptive Adaptive Adaptive PushRIM par M. Khalili, G. Kryt, HFM Van der Loos et JF Borisoff. Implémentation d'une estimation de l'intention de l'utilisateur pour les fauteuils roulants, afin de donner à l'utilisateur un assisté de puissance personnalisé contrôlé. Utilisé Emlearn pour exécuter le classificateur RandomForest sur un microcontrôleur Teensy. Ont constaté que le modèle de microcontrôleur en temps réel s'est produit similaire aux modèles hors ligne.
- C-AVDI: Détection et identification des véhicules acoustiques basés sur la mesure de la compression par Billy Dawton et.al. Implémentation de détection et de classification des motos passantes et des voitures du son. Utilisé un système de détection comprimée à l'aide d'un frontend analogique et d'ADC fonctionnant à un samplérate bas. Utilisé un Emlearn Randomforest sur un microcontrôleur Teensy pour effectuer la classification.
- Un cadre de bout en bout pour le système de détection d'intrusion du réseau basé sur l'apprentissage automatique par Gustavo de Carvalho Bertoli et.al. Implémenté un système de détection de scan TCP. Il a utilisé une arborescence de décision et a utilisé Emlearn pour générer du code pour un module de noyau Linux / NetFilter pour effectuer la détection. Il a été testé sur un ordinateur monomoteur Rasperry Pi 4, et les frais généraux de performance se sont révélés négliger.
- Vers un brassard électromyographique: une comparaison des algorithmes d'apprentissage automatique intégrés par Danilo Demarchi, Paolo Motto Ros, Fabio Rossi et Andrea Mongardi. Détecté différents gestes de la main sur la base des données électromyographiques (SEMG). A comparé les performances de différents algorithmes d'apprentissage automatique, d'Emlearn et TensorFlow Lite. J'ai trouvé Emlearn Randomforest et Naive Bayes pour donner une bonne précision avec une très bonne consommation d'énergie.
- Qui me porte? Reconnaissance de l'utilisateur basé sur Tinydl dans des appareils personnels contraints par Ramon Sanchez-Iborra et Antonio F. Skarmeta. Utilisé Emlearn pour implémenter un modèle pour détecter qui porte un appareil portable particulier, en analysant les données d'accéléromètre. Un perceptron multicouche a été utilisé, fonctionnant sur AVR AMEGA328P.
- Objets intelligents frugaux compatibles TinyMl: défis et opportunités de Ramon Sanchez-Iborra et Antonio F. Skarmeta. Création d'un modèle pour sélectionner automatiquement la méthode de transmission radio à utiliser dans un périphérique IoT. Exécution sur le dispositif Arduino Uno (AVR8). Perceptron multicouche testé, arbre de décision et forêt aléatoire d'Emlearn. A comparé les performances avec Sklearn-Porter, et a constaté que la forêt aléatoire était plus rapide dans Emlearn, tandis que l'arbre de décision plus rapide dans Sklearn-Porter. A comparé Emlearn MLP au SVM de Micromlgen, et a trouvé que l'Emlearn MLP était plus précis et inférieur à la référence.
- Une approche d'apprentissage automatique pour la détection des logiciels malveillants Android en temps réel par NGOC C. Lê et al. Création d'un modèle C ++ pour détecter les logiciels malveillants. Utilisé un ensemble de caractéristiques conçues à la main et une forêt aléatoire d'Emlearn comme classificateur. Exécution sur les appareils Android.
- Riot OS a un package pour Emlearn. Exemple du package Riot OS Emlearn. Leur système de construction exécute automatiquement ce test sur des dizaines de différentes tableaux.