打印
[APM32F4]

在MCU上运行机器学习算法的尝试

[复制链接]
1432|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guguli|  楼主 | 2024-7-31 23:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guguli 于 2024-7-31 23:22 编辑

#申请原创# 在MCU上部署机器学习算法的尝试(一)      随着人工智能在生活应用的越来越多,机器学习就走进了大众的视野,机器学习是人工智能的一个重要分支,它专注于开发算法和技术,使计算机系统能够从数据中学习和改进。机器学习的核心目标是让计算机系统能够从经验中学习,机器学习依赖于大量的数据作为学习的基础。
       现在机器学习已经广泛应用于许多领域,那么如何在MCU上部署机器学习呢?在 MCU上,通常使用的确实是C语言作为主要的编程语言,MCU相比传统计算机平台有一些限制和特殊需求,MCU通常具有有限的处理能力、内存和存储空间。这意味着需要精简和优化机器学习模型,以适应这些资源限制。选择适合MCU的机器学习算法和模型结构至关重要。通常会选择轻量级的模型,如基于线性模型或小型神经网络的模型,而不是复杂的深度神经网络。同时,需要平衡模型的复杂度和性能要求。将机器学习部署到MCU上需要综合考虑计算能力、能效、数据处理和实时性等多方面的因素。
      想要在MCU上部署机器学习算法,考虑到MCU的局限性,我的第一个想法就是尝试在MCU上运行我认为机器学习最简单的算法:K邻近算法;K邻近(K-Nearest Neighbors, KNN)算法是一种简单而有效的监督学习算法,用于分类和回归问题。KNN算法基于一个简单的假设:与一个样本最相似的样本,其标签也应该是相似的。换句话说,样本的类别可以通过其最近邻的类别来决定。对于分类问题,给定一个未标记的样本,KNN算**从训练集中找到与该样本最接近(最相似)的K个样本(即最近邻)。然后,通过多数表决的方式,将该未标记样本分配给K个最近邻中最常见的类别。KNN算法使用距离度量来确定最近邻。常用的距离度量包括欧式距离、曼哈顿距离等。K是KNN算法的一个关键参数,决定了最终预测的准确性。选择合适的K值通常通过交叉验证来确定,以避免过拟合或欠拟合问题。KNN算法通常适用于以下情况:数据集中类别的分布比较均匀的分类问题。对计算效率要求不是特别高的场景。
   

      由于之前的KNN算法的实现,是使用Python在计算机上训练的,在MCU上并不允许,所以我想到的第一个方法就是,使用C语言实现KNN算法,代码如下:
首先定义一个结构体,用于存储分类的点x和y坐标,以及所属的标签,然后定义函数去计算目标点和参考点的距离,然后比较目标点和多个参考点的距离

将目标点和参考点之间的距离计算完毕后,对计算的距离进行排序,选出和目标点最小距离的参考点,确定目标点的分类

要将目标点进行分类,就要选取参考点进行训练,这里只选取了四个点进行训练,将待分类的点进行2分类,最后通过串口打印分类结果


要保证分类的准确,就要使数据集足够大,当数据集足够大,MCU的资源就产生了限制。虽然这种方法属于是在没事找事,但也算是进行了一个小小的实验。

使用特权

评论回复
沙发
gouguoccc| | 2024-8-1 07:47 | 只看该作者
有个基于MCU的开源库叫OPEMV,楼主可以了解一下。

使用特权

评论回复
板凳
Lbsonggz| | 2024-8-1 21:15 | 只看该作者
MIT使用tinyEngine在STM32F4芯片上实现了分类训练和识别

使用特权

评论回复
地板
pixhw| | 2024-8-4 09:49 | 只看该作者
使用专为嵌入式系统设计的轻量级机器学习模型,如TinyML模型。这些模型通常基于神经网络,但具有较少的层和参数,以减少计算和存储需求。

使用特权

评论回复
5
albertaabbot| | 2024-8-4 11:37 | 只看该作者
选择一个具有足够计算能力和内存的MCU,以及支持机器学习算法的硬件加速器(如果有的话)。
一些MCU制造商已经开始提供专门的AI处理器,如Cortex-M7,这为在MCU上运行机器学习算法提供了可能。

使用特权

评论回复
6
lzbf| | 2024-8-4 12:56 | 只看该作者
随着 MCU 性能的不断提升,一些轻量级的机器学习算法可以在其上实现。
对于资源受限但对实时性和低功耗有要求的应用场景,如物联网终端设备,在本地 MCU 上运行简单的机器学习算法具有优势。

使用特权

评论回复
7
jonas222| | 2024-8-4 14:38 | 只看该作者
结合边缘计算技术,将复杂的机器学习任务卸载到云端或边缘服务器,而MCU只负责数据的采集和初步处理。

使用特权

评论回复
8
primojones| | 2024-8-4 16:19 | 只看该作者
由于MCU的资源限制,应选择轻量级的机器学习模型,如微型神经网络、决策树、支持向量机(SVM)的简化版本等。

使用特权

评论回复
9
chenqianqian| | 2024-8-5 07:59 | 只看该作者
现在MCU主频也可以跑到上GHz,能够跑一些简单的机器学习算法。

使用特权

评论回复
10
uiint| | 2024-8-5 10:15 | 只看该作者
在保持高性能的同时,需要有效管理功耗以延长设备电池寿命。

使用特权

评论回复
11
biechedan| | 2024-8-5 12:46 | 只看该作者
利用开源框架和库,如TensorFlow Lite for Microcontrollers,它提供了针对MCU优化的机器学习模型和运行时环境。

使用特权

评论回复
12
jtracy3| | 2024-8-5 14:45 | 只看该作者
利用MCU的特定硬件特性,如SIMD(单指令多数据流)指令集、硬件加速器等,来提高算法的执行效率。

使用特权

评论回复
13
ingramward| | 2024-8-5 16:39 | 只看该作者
计算能力有限:MCU 的处理能力相对较弱,难以处理复杂的大型机器学习模型。
内存限制:MCU 通常具有较小的内存容量,难以存储大规模的数据集和模型参数。
功耗约束:运行机器学习算法可能会增加功耗,这对于电池供电的设备是一个重要考虑因素。

使用特权

评论回复
14
ulystronglll| | 2024-8-5 18:31 | 只看该作者
将机器学习功能整合到资源和功耗受限的设备中,以在边缘进行数据处理和决策。

使用特权

评论回复
15
lihuami| | 2024-8-5 20:19 | 只看该作者
将训练好的机器学习模型转换为MCU可执行的格式,并成功部署到设备上。

使用特权

评论回复
16
iyoum| | 2024-8-5 22:06 | 只看该作者
利用MCU上的硬件加速器,如神经网络加速器、DSP(数字信号处理器)等,来加速机器学习算法的执行。

使用特权

评论回复
17
abotomson| | 2024-8-6 09:42 | 只看该作者
如STM32Cube.AI、X-CUBE-AI等工具和STM32、Arduino Nano 33 BLE Sense等开发板,为开发人员提供了从模型训练到部署的一站式服务。

使用特权

评论回复
18
yeates333| | 2024-8-6 11:34 | 只看该作者
使用具有硬件加速功能的MCU,如ARM Cortex-M系列中的数字信号处理(DSP)指令集,可以加速机器学习算法中的矩阵运算。

使用特权

评论回复
19
linfelix| | 2024-8-6 13:12 | 只看该作者
应用量化和压缩技术来减小模型的大小和计算复杂性。例如,将浮点数权重转换为整数或使用更少的比特表示权重。

使用特权

评论回复
20
pmp| | 2024-8-6 14:49 | 只看该作者
在将数据输入机器学习模型之前,进行必要的数据预处理和特征提取,以减少模型的复杂性和计算需求。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

6

帖子

0

粉丝