0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 如何在STM32微控制器上运行“Hello World”机器学习模型

如何在STM32微控制器上运行“Hello World”机器学习模型

来源: digikey
2022-08-24
类别:工业控制
eye 36
文章创建人 Jacob Beningo

原标题:如何在STM32微控制器上运行“Hello World”机器学习模型

  机器学习 (ML) 多年来一直在服务器和移动应用程序中风靡一时,但现在它已经迁移并在边缘设备上变得至关重要。鉴于边缘设备需要节能,开发人员需要学习和了解如何将 ML 模型部署到基于微控制器的系统中。在微控制器上运行的 ML 模型通常称为 tinyML。不幸的是,将模型部署到微控制器并非易事。尽管如此,它变得越来越容易,没有任何专业培训的开发人员会发现他们可以及时这样做。

  本文探讨了嵌入式开发人员如何使用STMicroelectronics 的STM32 微控制器开始使用 ML。为此,它展示了如何通过使用X-CUBE-AI转换TensorFlow Lite for Microcontrollers模型以在STM32CubeIDE中使用来创建“Hello World”应用程序。

  tinyML 用例简介

  TinyML 是一个不断发展的领域,它将 ML 的力量带到了资源和功率受限的设备(例如微控制器)中,通常使用深度神经网络。然后,这些微控制器设备可以运行 ML 模型并在边缘执行有价值的工作。tinyML 现在有几个用例非常有趣。

  在许多移动设备和家庭自动化设备中看到的第一个用例是关键字发现。关键字定位允许嵌入式设备使用麦克风来捕获语音并检测预训练的关键字。tinyML 模型使用时间序列输入来表示语音并将其转换为语音特征,通常是频谱图。频谱图包含随时间变化的频率信息。然后将频谱图输入经过训练以检测特定单词的神经网络,结果是检测到特定单词的概率。图 1 显示了此过程的示例。

  

image.png


  图 1:关键词发现是 tinyML 的一个有趣用例。输入语音被转换为频谱图,然后馈入经过训练的神经网络,以确定是否存在预训练的单词。(图片来源:Arm®)

  许多嵌入式开发人员感兴趣的 tinyML 的下一个用例是图像识别。微控制器从相机捕获图像,然后将其输入到预先训练的模型中。该模型可以辨别图像中的内容。例如,一个人可能能够确定是否有猫、狗、鱼等等。如何在边缘使用图像识别的一个很好的例子是视频门铃。可视门铃通常可以检测到门口是否有人或是否有人留下包裹。

  最后一个非常受欢迎的用例是使用 tinyML 进行预测性维护。预测性维护使用 ML 根据异常检测、分类算法和预测模型来预测设备状态。同样,有很多应用可供选择,从 HVAC 系统到工厂车间设备。

  虽然上述三个用例目前在 tinyML 中很流行,但毫无疑问,开发人员可以找到许多潜在的用例。这是一个快速列表:

  手势分类

  异常检测

  模拟抄表器

  制导与控制 (GNC)

  包裹检测

  无论用例如何,开始熟悉 tinyML 的最佳方式是使用“Hello World”应用程序,它可以帮助开发人员学习和理解他们将遵循的基本流程,以启动和运行最小的系统。在 STM32 微控制器上运行 tinyML 模型有五个必要步骤:

  捕获数据

  标签数据

  训练神经网络

  转换模型

  在微控制器上运行模型

  捕获、标记和训练“Hello World”模型

  开发人员通常有许多选项可用于捕获和标记训练模型所需的数据。首先,有很多在线培训数据库。开发人员可以搜索某人收集和标记的数据。例如,对于基本的图像检测,有 CIFAR-10 或 ImageNet。为了训练模型来检测照片中的微笑,也有一个图像集。在线数据存储库显然是一个很好的起点。

  If the required data hasn't already been made publicly available on the Internet, then another option is for developers to generate their own data. Matlab or some other tool can be used to generate the datasets. If automatic data generation is not an option, it can be done manually. Finally, if this all seems too time-consuming, there are some datasets available for purchase, also on the Internet. Collecting the data is often the most exciting and interesting option, but it is also the most work.

  此处探索的“Hello World”示例展示了如何训练模型以生成正弦波并将其部署到 STM32。该示例由 Pete Warden 和 Daniel Situnayake 放在一起,作为他们在 Google 为微控制器开发 TensorFlow Lite 工作的一部分。这使工作变得更容易,因为他们整理了一个关于捕获、标记和训练模型的简单公开教程。可以在 Github 上找到它;在那里,开发人员应该点击“在 Google Colab 中运行”按钮。Google Colab 是 Google Collaboratory 的缩写,它允许开发人员在浏览器中以零配置编写和执行 Python,并提供对 Google GPU 的免费访问。

  遍历训练示例的输出将包括两个不同的模型文件;为微控制器量化的 model.tflite TensorFlow 模型和未量化的 model_no_quant.tflite 模型。量化表示模型激活和偏差如何以数字方式存储。量化版本产生更适合微控制器的更小的模型。对于那些好奇的读者,训练模型结果与实际正弦波结果可以在图 2 中看到。模型的输出是红色的。正弦波输出并不完美,但对于“Hello World”程序来说已经足够了。

  

image.png


  图 2:正弦波的 TensorFlow 模型预测与实际值之间的比较。(图片来源:贝宁哥嵌入式集团)

  选择开发板

  在查看如何将 TensorFlow 模型转换为在微控制器上运行之前,需要选择微控制器以在模型中进行部署。本文将重点介绍 STM32 微控制器,因为 STMicroelectronics 拥有许多可很好地转换和运行模型的 tinyML/ML 工具。此外,STMicroelectronics 拥有与其 ML 工具兼容的多种部件(图 3)。

  

image.png


  图 3:所示为 STMicroelectronics AI 生态系统当前支持的微控制器和微处理器单元 (MPU)。(图片来源:意法半导体)

  如果其中一个板放在办公室周围,它非常适合启动和运行“Hello World”应用程序。但是,对于那些有兴趣超越此示例并进入手势控制或关键字定位的人,请选择STM32 B-L4S5I-IOT01A Discovery IoT 节点(图 4)。

  该板具有基于 STM32L4+ 系列的 Arm Cortex®-M4 处理器。该处理器具有 2 兆字节 (Mbytes) 的闪存和 640 千字节 (Kbytes) 的 RAM,为 tinyML 模型提供了充足的空间。该模块适用于 tinyML 用例实验,因为它还具有 STMicroelectronics 的MP34DT01微机电系统 (MEMS) 麦克风,可用于关键字定位应用程序开发。此外,同样来自 STMicroelectronics 的板载LIS3MDLTR三轴加速度计可用于基于 tinyML 的手势检测。

  

image.png


  图 4:STM32 B-L4S5I-IOT01A Discovery IoT 节点是一个适用于 tinyML 的自适应实验平台,因为它具有板载 Arm Cortex-M4 处理器、MEMS 麦克风和三轴加速度计。(图片来源:意法半导体)

  使用 STM32Cube.AI 转换和运行 TensorFlow Lite 模型

  有了可用于运行 tinyML 模型的开发板,开发人员现在可以开始将 TensorFlow Lite 模型转换为可以在微控制器上运行的东西。TensorFlow Lite 模型可以直接在微控制器上运行,但它需要一个运行时环境来处理它。

  模型运行时,需要执行一系列功能。这些功能从收集传感器数据开始,然后对其进行过滤,提取必要的特征,并将其提供给模型。模型会吐出一个结果,然后可以进一步过滤,然后——通常——采取一些行动。图 5 概述了此过程的外观。

  

image.png


  图 5:数据如何从传感器流向运行时,然后流向 tinyML 应用程序的输出。(图片来源:贝宁哥嵌入式集团)

  STM32CubeMx 的 X-CUBE-AI 插件提供运行时环境来解释 TensorFlow Lite 模型,并提供开发人员可以利用的替代运行时和转换工具。默认情况下,项目中未启用 X-CUBE-AI 插件。但是,在创建新项目并初始化电路板后,在 Software Packs-> Select Components 下,有一个启用 AI 运行时的选项。这里有几个选项;确保此示例使用了 Application 模板,如图 6 所示。

  

image.png


  图 6:需要使用此示例的应用程序模板启用 X-CUBE-AI 插件。(图片来源:贝宁哥嵌入式集团)

  启用 X-CUBE-AI 后,STMicroelectronics X-CUBE-AI 类别将出现在工具链中。单击类别将使开发人员能够选择他们创建的模型文件并设置模型参数,如图 7 所示。分析按钮还将分析模型并为开发人员提供 RAM、ROM 和执行周期信息。强烈建议开发人员比较 Keras 和 TFLite 模型选项。在正弦波模型示例上,它很小,不会有很大的差异,但很明显。然后可以通过单击“生成代码”来生成项目。

  

image.png


  图 7:分析按钮将为开发人员提供 RAM、ROM 和执行周期信息。(图片来源:贝宁哥嵌入式集团)

  代码生成器将初始化项目并在运行时环境中构建 tinyML 模型。但是,默认情况下,模型没有任何内容。开发人员需要添加代码来提供模型输入值(x 值),然后模型将解释并使用这些值来生成正弦 y 值。需要在 acquire_and_process_data 和 post_process 函数中添加几段代码,如图 8 所示。

  

image.png


  图 8:所示代码将假输入传感器值连接到正弦波模型。(图片来源:贝宁哥嵌入式集团)

  至此,示例现在可以运行了。注意:添加一些 printf 语句以获取模型输出以便快速验证。快速编译和部署会导致“Hello World”tinyML 模型运行。将模型输出拉出一个完整的周期会产生如图 9 所示的正弦波。这并不完美,但对于第一个 tinyML 应用程序来说非常棒。从这里,开发人员可以将输出连接到脉宽调制器 (PWM) 并生成正弦波。

  

image.png


  图 9:在 STM32 上运行时的“Hello World”正弦波模型输出。(图片来源:贝宁哥嵌入式集团)

  嵌入式系统上 ML 的提示和技巧

  希望在基于微控制器的系统上开始使用 ML 的开发人员将有相当多的工作要做,以启动并运行他们的第一个 tinyML 应用程序。但是,有几个“技巧和窍门”需要牢记,可以简化和加速他们的开发:

  浏览适用于微控制器的 TensorFlow Lite “Hello World”示例,包括 Google Colab 文件。花一些时间调整参数并了解它们如何影响训练模型。

  对微控制器应用使用量化模型。量化模型被压缩以使用 uint8_t 而不是 32 位浮点数。结果,模型将更小,执行速度更快。

  探索 TensorFlow Lite for Microcontrollers 存储库中的其他示例。其他示例包括手势检测和关键字检测。

  以“Hello World”为例,将模型输出连接到 PWM 和低通滤波器以查看生成的正弦波。试验运行时间以增加和减少正弦波频率。

  选择包含“额外”传感器的开发板,允许尝试各种 ML 应用。

  尽管收集数据很有趣,但购买或使用开源数据库来训练模型通常更容易。

  遵循这些“提示和技巧”的开发人员将在保护他们的应用程序时节省大量时间和精力。

  结论

  ML 已经进入网络边缘,资源受限的基于微控制器的系统是主要目标。最新的工具允许转换和优化 ML 模型以在实时系统上运行。如图所示,尽管涉及复杂性,但在 STM32 开发板上启动并运行模型相对容易。虽然讨论检查了一个生成正弦波的简单模型,但更复杂的模型(如手势检测和关键字定位)是可能的。




责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯