STM32CubeMX AI尝尝鲜

  • X-Cube-AI介绍
  • &&开发前提
  • 创建模型
  • 创建工程
  • 修改工程
  • 输出结果

  我是在学习Tensorflow 2.0的时候,当然,最终还是为了跑在嵌入式设备上,因为这次疫情影响,在离住的地方比较近的办公场所办公,手头上只有一块STM32F407ZG的开发板,没错,是某点某子的开发板,想着要不在这板子上跑跑,刚好之前看到了Cube-AI,所以就进行了一波尝试。
  同时感谢这个视频,可以算是个新手入门指南视频,就是画质***->新手入门视频

X-Cube-AI介绍

  X-CUBE-AI是STM32Cube.AI生态系统的STM32Cube扩展软件包的一部分,通过自动转换预训练的神经网络并将生成的优化库集成到用户的项目中,扩展了STM32CubeMX功能。
官方链接在这里,从来没听说的朋友们可以先去预览一波啊:ST X-Cube-AI

  我就来浓缩一下,简而言之就是通过X-Cube-AI扩展将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用,目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上,STM8CubeMX没注意看,目前支持转化的模型有Keras、TF lite、ONNX、Lasagne、Caffe、ConvNetJS,还算比较牛*的,Cube-AI把模型转化为一堆数组,而后将这些数组内容解析成模型,和Tensorflow里的模型转数组后使用原理是一样的。

&&开发前提

  1. 假设大家使用过STM32CubeMX,当然没学过的可以取微雪课堂看看,记得刚开始我也是从微雪入门,现在已经是白雪皑皑了啊,不过注意,当时我看的微雪课堂的教程是5.0以前版本,会有些许不同,不过百度大部分能解决的;
  2. 假设大家能够安装X-Cube-AI扩展。
  3. Python版本3.7;
  4. Tensorflow 2.0;
  5. 支持Tensorflow2.0的各种插件

创建模型

  在PC上建立模型,我的模型是建立一个能源等级检测输出,输入电压,输出对应等级,我模型做成了分类,热乎乎热代码来啦:

'''
电源等级检测测试
训练模型阈值
一级    ->  v>=8.0
二级    ->  7.8<=v<8.0
三级    ->  v<7.8输入层 -> 隐藏层 -> 输出层'''
'''
电源等级检测测试
训练模型阈值
一级    ->  v>=8.0
二级    ->  7.8<=v<8.0
三级    ->  v<7.8输入层 -> 隐藏层 -> 输出层'''#导入工具包
import tensorflow as tf
import pandas as pd
import numpy as np#读取数据
data = pd.read_csv('data/voltage.csv', sep=',', header=None)
voltage = data.iloc[:,0]
level = data.iloc[:,1:]
level.astype(int)#建立模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units=20, activation='relu', input_shape=(1,)))
model.add(tf.keras.layers.Dense(units=10, activation='relu'))
model.add(tf.keras.layers.Dense(units=3, activation='softmax'))
model.summary()model.compile(optimizer=tf.keras.optimizers.Adam(0.001),loss=tf.keras.losses.categorical_crossentropy,metrics=[tf.keras.metrics.mse])
history = model.fit(x=voltage, y=level, epochs=40000)print(model.evaluate(voltage, level))#保存模型
model.save('level_check.h5')

然后再来个PC上对模型的载入与测试,并且将模型转换为TF lite格式(ps:如果直接使用.h5文件也是可以的,在CubeMX里输入模型类别选Keras),代码如下:

'''
电源等级检测测试
训练模型阈值
一级    ->  v>=8.0
二级    ->  7.8<=v<8.0
三级    ->  v<7.8
'''
#导入工具包
import tensorflow as tf
import numpy as npimport time
import datetime#输出函数 输出更加直观
def level_output(level=np.zeros(3)):for i in range(level.shape[1]):if level[0,i] == 1.0:return i+1#测试电压
test_v = 7.78t1 = time.time()#导入模型计算
load_model = tf.keras.models.load_model('level_check.h5')
out = load_model.predict([test_v])
print(out)cal_level = np.around(out).astype(int)t2 = time.time()#输出能源等级
level = level_output(cal_level)
print(level)
print((int(t2*1000)-int(t1*1000)))#转换模型为tf lite格式 不量化
converter = tf.lite.TFLiteConverter.from_keras_model(load_model)
tflite_model = converter.convert()#保存到磁盘
open("level_check.tflite", "wb").write(tflite_model)

训练数据不能漏呀,训练加后期测试使用哦,新建txt,然后另存为CSV就可以啦:

7.61,0,0,1
7.62,0,0,1
7.63,0,0,1
7.64,0,0,1
7.65,0,0,1
7.66,0,0,1
7.75,0,0,1
7.78,0,0,1
7.71,0,0,1
7.72,0,0,1
7.8,0,1,0
7.83,0,1,0
7.92,0,1,0
7.85,0,1,0
7.81,0,1,0
7.81,0,1,0
7.84,0,1,0
7.89,0,1,0
7.98,0,1,0
7.88,0,1,0
8.02,1,0,0
8.12,1,0,0
8.05,1,0,0
8.15,1,0,0
8.11,1,0,0
8.01,1,0,0
8.22,1,0,0
8.12,1,0,0
8.14,1,0,0
8.07,1,0,0

创建工程

  大家可以先跟着官方网站的使用特定模型的进行学习创建工程,当然也可以直接看我的这个步骤哦。

  1. 新建项目,然后导入我们的模型计算,点击Analyze,CubeMX会提示我们哪些MCU型号能支持我们使用,当然啦,你也可以直接选STM32F407ZGTX,模型很小,所以绝对支持的啦;
  2. 添加模型,解析后就可以进行桌面级的测试了,默认输入时随机数,输出无,所以没法做比对,大家可以自己做一下数据集哦,就把训练数据拆分为输入和输出两个.csv就可以了 ;





  3. 启用外部时钟与USART;


  4. 设置下代码输出位置与格式;

  5. 生成代码;

修改工程

  1. 经过上面繁琐的步骤,这样TFlite在STM32F407上的工程代码就生成好啦,下面来对咱们的程序进行修改,初始化串口,重构控制台输出,方便使用printf打印输出;

  2. 新增代码,以使用模型;

输出结果


  是不是非常的简单啊,不过比较难受的是,支持神经网络的底层代码是一个库文件,但是不影响我们使用,突发奇想,查看了代码,并没有启用STM32的专用的CRC校验,那么,是不是只要ROM和RAM足够,任何一个嵌入式设备都可以直接使用了呢?嚯嚯嚯,搞起来!!!!

STM32CubeMX AI尝尝鲜相关推荐

  1. MATLAB R2020a新鲜出炉,我来替各位尝尝鲜!

     01 MATLAB的重要性 为什么要强调MATLAB的重要性? 不管是在学术界还是工业界,MATLAB无论从应用广度,及受众满意度得分都非常高,究其原因,无外乎以下几点: 简单上手,谁用谁知道. 在 ...

  2. 刚安装了Fedora 33,尝尝鲜~,哈哈~~~

    RT,Fedora 33已经安装,正在当小白鼠,尝尝鲜.哈哈~~

  3. 刚安装了Fedora32,尝尝鲜~,哈哈~~~

    RT,Fedora32已经安装,正在当小白鼠,尝尝鲜.哈哈~~

  4. STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow)

    STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow) 在上一篇文章中我们已经有训练好的tflite模型,接下来我们要在Clion中实现,如果是Keil的朋友可以 ...

  5. 大家快来尝尝鲜 转用 curl 和 scsh 编写 web 脚本(转)

    大家快来尝尝鲜 转(转)[@more@]用 curl 和 scsh 编写 web 脚本赵蔚 (zhaoway@public1.ptt.js.cn) 自由程序员2004 年 1 月简介让我们看看程序员是 ...

  6. 尝尝鲜:IDEA 使用 GitHub Copilot 插件

    现在要收费了,不用试了!!!! 简介: GitHub Copilot 是由微软与OpenAI在2021年6月29日共同推出了一款AI编程工具,基于 GitHub 及其他网站的源代码,可根据上文提示为程 ...

  7. OpenAPI 规范 3.1.0 发布,赶紧来尝尝鲜!

    我们常说,新年新气象!这不,刚开年,各大厂商就忙着发布自己的最新产品. Spring Boot发布了最新的2.4.3版本,昨天小编刚为大家介绍过,有兴趣的小伙伴点这里:Spring Boot 2.4. ...

  8. 甲骨文正式发布Java 14(Oracle JDK 14),下载下来尝尝鲜~~~

    Java一直以来都是深受软件开发者青睐的首选编程语言.伴随着Java 14创新功能的按时交付,对未来的周详规划以及对生态系统的持续投入,Java平台将继续为现代应用开发注入动力. 代码示例: publ ...

  9. TensorFlow Serving 尝尝鲜

    2019独角兽企业重金招聘Python工程师标准>>> 作者:Mao Chan BitTiger尊重原创版权,转载已经过作者授权. 2016年,机器学习在 Alpha Go 与李世石 ...

最新文章

  1. day3 python 学习随笔
  2. python基础/编程语言,解释器和pycharm的安装
  3. 期货与期权(part1)--衍生品
  4. 海贼王为什么画风突变_什么是突变测试?
  5. 用java打出矩形阵型的数字_java输出数字发散矩形
  6. SpringCloud Hoxton版微服务- Gateway网关
  7. 新手入坑自动驾驶,我是这么学习的......
  8. [C++再学习系列] 具有链接的C++实体
  9. 华为鸿蒙os升级怎么升,华为鸿蒙OS2.0系统怎么升级
  10. Centos查看已经安装的软件或者包
  11. AliSQL-5.6.32编译安装
  12. 游戏必备组件有哪些_微信抖音小游戏黄金矿工案例详解
  13. 【汉诺塔问题】递归算法求解汉诺塔问题
  14. 去年我国软件业收入4.3万亿元 同比增长16.6%
  15. html语言文本框怎么做,HTML文本框参考样式
  16. 24种游戏化设计工具
  17. 减少mysql存储列的方法
  18. java递归获取所有的子级节点
  19. ElasticSearch License过期更新
  20. 安装gensim库的方法最终解答!

热门文章

  1. php无限极分类 退出,PHP实现无限极分类图文教程
  2. 人人网FED CSS编码前端开发规范
  3. .NET应用跨域问题解决方案
  4. [转载]在eclipse中如何用JDK的帮助文档
  5. 【JAVA预备】课程目录
  6. BMP图像结构及绘制
  7. 使用python判断字母大小写的几种方法
  8. CDH6.3.2之Kafka配置和命令
  9. Vulnhub靶场渗透-CH4INRULZ_v1.0.1
  10. winform中自定义控件里面的控件随着自定义控件的改变而改变