출생
마이크로 컨트롤러 및 임베디드 시스템을위한 머신 러닝. 파이썬으로 훈련 한 다음 C99 컴파일러가있는 모든 장치에서 추론하십시오.

상태
최소한으로 유용합니다 . 수십 개의 개발자가 수십 개의 프로젝트에 사용됩니다.
주요 기능
내장 친화적 인 추론
- 휴대용 C99 코드
- LIBC가 필요하지 않습니다
- 동적 할당이 없습니다
- 단일 헤더 파일은 포함됩니다
- 정수/고정점 수학 지원 (일부 방법)
- C API를 통해 다른 언어와 내장/통합 할 수 있습니다
편리한 훈련
- Scikit-Learn 또는 Keras와 함께 Python 사용
- 생성 된 C 분류기는 파이썬에서도 액세스 할 수 있습니다
MIT 라이센스
지원 라이브러리
- Emlearn-Micropython. Emlearn을 사용하여 Micropython을위한 효율적인 기계 학습 엔진.
C/C ++ 코드 생성을 위해 Matlab 코더를 사용하는 의사 결정 트리, Matlab 분류 트리의 오픈 소스 대안으로 사용할 수 있습니다. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
모델 지원
분류:
-
eml_trees : Sklearn.randomforestClassifier, Sklearn.extratreesclassifier, sklearn.decisiontreeclassifier -
eml_net : SKUREN.MULTILAYERPERPERCTRON, KERAS. Sequentialte는 완전히 연결된 층이 있습니다 -
eml_bayes : sklearn.gaussiannaiveBayes
회귀 :
-
eml_trees : SKUREN.RANDOMFORESTREGRESSOR, SKUREN.EXTRATREESREGRESSOR, SKUREN.DECISIONTREEREGRESSOR -
eml_net : 완전히 연결된 레이어가있는 keras emlearn.convert(model, method='loadable', return_type='regressor')
감독되지 않은 / 특이 치 검출 / 이상 탐지
-
eml_distance : Sklearn.ELLIPTICENVELOPE (Mahalanobis 거리) -
eml_mixture : SKUREN.GAUSSIANMIXTURE, SKUREN.BAYESINGAUSSINMIXTURE
기능 추출 :
-
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을 사용하는 경우, 우리에게 알려주십시오! 예를 들어이 readme에 포함 요청을 제출하거나 Github에서 문제를 만들 수 있습니다.
- Luciano Sebastián Martinez Rau et. 알. 스웨덴 중부 대학교에서. 광업의 컨베이어 벨트 용으로 개발 된 산업 공정의 부적절한 듀티 사이클을 식별하는 시스템을 설계했습니다. 분류기는 시스템 상태를 탐지하고 일련의 상태를 형성하는 데 사용되었습니다. 그런 다음 이것은 정상 또는 비정상 상태로 분류 될 수 있습니다. NRF52840 및 RP2040 마이크로 컨트롤러의 여러 분류기를 고용하고 MLP와 랜덤 포레스트가 가장 잘 수행되는 것을 발견했습니다.
- 간결한 종이 : 웁살라 대학교의 Wenqing Yan의 임베디드 시스템에 완전히 통합 된 온보드 방사선 지문을 향해. 방사선 지문 지문 시스템은 송신기 장치를 식별하기 위해 개별 하드웨어 결함에서 비롯된 고유 한 물리적 층 신호 특성을 활용합니다. 저자는 NRF52833에서 실행되는 시스템을 시연했습니다. 그들은 32 번의 트랜지트 장치 중 하나를 감지하는 것을 테스트했으며 92% 평균 정확도를 달성했습니다. 임의의 숲 분류기를 사용했으며 10 그루의 나무가 40 그루의 나무와 같은 성능에 매우 가깝다는 것을 발견했습니다.
- Noor El-Deen M. Mohamed et. 이집트 카이로에있는 헬 완 대학교 AL. 다른 기기가 실행될 때 감지 할 수있는 가구를위한 스마트 그리드 미터를 개발했습니다. 이것은 신경망을 사용하여 구현 된 에너지 분해 / 비 침입 부하 모니터링 (NILM) 모델을 사용하여 수행됩니다. 이 시스템은 Allwinner F1C200S 시스템 온 칩을 사용하여 임베디드 리눅스에서 실행됩니다. 더 가벼운 접근 방식을 갖기 위해 Tensorflow Lite 대신에 emlearn을 사용했습니다.
- C-HAR : Billy Dawton et.의 압축 측정 기반 인간 활동 인식. 알. 단지 5Hz 샘플 레이트로 압축 감지를 사용하여 테스트하면 "걷기", "타이핑"및 "식사"와 같은 행동을 인식합니다. 랜덤 퓨레스트 기반 모델을 TEENENSY 4.1 보드에 배치하기 위해 Emlearn을 사용했습니다. 이들은 약 90% 정확도에 도달 할 수 있지만 기존 압축 감지 접근법에 비해 샘플링 속도가 4 배, 실행 시간이 2 배 더 낮습니다.
- Veysi Adın et.al의 실시간 자세 안정성 분석을위한 작은 기계 학습 북유럽 NRF52840 (ARM Cortex M4)에 배치하기위한 Sway 분석 알고리즘을 테스트했습니다. 인공 신경망 (ANN) 모델을 임의의 숲과 가우스 순진한 베이에 비교했습니다. ANN은 신호 대 잡음비가 낮은 비율로 최상의 성능을 보였지만 임의의 산림은 높은 SNR 사례에서 가장 낮은 추론 시간과 유사한 성능을 가졌다는 것을 발견했습니다.
- Micro Random Forest : Sandia National Laboratories의 Miguel Jimenez Aparicio et.al의 유통 전원 시스템을위한 기계 학습 오류 위치 방법의 로컬, 고속 구현. 여행파의 시그니처를 사용하는 고장 현지화 방법을 개발했습니다. 4 가지 크기의 랜덤 포레스트 모델을 테스트하고 시뮬레이션 된 전력 네트워크에서 성능을 평가했습니다. 텍사스 악기의 C2000 시리즈 DSP 인 TMS320F28379D 칩에 모델을 포팅하기 위해 제외를 사용했습니다. 총 실행 시간은 1.2ms이며 그 중 10 US만이 분류기에 의해 사용 된 것으로 나타났습니다.
- Samsung Research에서 Tousif Ahmed et.al의 동작 및 Earables의 움직임 및 음향 센서를 사용하여 고정 위치에서의 원격 호흡 속도 추적. 이어 버드에서 마이크와 가속도계를 사용하여 시스템을 개발하여 착용자의 호흡 속도를 추정했습니다. 로지스틱 회귀, 다층 퍼셉트론 및 임의의 포레스트와 같은 다양한 모델을 테스트했습니다. 제외를 사용하여 모델을 C로 변환하고 삼성 갤럭시 버드 2 이어 버드에서 실행했습니다. 배터리 소비가 지속적으로 실행될 수있을 정도로 낮다는 것을 발견했습니다.
- Yang Yang의 IoT 네트워크에 대한 스마트 공격 감지. IoT 네트워크 용 침입 탐지 시스템을 구현했습니다. Contiki-NG RTO를 사용하여 북유럽 NRF52840에서 실행중인 랜덤 포리스트 분류기. 사후 추론 외에도 COOJA IoT 장치 네트워크 시뮬레이터에서 분류기를 실행했습니다.
- Abhishek P. Damle et al. Wirelesess 센서 노드의 가속도계 데이터를 사용하여 소의 방목의 동작을 서서, 방목, 걷기, 거짓말 및 반추로 분류했습니다. 마이크로 칩 WLR089U0 모듈에 배치하기위한 의사 결정 트리를 컴파일하기 위해 사용하여 (LORA 트랜시버가 통합 된 ATSAMR34X 마이크로 컨트롤러). 최상의 기능은 재귀 기능 제거 (RFE)를 사용하여 선택되었으며, 비용 복잡성 치기는 의사 결정 트리의 복잡성을 조정하는 데 사용되었습니다. 그들은 전송에 필요한 에너지가 원시 센서 데이터를 전송하는 것과 비교하여 기능 추출 및 분류를 통해 50 번 감소했음을 보여줍니다.
- LPWAN 및 임베디드 머신 러닝은 Ramon Sanchez-Iborra의 차세대 웨어러블 장치를위한 인 에이 블러입니다. Lorawan 센서 노드에서 TinyML 모델을 실행하는 타당성을 평가했습니다. MPU6050 IMU, GY-NEO6MV2 GPS 및 RN2483 Lorawan Tranceiver와 함께 Atmega 328p를 사용했습니다. Pheripherals와의 통신을위한 코드는 ML 모델보다 훨씬 더 많은 SRAM/Flash가 필요하다는 것을 발견했습니다. 50 그루의 나무 (플래시 바운드) 또는 5 개의 층과 10 개의 뉴런-층 (SRAM 바운드)을 가진 다층 퍼셉트론을 갖춘 임의의 숲에 맞출 수있었습니다.
- M. Khalili, G. Kryt, HFM van der Loos 및 JF Borisoff의 기존 및 사용자 의도 기반 적응 형 푸시 활성화 전력 보조 휠체어의 비교. 사용자에게 개인화 된 전력 보조제 제어를 제공하기 위해 휠체어에 대한 사용자 의도 추정을 구현했습니다. Temensy Microcontroller에서 Randomforest 분류기를 실행하기 위해 Emlearn을 사용했습니다. 실시간 마이크로 컨트롤러 모델은 오프라인 모델과 유사하게 수행된다는 것을 발견했습니다.
- C-AVDI : Billy Dawton et.al의 압축 측정 기반 음향 차량 탐지 및 식별. 사운드에서 오토바이와 자동차를 통과하는 감지 및 분류. 아날로그 프론트 엔드 및 낮은 샘플 리테이션에서 실행되는 ADC를 사용하여 압축 감지 시스템을 사용합니다. Temensy Microcontroller에서 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 Randomforest와 Naive Bayes를 발견했습니다.
- 누가 나를 입고 있습니까? Ramon Sanchez-Iborra와 Antonio F. Skarmeta의 제한된 개인 장치에서 Tinydl 기반 사용자 인식. 가속도계 데이터를 분석하여 특정 웨어러블 장치를 착용하고있는 사람을 감지하기위한 모델을 구현하기 위해 에비린을 사용했습니다. AVR ATMEGA328P에서 실행되는 다층 퍼셉트론이 사용되었습니다.
- Tinyml 지원 검소한 스마트 객체 : Ramon Sanchez-Iborra와 Antonio F. Skarmeta의 도전과 기회. IoT 장치에서 사용할 무선 전송 방법을 자동으로 선택하기위한 모델을 만들었습니다. Arduino Uno (AVR8) 장치에서 실행. 다비 트론, 결정 트리 및 랜덤 숲에서 테스트 된 다층 퍼셉트론 테스트. Sklearn-Porter와 성능을 비교했으며, 임의의 숲에서는 랜덤 숲이 더 빨라지는 반면, 의사 결정 트리는 Sklearn-porter에서 더 빠릅니다. Emlearn MLP를 Micromlgen의 SVM과 비교했으며 Emlearn MLP가 더 정확하고 낮은 추론 시간임을 발견했습니다.
- NGOC C. Lê et al. 맬웨어 감지를위한 C ++ 모델을 만들었습니다. 핸드 엔지니어링 기능 세트와 분류기로서의 랜덤 숲을 사용했습니다. 안드로이드 장치에서 실행 중입니다.
- Riot OS에는 Emlearn 패키지가 있습니다. Riot OS Emlearn 패키지 예제. 빌드 시스템은 수십 개의 다른 하드웨어 보드 에서이 테스트를 자동으로 실행합니다.