如何在嵌入式系统中使用机器学习算法?

How to work with machine learning algorithms in embedded systems?

我正在做一个项目,使用带有加速度计的 ARM cortex-m0 微控制器 (Freedom - KL25Z) 来检测(分类)人类活动。我打算使用机器学习预测用户的activity。

问题是,cortex-m0 不能处理训练或预测算法,所以我可能不得不收集数据,在我的电脑上训练它,然后以某种方式嵌入它,我真的不知道知道怎么做了。

我在网上看到一些人 post 说你可以生成一个权重矩阵并将其嵌入到微控制器中,因此根据你提供的数据预测某些东西将是一个简单的函数这个功能。这是正确的做法吗?

无论如何,我的问题是,如何将分类算法嵌入到微控制器中?

我希望你们能帮助我并给予一些指导,我在这里有点迷路。

提前致谢。

我认为您可能受硬件限制。你可能想要更强大的东西。对于您的项目,您选择了 ARM 的 M 系列处理器。这是他们提供的最简单的平台,该架构不适合您尝试进行的那种处理。 ARM有以下三个基本分类:

  1. M - 微控制器
  2. R - 实时
  3. A - 应用程序

您想获得对这些复杂计算具有强大硬件支持的东西。为此,您的起点应该是 A 系列。如果你需要做浮点运算,你肯定需要从 A 系列开始,并且可能会得到一个带有 NEON-FPU 的。

TI 的 Discovery 系列是一个不错的起点,或者也许只是使用 Raspberry Pi(至少对于开发部分)?

但是,如果您坚持使用 M0,我认为您可以使用像 ROS-C 这样的轻量级软件来实现它。我知道有一些带有 ROS 的软件包可以做到这一点,即使它主要用于机器人技术,您也可以根据自己的工作进行调整。

Dependency Free ROS

Neural Networks and Machine Learning with ROS

我一直在考虑自己做这个来解决我很难手动开发启发式的问题。

您将不得不编写自己的机器学习方法,因为据我所知,没有任何适合低端 MCU 的机器学习库。

根据问题的难易程度,仍有可能开发和训练一种在低端 MCU 上表现良好的简单机器学习算法。毕竟,一些 older/simpler 机器学习方法在具有类似约束的硬件上使用并取得了令人满意的结果。

一般来说,我会这样做:

  1. 将(标记的)数据传输到 PC(通过 UART、SD 卡或任何可用的方式)。
  2. 使用数据和机器学习工具包(scikit-learn、weka、vowpal wabbit 等)进行实验。在继续前进之前,请确保现成的方法能够产生令人满意的结果。
  3. 试验特征工程和选择。尽可能获取最小的特征集以节省资源。
  4. 编写自己的机器学习方法,最终在嵌入式系统上使用。我可能会选择感知器或决策树,因为它们不一定需要大量内存。由于你没有 FPU,我只会使用整数和定点运算。
  5. 进行正常的训练程序。 IE。使用交叉验证找到最佳调整参数、整数位宽、基数位置等
  6. 运行 保留测试集上的最终训练预测器。
  7. 如果您训练的预测器在测试集上的表现令人满意,请将您的相关代码(计算预测的代码)和您训练的模型(例如权重)移至 MCU。 model/weights 不会改变,因此它们可以存储在闪存中(例如作为常量数组)。