作者: Jacob Beningo
机器学习,特别是 TinyML 有可能彻底改变嵌入式系统的设计和构建方式。从传统上来讲,这些系统采用了基于开发者对系统经验的程序算法。机器学习带来了不同的方法,其中系统算法基于对现实世界的观察和数据。如果环境数据发生了变化,那么机器学习模型可以迅速利用数据重新学习。人工编码的解决方案则需要重写。
本文将探讨由 STMicroelectronics STM32 微控制器系列支持的嵌入式系统的机器学习平台和工具。
STM32 微控制器系列的机器学习支持
机器学习可以成为嵌入式系统开发者的强大工具。然而,开发者往往认为机器学习算法需要太多的处理能力,或者算法太大,以至于无法适应典型的微控制器。现实中,所选微控制器将更多地取决于希望通过机器学习做什么,而不是特定微控制器如何支持机器学习。
例如,图 1 显示了一系列支持机器学习的 STM32 微控制器系列。这些微控制器范围从 STM32F0 到 STM32F7,前者运行频率为 48 MHz,具有高达 256 KB 的闪存和 32 KB 的 RAM,后者运行频率为 216 MHz、具有高达 2 MB 的闪存和 512 KB 的 RAM。
图 1:使用 STM32Cube.AI 和 NanoEdge 开发工具的 STM32 微控制器支持机器学习。(图片来源:STMicroelectronics)
正如我们所了解的,有相当多的微控制器可以支持机器学习。真正的问题是,机器学习平台必须能顺利地支持广泛的开发者。例如,对于嵌入式软件团队来说,拥有一名机器学习专家并不常见。相反,嵌入式软件开发者被迫在他们的传统技能之外还需精通机器学习。因此,需要一个平台来支持有或没有机器学习专家的团队。STM32 机器学习生态系统的工具链有助于解决这个问题。
为没有机器学习专家的嵌入式团队提供帮助
可以肯定的是,设计和训练机器学习算法似乎是一项艰巨的任务。开发者需要能够获取数据、设计模型、训练模型,然后确保模型足以适合优化并将其部署到嵌入式系统中。
传统上,机器学习模型是通过 TensorFlow Lite、PyTorch、Matlab 或其他工具创建的。这些工具往往远超出嵌入式软件开发者的舒适区或经验。掌握这些工具并得到准确的结果不仅耗费时间,而且成本也很高。
STM32 机器学习生态系统包括一个被称作 NanoEdge 的工具(图 2),能帮助没有机器学习专业知识或经验的开发者在其设备上训练、部署机器学习应用。
例如,开发者可以轻松地创建机器学习库,用于诸如异常检测、异常值检测、分类和回归等应用。然后,可以在 STM32 微控制器上部署这些库。
图 2:NanoEdge 可以引导开发者完成整个机器学习的开发过程。(图片来源:STMicroelectronics)
拥有 机器学习专家的嵌入式团队怎么办?
当一个开发团队能够求助机器学习专家时,他们将获得更多工具来开发 STM32 微控制器的机器学习模型。例如,当有了专业知识时,开发团队可以使用 TensorFlow Lite、PyTorch、Matlab 或其他一些工具来建模。经常出现的问题是,这些工具会产生未经优化的库。这种库在微控制器上的运行效率不高。
在 STM32 系列中,开发者可以利用 STM32Cube.AI 插件导入机器学习模型,并对其进行优化,以便在 STM32 微控制器上高效运行。该工具允许开发者在目标微控制器上运行、调整其机器学习模型。首先,开发者可以将其模型导入工具链,如图 3 所示。然后,他们可以转换模型,分析网络,然后进行验证。一旦完成这些工作,开发者就可在 STM32CubeIDE 内生成代码,围绕模型创建机器学习框架,以简化嵌入式软件开发。
图 3:正弦波发生器机器学习模型被导入 STM32CubeIDE.AI。(图片来源:Beningo Embedded Group)
嵌入式软件开发者必须向机器学习模型提供适当的输入,以及检查结果代码。可以对结果进行操作,也可以对结果进行平均化或以任何对应用有意义的方式进行操作。图 4 显示了运行和检查模型结果的简单应用循环。
图 4:主循环围绕机器学习模型。(图片来源:Beningo Embedded Group)
结语
在 TinyML 的推动下,机器学习正以适当的方式融入嵌入式应用。为了获得成功,开发者需要利用一个平台。虽然看起来平台选项几乎每天都在出现,但 STM32 生态系统为开发者提供了一个简单且可扩展的解决方案路径。
在这个生态系统中,具有机器学习经验的开发者可以利用其传统工具,并使用 STM32CubeIDE.AI 插件来优化、调整解决方案。对于没有机器学习专业知识的团队,可以通过 NanoEdge 来简化机器学习库的开发,并快速、经济地启动和运行解决方案。