其实这个话题我去年创建这个公众号之初就有文章想去写 边缘计算
,尤其是机器学习方面。但是无奈这方面需要的技能点实在是太多了,包括神经网络的基本知识,机器学习,模型的建立以及如何部署到STM32等嵌入式芯片上,一整套的流程需要的基本功实在太深厚了。因此一直停滞不前。
边缘计算是一种 分布式计算模型
,其核心思想是将数据处理和计算资源放置在接近数据产生源头的边缘设备、传感器或用户设备上。通过这种方式,边缘计算能够提供更快速、实时的计算和数据分析能力,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。
通俗点来说, 我们将原本需要上位机处理的大量运算的工作交给下位机处理
,而机器学习就是一种需要大量的运算,需要占用极大的运算资源的一种数据处理途径。
这些年陆陆续续的也有在嵌入式方向的机器学习使用,例如AI小车,基于树莓派的手势识别,基于STM32的手势识别,人脸识别,手写数字识别等等。但是他们都有两个非常巨大的局限!
首先是学习周期很长,例如在STM32部署机器学习模型需要学习大量的前置知识,诸如我前面提到的模型训练,模型优化等,并且要学会将模型嵌入进STM32,虽然CubeMX这种有着能够快速嵌入机器学习模型的组件CubeAI,但是光模型的获取就已经卡死了百分之九十对其产生兴趣的使用者望而却步。
其次是由于大部分芯片的性能限制,因为首先模型的本身需要有一定的空间来存放,因此存储空间不够的芯片连模型文件本身也无法存放。并且由于运行模型通常是一个庞大的计算,因此对于芯片的运算能力有着极高的要求,主观的体现在主频、算法、硬件加速器上,而高性能的芯片通常意味着价格的极具飙升。
这可能也是嵌入式边缘计算无法迟迟的得到广泛应用的原因吧。
但是边缘计算的功能和应用前景却非常广大。
例如一张2272273(3是其RGB颜色)的图片,如果对其进行人脸识别,直接上传图片数据的话将会占用非常大的带宽。而如果我们可以部署边缘化的人脸识别,将人脸识别的结果(位置或者是否)传输上去,可能只需要一个字节或者几个字节即可。
因此边缘计算的使用可以帮助我们更好的使用嵌入式芯片的性能 。极大的节省了传输数据的带宽,为更多设备的部署提供了条件。
曾经有一个项目是识别负载网络的负载类型(例如RL并联,RL串联,LC并联等等)其本质上表现为扫频曲线的不同形状,可是我们在代码层面去识别这样子的网络类型就会异常的复杂。
但是如果从机器学习的角度来看,这个问题是一个很典型的分类问题,我们可以通过将 收集到的扫频信号作为输入数据
,用许多的数据来实现网络模型的建立,之后可以依据这个网络模型来让计算机自己识别出最后网络的类型,而 最后的精度完全取决于模型的准确性 。
而且随着这些年来嵌入式芯片的运算能力越来越强,很多芯片的主频都可以上GHZ的级别,完全有那个性能运行神经网络的模型。
并且随着编程环境的优化,开源性和移植性进一步的优化,例如STM32编程中CubeMX等软件的出现,随着时代的发展嵌入式神经网络的前景将越来越广阔。
所以接下来可能就会尝试去试试网络模型的构建来使用CubeMX的CubeAI实现一些STM32上的机器学习的项目,例如人脸识别呀~什么什么的。
之后几天会出一些关于其探索和注意事项。