ยอง
การเรียนรู้ของเครื่องจักรสำหรับไมโครคอนโทรลเลอร์และระบบฝังตัว ฝึกอบรมใน Python จากนั้นทำการอนุมานบนอุปกรณ์ใด ๆ ที่มีคอมไพเลอร์ C99

สถานะ
มีประโยชน์น้อยที่สุด ใช้ในโครงการหลายสิบโครงการโดยนักพัฒนาหลายสิบคน
คุณสมบัติที่สำคัญ
การอนุมานที่เป็นมิตรกับตัวเอง
- รหัส C99 แบบพกพา
- ไม่จำเป็นต้องใช้ libc
- ไม่มีการจัดสรรแบบไดนามิก
- ไฟล์ส่วนหัวเดียวรวม
- สนับสนุนคณิตศาสตร์จำนวนเต็ม/จุดคงที่ (บางวิธี)
- สามารถฝัง/รวมเข้ากับภาษาอื่น ๆ ผ่าน C API
การฝึกอบรมที่สะดวก
- ใช้ Python กับ Scikit-Learn หรือ Keras
- ตัวจําแนก C ที่สร้างขึ้นสามารถเข้าถึงได้ใน Python
MIT ได้รับใบอนุญาต
สนับสนุนห้องสมุด
- Emlearn-micropython เอ็นจิ้นการเรียนรู้ของเครื่องจักรที่มีประสิทธิภาพสำหรับ micropython โดยใช้ Emlearn
สามารถใช้เป็นทางเลือกโอเพ่นซอร์สในการจำแนกประเภท MATLAB ต้นไม้ตัดสินใจโดยใช้ MATLAB Coder สำหรับการสร้างรหัส 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.DecisionTregressor -
eml_net : keras.Sextion ด้วยเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ ( 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
} สำหรับรหัสที่ใช้งานได้ทั้งหมดดูการเริ่มต้นใช้งาน
สำหรับเอกสารฉบับเต็มดูตัวอย่างคู่มือผู้ใช้
การบริจาค
ตรวจสอบซอร์สโค้ดตรวจสอบให้แน่ใจว่าคุณติดตั้ง Unity Submodule รวมถึง 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 และ อัล จาก Mid Mid Sweden University ออกแบบระบบที่ระบุรอบการปฏิบัติหน้าที่ที่ไม่เหมาะสมของกระบวนการอุตสาหกรรมที่พัฒนาขึ้นสำหรับสายพานลำเลียงในการขุด ตัวจําแนกถูกใช้เพื่อตรวจจับสถานะของระบบและเพื่อสร้างลำดับของรัฐ สิ่งนี้สามารถแบ่งออกเป็นสถานะปกติหรือผิดปกติ อัณฑะตัวแยกประเภทหลายตัวบนไมโครคอนโทรลเลอร์ NRF52840 และ RP2040 และพบ MLP และป่าสุ่มเพื่อให้ดีที่สุด
- กระดาษที่กระชับ: ไปสู่การพิมพ์ลายนิ้วมือแบบออนบอร์ดแบบเรดิโอที่รวมอยู่ในระบบฝังตัวโดย Wenqing Yan จากมหาวิทยาลัย Uppsala ระบบการพิมพ์ลายนิ้วมือแบบเรดิโอเมทริกใช้ประโยชน์จากลักษณะสัญญาณเลเยอร์ทางกายภาพที่เป็นเอกลักษณ์ที่เกิดจากความไม่สมบูรณ์ของฮาร์ดแวร์แต่ละตัวเพื่อระบุอุปกรณ์ส่งสัญญาณ ผู้เขียนแสดงให้เห็นถึงระบบที่ทำงานบน NRF52833 พวกเขาทดสอบเพื่อตรวจจับอุปกรณ์ tranmitting หนึ่งใน 32 เครื่องและได้รับความแม่นยำเฉลี่ย 92% ใช้ตัวจําแนกป่าแบบสุ่มและพบว่าต้นไม้ 10 ต้นมาถึงใกล้เคียงกับการแสดงเดียวกันกับต้นไม้ 40 ต้น
- IoT รุ่นต่อไปสมาร์ทกริดมิเตอร์ (NGSM) สำหรับการตรวจจับเครื่องใช้ในครัวเรือนที่อยู่บนพื้นฐานของการเรียนรู้อย่างลึกซึ้งและ Linux ที่ฝังอยู่โดย Noor El-Deen M. Mohamed ET อัลที่มหาวิทยาลัย Helwan ในกรุงไคโรประเทศอียิปต์ พัฒนาเครื่องวัดสมาร์ทกริดสำหรับครัวเรือนที่สามารถตรวจจับได้ว่าเครื่องใช้ไฟฟ้าต่าง ๆ กำลังทำงานอยู่เมื่อใด สิ่งนี้ทำได้โดยใช้โมเดลการตรวจสอบการตรวจสอบโหลด (Non-Nonbrise Load Monitoring (NILM) ซึ่งใช้งานโดยใช้เครือข่ายประสาท ระบบทำงานบน Linux แบบฝังโดยใช้ Allwinner F1C200S System-on-Chip ใช้ Emlearn แทน TensorFlow Lite เพื่อให้มีวิธีการที่มีน้ำหนักเบามากขึ้น
- C-HAR: การรับรู้กิจกรรมของมนุษย์โดยการวัดแรงอัดโดย Billy Dawton และ อัล ทดสอบโดยใช้การรับรู้แรงอัดที่มีตัวอย่างเพียง 5 Hz จะรับรู้การกระทำเช่น "เดิน", "พิมพ์" และ "กิน" ใช้ Emlearn เพื่อปรับใช้โมเดลที่ใช้แบบสุ่มให้กับบอร์ด Teensy 4.1 พบว่าพวกเขาสามารถเข้าถึงความแม่นยำประมาณ 90% แต่ด้วยอัตราการสุ่มตัวอย่างที่ต่ำกว่า 4 เท่าและเวลาดำเนินการลดลง 2 เท่าเมื่อเทียบกับวิธีการตรวจจับที่มีอยู่ในปัจจุบัน
- การเรียนรู้ของเครื่องเล็ก ๆ สำหรับการวิเคราะห์เสถียรภาพการทรงตัวแบบเรียลไทม์โดย Veysi Adın et.al. ทดสอบอัลกอริธึมการวิเคราะห์แบบแกว่งสำหรับการปรับใช้กับ NRF52840 NRF52840 (ARM Cortex M4) เปรียบเทียบโมเดลระบบประสาทเทียม (ANN) กับป่าสุ่มและเกาส์เซียนไร้เดียงสาเบย์ พบว่าแอนมีประสิทธิภาพที่ดีที่สุดภายใต้อัตราส่วนสัญญาณต่อสัญญาณรบกวนที่ต่ำกว่า แต่ป่าสุ่มนั้นมีเวลาอนุมานต่ำที่สุดและประสิทธิภาพที่คล้ายกันในกรณี SNR สูง
- Micro Random Forest: การใช้งานในท้องถิ่นความเร็วสูงของวิธีการที่ตั้งตำแหน่งการเรียนรู้ด้วยเครื่องจักรสำหรับระบบพลังงานการกระจายโดย Miguel Jimenez Aparicio et.al ที่ Sandia National Laboratories พัฒนาวิธีการแปลความผิดที่ใช้ลายเซ็นของคลื่นการเดินทาง ทดสอบโมเดลสุ่มขนาดแตกต่างกัน 4 รุ่นประเมินประสิทธิภาพในเครือข่ายพลังงานจำลอง ใช้ Emlearn เพื่อพอร์ตโมเดลไปยังชิป TMS320F28379D ซึ่งเป็น C2000-Series DSP จาก Texas Instruments พบว่าเวลาดำเนินการทั้งหมดคือ 1.2 มิลลิวินาทีซึ่งมีเพียง 10 คนที่ใช้โดยตัวจําแนก
- การติดตามอัตราการหายใจจากระยะไกลในตำแหน่งที่อยู่กับที่โดยใช้การเคลื่อนไหวและเซ็นเซอร์อะคูสติกของหูหูโดย Tousif Ahmed Et.al ที่ Samsung Research พัฒนาระบบโดยใช้ไมโครโฟนและ accelerometer บนหูฟังเพื่อประเมินอัตราการหายใจของผู้สวมใส่ ทดสอบแบบจำลองต่าง ๆ เช่นการถดถอยโลจิสติก, Perceptron หลายชั้นและป่าสุ่ม ใช้ Emlearn เพื่อแปลงโมเดลเป็น C และทำงานบนหูฟัง Samsung Galaxy Buds 2 พบว่าการบริโภคแบตเตอรี่ต่ำพอที่จะทำงานได้อย่างต่อเนื่อง
- การตรวจจับการโจมตีอย่างชาญฉลาดสำหรับเครือข่าย IoT โดย Yang Yang ใช้ระบบตรวจจับการบุกรุกสำหรับเครือข่าย IoT ใช้ตัวจําแนกป่าแบบสุ่มที่ทำงานบน NRF52840 NRF52840 โดยใช้ Contiki-NG RTOS นอกเหนือจากการอนุมานในอุปกรณ์แล้วพวกเขายังใช้ตัวแยกประเภทในเครื่องจำลองเครือข่ายอุปกรณ์ COOJA IoT
- เซ็นเซอร์ไร้สายที่มีประสิทธิภาพพลังงานผ่านการข่าวกรองขอบโดย Abhishek P. Damle และคณะ ใช้ข้อมูล accelerometer บนโหนดเซ็นเซอร์ Wirelesess เพื่อจำแนกพฤติกรรมของปศุสัตว์แทะเล็มไปสู่การยืนแทะเล็มการเดินการโกหกและครุ่นคิด ใช้ Emlearn เพื่อรวบรวมแผนผังการตัดสินใจสำหรับการปรับใช้กับโมดูล Microchip WLR089U0 (ไมโครคอนโทรลเลอร์ ATSAMR34X พร้อมตัวรับส่งสัญญาณ LORA ในตัว) คุณสมบัติที่ดีที่สุดได้รับการคัดเลือกโดยใช้การกำจัดคุณสมบัติแบบเรียกซ้ำ (RFE) การตัดแต่งความซับซ้อนของต้นทุนถูกนำมาใช้เพื่อปรับความซับซ้อนของต้นไม้ตัดสินใจ พวกเขาแสดงให้เห็นว่าพลังงานที่จำเป็นในการส่งผ่านลดลง 50 ครั้งโดยทำการแยกคุณสมบัติและการจำแนกประเภท onged เมื่อเทียบกับการส่งข้อมูลเซ็นเซอร์ดิบ
- การเรียนรู้ของเครื่อง LPWAN และเครื่องฝังตัวในฐานะผู้เปิดใช้งานอุปกรณ์ที่สวมใส่ได้รุ่นต่อไปโดย Ramon Sanchez-Iborra ประเมินความเป็นไปได้ของการใช้แบบจำลอง tinyml บนโหนดเซ็นเซอร์ Lorawan ใช้ ATMEGA 328P กับ MPU6050 IMU, GY-NEO6MV2 GPS และ RN2483 LORAWAN TRANEIVER พบว่ารหัสสำหรับการสื่อสารกับ pheripherals นั้นใช้ SRAM/Flash มากกว่ารุ่น ML อย่างมาก สามารถพอดีกับป่าแบบสุ่มด้วยต้นไม้ 50 ต้น (Flash ผูก) หรือ Perceptron หลายชั้นที่มี 5 ชั้นและ 10 เซลล์ประสาทต่อชั้น (SRAM Bound)
- การเปรียบเทียบระหว่างการปรับตัวแบบพุชริมที่เปิดใช้งานโดยใช้ความตั้งใจและผู้ใช้โดยเจตนา ดำเนินการประมาณการความตั้งใจของผู้ใช้สำหรับเก้าอี้ล้อเลื่อนเพื่อให้ผู้ใช้ได้รับการควบคุมการใช้พลังงานส่วนบุคคล ใช้ Emlearn เพื่อเรียกใช้ตัวจําแนกแบบสุ่มบนไมโครคอนโทรลเลอร์วัยรุ่น พบว่ารุ่นไมโครคอนโทรลเลอร์แบบเรียลไทม์ดำเนินการคล้ายกับรุ่นออฟไลน์
- C-AVDI: การตรวจจับการตรวจจับเสียงอคูสติกและการระบุตัวตนของการวัดโดย Billy Dawton Et.al ดำเนินการตรวจจับและจำแนกประเภทของรถจักรยานยนต์ที่ผ่านและรถยนต์จากเสียง ใช้ระบบตรวจจับที่ถูกบีบอัดโดยใช้ส่วนหน้าแบบอะนาล็อกและ ADC ทำงานที่ตัวอย่างต่ำ ใช้ Emlearn RandomForest บนไมโครคอนโทรลเลอร์วัยรุ่นเพื่อทำการจำแนกประเภท
- เฟรมเวิร์กแบบ end-to-end สำหรับระบบตรวจจับการบุกรุกเครือข่ายที่ใช้การเรียนรู้ของเครื่องโดย Gustavo de Carvalho Bertoli et.al ใช้ระบบตรวจจับการสแกน TCP มันใช้แผนผังการตัดสินใจและใช้ Emlearn เพื่อสร้างรหัสสำหรับโมดูลเคอร์เนล Linux / NetFilter เพื่อทำการตรวจจับ มันได้รับการทดสอบบนคอมพิวเตอร์เดี่ยวบอร์ดเดี่ยว Rasperry Pi 4 และพบว่าค่าใช้จ่ายในการแสดงนั้นเป็นเรื่องไร้สาระ
- ไปสู่ปลอกแขนไฟฟ้า: อัลกอริทึมการเรียนรู้ของเครื่องจักรในตัวเปรียบเทียบโดย Danilo Demarchi, Paolo Motto Ros, Fabio Rossi และ Andrea Mongardi ตรวจพบท่าทางมือที่แตกต่างกันตามข้อมูล Electromyographic (SEMG) เปรียบเทียบประสิทธิภาพของอัลกอริทึมการเรียนรู้ของเครื่องที่แตกต่างกันจาก Emlearn และ Tensorflow Lite พบว่า Emlearn Randomforest และไร้เดียงสาเบย์เพื่อให้ความแม่นยำที่ดีพร้อมการใช้พลังงานที่ดีมาก
- ใครใส่ฉัน? TinyDL-การรับรู้ผู้ใช้ที่ใช้ในอุปกรณ์ส่วนบุคคลที่ถูก จำกัด โดย Ramon Sanchez-Iborra และ Antonio F. Skarmeta ใช้ Emlearn เพื่อใช้แบบจำลองสำหรับการตรวจจับว่าใครสวมใส่อุปกรณ์ที่สวมใส่ได้โดยการวิเคราะห์ข้อมูล accelerometer ใช้ Perceptron หลายชั้นทำงานบน AVR ATMEGA328P
- วัตถุอัจฉริยะที่ประหยัด Tinyml: ความท้าทายและโอกาสโดย Ramon Sanchez-Iborra และ Antonio F. Skarmeta สร้างรุ่นสำหรับการเลือกวิธีการส่งสัญญาณวิทยุโดยอัตโนมัติที่จะใช้ในอุปกรณ์ IoT ทำงานบนอุปกรณ์ 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 Package ตัวอย่าง ระบบบิลด์ของพวกเขาจะทำการทดสอบนี้โดยอัตโนมัติบนบอร์ดฮาร์ดแวร์ที่แตกต่างกันหลายสิบ