TinyML
Introduction to Edge-AI MCUs, TinyML, and examples.
Edge-AI MCU
Kneron 耐能智慧
- KL530 AI SoC
- 基於ARM Cortex M4 CPU内核的低功耗性能和高能效設計。
- 算力達1 TOPS INT 4,在同等硬件條件下比INT 8的處理效率提升高達70%。
- 支持CNN,Transformer,RNN Hybrid等多種AI模型。
- 智能ISP可基於AI優化圖像質量,強力Codec實現高效率多媒體壓縮。
- 冷啟動時間低於500ms,平均功耗低於500mW。
- KL720 AI SoC (算力可達0.9 TOPS/W)
- 基於ARM Cortex M4 CPU内核的低功耗性能和高能效設計
- 可適配高端IP攝像頭,智能電視,AI眼鏡、耳機以及AIoT網絡的終端設備。
- 可處理高達4K圖像,全高清影音和3D感應,實現精準的臉部識別以及手勢控制。
- 可為翻譯機和AI助手等產品提供自然語言處理。
- 以上各種功能以及其它邊緣AI — 例如感熱 — 均可實時處理。
- Launching Kneron’s Next-Generation Chip KLM5S3, Pursuing Excellence in Edge-AI Computing
Realtek AmebaPro2
- MCU
- Part Number: RTL8735B
- 32-bit Arm v8M, up to 500MHz
- MEMORY
- 768KB ROM
- 512KB RAM
- Supports MCM embedded DDR2/DDR3L memory up to 128MB
- External Flash up to 64MB
- KEY FEATURES
- Integrated 802.11 a/b/g/n Wi-Fi, 2.4GHz/5GHz
- Bluetooth Low Energy (BLE) 4.2
- Integrated Intelligent Engine @ 0.4 TOPS
- Ethernet Interface
- USB Host/Device
- SD Host
- ISP
- Audio Codec
- H.264/H.265
- Secure Boot
- Crypto Engine
- OTHER FEATURES
- 2 SPI interfaces
- 1 I2C interface
- 8 PWM interfaces
- 3 UART interfaces
- 3 ADC interfaces
- 2 GDMA interfaces
- Max 23 GPIO
mlplatform.org
The machine learning platform is part of the Linaro Artificial Intelligence Initiative and is the home for Arm NN and Compute Library – open-source software libraries that optimise the execution of machine learning (ML) workloads on Arm-based processors.
Project | Repository |
Arm NN | [https://github.com/ARM-software/armnn](https://github.com/ARM-software/armnn) |
Compute Library | [https://review.mlplatform.org/#/admin/projects/ml/ComputeLibrary](https://review.mlplatform.org/#/admin/projects/ml/ComputeLibrary) |
Arm Android NN Driver | https://github.com/ARM-software/android-nn-driver |
ARM NN SDK
免費提供的 Arm NN (類神經網路) SDK,是一組開放原始碼的 Linux 軟體工具,可在節能裝置上實現機器學習工作負載。這項推論引擎可做為橋樑,連接現有神經網路框架與節能的 Arm Cortex-A CPU、Arm Mali 繪圖處理器及 Ethos NPU。
ARM NN
Arm NN is the most performant machine learning (ML) inference engine for Android and Linux, accelerating ML on Arm Cortex-A CPUs and Arm Mali GPUs.
ESP32
ESP32-CAM Video Streaming and Face Recognition with Arduino IDE
TinyML
什麼是tinyML? Tiny Machine Learning
TinyML 指能在微控制器上執行的機器學習 (一般機器學習模型需要AI加速器來執行)
Kaggle.com
人工智慧競賽的雲端平台, 提供免費的CPU / GPU / TPU
- CPU: Intel Xeon 2.0GHz, 1 core - 2 threads with 30GB RAM
- GPU: Nvidia Tesla P100-PCIE-16GB
- GPU: T4 x2
- TPU: Google TPU v3-8 (8 cores)
Kaggle 用法簡介
Easy-Net
用1個神經元可學習線性方程式 Y= 0.1*X + 0.3
model = models.Sequential()
model.add(layers.Dense(units=1, input_dim=1))
Hidden-Net
用10個神經元可學習拋物線方程式: Y = X^2 - 0.5
model = models.Sequential()
model.add(layers.Dense(10, input_dim=1, activation='relu')) # add a hidden layer with 10 neurons
model.add(layers.Dense(1, activation=None))
ECG (Electrocardiogram)
ECG Heartbeat Categorization Dataset
This dataset is composed of two collections of heartbeat signals derived from two famous datasets in heartbeat classification,
the MIT-BIH Arrhythmia Dataset and
The PTB Diagnostic ECG Database.
心電圖診斷理論基礎與系統
ECG 心電圖分類:
- Normal (正常心跳)
- Artial Premature (早發性心房收縮)
- 早發性心房收縮就是心房在收到指令前提早跳動,由於打出的血量少而造成心跳空虛的症狀,再加上舒張期變長,回到心臟的血流增加使下一次的心跳力道較強,造成心悸的感覺,當心臟長期處於耗能異常的狀態,就容易併發心臟衰竭。
- Premature ventricular contraction (早發性心室收縮)
- 早發性心室收縮是心律不整的一種,是指病人的心室因為電位不穩定而提早跳動,病人會有心跳停格的感覺。因為病人心跳的質量差,心臟打出的血液量不足,卻仍會消耗能量,長期下來就可能衍生出心臟衰竭等嚴重疾病。早發性心室收縮的症狀包括心悸、頭暈、冷汗和胸悶等。
- Fusion of ventricular and normal (室性融合心跳)
- 室性融合波是由於兩個節律點發出的衝動同時激動心室的一部分形成的心室綜合波,是心律失常的干擾現象範疇
- Fusion of paced and normal (節律器融合心跳)
ECG DNN (Deep Neural Network)
Kaggle: ECG-DNN
mitbih_train.csv 每一列(row) 為一筆心電圖資料(187個數值)
x 為心電圖波形之數值, y 為心電圖波形之分類
- 讀取資料 (訓練與測試 兩種資料集)
df_train = pd.read_csv("/kaggle/input/heartbeat/mitbih_train.csv", header=None) df_test = pd.read_csv("/kaggle/input/heartbeat/mitbih_test.csv", header=None)
- 資料處理
- Y數值轉成以1位元代表一種分類(ECG資料有五種分類: 5-bit)
from tensorflow.keras import utils y_train = utils.to_categorical(y_train) y_test = utils.to_categorical(y_test)
- Y數值轉成以1位元代表一種分類(ECG資料有五種分類: 5-bit)
- 建立模型: 採用Tensorflow框架語法
from tensorflow.keras import models, layers model = models.Sequential() model.add(layers.InputLayer(input_shape=(187,))) model.add(layers.Dense(128, activation="relu")) model.add(layers.Dense(32, activation="relu")) model.add(layers.Dense(num_classes, activation="softmax"))
- 訓練模型: 輸入訓練資料集(x_train, y_train)與測試資料集(x_test, y_test)
hist = model.fit(X_train, y_train, epochs=num_epochs, batch_size=batch_size, validation_data=(X_test, y_test))
- 測試模型: 使用單筆測試資料進行辨識
pred = model.predict(X_test[0].reshape(-1, X_test[0].shape[0])) print(pred) print("predicted class =", np.argmax(pred))
[[9.9955231e-01 4.4117330e-04 4.7620933e-06 1.8245370e-06 3.4009862e-09]]
predicted class = 0
輸出為一個陣列pred, 五個分類有五個可能概率 (1=100%, 9.9955231e-01 = 99.95%), 取最高可能概率為預測答案(0 = Normal正常心跳)
Arduino TinyML examples
Arduino Library: EloquentTinyML
TinyML ECG
Kaggle TinyML-ECG
Kaggle: TinyML-ECG
- 從Data 下載 ecg_arrhythmia.h 及 x_test.h 到 Arduino/examples/TinyML/TinyML_ECG/
- 重複執行export a test data之後的程式碼, 則可取得不同的測試資料 (x_test.h)
- 因82.8%測試資料為正常心跳(如圖), 可先執行[15]及[16], 看看波形
- 從print(y_test(idx))輸出可看出x_test.h 的Y值(心跳類別的可能概率)
TinyML_ECG.ino
- TinyML_ECG.ino (Arduino 程式碼)
- ecg_arrhythmia.h (TinyML轉出之可執行模型檔)
- x_test.h (隨機選出的單筆測試資料)
TinyML AirDigit
- Arduino:
- running MPU6050_ACC2CSV.ino to record motion into .csv (ex. 0_000.csv, … 0_019.csv, 1_000.csv, … 1_019.csv, 2_000.csv … 2_019.csv)
- Kaggle:
- upload .csv files to your Kaggle Datasets
- modify TinyML-AirDigit to read your dataset
- train TinyML-AirDigit to generate tinyml_airdigit.h & x_test.h
- Arduino:
- run TinyML_AirDigit.ino with tinyml_airdigit.h & x_test.h
MPU6050_ACC2CSV.ino
- 使用MPU6050每20毫秒讀取1次三軸加速器數值, 錄1.5秒動作 (1500ms / 20ms = 75筆accX, accY, accZ)
-
Serial輸出為.csv格式, 由Serial-Monitor剪貼資料至.csv檔案 2_000.csv
- 使用python程式plot_acc2csv.py來畫出三軸加速器變化圖 (PC須安裝Git-for-Window及Python3)
python3 plot_acc2csv.py 2_000.csv
TinyML_AirDigit.ino
This site was last updated June 18, 2023.