Emlearn
Maschinelles Lernen für Mikrocontroller und eingebettete Systeme. Trainieren Sie in Python und schließen Sie dann mit einem C99 -Compiler auf jedes Gerät zurück.

Status
Minimal nützlich . Wird in Dutzenden von Projekten von Dutzenden von Entwicklern verwendet.
Schlüsselmerkmale
Eingebettete Frist
- Tragbarer C99 -Code
- KEIN LIBC erforderlich
- Keine dynamischen Zuordnungen
- Eine Einzelkopfzeile -Datei inklusive
- Unterstützen Sie die Ganzzahl/Festpunktmathematik (einige Methoden)
- Kann über C API in andere Sprachen eingebettet/integriert werden
Bequemes Training
- Verwenden von Python mit Scikit-Learn oder Keras
- Der generierte C -Klassifizierer ist auch in Python zugänglich
MIT lizenziert
Unterstützende Bibliotheken
- Emlearn-Micropython. Effiziente maschinelles Lernenmotor für Mikropropython mit EMLearn.
Kann als Open -Source -Alternative zu MATLAB -Klassifizierungsbäumen verwendet werden, Entscheidungsbäume mit MATLAB -Codierer für C/C ++ - Codegenerierung. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Modellunterstützung
Einstufung:
-
eml_trees : sklearn.randomforestClassifier, sklearn.extratreesclassifier, sklearn.decisionTreeClassifierer -
eml_net : sklearn.multilayerperceptron, keras.quas mit vollständig vernetzten Schichten -
eml_bayes : sklearn.gaussiannaivebayes
Regression:
-
eml_trees : sklearn.randomforestregressor, sklearn.extratreesRegressor, sklearn.decisionTreegressor -
eml_net : Keras.Senziell mit vollständig vernetzten Ebenen ( emlearn.convert(model, method='loadable', return_type='regressor') )
Unüberwachungs- / Ausreißer -Erkennung / Anomalie -Erkennung
-
eml_distance : sklearn.ellipticenvelope (Mahalanobis -Entfernung) -
eml_mixture : sklearn.gaussianmixture, sklearn.bayesiangaussianmixe
Feature -Extraktion:
-
eml_audio : Melspectrogramm
Plattformunterstützung
Getestet auf AVR ATMEGA, ESP8266, ESP32, Arm Cortex M (STM32), Linux, Mac OS und Windows.
Sollte überall funktionieren, wo der C99 -Compiler arbeitet.
Installation
Installieren Sie von PYPI
pip install --user emlearn
Verwendung
Die grundlegende Verwendung besteht aus 3 Schritten:
- Trainieren Sie Ihr Modell in Python
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- Konvertieren Sie es in C -Code
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- Verwenden Sie den C -Code
Einfache Klassifikatoren
#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 ): NEURNET NET REGRESSOR
Kopieren Sie die generierte .h -Datei, die eml_net.h und eml_common.h in Ihr Projekt, dann in Ihr Projekt
#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
} Für einen vollständigen Runnable -Code finden Sie Erste Schritte.
Ausführliche Unterlagen finden Sie in Beispielen, die Benutzerhandbuch.
Beitragen
Schauen Sie sich git submodule update --init Unity an, stellen Sie sicher
Führen Sie die Tests vor dem Code mit ./test.sh aus und installieren Sie das Modul lokal mit pip install ./ -v
Mitwirkende
Zitate
Wenn Sie emlearn in einer akademischen Arbeit verwenden, verweisen Sie dies bitte mit:
@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}
}Mit Emlearn gemacht
emlearn wurde in den folgenden Werken (unter anderem) verwendet.
Wenn Sie Emlearn verwenden, lassen Sie es uns wissen! Sie können beispielsweise eine Pull -Anfrage zur Aufnahme in dieses Readme einreichen oder ein Problem auf GitHub erstellen.
- Tinyml -Anomalie -Nachweis für Industriemaschinen mit periodischen Dienstzyklen von Luciano Sebastián Martinez Rau et. al. von der Mid Schweden Universität. Es wurde ein System entwickelt, das unsachgemäße Arbeitszyklen industrieller Prozesse identifiziert und für einen Förderband im Bergbau entwickelt wurde. Ein Klassifikator wurde verwendet, um Systemzustände zu erkennen und eine Abfolge von Zuständen zu bilden. Dies könnte dann in normale oder abnormale Zustände eingeteilt werden. Testet mehrere Klassifikatoren auf NRF52840- und RP2040 -Mikrocontrollern und fand MLP und Random Forest, um das Beste auszuführen.
- Prägnantes Papier: In Richtung radiometrischer Fingerabdruck in Bord, vollständig in ein eingebettetes System von Wenqing Yan von der Uppsala University integriert. Radiometrische Fingerabdrucksysteme nutzen die einzigartigen Merkmale des physikalischen Schichts, die aus einzelnen Hardware-Unvollkommenheiten stammen, um Sendergeräte zu identifizieren. Die Autoren demonstrierten ein System, das auf einem NRF52833 ausgeführt wurde. Sie testeten, um eine von 32 Quaritionsgeräten zu erkennen, und erreichten eine durchschnittliche Genauigkeit von 92%. Benutzte einen zufälligen Waldklassifizierer und stellte fest, dass 10 Bäume sehr nahe an der gleichen Leistung wie 40 Bäume erreichten.
- IoT Next Generation Smart Grid Messgerät (NGSM) für die Erkennung von Haushaltsgeräten vorbereiten, basierend auf Deep Learning und eingebettetem Linux von Noor El-Deen M. Mohamed ET. AL an der Helwan University in Kairo, Ägypten. Entwickelte ein intelligentes Netzmessgerät für Haushalte, die erkennen können, wenn verschiedene Geräte ausgeführt werden. Dies erfolgt mit einem NILM-Modell (Energy Disaggregation / Nicht-Intrusive Last Monitoring), das mit einem neuronalen Netzwerk implementiert wurde. Das System läuft auf eingebettetem Linux mit einem Allwinner F1C200S-System-on-Chip. Ich benutzte Emlearn anstelle von Tensorflow Lite, um einen leichteren Ansatz zu haben.
- C-HAR: Kompressive messbasierte menschliche Aktivitätserkennung von Billy Dawton ET. al. Mit nur 5 -Hz -Probenahme getestet, erkennen Aktionen wie "Gehen", "Tippen" und "Essen". Verwendete EMLearn, um die Randomforest -basierten Modelle für eine Teensy 4.1 -Karte bereitzustellen. Fanden heraus, dass sie eine Genauigkeit von rund 90% erreichen konnten, jedoch mit einer 4 -mal niedrigeren Abtastrate und einer 2 -mal niedrigeren Ausführungszeit im Vergleich zu den vorhandenen Komprimierungsansätzen.
- Tiny maschinelles Lernen für die Echtzeit-Stabilitätsanalyse durch Veysi Adın et al. Testete einen Sway -Analyse -Algorithmus für die Bereitstellung auf einem nordischen NRF52840 (Arm Cortex M4). Verglichen mit zufälligem Wäldern und Gaußschen naiven Bayes. Stellte fest, dass Ann unter niedrigeren Signal-Rausch-Verhältnissen die beste Leistung hatte, aber dieser zufällige Wald hatte die niedrigste Inferenzzeit und eine ähnliche Leistung in hohen SNR-Fällen.
- Micro-Zufallswald: Eine lokale Hochgeschwindigkeitsumsetzung einer maschinellen Lernverwerfung für Verteilungsstromsysteme von Miguel Jimenez Aparicio et al. Bei Sandia National Laboratories. Entwickelte eine Fehlerlokalisierungsmethode, die die Signatur der Wanderwelle verwendet. Die 4 verschiedenen Randomforest -Modelle in verschiedenen Größe getestet, bewertete die Leistung in einem simulierten Leistungsnetzwerk. Verwendete EMLearn, um die Modelle in den TMS320F28379D-Chip zu portieren, einem DSP der C2000-Serie aus Texas Instruments. Stellte fest, dass die Gesamtausführungszeit 1,2 ms betrug, von denen nur 10 US -am Klassifizierer verwendet wurden.
- Fernatungsrate Tracking in stationärer Position unter Verwendung der Bewegung und akustischen Sensoren von Ohrstables durch Tousif Ahmed et al. Bei Samsung Research. Entwickelte ein System mit Mikrofon- und Beschleunigungsmesser für Ohrhörer, um die Atemfrequenz des Trägers abzuschätzen. Testeten verschiedene Modelle wie logistische Regression, Mehrschicht-Perzeptron und zufällige Wald. Verwendete EMLearn, um das Modell in C zu konvertieren und auf Samsung Galaxy Buds 2 Ohrhörer zu laufen. Stellte fest, dass der Batterieverbrauch niedrig war, dass er kontinuierlich laufen konnte.
- Intelligente Angriffserkennung für IoT -Netzwerke von Yang Yang. Implementierte ein Intrusionserkennungssystem für IoT -Netzwerke. Verwendete zufälliger Waldklassifizierer, der auf nordischer NRF52840 unter Verwendung von Contiki-ng-RTOs läuft. Zusätzlich zu der Inferenz für das Gerät führten sie die Klassifikatoren im COOJA IoT-Geräte-Netzwerk-Simulator.
- Leistung effizienter drahtloser Sensorknoten durch Edge Intelligence von Abhishek P. Damle et al. Verwendete Beschleunigungsmesserdaten an einem driselesind -Sensorknoten, um das Verhalten von Weidenvieh in Stehen, Beweidung, Gehen, Lügen und Wiederkäuen zu klassifizieren. Verwendet EMLearn, um einen Entscheidungsbaum für die Bereitstellung für das Microchip WLR089U0 -Modul (ATSAMR34X -Mikrocontroller mit integriertem LORA -Transceiver) zu erstellen. Die besten Merkmale wurden unter Verwendung einer rekursiven Feature -Elimination (RFE) ausgewählt. Die Kostenkomplexität wurde verwendet, um die Komplexität der Entscheidungsbäume zu stimmen. Sie zeigen, dass die für die Übertragung erforderliche Energie um das 50-fache durch Feature-Extraktion und Klassifizierung im Vergleich zum Senden der Rohsensordaten sinkt.
- LPWAN und eingebettetes maschinelles Lernen als Enabler für die nächste Generation von tragbaren Geräten von Ramon Sanchez-Iborra. Bewertete Machbarkeit von TinyML -Modellen auf einem Lorawan -Sensorknoten. Verwendete einen ATMEGA 328p mit MPU6050 IMU, GY-NEO6MV2 GPS und RN2483 Lorawan Tranceiver. Fanden heraus, dass der Code für die Kommunikation mit den Pheripheriegeräten erheblich mehr SRAM/Flash als ML -Modell dauerte. War in der Lage, einen zufälligen Wald mit 50 Bäumen (Blitzgebundene) oder einem Mehrschicht-Perzeptron mit 5 Schichten und 10 Neuronen pro Schicht (SRAM-gebunden) zu passen.
- Ein Vergleich zwischen herkömmlichen und benutzerverbesserten adaptiven, pushrim-aktivierten Power-assistierten Rollstühlen von M. Khalili, G. Kryt, HFM van der Loos und JF Borisoff. Implementierte eine Schätzung der Benutzerabsicht für Rollstühle, um dem Benutzer einen personalisierten Leistungsassistenten zu geben, der kontrolliert wird. Verwendete EMLearn, um den Randomforest -Klassifizierer auf einem Teensy -Mikrocontroller auszuführen. Fanden heraus, dass das Echtzeit-Mikrocontroller-Modell ähnlich wie die Offline-Modelle.
- C-AVDI: Erkennung und Identifizierung von Kenntnissen auf messbasierter akustischer Fahrzeug von Billy Dawton et al. Implementierte Erkennung und Klassifizierung von Motorrädern und Autos vom Klang. Verwendete komprimiertes Erfassungssystem mit einem analogen Frontend und ADC, das mit einem niedrigen Probenahme ausgeführt wird. Verwendete einen Emlearn -Zufallswald für einen Teensy -Mikrocontroller, um die Klassifizierung durchzuführen.
- Ein End-to-End-Framework für maschinelles Lernbasierte Netzwerk-Intrusion-Erkennungssystem von Gustavo de Carvalho Bertoli et al. Implementierte ein TCP -Scan -Erkennungssystem. Es verwendete einen Entscheidungsbaum und verwendete EMLearn, um Code für ein Linux -Kernel -Modul / Netfilter zu generieren, um die Erkennung zu erstellen. Es wurde an einem Rasperry Pi 4-Single-Board-Computer getestet, und der Leistungsaufwand wurde als vernachlässigbar befunden.
- In Richtung einer elektromyografischen Armband: Ein Vergleich von Danilo Demarchi, Paolo Motto Ros, Fabio Rossi und Andrea Mongardi. Erkannten verschiedene Handgesten anhand elektromyographischer (SEMG) -Daten. Verglichen die Leistung verschiedener Algorithmen für maschinelles Lernen von Emlearn und TensorFlow Lite. Fand Emlearn Randomforest und Naive Bayes, um eine gute Genauigkeit mit sehr gutem Stromverbrauch zu verleihen.
- Wer trägt mich? TinyDL-basierte Benutzererkennung in eingeschränkten persönlichen Geräten von Ramon Sanchez-Iborra und Antonio F. Skarmeta. Verwendete EMLearn, um ein Modell zum Erkennen zu implementieren, wer ein bestimmtes tragbares Gerät trägt, indem Beschleunigungsmesserdaten analysiert werden. Ein Multi-Layer-Perzeptron wurde verwendet, der auf AVR ATMEGA328P ausgeführt wurde.
- Tinyml-fähige sparsame Smart-Objekte: Herausforderungen und Chancen von Ramon Sanchez-Iborra und Antonio F. Skarmeta. Erstellt ein Modell für die automatische Auswahl der Funkübertragungsmethode in einem IoT -Gerät. Laufen auf Arduino Uno (AVR8) -Gerät. Getestete Mehrschicht-Perzeptron, Entscheidungsbaum und zufälliger Wald aus Emlearn. Verglichen die Leistung mit dem Sklearn-Porter und fand heraus, dass der zufällige Wald in EMLearn schneller ist, während der Entscheidungsbaum in Sklearn-Porter schneller ist. Vergleiche EMLearn MLP mit dem SVM von Micromlgen und fand, dass das EMLE -MLP genauer und niedrigerer Inferenzzeit ist.
- Ein Ansatz für maschinelles Lernen für die Erkennung von Android -Malware in Echtzeit von NGOC C. Lê et al. Erstellt ein C ++ - Modell zum Erkennen von Malware. Verwendete eine Reihe von handgefertigten Merkmalen und einen zufälligen Wald von Emlearn als Klassifikator. Laufen auf Android -Geräten.
- Riot OS hat ein Paket für Emlearn. Aufruhr os emlearn Paket Beispiel. In ihrem Build -System wird dieser Test automatisch auf zehn verschiedenen Hardware -Boards ausgeführt.