嵌入式机器学习系列00:STM32图像分类
前言
我们可以肯定的告诉你:完全可以,这就是嵌入式机器学习(EmbeddedML)技术!不要忘了MCU才是真正的“霸主”!
下面请听小编为你慢慢道来。
嵌入式软硬件技术:ARM、DSP、C/C++、Linux、Android等 图像处理:数字图像理论、OpenCV等 机器学习理论:高数、线代、CNN、激活函数、损失函数、梯度下降等 机器学习框架:TensorFlow、Caffe等 Python . . .
机器学习技术简介
机器学习是一种新的编程方式,一种能够让机器具有学习能力的编程方式。
我们来看看传统的编程方式与机器学习这种编程方式有何不同。
传统的编程方式是使用规则(由程序员编写)和数据生成结果。
机器学习与传统的编程方式相反,我们输入的是结果和数据,得到的是规则,这个规则是通过机器学习技术得到的,而不是由程序员编写的。
为什么要使用机器学习技术?
机器学习的过程
机器学习应用一般分为两个过程:
一是模型的训练,这个过程需要大量的数据和计算量,一般在计算能力很强的计算机上进行。
二是使用训练所得的模型对输入进行预测,这个过程计算量相对就会小很多,可以在手机上,甚至是在MCU上进行。
在STM32上进行图像分类实验
这里仅介绍如何在STM32上运行机器学习模型,从而对输入图像的类别进行预测。至于模型的网络搭建、训练和转换将在后续文章中介绍。
项目地址:https://github.com/edgeML/cifar10_image_classifier_on_stm32
图像分类项目简介
CIFAR-10数据集简介
CIFAR-10数据集由10类32x32的彩色图片组成,一共包含60000张图片,每一类包含6000图片。其中50000张图片作为训练集,10000张图片作为测试集。CIFAR-10数据集官网:https://www.cs.toronto.edu/~kriz/cifar.html
项目的输入
输入是一幅宽32像素高32像素的彩色图像,为方便STM32实验操作,事先将图像转换为像素值数组,存放在armnnexamplescifar10_inputs.h中。
项目输出
细心的同学可能要问了,为什么这里的输出是127,而不是一个0~1之间的数?
这个跟我们使用的Softmax函数有关,一般Softmax函数的公式是这样的:
y_i = e^(x_i) / sum(e^x_j)
y_i = 2^(x_i) / sum(2^x_j)
众所周知,微控制器的计算性能有限,这样做可以大大减小计算量,并且从数学上来讲梯度是一样的,我们依然能够很好地分辨出目标图像所属的类别。
调试运行
机器学习介绍
边缘智能实验室
专注于边缘智能!
长按识别二维码关注