emlearn
マイクロコントローラーおよび組み込みシステムの機械学習。 Pythonでトレーニングし、C99コンパイラを備えた任意のデバイスに推論を行います。

状態
最小限に役立ちます。数十の開発者が数十のプロジェクトで使用しています。
重要な機能
組み込みに優しい推論
- ポータブルC99コード
- LIBCは不要です
- 動的な割り当てはありません
- 単一のヘッダーファイルには含まれます
- 整数/固定点数学をサポートする(いくつかの方法)
- C APIを介して他の言語と組み込み/統合できます
便利なトレーニング
- Scikit-LearnまたはKerasでPythonを使用します
- 生成されたC分類器にもPythonでアクセスできます
MITライセンス
サポートライブラリ
- emlearn-micropython。 Emlearnを使用したMicropythonの効率的な機械学習エンジン。
C/C ++コード生成のためにMATLABコーダーを使用して、MATLAB分類ツリー、決定ツリーのオープンソースとして使用できます。 fitctree 、 fitcensemble 、 TreeBagger 、 ClassificationEnsemble 、 CompactTreeBagger
モデルサポート
分類:
-
eml_trees :Sklearn.RandomForestClassifier、Sklearn.ExtratreesClassifier、Sklearn.DecisionTreeClassifier -
eml_net :sklearn.multilayerperceptron、keras -
eml_bayes :sklearn.gaussiannaivebayes
回帰:
-
eml_trees :Sklearn.RandomForestRegressor、Sklearn.ExtreesRegressor、Sklearn.DecisionTreereGressor -
eml_net :keras. sequential futly-onnectedレイヤー( 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つのステップで構成されています。
- 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を使用している場合は、お知らせください!たとえば、このREADMEに含めるためのプルリクエストを送信するか、GitHubで問題を作成できます。
- LucianoSebastiánMartinezRau et。アル。ミッドスウェーデン大学から。採掘中のコンベアベルト用に開発された産業プロセスの不適切な義務サイクルを識別するシステムを設計しました。分類器を使用して、システム状態を検出し、一連の状態を形成しました。これは、正常状態または異常な状態に分類できます。 NRF52840およびRP2040マイクロコントローラーのいくつかの分類器をテストし、MLPとランダムフォレストを見つけて最高のパフォーマンスを発揮しました。
- 簡潔な紙:ウプサラ大学のWenqing Yanによる組み込みシステムに完全に統合されたオンボード放射測定フィンガープリントに向けて。放射測定指紋システムは、個々のハードウェアの欠陥に由来する一意の物理層信号特性を活用して、送信機デバイスを識別します。著者は、NRF52833で実行されているシステムを実証しました。彼らは、32のトランスミットデバイスのうち1つを検出するためにテストし、92%の平均精度を達成しました。ランダムフォレスト分類器を使用して、10本の木が40本の木と同じパフォーマンスに非常に近いことがわかりました。
- IoT次世代のスマートグリッドメーター(NGSM)、ヌールエルディーンM.モハメドらによる深い学習と埋め込みLinuxに基づくオンエッジの家電製品の検出エジプト、カイロのヘルワン大学のアル。異なるアプライアンスが実行されているときに検出できる世帯向けのスマートグリッドメーターを開発しました。これは、ニューラルネットワークを使用して実装されたエネルギー分解 /非侵入負荷監視(NILM)モデルを使用して行われます。システムは、Allwinner F1C200Sシステムオンチップを使用して、組み込みLinuxで実行されます。 Tensorflow Liteの代わりにEmlearnを使用して、より軽量のアプローチを備えています。
- C-HAR:Billy Dawton et。アル。 5 Hzのサンプレートのみで圧縮センシングを使用してテストされ、「ウォーキング」、「タイピング」、「食事」などのアクションが認識されます。 Emlearnを使用して、ランダムフォレストベースのモデルをTeensy 4.1ボードに展開しました。彼らは約90%の精度に達する可能性があることがわかりましたが、サンプリングレートの4倍、既存の圧縮センシングアプローチと比較して2倍低い実行時間があります。
- VeysiAdınet.alによるリアルタイムの姿勢安定性分析のための小さな機械学習北欧NRF52840(ARM皮質M4)に展開するためのSway分析アルゴリズムをテストしました。人工ニューラルネットワーク(ANN)モデルをランダムフォレストとガウスナイーブベイズと比較しました。アンは、信号対雑音の比率が低い下で最高のパフォーマンスを持っていることがわかりましたが、ランダムフォレストは、高いSNRケースで最も低い推論時間と同様のパフォーマンスを持っていたことがわかりました。
- マイクロランダムフォレスト:Sandia National LaboratoriesのMiguel Jimenez Aparicio et.alによる配電電力システムの機械学習障害場所のローカル、高速実装。移動波の署名を使用する障害ローカリゼーション方法を開発しました。 4つの異なるサイズのランダムフォレストモデルをテストし、シミュレートされたパワーネットワークでパフォーマンスを評価しました。 Emlearnを使用して、モデルをテキサスインスツルメンツのC2000シリーズDSPであるTMS320F28379Dチップに移植しました。合計実行時間は1.2ミリ秒であり、そのうち10米国のみが分類器で使用されていることがわかりました。
- サムスン研究のTousif Ahmed et.alによるEarableの動きおよび音響センサーを使用した固定位置でのリモート呼吸率追跡。イヤフォンのマイクと加速度計を使用してシステムを開発し、呼吸速度を推定しました。ロジスティック回帰、多層パーセプトロン、ランダムフォレストなどのさまざまなモデルをテストしました。 Emlearnを使用してモデルをCに変換し、Samsung Galaxy Buds 2 Earbudsで実行しました。バッテリーの消費量は十分に低いため、継続的に実行できることがわかりました。
- Yang YangによるIoTネットワークのスマート攻撃検出。 IoTネットワーク用の侵入検知システムを実装しました。 Contiki-ng RTOを使用して、Nordic NRF52840で実行されるランダムフォレスト分類器を使用しました。デバイス上の推論に加えて、COOJA IoTデバイスネットワークシミュレーターで分類器も実行しました。
- Abhishek P. Damle et al。ワイレレスセンサーノードで加速度計データを使用して、放牧牛の行動を分類し、立っている、放牧、歩き、嘘をつき、反minatingに分類しました。 Emlearnを使用して、Microchip WLR089U0モジュール(統合されたLORAトランシーバーを使用したATSAMR34Xマイクロコントローラー)に展開するための決定ツリーをコンパイルしました。最良の機能は、再帰機能除去(RFE)を使用して選択され、コストの複雑さの剪定を使用して、決定ツリーの複雑さを調整しました。彼らは、送信に必要なエネルギーが、生のセンサーデータの送信と比較して、フィーチャの抽出と分類をオンエッジを行うことで50回減少することを示しています。
- ラモンサンチェスイボラによる次世代のウェアラブルデバイスのイネーブラーとしてのLPWANと組み込み機械学習。 LorawanセンサーノードでTINYMLモデルを実行する実現可能性を評価しました。 MPU6050 IMU、Gy-Neo6Mv2 GPS、RN2483 LORAWAN Tranceiverを搭載したATMEGA 328Pを使用しました。フェリフェラルと通信するためのコードは、MLモデルよりもかなり多くのSRAM/フラッシュが必要であることがわかりました。 50本の木(フラッシュバインド)、または5層と10層あたり10個のニューロン(SRAMバウンド)を備えた多層パーセプトロンを備えたランダムフォレストを適合させることができました。
- M. Khalili、G。Kryt、HFM van der Loos、およびJF Borisoffによる、従来とユーザーの意図ベースの適応プッシュリム活性化パワーアシスト車椅子の比較。ユーザーにパーソナライズされたパワーアシストコントロールを提供するために、車椅子のユーザー意図の推定を実装しました。 Emlearnを使用して、Teensy MicrocontrollerでRandomForest分類器を実行しました。リアルタイムマイクロコントローラーモデルは、オフラインモデルと同様に実行されることがわかりました。
- C-AVDI:Billy Dawton et.al.による圧縮測定ベースの音響媒体検出と識別音から通過するオートバイと車の検出と分類を実装しました。低いサンプレートで実行されるアナログフロントエンドとADCを使用した圧縮センシングシステムを使用しました。 Teensy MicrocontrollerでEmlearn RandomForestを使用して分類を実行しました。
- Gustavo de Carvalho Bertoli et.al.による機械学習ベースのネットワーク侵入検知システムのエンドツーエンドフレームワークTCPスキャン検出システムを実装しました。決定ツリーを使用し、emlearnを使用してLinuxカーネルモジュール / NetFilterのコードを生成して検出を行いました。 Rasperry Pi 4シングルボードコンピューターでテストされ、パフォーマンスオーバーヘッドは怠慢であることがわかりました。
- 筋電図の腕バンドに向けて:ダニロ・デマルキ、パオロ・モットー・ロス、ファビオ・ロッシ、アンドレア・モンガルディによる埋め込み機械学習アルゴリズムの比較。筋電図(SEMG)データに基づいて、異なるハンドジェスチャーが検出されました。 EmlearnとTensorflow Liteのさまざまな機械学習アルゴリズムのパフォーマンスを比較しました。 emlearn randomforestと素朴なベイズを見つけて、非常に優れた消費電力で精度を上げました。
- 誰が私を着ていますか? Ramon Sanchez-IborraとAntonio F. Skarmetaによる制約付きの個人デバイスにおけるTinyDLベースのユーザー認識。 Emlearnを使用して、加速度計データを分析することにより、特定のウェアラブルデバイスを着用している人を検出するためのモデルを実装しました。 AVR Atmega328pで実行された多層パーセプトロンが使用されました。
- Tinyml対応の質素なスマートオブジェクト:Ramon Sanchez-IborraとAntonio F. Skarmetaによる課題と機会。 IoTデバイスで使用する無線送信方法を自動的に選択するためのモデルを作成しました。 Arduino UNO(AVR8)デバイスでの実行。 Emlearnのマルチレイヤーパーセプトロン、決定ツリー、ランダムフォレストをテストしました。パフォーマンスをSklearn-Porterと比較し、そのランダムフォレストがEmlearnでより速く、Sklearn-Porterでより速く決定ツリーがより速くなることがわかりました。 emlearn MLPをMicroMlgenのSVMと比較し、Emlearn MLPがより正確で推論時間が短くなることを発見しました。
- Ngoc C.Lêetal。マルウェアを検出するためのC ++モデルを作成しました。ハンドエンジニアリング機能のセットと、emlearnのランダムフォレストを分類器として使用しました。 Androidデバイスで実行されます。
- Riot OSには、Emlearnのパッケージがあります。 Riot OS emlearnパッケージの例。彼らのビルドシステムは、このテストが数十の異なるハードウェアボードで自動的に実行されます。