一板网电子技术论坛

风筝
发表于: 2021-10-13 11:27:43 | 显示全部楼层

整个十年,人工智能一直是一个流行词。人们一直在所有可能的领域应用人工智能的概念——农业、医学成像、自动驾驶、生物识别、加密、数据分析、金融科技等等。然而,因为它是一个快速新兴的领域,所以有很多变化和即将到来的技术。框架会在几个月内变得陈旧,并且由于过时的软件依赖关系,库开始导致比应有的错误更多的错误。由于这一切,对于制造商来说,开发自己的AI模型可能是一个非常不方便、陡峭的学习曲线,而无需花费数月时间,意识到他创建的模型不再优化,他想出的东西已经过时了。


不仅如此,即使对于简单的应用程序,模型训练也可能需要数小时或数天。鉴于当前的芯片短缺和GPU价格飞涨,这可能会成为制造商可能想要自动化或开发为模型的任何实际应用的一大障碍。Edge Impulse旨在解决这些问题。 Edge Impulse Studio可用于轻松训练机器学习模型,如对象分类、咳嗽检测、语音识别等。在本篇文章中,我们将使用Edge Impulse Studio训练一个简单的基于信号的模型来识别一个人是否发烧。


什么是边缘脉冲?

边缘脉冲(Edge Impulse)可帮助制造商加快连接硬件、从中收集数据、对其进行预处理,然后用它构建模型的整个过程,从几天或几个月到几小时不等。个人项目免费,使用极其方便。它具有直观的 UI,可引导您完成模型构建的各个步骤,而不会让您面临不必要的复杂性。同时,它确保为您提供足够的选项来收集/上传您自己的数据并定制整个模型及其训练过程。最后,它还可以为您提供所有流行格式的高度可集成的TensorFlow-lite 模型库,以便您可以随时随地运行推理。


为什么对信号使用边缘脉冲模型?

我们将使用Arduino Nano 33 IoT开发板,因为它可以轻松地与边缘脉冲导出的库集成。在本文中,我们将集成MLX90614传感器来测量一个人的手指温度并预测他/她是否发烧。虽然起初认为这可能是一个简单的阈值案例,但我向你保证它不是。为什么?原因很简单:

1.  环境温度和手指与mlx传感器之间的距离会改变物体温度的测量值。

2.  同一个人在不同日子的体温可能略有不同

3.  不同种族背景的不同人也有不同的发射率和略有不同的体温

4.  手指温度比体温低几度


因此,虽然理论上,根据现代标准,发烧被认为已设定的温度约为100华氏度,但仅对测量的对象温度值进行阈值设置就会产生大量错误读数,从而影响模型的准确性。


MLX90614与Arduino Nano 33开发板的连接电路图

原理图非常简单。我们将使用mlx90614和1.3寸OLED显示屏。连接非常简单,因为这两个模块(MLX90614 和 OLED 显示器)都在使用I2C方式。

Interfacing-MLX90614-with-Arduino-Nano-33-IoT.jpg

跳转到指定楼层
风筝
发表于: 2021-10-13 11:52:06 | 显示全部楼层

使用Edge Impulse Studio训练发烧检测模型

使用Edge Impulse训练机器学习模型非常简单,只需7-8个步骤即可完成。下面解释了使用Edge Impulse训练模型的所有步骤:


1.  在网站上注册并创建您的项目

第一步是在Edge Impulse网站上注册。注册后,您将看到仪表板界面,该界面将显示边缘脉冲模型开发的基本工作流程。创建并命名一个新项目。如项目信息中所述,选择标记方法为“one label per data item”,延迟计算为Cortex-M4F 80 MHz。对于基于视觉的模型,您可以选择bounding boxes选项。Edge Impulse Studio支持许多其他处理器和板卡,如Spresense套件、ST 探索物联网套件等。 在Danger zone,,有一个称为重新平衡数据集的选项,它将划分您的训练和测试数据80:20的比例。

Edge-Impulse-StudioTutorial.jpg


2.   使用数据转发器收集数据

现在第二步是收集用于模型训练的数据。如果您单击““LET’S COLLECT SOME DATA”按钮,您将看到各种选项。

Edge-Impulse-Data-Collection.jpg


我们将使用data-forwarder选项,它使用python3、node.js 和 cli 从您的硬件设备收集数据,然后将收集的硬件中继到边缘脉冲平台。使用官方边缘脉冲安装文档的设置边缘脉冲数据转发器后,首先,上传提供给您的Arduino 33 IOT板设置的数据收集脚本。打开具有管理员或sudo 权限的 cmd 或终端,然后键入以下命令:

  1. $ edge-impulse-data-forwarder
复制代码

然后数据转发器应相应地响应:

  1. Edge Impulse data forwarder v1.5.0
  2. ? What is your user name or e-mail address (edgeimpulse.com)? <enter registered email-id>
  3. ? What is your password? <enter password>
  4. Endpoints:
  5.     Websocket: wss://remote-mgmt.edgeimpulse.com
  6.     API:       https://studio.edgeimpulse.com
  7.     Ingestion: https://ingestion.edgeimpulse.com
  8. [SER] Connecting to /dev/tty.usbmodem401203
  9. [SER] Serial is connected
  10. [WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
  11. [WS ] Connected to wss://remote-mgmt.edgeimpulse.com
  12. ? To which project do you want to add this device? <project_name>
  13. ? 3 sensor axes detected. What do you want to call them? Separate the names with ',': <axis1,axis2,axis3,…>
  14. ? What name do you want to give this device? <device_name>
  15. [WS ] Authenticated
复制代码

输入有效的注册凭据、刚刚创建的项目名称,并将检测到的 2 个轴分别命名为 O_Temp 和 A_Temp。应自动检测数据频率。

Edge-Impulse-Data-Forwarder.jpg


如果你回到边缘脉冲 UI,你应该看到刚刚添加的设备的名称,如下所示 -

Data-Collection-using-Data-Forwarder.jpg


绿点表示设备处于活动状态并已插入。现在,选择左侧的数据采集选项卡,您将能够看到以下页面:

Edge-Impulse-Data-Acquisition.jpg


输入所需的样本长度,然后单击“开始采样”按钮。计数器应开始代替刚刚按下的采样按钮,在输入的时间过去后,收集的数据将如图所示显示。您可以通过单击每个收集的样本右侧的 3 个点来重命名样本并更改其标签。要可视化收集的样本,只需单击它。

-Edge-Impulse-Studio.jpg


3.   创建Impulse

Impulse用于根据收集的信号值训练模型。选择左侧的 Impulse 设计选项卡,您将看到一个新页面。将其设置为如下所示-

Edge-Impulse-Studio-Setup.jpg


查看可用的各种选项和块。您可以根据数据选择块,甚至可以选择要训练数据的轴。边缘脉冲解释了每个块及其一般用例。我们将使用原始数据,因为它允许我们将传感器的值直接提供给模型的 API,同时也节省了处理时间。将频率保持在2赫兹。这意味着我们将每 500 毫秒向模型提供一次传感器数据。请注意,这并不意味着我们将以相同的速率从传感器读取数据。我们可能会更快地读取数据,以便在将其提供给模型之前对其进行平均。因此,我们的样本长度将为 1 / 频率或 500 毫秒。窗口大小为 500 毫秒时,我们将对 500 毫秒长度的数据进行推理,在我们的例子中,这是单个样本的长度。窗口大小越大,分类在一起的样本越多,特征列表就越多。为避免复杂化,我们将对每个样本进行单独分类。在原始数据块中同时检查 - O_Temp 和 A_Temp,因为我们希望我们的模型在各种环境温度下工作。


4.   生成特征

现在我们继续从原始数据创建特征。在Impulse设计下,一旦您保存了刚刚创建的Impulse,“Create impulse”旁边的圆圈应变为绿色,表明您的Impulse已被创建。您还应该看到其他选项卡,例如“Raw data”,具体取决于您添加的块。


您可以使用右上角的下拉菜单选择要查看的收集的训练样本。在可视化下方,您可以看到两种类型的功能 - 原始和 DSP。 DSP 功能在本项目中并不重要,因此我们稍后将对其进行说明。如果您仔细观察,原始特征只不过是我们正在收集的 O_Temp、A_Temp 或 1 个样本。这似乎是正确的,因为我们使用了 2 的频率和 500 毫秒的窗口大小。在 Topmost 选项卡上选择“Generate features”这将导致此页面-

Edge-Impulse-Generate-Features.jpg


您不会看到任何图表,因为我们尚未生成任何特征。单击“Generate features”按钮,您将看到边缘脉冲已开始从收集的数据中学习特征。它基本上运行 K-means 算法,将具有相同标签的数据聚类在一起。您应该能够在右侧看到一个 3D 图形,所有不同的标签都有不同的颜色。完成后,我们现在可以继续训练模型。


5.   模型架构和训练

选择左侧的 NN Classifier 选项卡。您将能够看到如下所示的窗口,保持默认设置不变或像我所做的那样对它们进行一些修改。单击开始训练,在几分钟内,您应该已经完成​​了 50 个 epoch,向您展示了模型的准确性。由于这是一个相对简单的问题,我们应该会看到> 98% 的非常高的准确率。

Edge-Impulse-Model-Architecture.jpg


6.   在测试样本上测试模型

在此之后,我们可以使用实时分类选项卡检查模型的执行情况。

Edge-Impulse-Testing.jpg


您可以通过使用数据转发器连接已注册的数据收集设备来获取新样本,也可以对现有测试样本进行分类。


您将能够在“Detailed result”部分下以视觉和类似报告的格式查看新/测试样本的每个窗口的分类情况。

Edge-Impulse-Model-Training.jpg


7.   计算测试精度

现在我们将看到模型在我们收集的整体测试数据上的表现。选择“Model testing”选项卡,然后按“Model testing”按钮。

Edge-Impulse-Test-Accuracy.jpg


现在应该能够以混淆矩阵的形式看到测试精度。


8.  版本控制和部署

版本控制将帮助您创建同一模型和项目的多个版本。最后,我们转到Deployment选项卡。选择创建库下的Arduino库选项,然后往下走。您将看到 NN 分类器的可用优化选项。按分析优化按钮查看哪种优化更好。在我们的例子中,float32性能更好,因此我们将使用它来构建库。

Versioning-and-Deployment.jpg


单击构建按钮,会自动开始下载一个zip文件。

Training-Fever-Detection-Model.jpg


恭喜!您已经成功构建了第一个边缘脉冲模型!

回复

使用道具 举报

风筝
发表于: 2021-10-13 14:15:46 | 显示全部楼层

在Arduino Nano 33 IoT开发板上部署训练模型

现在我们将使用下载的库对样本进行实时分类。第一步是打开Arduino IDE,转到“Sketch”选项卡,选择“Include Library”并将其作为 .zip 文件导入。这应该将它添加到您的草图目录中的库文件夹中。您应该能够在示例文件夹中看到该库。静态缓冲区示例使用这些功能在特定示例窗口上运行推理。因为我们使用的是原始特征,所以我们可以通过用我们正在使用的MLX传感器测量的值替换从边缘脉冲 UI 复制粘贴到特征数组中的值,直接将这个示例转换为实时推理示例。您可以从此链接下载所有必需的库。

Deploying-Trained-Model-on-Arduino.jpg


因此,以下是数组-

  1. static const float features[] = {
  2.     // copy raw features here (for example from the 'Live classification' page)
  3.     // see https://docs.edgeimpulse.com/docs/running-your-impulse-arduino
  4. };
  5. Inside the static_buffer example has been replaced with
  6. Object = mlx.readObjectTempF();
  7. Ambient = mlx.readAmbientTempF();
  8. ei_printf("Edge Impulse standalone inferencing (Arduino)\n");
  9. features[0] = Object;
  10. features[1] = Ambient;
复制代码

在我们的修改版本中,这使我们能够在Arduino Nano 33 IOT上实时运行我们的分类。其余代码需要对Tf-lite 和边缘脉冲 API 有非常深入的了解,这超出了这个本文的范围。


完成更改后,在开发板类型中选择Arduino 33 IoT 并上传代码。上传代码后打开串口监视器,输出如下所示-

Arduino-Code.jpg


如您所见,推理时间只有3ms左右,这很棒。我们的模型即使在不同环境温度下的不同时间也表现良好。以上就是如何使用Edge Impulse Studio来训练自定义机器学习模型。 Edge Impulse是非编码人员开发机器学习模型的绝佳平台。如果您对Edge Impulse 或本文有任何疑问,可以在本帖下面进行回复。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 580 | 回复: 1168



手机版|

GMT+8, 2021-10-26 10:40 , Processed in 0.027679 second(s), 6 queries , MemCache On. Powered by Discuz! X3.4

YiBoard一板网 © 2015-2021 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表