目录
前言
最近在尝试一些基于Simulink的边沿AI部署,通过这个案例总结Matlab 分类学习功能的使用。本案例通过输入3000张28*28的灰度图像,训练分类学习模型。并验证训练好的模型最后部署到MCU。
导入数据
如下图是用于训练的数据,每一张图片上有一个数字,达到的目标是:训练好模型后,给定一个28*28带数字的灰度图像就可以识别出图像上的数字并输出结果。要训练一个模型首先就是导入数据,如下图就是用于训练的图片。
每一张图片导入到Matlab workspace后都是一个28*28的数组,如下图:
完整的训练数据只需要用脚本把这3000张图像数据整理成一个28*28*3000的数组和对应的标签即可。这里还多了一个步骤就是把uint16的图片数据转换成了0-1的double类型数据进行归一化。如下图就得到了用于训练的x,y两个数组。X是输入的数据3000个28*28数据,Y是对应的答案3000*1个,每张图对应一个结果。
本Demo所使用的图片从0-9,每个数字有300张用于训练的图片。
到这一步,用于训练的数据就整理好了。
训练学习
1.导入用于训练的数据。
打开分类学习器(Classification Learner), 从工作空间导入我们准备好的变量。
导入X和Y数据集。
2.根据自己的需要选择想要训练的模型,也可以在OPTIONS配置相关的训练参数,这里直接默认即可。选择ALL Simulink Supported. 然后再点Train ALL. 然后喝杯茶先!
3. 选择合适的模型
训练出了很多模型,失败的就不用考虑了。后面就根据精度和占用资源的情况选择合适的模型即可。如果不考虑算力,100%的都可以选择,如果是要部署在MCU或者边沿设备上就需要选择资源占用较小的。
Summary可以看到训练好后模型的参数,可根据实际需要选择。
导出训练模型
导出Simulink模型,也可以导出.m的脚本模型,根据自己需要选择。
导出的模型从工作空间导入图片进行验证,也可以自己集成在Simulink里面。
仿真测试
从目录里导入图片进行分类识别,如下可以看到都能正确识别。
后面就可以把模型生成代码集成在MCU了,这里也尝试了在MCU上集成测试,测了CPU和RAM,FLASH的使用情况,这个模型还是比较轻量级的。
总结
简单介绍了分数学习工具的使用,也算是提供了模型训练的一种解决方案,供参考。