emlearn
التعلم الآلي للوحدة المتحكم والأنظمة المدمجة. تدريب في Python ، ثم قم بالاستدلال على أي جهاز باستخدام برنامج التحويل البرمجي C99.

حالة
مفيد الحد الأدنى . تستخدم في العشرات من المشاريع من قبل العشرات من المطورين.
الميزات الرئيسية
استنتاج صديق مضمن
- رمز C99 المحمول
- لا مطلوب libc
- لا مخصصات ديناميكية
- يتضمن ملف رأس واحد
- دعم عدد صحيح/رياضيات نقطة ثابتة (بعض الطرق)
- يمكن تضمينه/دمجه مع لغات أخرى عبر C API
تدريب مريح
- باستخدام Python مع Scikit-Learn أو Keras
- يمكن الوصول إلى المصنف C الذي تم إنشاؤه أيضًا في Python
معهد ماساتشوستس للتكنولوجيا مرخصة
المكتبات الداعمة
- emlearn-micropython. محرك التعلم الآلي الفعال لـ micropython ، باستخدام emlearn.
يمكن استخدامها كبديل مفتوح المصدر لأشجار تصنيف MATLAB ، وأشجار القرار باستخدام المبرمج MATLAB لتوليد رمز C/C ++. fitctree ، fitcensemble ، TreeBagger ، ClassificationEnsemble CompactTreeBagger
دعم النموذج
تصنيف:
-
eml_trees : sklearn.randomforestclassifier ، sklearn.extratreesclassifier ، sklearn.decisiontreeclassifier -
eml_net : sklearn.multilayerperceptron ، keras.equential مع طبقات متصلة بالكامل -
eml_bayes : sklearn.gaussiannaivebayes
الانحدار:
-
eml_trees : sklearn.randomforestregressor ، sklearn.extratreesregressor ، sklearn.decisiontreegressor -
eml_net : keras.equential مع طبقات متصلة بالكامل ( emlearn.convert(model, method='loadable', return_type='regressor') )
الكشف غير الخاضع للإشراف / الكشف عن الشذوذ
-
eml_distance : sklearn.ellipticenvelope (مسافة ماهالانوبيس) -
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 خطوات:
- تدريب النموذج الخاص بك في بيثون
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
} للحصول على رمز كامل القابل للتشغيل ، انظر البدء.
للاطلاع على الوثائق الكاملة ، انظر أمثلة ، دليل المستخدم.
المساهمة
تحقق Unity رمز المصدر ، git submodule update --init
قبل ارتكاب أي رمز ، قم بتشغيل الاختبارات بواسطة ./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 ، فأخبرنا! يمكنك على سبيل المثال إرسال طلب سحب لإدراجه في هذا ReadMe ، أو إنشاء مشكلة على Github.
- الكشف الشاذ Tinyml للآلات الصناعية مع دورات العمل الدورية من قبل Luciano Sebastián Martinez Rau et. آل. من جامعة منتصف السويد. صمم نظامًا يحدد دورات غير لائقة للعمليات الصناعية ، تم تطويره لحزام النقل في التعدين. تم استخدام مصنف لاكتشاف حالات النظام ، وتشكيل سلسلة من الحالات. يمكن بعد ذلك تصنيف ذلك إلى حالات طبيعية أو غير طبيعية. يختبر العديد من المصنفات على NRF52840 و RP2040 Microcontrollers ، ووجد MLP و Random Forest لأداء الأفضل.
- ورقة موجزة: نحو بصمات الأصابع الإشعاعية على متن الطائرة مدمجة بالكامل على نظام مضمن من قبل Wenqing Yan من جامعة أوبسالا. تستفيد أنظمة بصمات الأصابع الإشعاعية من خصائص إشارة الطبقة المادية الفريدة التي تنشأ من عيوب الأجهزة الفردية لتحديد أجهزة الإرسال. أظهر المؤلفون نظامًا يعمل على NRF52833. اختبروا لاكتشاف واحد من أصل 32 جهازًا لتوزيع الأطراف ، وحققوا متوسط دقة 92 ٪. استخدم مصنف الغابات العشوائي ، ووجد أن 10 أشجار وصلت قريبة جدًا من نفس الأداء مثل 40 شجرة.
- IOT Generation Smart Grid Meter (NGSM) للكشف عن الأجهزة المنزلية على الحافة بناءً على التعلم العميق و Linux المضمّن من قبل Noor-Deen M. Mohamed et. في جامعة هيلوان في القاهرة ، مصر. طورت مقياس شبكة ذكية للأسر التي يمكن أن تكتشف عند تشغيل الأجهزة المختلفة. يتم ذلك باستخدام نموذج تخزين الطاقة / مراقبة الحمل غير التنازلي (NILM) ، والذي تم تنفيذه باستخدام شبكة عصبية. يعمل النظام على Linux المضمّن باستخدام نظام Allwinner F1C200S. استخدم Emlearn بدلاً من TensorFlow Lite للحصول على نهج أكثر خفيفة الوزن.
- C-HAR: التعرف على النشاط البشري القائم على قياس الضغط من قبل Billy Dawton et. آل. تم اختباره باستخدام استشعار الضغط مع أخذ عينات 5 هرتز فقط تعترف بأفعال مثل "المشي" ، "الكتابة" ، و "الأكل". استخدم Emlearn لنشر النماذج العشوائية القائمة على لوحة Teensy 4.1. وجدت أنها يمكن أن تصل إلى حوالي 90 ٪ من الدقة ، ولكن مع انخفاض معدل أخذ العينات أقل ، وبعد مرتين وقت التنفيذ مقارنة مع أساليب الاستشعار المضغوطة الحالية.
- التعلم الآلي الصغير لتحليل الاستقرار الوضعي في الوقت الفعلي بواسطة Veysi Adın et.al. اختبرت خوارزمية تحليل التأثير للنشر على على NRF52840 Nordic NRF52840 (ARM Cortex M4). قارن نموذج الشبكة العصبية الاصطناعية (ANN) مع الغابات العشوائية والبايز الساذجة الغاوسية. وجدت أن ANN لديها أفضل أداء تحت نسب الإشارة إلى الضوضاء المنخفضة ، ولكن تلك الغابة العشوائية لديها أدنى وقت استنتاج وأداء مماثل في حالات SNR عالية.
- الغابة العشوائية الصغيرة: تنفيذ محلي وعالي السرعة لأسلوب موقع خطأ للتعلم الآلي لأنظمة توزيع الطاقة من قبل ميغيل جيمينيز Aparicio et.al في مختبرات سانديا الوطنية. طورت طريقة توطين الأعطال التي تستخدم توقيع موجة السفر. تم اختبار 4 نماذج عشوائية مختلفة بحجمها ، تم تقييم الأداء على شبكة طاقة محاكاة. استخدم emlearn لتنفيذ النماذج إلى رقاقة TMS320F28379D ، DSP C2000-Series من Texas Instruments. وجدت أن إجمالي وقت التنفيذ كان 1.2 مللي ثانية ، تم استخدام 10 الولايات المتحدة فقط من قبل المصنف.
- تتبع معدل التنفس عن بُعد في وضع ثابت باستخدام الحركة وأجهزة الاستشعار الصوتية للأشياء المصابة بواسطة Tousif Ahmed et.al في Samsung Research. طور نظامًا باستخدام الميكروفون ومقياس التسارع على سماعات الأذن لتقدير معدل التنفس من مرتديها. اختبرت نماذج مختلفة مثل الانحدار اللوجستي ، ومتعدد الطبقات ، والغابات العشوائية. استخدم Emlearn لتحويل النموذج إلى C والتشغيل على سماعات Samsung Galaxy Buds 2. وجدت أن استهلاك البطارية كان منخفضًا بدرجة كافية بحيث يمكن تشغيله بشكل مستمر.
- اكتشاف الهجوم الذكي لشبكات إنترنت الأشياء من يانغ يانغ. نفذ نظام الكشف عن التسلل لشبكات إنترنت الأشياء. يستخدم مصنف الغابات العشوائي على Nordic NRF52840 باستخدام Contiki-NG RTOs. بالإضافة إلى الاستدلال على الجهاز ، قاموا أيضًا بتشغيل المصنفات في محاكاة شبكة أجهزة IOT Cooja.
- عقدة المستشعر اللاسلكي الفعال في الطاقة من خلال ذكاء الحافة من قبل Abhishek P. Damle et al. تستخدم بيانات مقياس التسارع على عقدة مستشعر Wirelesess لتصنيف سلوك الماشية الرعي ، والوقوف ، والرعي ، والمشي ، والكذب والتجديف. استخدم Emlearn لتجميع شجرة قرار للنشر في وحدة تحكم Microcrochip WLR089U0 (ATSAMR34x متحكم مع جهاز إرسال استقبال LORA المتكامل). تم اختيار أفضل الميزات باستخدام التخلص من الميزات المتكررة (RFE) ، تم استخدام تقليم تعقيد التكلفة لضبط تعقيد أشجار القرار. يوضحون أن الطاقة المطلوبة للنقل تنخفض بمقدار 50 مرة عن طريق القيام بتوزيع الميزات وتصنيفها على الحافة مقارنة بإرسال بيانات المستشعر الخام.
- LPWAN والتعلم الآلي المدمج كعوامل تمكين للجيل القادم من الأجهزة القابلة للارتداء من قبل Ramon Sanchez-Aborra. تقييم الجدوى لتشغيل نماذج tinyml على عقدة مستشعر لوروان. استخدم Atmega 328p ، مع MPU6050 IMU ، GY-NEO6MV2 GPS و RN2483 Lorawan Tranceiver. وجدت أن رمز التواصل مع pheriperals استغرق أكثر بكثير SRAM/فلاش من طراز ML. كان قادرًا على احتواء غابة عشوائية مع 50 شجرة (حدود فلاش) ، أو إدراك متعدد الطبقات مع 5 طبقات و 10 خلايا عصبية للطبقة (SRAM ملزمة).
- مقارنة بين الكراسي المتحركة التقليدية التي يتم تنشيطها بمساعدة الطاقة التي تم تنشيطها من قبل M. Khalili و G. Kryt و HFM Van Der Loos و JF Borisoff. تم تنفيذ تقدير نية المستخدم للكراسي المتحركة ، من أجل منح المستخدم جهاز مساعدة طاقة مخصصة. استخدم Emlearn لتشغيل مصنف Randomforest على متحكم المراهق. وجدت أن نموذج متحكم في الوقت الفعلي كان يشبه النماذج غير المتصلة بالإنترنت.
- C-AVDI: اكتشاف المركبات الصوتية القائمة على القياس والتعرف عليها من قبل Billy Dawton et.al. تم تنفيذ الكشف وتصنيف الدراجات النارية المارة والسيارات من الصوت. يستخدم نظام الاستشعار المضغوط باستخدام الواجهة الأمامية التناظرية و ADC يعمل في أخذ عينات منخفضة. تستخدم emlearn عشوائي Forest على متحكم المراهقين لأداء التصنيف.
- إطار شامل إلى طرف لنظام الكشف عن شبكات التعلم الآلي بواسطة Gustavo de Carvalho Bertoli et.al. نفذ نظام الكشف عن المسح الضوئي TCP. لقد استخدمت شجرة قرار واستخدمت emlearn لإنشاء رمز لوحدة Kernel Linux / NetFilter للقيام بالكشف. تم اختباره على حوسبة أحادية لوح من Rasperry PI 4 ، ووجد أن النفقات العامة للأداء مهملة.
- نحو شارة electromyographic: خوارزميات التعلم الآلي المدمجة من قبل Danilo Demarchi ، Paolo Motto Ros ، Fabio Rossi و Andrea Mongardi. اكتشفت إيماءات اليد المختلفة على أساس بيانات الكهربية (SEMG). قارن أداء خوارزميات التعلم الآلي المختلفة ، من Emlearn و Tensorflow Lite. تم العثور على emlearn عشوائي forest و bayes الساذجة لإعطاء دقة جيدة مع استهلاك الطاقة الجيدة جدا.
- من يرتديني؟ التعرف على المستخدم القائم على TinyDL في الأجهزة الشخصية المقيدة من قبل Ramon Sanchez-Aborra و Antonio F. Skarmeta. استخدم Emlearn لتنفيذ نموذج لاكتشاف من يرتدي جهازًا معينًا يمكن ارتداؤه ، من خلال تحليل بيانات مقياس التسارع. تم استخدام Perceptron متعدد الطبقات ، يعمل على AVR Atmega328p.
- الكائنات الذكية المقتصدة التي تدعم Tinyml: التحديات والفرص التي قام بها رامون سانشيز بيبررا وأنطونيو ف. سكارميتا. إنشاء نموذج لتحديد طريقة نقل الراديو تلقائيًا التي يجب استخدامها في جهاز إنترنت الأشياء. تشغيل على جهاز Arduino UNO (AVR8). تم اختباره متعدد الطبقات Perceptron وشجرة القرار والغابات العشوائية من Emlearn. مقارنة الأداء مع Sklearn-Porter ، ووجدت أن الغابة العشوائية تكون أسرع في emlearn ، في حين أن شجرة القرار أسرع في Sklearn-Porter. قارن Emlearn MLP مع SVM Micromlgen ، ووجدت أن Emlearn MLP أكثر دقة وأقل وقت استنتاج.
- نهج التعلم الآلي للوقت الحقيقي للكشف عن البرامج الضارة Android بواسطة NGOC C. Lê et al. إنشاء نموذج C ++ للكشف عن البرامج الضارة. استخدم مجموعة من الميزات ذات الهندسة اليدوية وغابة عشوائية من emlearn كمصنف. تشغيل على أجهزة Android.
- Riot OS لديه حزمة لـ Emlearn. مثال على حزمة Riot OS emlearn. يقوم نظام الإنشاء تلقائيًا بتشغيل هذا الاختبار على عشرات لوحات الأجهزة المختلفة.