Emlearn
Pembelajaran mesin untuk mikrokontroler dan sistem tertanam. Latih di Python, lalu lakukan inferensi pada perangkat apa pun dengan kompiler C99.

Status
Bermanfaat minimal . Digunakan dalam lusinan proyek oleh lusinan pengembang.
Fitur utama
Inferensi ramah yang disematkan
- Kode C99 portabel
- Tidak diperlukan libc
- Tidak ada alokasi dinamis
- File header tunggal termasuk
- Dukungan integer/matematika titik tetap (beberapa metode)
- Dapat disematkan/diintegrasikan dengan bahasa lain melalui C API
Pelatihan yang nyaman
- Menggunakan Python dengan scikit-learn atau keras
- Classifier C yang dihasilkan juga dapat diakses dalam Python
MIT berlisensi
Perpustakaan Pendukung
- emlearn-micropython. Mesin pembelajaran mesin yang efisien untuk Micropython, menggunakan Emlearn.
Dapat digunakan sebagai alternatif open source untuk pohon klasifikasi MATLAB, pohon keputusan menggunakan MATLAB coder untuk pembuatan kode C/C ++. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Dukungan Model
Klasifikasi:
-
eml_trees : sklearn.randomforestclassifier, sklearn.extratreesclassifier, sklearn.decisiontreeclassifier -
eml_net : sklearn.multilayerperceptron, keras. -
eml_bayes : sklearn.gaussiannaivebayes
Regresi:
-
eml_trees : sklearn.randomforestregressor, sklearn.extratreesregressess, sklearn.decisiontreegressor -
eml_net : keras emlearn.convert(model, method='loadable', return_type='regressor')
Deteksi Deteksi / Anomali Tanpa Dipertanggungjawabkan / outlier
-
eml_distance : sklearn.ellipticenvelope (jarak Mahalanobis) -
eml_mixture : sklearn.gaussianmixture, sklearn.bayesiangaussianmixture
Ekstraksi fitur:
-
eml_audio : Melspectrogram
Dukungan platform
Diuji berjalan di AVR ATMEGA, ESP8266, ESP32, ARM Cortex M (STM32), Linux, Mac OS dan Windows.
Harus bekerja di mana saja yang memiliki kompiler C99 yang berfungsi.
Menginstal
Instal dari PYPI
pip install --user emlearn
Penggunaan
Penggunaan dasar terdiri dari 3 langkah:
- Latih model Anda di Python
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- Konversikan menjadi kode C
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- Gunakan kode C
Pengklasifikasi sederhana
#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 Net Neural
Salin file .h yang dihasilkan, eml_net.h dan eml_common.h ke dalam proyek Anda, lalu
#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
} Untuk kode runnable lengkap, lihat dimulai.
Untuk dokumentasi lengkap, lihat contoh, panduan pengguna.
Berkontribusi
Lihat kode sumbernya, pastikan Anda menginstal submodule Unity juga dengan git submodule update --init
Sebelum melakukan kode apa pun, jalankan tes dengan ./test.sh dan instal modul secara lokal dengan pip install ./ -v
Kontributor
Kutipan
Jika Anda menggunakan emlearn dalam pekerjaan akademik, silakan merujuknya menggunakan:
@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}
}Dibuat dengan Emlearn
emlearn telah digunakan dalam karya -karya berikut (antara lain).
Jika Anda menggunakan Emlearn, beri tahu kami! Anda dapat misalnya mengirimkan permintaan tarik untuk dimasukkan dalam readme ini, atau membuat masalah di GitHub.
- Deteksi anomali tinyml untuk mesin industri dengan siklus tugas berkala oleh Luciano Sebastián Martinez Rau et. al. dari Mid Swedia University. Merancang sistem yang mengidentifikasi siklus tugas yang tidak tepat dari proses industri, yang dikembangkan untuk sabuk konveyor dalam penambangan. Klasifikasi digunakan untuk mendeteksi status sistem, dan untuk membentuk urutan negara. Ini kemudian dapat dikategorikan ke dalam keadaan normal atau abnormal. Testis beberapa pengklasifikasi pada mikrokontroler NRF52840 dan RP2040, dan menemukan MLP dan Random Forest untuk melakukan yang terbaik.
- Kertas Ringkas: Menuju sidik jari radiometrik on-board sepenuhnya terintegrasi pada sistem tertanam oleh Wenqing Yan dari Universitas Uppsala. Sistem sidik jari radiometrik memanfaatkan karakteristik sinyal lapisan fisik yang unik yang berasal dari ketidaksempurnaan perangkat keras individu untuk mengidentifikasi perangkat pemancar. Para penulis mendemonstrasikan sistem yang berjalan pada NRF52833. Mereka diuji untuk mendeteksi satu dari 32 perangkat pengalihan, dan mencapai akurasi rata -rata 92%. Menggunakan pengklasifikasi hutan acak, dan menemukan bahwa 10 pohon mencapai kinerja yang sama dengan 40 pohon.
- IoT Next Generation Smart Grid Meter (NGSM) untuk deteksi peralatan rumah tangga di tepi berdasarkan pembelajaran mendalam dan tertanam Linux oleh Noor El-Deen M. Mohamed ET. Al di Universitas Helwan di Kairo, Mesir. Mengembangkan meteran kotak pintar untuk rumah tangga yang dapat mendeteksi ketika berbagai peralatan berjalan. Ini dilakukan dengan menggunakan model pemantauan beban / pemantauan beban non-intrusif (NILM), yang diimplementasikan menggunakan jaringan saraf. Sistem berjalan pada Linux tertanam menggunakan sistem Allwinner F1C200S. Menggunakan emlearn bukan tensorflow lite untuk memiliki pendekatan yang lebih ringan.
- C-HAR: Pengakuan aktivitas manusia berbasis pengukuran tekan oleh Billy Dawton ET. al. Diuji menggunakan penginderaan tekan dengan hanya 5 Hz samplerate memang mengenali tindakan seperti "berjalan", "mengetik", dan "makan". Menggunakan emlearn untuk menggunakan model berbasis acak ke papan 4.1 Teensy. Menemukan bahwa mereka dapat mencapai sekitar 90% akurasi, tetapi dengan laju pengambilan sampel 4 kali lebih rendah, dan waktu eksekusi 2 kali lebih rendah dibandingkan dengan pendekatan penginderaan terkompresi yang ada.
- Pembelajaran mesin kecil untuk analisis stabilitas postural real-time oleh Veysi Adın et.al. Menguji algoritma analisis goyangan untuk digunakan pada Nordic NRF52840 (ARM Cortex M4). Dibandingkan model Neural Network (JST) buatan dengan hutan acak dan Bayes naif Gaussian. Menemukan bahwa Ann memiliki kinerja terbaik di bawah rasio sinyal-ke-noise yang lebih rendah, tetapi hutan acak memiliki waktu inferensi terendah dan kinerja serupa dalam kasus SNR tinggi.
- Micro Random Forest: Implementasi lokal, berkecepatan tinggi dari metode lokasi kesalahan pembelajaran mesin untuk sistem tenaga distribusi oleh Miguel Jimenez Aparicio et.al di Sandia National Laboratories. Mengembangkan metode pelokalan kesalahan yang menggunakan tanda tangan gelombang perjalanan. Menguji 4 model acakforest berukuran berbeda, dievaluasi kinerja pada jaringan daya yang disimulasikan. Menggunakan emlearn untuk port model ke chip TMS320F28379D, DSP seri C2000 dari Texas Instruments. Menemukan bahwa total waktu eksekusi adalah 1,2 ms, di mana hanya 10 AS digunakan oleh classifier.
- Pelacakan laju pernapasan jarak jauh dalam posisi stasioner menggunakan gerak dan sensor akustik dari telinga oleh Tousif Ahmed et.al di Samsung Research. Mengembangkan sistem menggunakan mikrofon dan accelerometer pada earbud untuk memperkirakan laju pernapasan pemakainya. Menguji berbagai model seperti regresi logistik, perceptron multi-lapisan dan hutan acak. Menggunakan emlearn untuk mengonversi model menjadi c dan dijalankan pada earbud Samsung Galaxy Buds 2. Menemukan bahwa konsumsi baterai cukup rendah sehingga bisa berjalan dengan terus -menerus.
- Deteksi serangan pintar untuk jaringan IoT oleh Yang Yang. Mengimplementasikan sistem deteksi intrusi untuk jaringan IoT. Menggunakan classifier hutan acak yang berjalan pada Nordic NRF52840 menggunakan rtos contiki-ng. Selain inferensi on-device, mereka juga menjalankan pengklasifikasi di simulator jaringan perangkat Cooja IoT.
- Node sensor nirkabel yang hemat daya melalui kecerdasan tepi oleh Abhishek P. Damle et al. Data data accelerometer yang digunakan pada simpul sensor wirelesess untuk mengklasifikasikan perilaku sapi yang merumput, menjadi berdiri, merumput, berjalan, berbohong, dan merenungkan. Menggunakan emlearn untuk mengkompilasi pohon keputusan untuk digunakan ke modul microchip WLR089U0 (mikrokontroler atsamr34x dengan transceiver lora terintegrasi). Fitur terbaik dipilih menggunakan eliminasi fitur rekursif (RFE), pemangkasan kompleksitas biaya digunakan untuk menyesuaikan kompleksitas pohon keputusan. Mereka menunjukkan bahwa energi yang diperlukan untuk mentransmisikan turun 50 kali dengan melakukan ekstraksi fitur dan klasifikasi di tepi dibandingkan dengan mengirim data sensor mentah.
- LPWAN dan Pembelajaran Mesin Tertanam sebagai enabler untuk generasi berikutnya dari perangkat yang dapat dikenakan oleh Ramon Sanchez-Niborra. Mengevaluasi kelayakan menjalankan model TinyML pada simpul sensor Lorawan. Menggunakan ATMEGA 328P, dengan GPS MPU6050 IMU, GY-NEO6MV2 dan RN2483 Lorawan Tranceiver. Menemukan bahwa kode untuk berkomunikasi dengan pheripherals mengambil lebih banyak sram/flash daripada model ML. Mampu menyesuaikan hutan acak dengan 50 pohon (flash terikat), atau perceptron multi-layer dengan 5 lapisan dan 10 neuron per lapis (SRAM terikat).
- Perbandingan antara kursi roda yang dibantu oleh Pushrim-Intentive-Intentive yang diaktifkan oleh Pushrim oleh M. Khalili, G. Kryt, HFM van der Loos, dan JF Borisoff. Mengimplementasikan estimasi niat pengguna untuk kursi roda, untuk memberi pengguna yang dikendalikan dengan bantuan daya yang dipersonalisasi. Menggunakan emlearn untuk menjalankan classifier acak Forest pada mikrokontroler Teensy. Menemukan bahwa model mikrokontroler real-time yang dilakukan mirip dengan model offline.
- C-AVDI: Deteksi dan identifikasi kendaraan akustik berbasis pengukuran tekan oleh Billy Dawton et.al. Diimplementasikan deteksi dan klasifikasi motor yang lewat dan mobil dari suara. Sistem penginderaan terkompresi yang digunakan menggunakan frontend analog dan ADC berjalan pada samplerasi rendah. Menggunakan emlearn acak Forest pada mikrokontroler Teensy untuk melakukan klasifikasi.
- Kerangka kerja ujung ke ujung untuk sistem deteksi intrusi jaringan berbasis pembelajaran mesin oleh Gustavo de Carvalho Bertoli et.al. Menerapkan sistem deteksi pemindaian TCP. Ini menggunakan pohon keputusan dan menggunakan emlearn untuk menghasilkan kode untuk modul / netfilter kernel linux untuk melakukan deteksi. Itu diuji pada rasperry pi 4-board-computer, dan overhead kinerja ditemukan diabaikan.
- Menuju lengan elektromiografi: Perbandingan algoritma pembelajaran mesin tertanam oleh Danilo Demarchi, Paolo Motto Ros, Fabio Rossi dan Andrea Mongardi. Mendeteksi berbagai gerakan tangan berdasarkan data elektromiografi (SEMG). Membandingkan kinerja algoritma pembelajaran mesin yang berbeda, dari Emlearn dan Tensorflow Lite. Ditemukan Emlearn RandomForest dan Naive Bayes untuk memberikan akurasi yang baik dengan konsumsi daya yang sangat baik.
- Siapa yang memakainya? Pengenalan pengguna berbasis TinyDL dalam perangkat pribadi terbatas oleh Ramon Sanchez-Niborra dan Antonio F. Skarmeta. Menggunakan emlearn untuk mengimplementasikan model untuk mendeteksi siapa yang mengenakan perangkat yang dapat dipakai tertentu, dengan menganalisis data accelerometer. Perceptron multi-layer digunakan, berjalan di AVR Atmega328p.
- Objek pintar hemat yang mendukung Tinyml: tantangan dan peluang oleh Ramon Sanchez-IBorra dan Antonio F. Skarmeta. Membuat model untuk secara otomatis memilih metode transmisi radio mana yang akan digunakan di perangkat IoT. Menjalankan pada perangkat Arduino UNO (AVR8). Perceptron multi-layer yang diuji, pohon keputusan dan hutan acak dari Emlearn. Membandingkan kinerja dengan Sklearn-porter, dan menemukan bahwa hutan acak lebih cepat di Emlearn, sementara pohon keputusan lebih cepat di Sklearn-Porter. Membandingkan emlearn MLP dengan SVM micromlgen, dan menemukan EMLEARN MLP lebih akurat dan waktu inferensi yang lebih rendah.
- Pendekatan pembelajaran mesin untuk deteksi malware android waktu nyata oleh Ngoc C. Lê et al. Membuat model C ++ untuk mendeteksi malware. Menggunakan satu set fitur rekayasa tangan dan hutan acak dari Emlearn sebagai classifier. Berjalan di perangkat Android.
- Riot OS memiliki paket untuk Emlearn. Contoh Paket Riot OS Emlearn. Sistem build mereka secara otomatis menjalankan tes ini pada puluhan papan perangkat keras yang berbeda.