【嵌入式AI入门日记】将 AI 模型移植到 RT-Thread 上 以下文章来源于RTThread物联网操作系统 ,作者lebhoryi&summer “本期我们分享的主题是如何将 AI 模型部署到嵌入式系统中。” 嵌入式关联 AI AI落地一直是一个很红火的前景和朝阳行业。我的好奇心也比较旺盛,所以关于任何嵌入式和 AI 相关的都是想尝一尝。本系列文章将带你一步一步把 AI 模型部署在嵌入式平台,移植到 RT-Thread 操作系统上,实现你从菜鸟到起飞的第一步甚至第 n 步! 开发环境: 后续开发过程将基于 STM32H743ZI-Nucleo 开发板,并且使用 STM32CubeMX.AI 工具。它可以基于训练好的 AI Model (仅限 Keras/TF-Lite),自动生成嵌入式项目工程(包括但是不局限于 MDK、STM32CubeIDE 等)。该工具易于上手,适合嵌入式 AI 入门开发。 STM32CubeMX 是 ST 公司推出的一种自动创建单片机工程及初始化代码的工具,适用于旗下所有 STM32 系列产品,现在其 AI 组件可以提供 AI 模型到嵌入式 C 代码的转换功能。 1. 准备工作 " S* E$ {' R) I; [0 y3 s1.1 安装开发环境 笔者用的操作系统是 Ubuntu 18.04。本次实验要用到如下开发工具,软件的安装过程很简单,网上都有很成熟的教程,在此不再赘述。该篇教程同样适用于 Windows 环境,实验步骤完全相同。 STM32CubeMx STM32CubeIDE STM32CubeProgrammer 1# Oracle 官网中下载 JavaSE JDK 压缩包4 A7 N" Y( s4 p3 o5 ^& O- E & R" j3 O7 p0 b. |, o2 L2$ sudo tar zxvf jdk-8u172-linux-x64.tar.gz -C /usr/lib/jvm& x8 i1 F9 W& V% k 3# 将下载的JDK注册到系统中: c/ g5 d, u* K! Q 4$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_172/bin/java 3002 a( J8 O8 ^( n4 a c 5# 切换JDK; o% Z% ]6 w" { 6$ sudo update-alternatives --config java 7# 查看JDK 版本! y* z/ q/ v0 W! k 8$ java -version 1.2 在 PC 端搭建极简神经网络 首先将如下开源仓库克隆到本地: * p& M8 w+ e7 ], q$ C# G7 X在本次实验中我选择了最简单的一个线性回归( Linear Regression)Tensor Flow2 Demo 作为示例,模型相关源文件说明如下: · tf2_linear_regression.ipynb 内含三种不同方式搭建网络结构 · tf2_线性回归_扩展.ipynb 内含不同方式训练模型 其中,在模型搭建的时候,重新温习了一下,有三种方式(各个方式的优缺点已经放在参考文章当中,感兴趣的同学自行查阅): · Sequence · 函数式 API · 子类 后面将 AI 模型导入到 CubeMx的过程中,如果使用后两种方式生成的网络模型,将会遇到如下报错: 1INVALID MODEL: Couldn't load Keras model /home/lebhoryi/RT-Thread/Edge_AI/Project1/keras_model.h5, 2error: Unknown layer: Functional 暂时的解决方式是采用Sequence 方式搭建神经网络,训练好的 AI Model 会被保存为 Keras 格式,后缀为 .h5,例如 keras_model.h5。 示例模型我已经保存好了,大家可以直接下载该模型进行实验,下载地址如下: 本次示例所训练的神经网络模型结构如下: + Q7 Y2 M( ?; G/ A2. 使用 CubeMX AI 生成工程 在 CubeMX 中选择STM32H743ZI Nucleo 开发板,这里其实不限制开发板型号,常见的 1 I9 r$ a$ l4 i" \; V) ` 2.1 打开 CubeMX 2.2 安装 CUBE-AI 软件包 打开菜单栏中的 Help,选择Embedded Software Packages Manager,然后在STMicroelectronics 一栏中选择 X-CUBE-AI 插件的最新版本,安装好之后点击右下角的 Close。 在工程中导入 X-CUBE-AI 插件: $ i3 e. T: p8 Q0 \1 j, C会出现如下界面: 接下来选择用于通信的串口,这里选择串口 3,因为该串口被用于 STlink 的虚拟串口。 $ F* J4 h$ d% a4 K, o8 _. g2.3 导入 AI 模型到工程中 # L) Z) c' k: _将 AI 模型烧录到开发板前,需要先分析 Model,检查其是否可以被正常转换为嵌入式工程,本次实验使用的模型比较简单,分析起来也也比较快,结果如下所示: 接下来我们要在开发板上验证转换后的嵌入式工程,在这个过程中 CubeMX AI 工具会根据你导入的 AI 模型,自动生成嵌入式工程,并且将编译后的可执行文件烧录到开发板中,并通过STlink 的虚拟串口验证运行的结果。我的系统是 Ubuntu,不支持 MDK,所以在这里选择自动生成 STM32CubeIDE 工程。 验证成功界面如下所示: 2.4 生成项目工程 上一步我们只是进行了项目结果的验证,但是并没有生成项目源代码,接下来我们将生成项目工程,如下图所示: 生成后的 Project 文件夹树如下所示: 1(base) #( 07/03/20@10:51上午 )( lebhoryi@RT-AI ):~/RT-Thread/Edge_AI@master✗✗✗ . V! x& `* e m6 ?8 D# a( _8 C2 tree -L 2 ./Project1 8 `/ t$ m4 F- y 3./Project1 4├── DNN # CubeMX 生成工程路径/ H8 v4 G6 Y% f9 d+ S 5│ ├── DNN.ioc # CubeMX 类型文件5 _( f! N+ c& x* T/ l1 C$ `) [ 6│ ├── Drivers 7│ ├── Inc 8│ ├── Middlewares. q" B& k8 d, D 9│ ├── network_generate_report.txt 10│ ├── Src 11│ ├── Startup' h( O* H1 o' w5 v 12│ ├── STM32CubeIDE" M% Q7 U, ^& K* ~9 O3 p 13│ ├── STM32H743ZITX_FLASH.ld 14│ └── STM32H743ZITX_RAM.ld 15├── image # 相关图片保存文件夹 16│ ├── mymodel1.png # model4 ?, b) W+ _' I: J3 U 17│ └── STM32H743.jpg # H743 18├── model # model 保存路径8 b4 i$ k G. o! n# x 19│ └── keras_model.h53 u v- i |) b: }9 [ 20├── Readme.md 21├── tf2_linear_regression.ipynb 22└── tf2_线性回归_扩展.ipynb 至此,神功练成了一大半,剩下的就是代码调试的工作了。 3 G. _2 ?* o; {9 n 3. 代码调试 关于 STM32CubeIDE 的初步认识:基础说明与开发流程:http://blog.csdn.net/Naisu_kun/article/details/95935283 ! X" `( Q t- y1 ^$ T2 X 3.1 导入工程 选择 File 选项 -->import: 选择先前导出工程的路径: 导入成功的界面如下所示: 接下来就可以使用 STM32Cube IDE 来调试生成的工程了。 3.2 生成 bin 文件 在编译的过程中还会自动生成相应的 bin 文件,后续可以通过 stm32cubeProgramer 工具将 bin 文件烧录到开发板中。 * U" p" p' A$ o: s3.3 烧录 .bin 文件 打开STM32CubeProgramming,点击右上角connect,然后选择Open file,选择要打开的.bin 文件。 烧录成功的界面: 3.4 Other 在 ubuntu 系统中我们可以使用串口工具cutecom 来查看最终程序的运行结果,程序运行结果如下: 在使用 cutecom 连接串口前,记得断开 STM32Programer 和开发板的连接,否则会出现串口打开错误的情况。 可以看到我们的 AI 模型已经在开发板上欢快地跑了起来 ,奥里给!!! 4. 参考文章 / Y6 |8 o8 S. hSTM32CubeMX系列教程 Tensorflow 2.0 中模型构建的三种方式: |
为什么图片这么模糊 |
赞一个 |
学习学习 |
我想问一下,我打算把运行成功的AI程序移植到我其他的程序里,发现新移植好的程序陷入了汇编指令B,也就是死循环,程序是运行到ai_platform_network_create这个创建网络的函数死了,应该是无法执行到这个函数,请问这个是什么问题呢 |
还要看运算速度如何。 |
破解边缘AI硬件与软件挑战,意法半导体解读三大创新要点
意法半导体助力企业产品智能化,加快边缘人工智能应用
哪些传感器嵌入式功能适用于我的应用?
线下实训 | ST端侧人工智能之视觉检测
意法半导体嵌入式 AI 解决方案增加简化机器学习开发的高级功能
【Wio Lite AI视觉开发套件】+摄像头图像采集
全站首个NanoEdge_AI试用(dogs)
线下实训 | ST端侧人工智能之计算机视觉实践课程
Cube.AI【4】cifar10 在魔改Nucleo STMF767平台上的测试
基于STM32的机器学习工具 - NanoEdge AI Studio