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软件包示例。他们的构建系统会自动在数十种不同的硬件板上运行此测试。