TinyML 嵌入式微型机器学习与系统应用 学习笔记
嵌入式微型机器学习与系统应用
week1
任务
每周/隔周汇报进展 (PPT)
final: 确定研究方向与主体开展研究工作
参考
arduino
tinyml
CS249r
工作周期
研究方向
研究问题
研究方法
方法实现
实验验证、结果分析
抽象、凝练
论文写作
考核
算法、系统报告
- 课程总结报告
- 每组研究报告、汇报ppt
选题
week2
报告
参照:Tinyml-book 第四章
使用神经网络拟合 sin(x)
平台: colab
单层感知机
1-8(relu)-1

未能很好拟合函数
多层感知机
1-16-16-1

拟合效果较好
生成TFLite模型
使用TFLite Converter
量化模型,并生成 C 文件

在物理机上配置环境
week3-4
报告
-
主要任务:
- 创建 TinyML 应用程序 Hello World Example
-
参考:
现存代码与书本内容差异过大,很难参考书中内容完成实验
"Hello World"
-
evaluate_test.cc-
导入依赖项
-
测试配置
TF_LITE_MICRO_TEST_BEGIN TF_LITE_MICRO_TEST(LoadModelAndPerformInterference)- 记录数据
- 映射模型
- 创建
AllOpsResolver- 包含 tflite for microcontrollers 的所有可用算子
- 创建解释器
- 检查输入张量
- 对输入进行推断
- 读入输出
-
运行测试
在项目根目录下运行代码
make -f tensorflow/lite/micro/tools/make/Makefile test_evaluate_cc_test
编译文件并运行后得到以下结果:
~~~ALL TESTS PASSED~~~
Running evaluate_cc_test took 0.003 seconds
参照书本,尝试使测试失败,修改以下代码(由于版本差异,无法找到完全一致的位置)

结果如下
tensorflow/lite/micro/tools/make/test_latency_log.sh evaluate_cc_test gen/linux_x86_64_default/bin/evaluate_cc_test '~~~ALL TESTS PASSED~~~' linux
Difference between predicted and actual y value is significant.
make: *** [tensorflow/lite/micro/examples/hello_world/Makefile.inc:22:test_evaluate_cc_test] 错误 1
深入研究代码
标准程序
main_functions.cc
- setup()
- 初始化记录、加载模型等
- loop()
- 多次运行的代码段
output_handler.cc
通过 ErrorReporter 实例记录 x, y 值
main.cc
setup 后重复调用 loop 函数
运行
缺少文件,无法照书中内容编译
部署到微控制器
使用编译并部署 Arduino 应用
Week5
报告
- 任务:
- 测试并部署 hello_world 到 Arduino Nano 33 sense
- Magic Wand 训练
- 参考:
- Tinyml-book 第六、七章
- Harvard_TinyMLx - Arduino Reference
将 Hello World 部署到微控制器
环境:
- Arduino IDE 2.0.4
- Arduino Nano 33 Sense
参考代码:
通过 Arduino IDE 打开实例代码,点击上传(需要注意的是,首次编译的过程很慢)

打开串口监视器,发现大量数字掠过
打开串口绘图器,发现数值呈现反复下降上升的趋势(图中未能完整呈现)

发现 Arduino 开发板上的 LED 随时间明暗交替闪烁
证明部署成功,Arduino 板的 LED 亮度表现为随时间变化的 sin(x) 函数
训练 Magic Wand
数据集获取
模型使用了 “语音命令数据集”,包含 65000 个由大众在线提供的 30 个单词市场为 1 秒的发音
可以通过如下代码下载数据(ipynb)
# Download the data we will use to train the model
!wget http://download.tensorflow.org/models/tflite/magic_wand/data.tar.gz
# Extract the data into the train directory
!tar xvzf data.tar.gz -C train 1>/dev/null
目前使用的还是来自已有数据集的数据,自己通过传感器收集数据集的方法还未深入了解
模型训练
平台:Colab
参考代码:Train a gesture recognition model for microcontroller use - Colaboratory (google.com)
Magic Wand 采用的 CNN 模型结构如下
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 128, 3, 8) 104
max_pooling2d (MaxPooling2D (None, 42, 1, 8) 0
)
dropout (Dropout) (None, 42, 1, 8) 0
conv2d_1 (Conv2D) (None, 42, 1, 16) 528
max_pooling2d_1 (MaxPooling (None, 14, 1, 16) 0
2D)
dropout_1 (Dropout) (None, 14, 1, 16) 0
flatten (Flatten) (None, 224) 0
dense (Dense) (None, 16) 3600
dropout_2 (Dropout) (None, 16) 0
dense_1 (Dense) (None, 4) 68
=================================================================
共有 4300 个参数,共进行 50 轮训练
准确率如下(黄:验证集;红:训练集)

最终的准确度为:
loss: 0.0713 - accuracy: 0.9831 - val_loss: 0.0850 - val_accuracy: 0.9669
C 代码获取
# Install xxd if it is not available
!apt-get -qq install xxd
# Save the file as a C source file
!xxd -i model.tflite > /content/model.cc
# Print the source file
!cat /content/model.cc

浙公网安备 33010602011771号