Emlearn
Машинное обучение для микроконтроллеров и встроенных систем. Обудите в Python, затем сделайте вывод на любом устройстве с компилятором C99.

Статус
Минимально полезно . Используется в десятках проектов десятками разработчиков.
Ключевые функции
Встроенный вывод
- Портативный код C99
- LIBC не требуется
- Никаких динамических распределений
- Одиночный файл заголовка включает
- Поддержка целочисленной/фиксированной математики (некоторые методы)
- Может быть встроен/интегрирован с другими языками через C API
Удобное обучение
- Использование Python с Scikit-learn или керами
- Сгенерированный классификатор C также доступен в Python
MIT лицензирован
Поддержка библиотек
- Emlearn-Micropython. Эффективный двигатель машинного обучения для микропитона, используя Emlearn.
Можно использовать в качестве альтернативы открытым исходным кодам деревьям классификации MATLAB, деревьям решений с использованием MATLAB Coder для генерации кода C/C ++. fitctree , fitcensemble , TreeBagger , ClassificationEnsemble , CompactTreeBagger
Модель поддержки
Классификация:
-
eml_trees : sklearn.randomforestclassifier, sklearn.extrateresclassifier, sklearn.decisiontreeclassifier -
eml_net : sklearn.multilayerperptron, keras. secredential с полностью подключенными слоями -
eml_bayes : sklearn.gaussiannaivebayes
Регрессия:
-
eml_trees : sklearn.randomforestregresress, sklearn.extratreesregressor, sklearn.decisiontreeregressor -
eml_net : keras.sectreential с полностью подключенными слоями ( 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 ): Нейронная чистая регрессор
eml_common.h .h файл eml_net.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
Перед совершением какого pip install ./ -v кода запустите тесты ./test.sh
Участники
Цитаты
Если вы используете 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 для промышленных машин с периодическими дежурными циклами Лучано Себастьяна Мартинеса Рау и т. Д. ал. из Среднего Швеционного университета. Разработал систему, которая определяет ненадлежащие служебные циклы промышленных процессов, разработанных для конвейерной ленты в горнодобывающей промышленности. Классификатор использовался для обнаружения состояний системы и для формирования последовательности состояний. Затем это может быть классифицировано на нормальные или ненормальные состояния. Яичны несколько классификаторов на микроконтроллерах NRF52840 и RP2040 и обнаружили MLP и случайный лес для лучшего.
- Краткая бумага: На пути к бортовой радиометрической отпечатке пальцев, полностью интегрированной по встроенной системе Wenqing Yan из Университета Упсала. Радиометрические системы отпечатков пальцев используют уникальные характеристики сигнала физического слоя, происходящие из отдельных недостатков оборудования для идентификации устройств передатчика. Авторы продемонстрировали систему, работающую на NRF52833. Они протестировали, чтобы обнаружить один из 32 устройств для трансмиттов, и достигли средней точности 92%. Использовал случайный лесной классификатор и обнаружил, что 10 деревьев достигли очень близких к тому же исполнению, что и 40 деревьев.
- IoT Следующее поколение Smart Grid Meter (NGSM) для обнаружения бытовых приборов на рамках домохозяйств на основе глубокого обучения и встроенного Linux от Noor El-Deen M. Mohamed et. Аль в Университете Хельвана в Каире, Египет. Разработал интеллектуальный счетчик сетки для домохозяйств, которые могут обнаружить, когда работают различные приборы. Это делается с использованием модели мониторинга энергии дезагрегации / неинтрузивного нагрузки (NILM), которая реализована с использованием нейронной сети. Система работает на встроенном Linux, используя систему AllWinner F1C200S на чипе. Использовал emlearn вместо Tensorflow Lite, чтобы иметь более легкий подход.
- C-HAR: Распознавание человеческой деятельности на основе сжатия на основе измерения на основе сжатия. ал. Протестировано с использованием чувствительности сжатия только с образцами 5 Гц, распознает такие действия, как «ходьба», «печатать» и «еда». Использовал Emlearn для развертывания моделей, основанных на случайном, на плату Teensy 4.1. Обнаружили, что они могут достичь около 90% точности, но с более низкой скоростью отбора проб в 4 раза и в 2 раза меньше времени выполнения по сравнению с существующими подходами сжатого зондирования.
- Крошечное машинное обучение для анализа постуральной стабильности в режиме реального времени Veysi Adın et.al. Протестировал алгоритм анализа влияния на развертывание на Nordic NRF52840 (ARM Cortex M4). Сравнение модели искусственной нейронной сети (ANN) со случайными лесами и гауссовыми наивными байесами. Обнаружил, что у Эн была лучшая производительность в отношении более низких соотношений сигнал / шум, но в этом случайном лесу было самое низкое время вывода и аналогичные показатели в случаях высокого SNR.
- Микро случайный лес: локальная высокоскоростная реализация метода местоположения автоматического обучения для систем распределительных энергопотреблений Мигелем Хименеса Апарисио и. Разработал метод локализации неисправностей, который использует подпись верующей волны. Протестировано 4 модели Randomforest различных размеров, оцененные производительность в моделируемой сети мощности. Использовал Emlearn для переноса моделей в TMS320F28379D Chip, DSP-DSP серии C2000 от Texas Instruments. Обнаружил, что общее время исполнения составило 1,2 мс, из которых только 10 США использовали классификатором.
- Отслеживание частоты дыхания в стационарном положении с использованием движения и акустических датчиков ушельников Tousif Ahmed et.al в Samsung Research. Разработал систему с использованием микрофона и акселерометра на наушниках, чтобы оценить частоту дыхания владельца. Протестировали различные модели, такие как логистическая регрессия, многослойный персептрон и случайный лес. Использовал Emlearn, чтобы преобразовать модель в C и запустить на наушниках Samsung Galaxy Buds 2. Обнаружил, что расход батареи был достаточно низким, чтобы он мог работать постоянно.
- Умное обнаружение атаки для IoT -сети Ян Ян. Реализована система обнаружения вторжений для сетей IoT. Используется классификатор Random Forest, работающий на Nordic NRF52840 с использованием Contiki-NG RTOS. В дополнение к выводу на устройстве, они также запустили классификаторы в сети COOJA IOT.
- Эффективный узел беспроводного датчика через краевой интеллект от Abhishek P. Damle et al. Использовал данные акселерометра на узле датчика Wireleesess для классификации поведения выпаса скота, стоящего, выпаса, ходьбы, лжи и размышлений. Использовал Emlearn для составления дерева решений для развертывания в модуль Microchip WLR089U0 (микроконтроллер ATSAMR34X со встроенным трансивером LORA). Лучшие функции были выбраны с использованием рекурсивного устранения функций (RFE), обрезка сложности затрат была использована для настройки сложности деревьев решений. Они показывают, что энергия, необходимая для передачи, снижается на 50 раз, выполняя извлечение и классификацию на краю по сравнению с отправкой данных с необработанным датчиком.
- LPWAN и встроенное машинное обучение в качестве мощности для следующего поколения носимых устройств Рамона Санчеса-Иборры. Оценка осуществимости запуска моделей TinyML на узле датчика Лоравана. Использовал Atmega 328p, с MPU6050 IMU, GY-NEO6MV2 GPS и RN2483 Lorawan Traceiver. Обнаружил, что код для общения с ферифериями занял значительно больше SRAM/Flash, чем модель ML. Был в состоянии установить случайный лес с 50 деревьями (связанными с вспышкой) или многослойным персептроном с 5 слоями и 10 нейронами на слой (SRAM Bound).
- Сравнение между традиционными и пользовательными адаптивными адаптивными инвалидными колясками, активируемыми мощностью, М. Халили, Г. Крита, HFM Van Der Loos и JF Borisoff. Реализована оценка намерения пользователя для инвалидных колясок, чтобы дать пользователю персонализированную контролируемое соблюдение мощности. Использовал Emlearn для запуска Randomforest Classififier на подростковом микроконтроллере. Обнаружил, что модель микроконтроллера в реальном времени выполнялась аналогично автономным моделям.
- C-AVDI: обнаружение и идентификация акустических транспортных средств на основе сжатия на основе измерения на основе сжатия. Реализовано обнаружение и классификация прохождения мотоциклов и автомобилей из звука. Используется система сжатого зондирования с использованием аналогового фронта и АЦП, работающего при низком образце. Использовал emlearn randomforest на подростковом микроконтроллере для выполнения классификации.
- Средняя структура для системы обнаружения вторжений сети, основанной на машинном обучении, от Gustavo de Carvalho Bertoli et.al. Реализована система обнаружения сканирования TCP. Он использовал дерево решений и использовала Emlearn для генерации кода для модуля / NetFilter Linux для выполнения обнаружения. Он был протестирован на однобочечном компьютере Rasperry Pi 4, и было обнаружено, что накладные расходы на производительность неглимерна.
- На пути к электромиографическому повязке: сравнение алгоритмов встроенного машинного обучения от Danilo Demarchi, Paolo Motto Ros, Fabio Rossi и Andrea Mongardi. Обнаружены различные жесты рук на основе электромиографических (SEMG) данных. Сравнивал производительность различных алгоритмов машинного обучения, от Emlearn и Tensorflow Lite. Нашел emlearn randomforest и наивный байеса, чтобы придать хорошую точность с очень хорошим энергопотреблением.
- Кто меня носит? Признание пользователей на основе TinyDL в ограниченных личных устройствах Рамона Санчеса-Иборра и Антонио Ф. Скарметы. Использовал Emlearn для реализации модели для обнаружения того, кто носит конкретное носимое устройство, анализируя данные акселерометра. Был использован многослойный персептрон, работающий на AVR ATMEGA328P.
- Скромные интеллектуальные объекты с поддержкой Tinyml: проблемы и возможности Рамона Санчеса-Иборры и Антонио Ф. Скарметы. Создал модель для автоматического выбора, какой метод радиопередачи использовать в устройстве IoT. Запуск на устройстве Arduino Uno (AVR8). Протестировал многослойный персептрон, дерево решений и случайный лес от Emlearn. Сравнивали производительность с Sklearn-Porter и обнаружили, что случайный лес в Emlearn будет быстрее, а дерево решений быстрее в Sklearn-Porter. Сравнивал Emlearn MLP с SVM MicroMLGEN и обнаружил, что Emlearn MLP является более точным и более низким временем вывода.
- Подход машинного обучения для обнаружения вредоносных программ в режиме реального времени Ngoc C. Lê et al. Создал модель C ++ для обнаружения вредоносных программ. Использовал набор ручных функций и случайный лес от Emlearn в качестве классификатора. Запуск на устройствах Android.
- Riot OS имеет пакет для Emlearn. Пример пакета Riot OS Emlearn. Их система сборки автоматически запускает этот тест на десятках различных аппаратных плат.