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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix