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

Ren*_*les 5 embedded microcontroller machine-learning scikit-learn

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

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

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

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

我希望你们能帮助我并提供一些指导,我有点迷失在这里.

先感谢您.

use*_*704 5

我一直在考虑自己解决一个问题,即我很难用手工开发启发式算法.

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

根据问题的严重程度,仍然可以开发和训练一种在低端MCU上运行良好的简单机器学习算法.总而言之,一些较旧/较简单的机器学习方法在具有类似约束的硬件上使用时具有令人满意的结果.

一般来说,这就是我要这样做的方式:

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