我是在学习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里的模型转数组后使用原理是一样的。
&&开发前提
- 假设大家使用过STM32CubeMX,当然没学过的可以取微雪课堂看看,记得刚开始我也是从微雪入门,现在已经是白雪皑皑了啊,不过注意,当时我看的微雪课堂的教程是5.0以前版本,会有些许不同,不过百度大部分能解决的;
- 假设大家能够安装X-Cube-AI扩展。
- Python版本3.7;
- Tensorflow 2.0;
- 支持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