TinyML 嵌入式微型机器学习与系统应用 学习笔记

嵌入式微型机器学习与系统应用

week1

任务

每周/隔周汇报进展 (PPT)

final: 确定研究方向与主体开展研究工作

参考

arduino

tinyml

CS249r

工作周期

研究方向
研究问题
研究方法
方法实现
实验验证、结果分析
抽象、凝练
论文写作

考核

算法、系统报告

  • 课程总结报告
  • 每组研究报告、汇报ppt

选题

week2

报告

参照:Tinyml-book 第四章

使用神经网络拟合 sin(x)

平台: colab

单层感知机

1-8(relu)-1

img

未能很好拟合函数

多层感知机

1-16-16-1

img

拟合效果较好

生成TFLite模型

使用TFLite Converter

量化模型,并生成 C 文件

image-20230302203923051

在物理机上配置环境

week3-4

报告

现存代码与书本内容差异过大,很难参考书中内容完成实验

"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 IDE 2.0.4
  • Arduino Nano 33 Sense

参考代码:

通过 Arduino IDE 打开实例代码,点击上传(需要注意的是,首次编译的过程很慢)

image-20230323200624224

打开串口监视器,发现大量数字掠过

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

image-20230323200959859

发现 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 轮训练

准确率如下(黄:验证集;红:训练集)

image-20230323202735764

最终的准确度为:

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
posted @   wnico  阅读(262)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示