Tiny Federated ML for Fog Computing
Project description
FogML
Due to the development of IoT solutions, we can observe the constantly growing number of these devices in almost every aspect of our lives. The machine learning may improve increase their intelligence and smartness. Unfortunately, the highly regarded programming libraries consume to much resources to be ported to the embedded processors.
The FogML is a set of tools enabling TinyML on microcontrollers as low resource-limited as ARM M0 cores. In contrast to many other frameworks, the FogML utilises classic machine learning methods such as density-based anomaly detection and classifiers based on Bayesian networks, decision forests and vanilla MLP. In addition, it supports off-device learning for the classification problem and on-device learning for anomaly detection. The active learning anomaly detection is based on reservoir sampling and outlier detection algorithms which are trained directly on the device. The dedicated library performs the time series processing on the devices, computing the feature vector consisting of RMS, FFT, amplitude and other low-level signal metrics. One of the techniques used in FogML is source code generation of the inferencing functions for embedded devices. It leads to a much smaller memory footprint than for more computationally advanced solutions such as deep neural networks.
The structure of the project is as follows:
- the
srcfolder contains the source code generators for machine learning models i.e.: naive bayes, decision trees/forrest and neural nets; - the
examplefolder contains the simple examples and the MNIST digit recognition for Arduino board and the simple TFT touchscreen.
Examples of anomaly detection and classification algorithms provided by the FogML project for embedded devices:
FogML-SDK[https://github.com/tszydlo/fogml_sdk]FogML Arduino[https://github.com/tszydlo/FogML-Arduino]FogML Zephyr OS[https://github.com/tszydlo/FogML-Zephyr]FogML ISPU[https://github.com/tszydlo/FogML-ISPU]
Example of connectivity and device management provided by LwM2M protocol:
FogML-Zephyr-LwM2M[https://github.com/tszydlo/FogML-Zephyr-LwM2M]
TinyML lifecycle Management with FOTA using LwM2M protocol:
FogML-Zephyr-FOTA[https://github.com/tszydlo/FogML-Zephyr-FOTA]
Usage
pip install fogml
Example
from sklearn import datasets, tree
from fogml.generators import GeneratorFactory
iris = datasets.load_iris()
X = iris.data
y = iris.target
clf = tree.DecisionTreeClassifier(random_state=3456)
clf.fit(X, y)
print( 'accuracy: ',clf.score(X,y))
factory = GeneratorFactory()
generator = factory.get_generator(clf)
generator.generate()
Reinforcement Learning
import gym
from fogml.generators import GeneratorFactory
from fogml.rl.qlearning import QLearning, QStatesIntervals
env = gym.make('MountainCar-v0')
#create QStates discretizer table using QStatesIntervals()
stateSpace = [
[-1.2, 0.6, 20],
[-0.07, 0.07, 20]
]
qStates = QStatesIntervals(stateSpace)
#create QLearning agent
qAgent = QLearning(qStates.getStates(), env.action_space.n)
for episode in range(EPISODES):
#TODO Train the model
#see examples
factory = GeneratorFactory()
generatorQAgent = factory.get_generator(qAgent)
generatorQStates = factory.get_generator(qStates)
generatorQAgent.generate(fname='FogML_RL_Arduino\qlearning_model_test.c')
generatorQStates.generate(fname = 'FogML_RL_Arduino\qstates_discretizer_test.c')
See it in action: https://www.youtube.com/watch?v=yEr5tjBrY70
FogML research
If you think that the project is interesting to you, please cite the papers:
Tomasz Szydlo, Marcin Nagy, Device management and network connectivity as missing elements in TinyML landscape, TinyML Research Summit 2023
Tomasz Szydlo, Online Anomaly Detection Based On Reservoir Sampling and LOF for IoT devices, CoRR abs/2206.14265 (2022)
Tomasz Szydlo, Prem Prakash Jayaraman, Yinhao Li, Graham Morgan, Rajiv Ranjan, TinyRL: Towards Reinforcement Learning on Tiny Embedded Devices. CIKM 2022, 4985-4988
Tomasz Szydlo, Joanna Sendorek, Robert Brzoza-Woch, Enabling machine learning on resource constrained devices by source code generation of the learned models, ICCS 2018: 682-694
Press
https://blog.arduino.cc/2022/07/22/industrial-iot-anomaly-detection-on-microcontrollers/
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fogml-0.0.8.tar.gz.
File metadata
- Download URL: fogml-0.0.8.tar.gz
- Upload date:
- Size: 17.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77cd132d4c096d77836928aa18c67c5521653a8360af4d59b476d7eaa35bbc91
|
|
| MD5 |
b9f90f29a39e4a1b4b06983b788e2303
|
|
| BLAKE2b-256 |
d7b1fbf9dd71764096cf44ffa1f736efddd4f4f3546e015930b181b8f5b16c98
|
File details
Details for the file fogml-0.0.8-py3-none-any.whl.
File metadata
- Download URL: fogml-0.0.8-py3-none-any.whl
- Upload date:
- Size: 26.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd0aa02ccbf023885b685a0b522621e847145a427fbcc478389551c14d893aa6
|
|
| MD5 |
f2f85979daa5d6399e2194e3aadf13a0
|
|
| BLAKE2b-256 |
dc2f32eb5e3851257e5ec43e6d8684b31a1bb08a61372594b2175eab2ee838d8
|