Codecraft 自 2.7.0 版本开始,添加了基于 Wio Terminal 的嵌入式机器学习功能。在 Codecraft 的首页,可以看到 Wio Terminal 的设备,如下图所示。
image.png

什么是嵌入式机器学习(TinyML)?

机器学习与深度学习

机器学习是人工智能(AI)的一个分支,它专注于构建从数据中学习并随着时间的推移提高其准确性的应用程序,而无需编程。机器学习的基础是让机器能像我们人类一样通过观察、分类和从错误中学习来工作。深度学习是机器学习的一个子集,它利用深度人工神经网络(因此而得名)从大量数据中学习。
image.png
人工神经网络是试图模拟组成人脑的神经元网络。人工神经网络是通过对普通计算机编程而产生的,它们的行为就像是相互连接的脑细胞。为了让人工神经网络进行学习,它们需要大量的数据信息,称为训练集。当你试图教一个人工神经网络如何区分猫和狗时,需要准备数千张标记了猫或狗的图像组成训练集,这样人工神经网络就可以开始学习了。一旦它接受了大量数据的训练,它将根据它认为在不同单位看到的内容(或听到的,取决于数据集),对未来的数据进行分类。在训练期间,机器的输出与人类提供的应观察内容的描述进行比较。如果它们相同,则被机器验证。如果结果是错误的,它使用反向传播来调整它的学习,通过层来调整数学方程。这就是所谓的深度学习,它使神经网络变得智能化。

嵌入式机器学习(TinyML)

通常,深层神经网络需要相当强大的计算资源来训练和部署。然而,最近出现了一个叫做嵌入式机器学习(也称 TinyML)的分支,它代表了机器学习和嵌入式系统相交叉的技术和研究领域,探索哪些机器学习的应用程序(可以在微控制器这样小的设备上运行。
Wio Terminal 与 嵌入式机器学习 - 图3
TinyML 这个词,你可能已经猜到 ML 代表 Machine Learning(机器学习)。Tiny 在英文中是有“极小的,微小的”意思。TinyML 中的 Tiny 意味着 ML 模型经过优化,可以在极低功耗和小尺寸设备上运行,例如各种微控制器(MCU)。
嵌入式设备有各种形状和大小,从“嵌入式超级计算机”Nvidia Jetson Xavier AGX,如下图所示 。
Wio Terminal 与 嵌入式机器学习 - 图4
到最小的微控制器,例如 ESP32 或 Cortex M0。下图为GeeekNET ESP 32 开发板。
Wio Terminal 与 嵌入式机器学习 - 图5
为什么微控制器上的嵌入式机器学习被归入一个特殊的类别,甚至被赋予了 TinyML 这样一个很酷的名字?
因为它有自己的一系列优点和局限性。 TinyML 的吸引力实际上在于 MCU 无处不在,体积小、功耗低且相对便宜。以 ARM Cortex M0+ 和围绕它构建的小型MCU—— Seeeduino XIAO 为例(如下图所示),该板只有拇指大小(20×17.5mm),仅消耗 1.33 mAh 的电量(这意味着它可以在 150 mA 电池下工作约 112 小时),如果进入深度睡眠时间还会长很多)并且成本低至 30元人民币。
Wio Terminal 与 嵌入式机器学习 - 图6

由于最近模型优化方面的改进以及专门为在微控制器上运行机器学习模型推理而创建的框架的出现,为这些微型设备提供了更多智能成为可能。我们现在可以在微控制器上部署神经网络,用于动作识别,音频场景识别(例如大象活动或玻璃破碎的声音)、语音唤醒词检测(使用特定短语激活设备),甚至用于简单的图像识别任务。带有嵌入式微控制器的设备可用于为旧传感器赋予新的生命和意义。
现在借助 Codecraft 和 Wio Terminal,就可以体验嵌入式机器学习的整个过程,无需面对复杂的编程环境和编程知识。

Wio Terminal 简介

Wio Terminal矽递科技设计生产的物联网和 TinyML 入门的完美工具,得到了各种 TinyML 推理框架的良好支持。
Wio Terminal 与 嵌入式机器学习 - 图7
Wio Terminal 是基于 ATSAMD51P19 的微控制器,其 ARM Cortex-M4F 的运行速度达 120MHz (最高可达200MHz),4MB 外部闪存和 192KB RAM。具有 Realtek RTL8720DN 支持的无线连接,与 Arduino 和 MicroPython 兼容。它同时支持蓝牙和 Wi-Fi,为物联网项目提供了扎实的基础。Wio Terminal 自身配有一个 2.4 英寸的 LCD 屏幕, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光线传感器和红外发射器(IR 940nm)。 最重要的是它还有两个用于 Grove 生态系统 的多功能 Grove 端口和树莓派兼容的 40 针 GPIO 引脚,用于支持更多附加组件。
image.png
天猫购买 Wio Terminal

Codecraft 嵌入式机器学习入门

创建 Wio Terminal 项目

在Codecraft首页界面点击WioTerminal的图标即可进入Wio Terminal嵌入式机器学习。
image.png
模型的创建和使用都需要登录,未注册CodeCraft用户请先注册
登录注册:可使用邮箱或手机账号注册CodeCraft
image.pngimage.png
注册后登录
使用未在Edge Impulse(机器学习模型训练平台)注册使用的邮箱注册CodeCraft将会接收到Edge Impulse的邮件。
使用手机注册和已在Edge Impulse注册使用的邮箱注册CodeCraft将不会收到该邮件。

嵌入式机器学习基本过程

所有机器学习过程都是由以下4步组成:
image.png

  1. 创建与选择模型:根据所需使用的传感器创建模型。
  2. 数据采集:利用Wio Terminal采集数据。
  3. 训练与部署:利用已采集的数据训练模型,训练完成后,部署已经训练好的模型。
  4. 使用与编程:编写程序使用机器学习模型。

1. 创建与选择模型

点击“创建与选择模型”即可看到“为嵌入式机器学习创建新模型”的界面,点击对应图标即可创建使用对应传感器的模型。创建完成新模型,界面会自动跳转至“数据采集”界面。
image.png点击“创建与选择模型”即可看到“我的模型”的界面,包含了所有已创建的模型,点击即可查看。
image.png
修改模型
修改模型名称在模型的具体界面,“数据采集”界面,点击右上角image.png,选择修改模型名。
image.png
image.png
删除模型:在模型的具体界面,“数据采集”界面,点击右上角image.png,选择删除模型。
image.png
image.png
点击确定即可删除模型
image.png

2. 数据采集

步骤:
①确认标签
②上传默认采集数据程序
③采集数据
④整理数据(可选项)

①确认标签
数据采集界面右侧有默认标签,可以添加和删除标签
image.png
添加自定义标签:点击“+”。
image.png
删除标签:鼠标移至标签,标签的左上角会出现“×”,点击“×”即可删除。
image.png
修改标签:单击标签即会出现修改标签的弹窗
image.png

②上传默认采集数据程序
连接Wio Terminal并在 Codecraft 中上传默认采集数据程序。
连接Wio Terminal。
Wio Terminal 与 嵌入式机器学习 - 图26
数据采集界面编程区有默认采集数据程序,上传程序即可开启数据采集之旅。
image.png
若使用了自定义的标签,可修改积木块的标签,再上传采集数据程序。
image.png
若添加了标签,可在数据采集程序中添加
image.png
此处的方向键为Wio Terminal右下角按钮
image.png

若需默认数据采集程序,可在按下图步骤查找,点击“默认数据采集程序”,界面就会出现默认数据采集程序。
image.png
③采集数据
数据采集界面右上角提供“数据采集步骤介绍”,跟着数据采集步骤介绍的动图或静态图及文字描述轻松学会如何采集数据。
image.png
image.png
注意:动图gif已加速,实际动作可稍微放慢
采集过程中Wio Terminal会显示.
根据Wio Terminal屏幕显示开始收集数据和结束收集。
image.png表示正在收集数据
image.png
image.png表示收集完毕
image.pngimage.png
Wio Terminal 显示收集完毕即可停止采集数据,CodeCraft仍在拼命加载中,是将数据从WioTerminal传至CodeCraft仍需1~2s。

④整理数据(可选项)
采集数据后,标签右上角会提示已采集的数据总时长。
image.png
若数据不符合预期,可以进行删除.
image.png
当然我们也可以对样本进行其他的操作:修改名称,修改标签,分割样本,下载。
image.png

已完成所有数据采集后,点击“训练与部署”,进入下一个步骤。
image.png

3. 训练与部署

步骤:
①选择神经网络规模大小设置参数
②开始训练
③观察模型性能选择理想模型
④部署理想模型

①选择神经网络规模大小设置参数
进入“训练与部署”界面后,可以选择适合的神经网络规模:小中大型其中一个。
设置参数,设置训练周期数(正整数),学习率(0~1的数),最低置信度(0~1的数)。
界面提供了默认的参数值。
image.png

可在“样本数据”中观察已采集的数据样本。
image.png
点击可切换观察不同的数据。
image.png
②开始训练
点击“开始训练”,即可训练模型
image.png
训练过程中“日志输出”界面会输出训练日志。可通过观察“日志输出”推理训练还需花费时间。如下图,已完成“Epoch:62/500”说明总共需训练500轮,已训练了62轮。
image.png
加载完成后,能在“输出日志”中看到“模型训练任务已完成”,此时界面新增“模型训练报告”
image.png

③观察模型性能选择理想模型
在“模型训练报告”界面,可观察训练的成绩,包括模型的准确性,损失,模型在Wio Terminal上的性能。
如果训练成绩不理想,可以返回训练模型第一步,选择其他规模的神经网络,或者调整参数的设置,再次训练,直到获得一个成绩理想的模型。
image.png
④部署理想模型
在“模型训练报告”界面,点击“部署模型”。
image.png

弹窗提示部署完成,点击“确认”后,自动跳转到“使用与编程”界面。
image.png

4. 使用与编程

步骤:
①编写模型使用程序
②上传程序至Wio Terminal
③Wio Terminal测试模型效果

①编写模型使用程序
编写模型使用程序:在“使用与编程”界面,点击“模型使用”即可使用已经部署的模型
image.png
image.png
编写如下程序即可尝试使用你的模型
image.png
②上传程序至Wio Terminal
上传程序到Wio Terminal:点击“上传”按钮。
image.png
选择目前的Wio Terminal对应的串口号(未必如图中的COM20),点击“确定”按钮
image.png
首次上传时间较长,且随模型复杂程度上传时间增长,请耐心等待。小模型上传时间大约为4分钟。

③Wio Terminal测试模型效果
(视频)

保存

可保存作品,日后可在我的作品中查看。
image.png
image.png
image.png
image.png
image.png

示例教程

为了帮助用户理解整个嵌入式机器学习的使用,我们提供了4个模板模型,您可以根据这些模板模型的示例,学习如何使用 Codecraft 进行嵌入式机器学习,当然,我们希望这些示例能起到抛砖引玉的作用,帮你构建跟多有趣的应用。