Emlearn
微控制器和嵌入式系統的機器學習。在Python中進行訓練,然後在使用C99編譯器的任何設備上進行推斷。

地位
最少有用。數十個開發商用於數十個項目。
關鍵功能
嵌入式友好的推理
- 便攜式C99代碼
- 不需要LIBC
- 沒有動態分配
- 單頭文件包括
- 支持整數/固定點數學(某些方法)
- 可以通過C API嵌入/集成到其他語言
方便的培訓
- 使用python與Scikit-Learn或Keras
- 生成的C分類器也可以在Python中訪問
麻省理工學院許可
支持庫
- Emlearn-Micropython。使用Emlearn的有效機器學習引擎。
可以用作MATLAB分類樹的開源替代方法,使用MATLAB編碼器進行C/C ++代碼生成的決策樹。 fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
模型支持
分類:
-
eml_trees :Sklearn.RandomForestClassifier,Sklearn.ExtratreesClassifier,Sklearn.DecisionTreeClalsifier -
eml_net :sklearn.multilayerperceptron,keras。 -
eml_bayes :sklearn.gaussiannaivebayes
回歸:
-
eml_trees :Sklearn.randomforestregressor,Sklearn.ExtratreeSregressor,Sklearn.decisionTreeReereGressor -
eml_net :keras.Sequerential sequiented用完全連接的層( emlearn.convert(model, method='loadable', return_type='regressor') )
無監督 /離群值檢測 /異常檢測
eml_distance :sklearn.ellipticenvelope(Mahalanobis距離)-
eml_mixture :sklearn.gaussianmixture,sklearn.bayesiangaussianmixture
功能提取:
-
eml_audio :MELSPECTROGRAM
平台支持
在AVR ATMEGA,ESP8266,ESP32,ARM Cortex M(STM32),Linux,Mac OS和Windows上運行的測試。
應該在具有C99編譯器的任何地方工作。
安裝
從PYPI安裝
pip install --user emlearn
用法
基本用法包括3個步驟:
- 在Python中訓練您的模型
from sklearn . ensemble import RandomForestClassifier
estimator = RandomForestClassifier ( n_estimators = 10 , max_depth = 10 )
estimator . fit ( X_train , Y_train )
...
- 將其轉換為C代碼
import emlearn
cmodel = emlearn . convert ( estimator , method = 'inline' )
cmodel . save ( file = 'sonar.h' , name = 'sonar' )
- 使用C代碼
簡單分類器
#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 ):神經淨回歸
將生成的.h文件, eml_net.h和eml_common.h複製到您的項目中,然後
#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
}有關完整的可運行代碼,請參閱入門。
有關完整文檔,請參見示例,請參見用戶指南。
貢獻
查看源代碼,請確保您在git submodule update --init上安裝Unity子模塊
在進行任何代碼之前,請按./test.sh運行測試,然後使用pip install ./ -v本地安裝模塊
貢獻者
引用
如果您在學術工作中使用emlearn ,請使用:
@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}
}用Emlearn製成
emlearn已在以下作品(包括)中使用。
如果您正在使用Emlearn,請告訴我們!例如,您可以提交包含在此讀數中的拉動請求,也可以在GitHub上創建問題。
- LucianoSebastiánMartinezRau et rucianoSebastiánMartinezrau et的工業機器的Tinyml異常檢測。 al。來自瑞典中部大學。設計了一個系統,該系統可以識別出為採礦中傳送帶開發的工業過程的不當職責週期。分類器用於檢測系統狀態,並形成一系列狀態。然後可以將其歸類為正常狀態或異常狀態。睾丸在NRF52840和RP2040微控制器上測試了幾個分類器,並發現MLP和隨機森林表現最佳。
- 簡潔的論文:朝著烏普薩拉大學的Wenqing Yan完全集成在嵌入式系統上的板載輻射指紋。輻射指紋系統利用源自單個硬件缺陷的獨特物理層信號特性來識別發射器設備。作者演示了在NRF52833上運行的系統。他們測試以檢測32個旋轉設備中的一個,並達到92%的平均精度。使用了隨機的森林分類器,發現10棵樹與40棵樹非常接近相同的性能。
- 物聯網下一代智能電網儀(NGSM),用於基於深度學習和嵌入Linux的noor el el-deen M. Mohamed等的嵌入Linux檢測。埃及開羅的Helwan大學的AL。為家庭開發了一個智能電網,可以檢測到何時運行不同的電器。這是使用能量分解 /非侵入性負載監測(NILM)模型完成的,該模型使用神經網絡實施。該系統使用Allwinner F1C200S在芯片上運行嵌入式Linux。使用Emlearn而不是Tensorflow Lite具有更輕巧的方法。
- C-HAR:Billy Dawton等人的基於壓縮測量的人類活動識別。 al。僅使用5 Hz採樣的壓縮感測試,確實可以識別諸如“步行”,“打字”和“飲食”之類的動作。使用EMLEARN將基於Randomforest的模型部署到Teensy 4.1板上。發現它們的精度可能達到90%左右,但採樣率降低了4倍,而與現有壓縮感應方法相比,執行時間降低了2倍。
- VeysiAdın等人的實時姿勢穩定分析的微小機器學習。測試了用於部署到NRF52840(ARM Cortex M4)的Sway分析算法。將人工神經網絡(ANN)模型與隨機森林和高斯幼稚貝葉斯進行了比較。發現ANN在較低的信噪比下的性能最佳,但是在高SNR病例中,隨機森林的推理時間和相似的性能最低。
- 微型隨機森林:Miguel Jimenez Aparicio等人在桑迪亞國家實驗室(Sandia National Laboratories)撰寫的機器學習故障位置方法的本地高速實施方法。開發了一種使用波動波的簽名的故障定位方法。測試了4個不同大小的RandomForest模型,在模擬電源網絡上評估了性能。使用Emlearn將模型移植到TMS320F28379D芯片,這是來自德州儀器的C2000系列DSP。發現總執行時間為1.2毫秒,其中只有10個美國使用了10毫秒。
- Tousif Ahmed等人在Samsung Research的Tousif Ahmed等人的Earables的運動傳感器和聲音傳感器處於固定位置的遠程呼吸速率跟踪。使用麥克風和加速度計在耳塞上開發了一個系統,以估計佩戴者的呼吸速率。測試了各種模型,例如邏輯回歸,多層感知和隨機森林。使用Emlearn將模型轉換為C並在三星Galaxy Buds 2耳塞上運行。發現電池的消耗足夠低,可以不斷運行。
- Yang Yang的IoT網絡的智能攻擊檢測。為IoT網絡實施了入侵檢測系統。使用contiki-ng rtos在北歐NRF52840上運行的隨機森林分類器。除了在設備上的推論外,它們還在Cooja IoT設備網絡模擬器中運行了分類器。
- 電力高效的無線傳感器節點通過Abhishek P. Damle等人通過Edge Intelligence。使用電線傳感器節點上的加速度計數據將放牧牛的行為分類為站立,放牧,步行,撒謊和反思。使用EMLEARN來編譯用於部署到Microchip WLR089U0模塊的決策樹(ATSAMR34X MicroController,具有集成的LORA收發器)。使用遞歸功能消除(RFE)選擇了最佳功能,使用成本複雜性修剪來調整決策樹的複雜性。他們表明,與發送原始傳感器數據相比,通過在邊緣進行特徵提取和分類,傳輸所需的能量下降了50次。
- LPWAN和嵌入式機器學習是Ramon Sanchez-Iborra的下一代可穿戴設備的推動者。評估了在Lorawan傳感器節點上運行Tinyml模型的可行性。使用ATMEGA 328P,帶有MPU6050 IMU,GY-NEO6MV2 GPS和RN2483 Lorawan Tranceiver。發現用於與信息標准通信的代碼比ML模型要多得多SRAM/Flash。能夠安裝有50棵樹(閃光燈)的隨機森林,或一個具有5層和10個神經元的多層感知器(SRAM綁定)。
- M. Khalili,G。Kryt,HFM Van der Loos和JF Borisoff的傳統和基於用戶的自適應推動力輔助輪椅的比較。為輪椅實施了用戶意圖估算,以便為用戶提供個性化的權力輔助控制。使用Emlearn在青少年微控制器上運行RandomForest分類器。發現實時微控制器模型的執行類似於離線模型。
- C-Avdi:Billy Dawton等人通過Billy Dawton等人的基於壓縮測量的聲車檢測和識別。通過聲音實施了通過摩托車和汽車的檢測和分類。使用模擬前端和ADC以低採樣方式運行的ADC使用的壓縮傳感系統。使用Teensy微控制器上的Emlearn Randomforest執行分類。
- Gustavo de carvalho bertoli et.al的基於機器學習的網絡入侵檢測系統的端到端框架。實施了TCP掃描檢測系統。它使用決策樹並使用Emlearn生成了Linux內核模塊 / NetFilter進行檢測的代碼。它在Rasperry Pi 4單板計算機上進行了測試,發現性能開銷是疏忽的。
- 邁向肌電圖臂鈴:Danilo DeMarchi,Paolo Motto Ros,Fabio Rossi和Andrea Mongardi的嵌入式機器學習算法比較。根據肌電圖(SEMG)數據檢測到不同的手勢。比較了Emlearn和Tensorflow Lite的不同機器學習算法的性能。發現Emlearn Rancomerforest和Naive Bayes可以通過非常良好的功耗提供良好的準確性。
- 誰穿我? Ramon Sanchez-Iborra和Antonio F. Skarmeta在受約束的個人設備中基於TinyDL的用戶識別。使用Emlearn通過分析加速度計數據來實現一個模型來檢測誰穿著特定的可穿戴設備。在AVR Atmega328p上運行了多層感知器。
- 啟用Tinyml的節儉智能對象:Ramon Sanchez-Iborra和Antonio F. Skarmeta的挑戰和機遇。創建了一個用於自動選擇在物聯網設備中使用的無線電傳輸方法的模型。在Arduino Uno(AVR8)設備上運行。測試了來自Emlearn的多層感知,決策樹和隨機森林。將表現與Sklearn-Porter進行了比較,並發現在Emlearn中,隨機森林在Sklearn-Porter中更快。將EMLEARN MLP與Micromlgen的SVM進行了比較,並發現Emlearn MLP更準確,推理時間更低。
- NGOCC.Lê等人實時的Android惡意軟件檢測的機器學習方法。創建了用於檢測惡意軟件的C ++模型。使用了一組手工設計的特徵和來自Emlearn的隨機森林作為分類器。在Android設備上運行。
- Riot OS具有Emlearn的包裝。 Riot OS OS Emlearn軟件包示例。他們的構建系統會自動在數十種不同的硬件板上運行此測試。