文章目录
本项目为
RT-AK
的一个实战 DEMO
。
致力于做一个保姆级教程。
本教程 RT-AK 适配目标平台:STM32
0. RT-AK 简介
目前该项目为 RT-AK 的示例 Demo,基于 ART-PI 硬件平台和 Mnist 数据集。
-
RT-AK
:RT-Thread AI Toolkit
,RT-Thread AI
套件。 -
Github:
https://github.com/RT-Thread/RT-AK
RT-AK
是 RT-Thread
团队为 RT-Thread
实时操作系统所开发的 AI
套件,能够一键将 AI
模型部署到 RT-Thread
项目中,让用户可以 在统一的 API
之上进行业务代码开发,又能在目标平台上获极致优化的性能,从而更简单方便地开发端侧 AI
应用程序。
在 RT-AK
支持下,仅需要一行命令,python aitools.py --model xxx...
,即可将 AI
模型部署到 RT-Thread
系统中:
详细的命令请查阅:[如何运行 aitools.py](# step1 运行 rt_ai_tools/aitools.py
)
我们将致力于降低嵌入式 AI 落地的难度和门槛
1. 准备工作
- Windows 10
- Python >= 3.7
准备以下四份重要重要重要的材料:
Index | Prepare | Example |
---|---|---|
1 | 硬件以及 BSP | ART-PI BSP |
2 | 神经网络模型 | ./rt_ai_tools/Model/keras_mnist.h5 |
3 | STM32 AI 插件 | X-CUBE-AI 下载解压,下文有介绍 |
4 | RT-AK | RT-AK 代码克隆到本地 |
1.1 X-CUBE-AI 介绍
-
下载地址:https://www.st.com/zh/embedded-software/x-cube-ai.html
-
版本:V5.2.0
TO DO LIST: 最新的版本是 V6.0.0,目前使用的是 V5.2.0,稍后的 RT-AK 将会更新
X-CUBE-AI
是 STM32Cube.AI
生态系统的 STM32Cube
扩展软件包的一部分,能够自动转换预训练的神经网络。
1.2 X-CUBE-AI 解压
其中:
stm32ai-windows-5.2.0.zip
是我们所需要,该文件夹里面存放的是X-CUBE-AI
模型转换软件:stm32ai
STMxxx.pack
是STM32Cube.AI
的静态库文件,无需解压,已经存在,位于./RT-AK/rt_ai_tools/platforms/stm32/X-CUBE-AI.5.2.0
解压 stm32ai-windows-5.2.0.zip
。
在这里我将其解压到:D:\Program Files (x86)\stm32ai-windows-5.2.0
,可以在该路径下看见有一个 windows
文件夹。
记下该路径,重要重要重要
1.3 ART-PI BSP
-
先打开
RT-Thread Studio
-
新建
ART-PI BSP
如果在开发版的地方,没有找到
STM32H750-RT-ART-PI
,请查阅:https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi/blob/master/documents/UM5002-RT-Thread%20ART-Pi%20%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C.md
2. 执行步骤
step1 运行 rt_ai_tools/aitools.py
代码将会自动使用
STM32Cube.AI
的模型转换工具,获得一个集成了 AI 的 BSP对,就是这么硬核,一步肝到位!
内部的流程请看源码或者 plugin_stm32
仓库下的 readme
文档
运行命令
进入 edge-ai/RTAK/tools
路径,运行 aitools.py
。
# 运行命令
python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools=<your_x-cube-ai_path> --clear
# 示例
python aitools.py --project="D:\RT-ThreadStudio\workspace\test" --model="./Models/keras_mnist.h5" --platform=stm32 --ext_tools="D:\Program Files (x86)\stm32ai-windows-5.2.0\windows" --clear
运行到该步骤操作已经结束,后续是补充说明。
运行命令其他参数补充说明
# 指定转换模型的名称,--model_name 默认为 network
python aitools.py --project=<your_project_path> --model=<your_model_path> --model_name=<model_name> --platform=stm32 --ext_tools=<your_x-cube-ai_path>
# 保存运行 stm32ai 线程过程中产生的文件,--clear 默认为空
# 如果存在,则将会删除 `stm32ai` 运行时产生的工作文件夹,即`--stm_out`
python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools=<your_x-cube-ai_path>
# 指定保存运行日志, --log 默认为空
python aitools.py --project=<your_project_path> --model=<your_model_path> --log=./log.log --platform=stm32 --ext_tools=<your_x-cube-ai_path>
# 指定保存的文件夹名称,--stm_out 默认是当天时间,比如 './20210223'
python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools=<your_x-cube-ai_path> --stm_out <new_dir>
# 指定生成的 c-model 名,--c_model_name 默认是network
python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=stm32 --ext_tools=<your_x-cube-ai_path> --c_model_name=<new_model_name>
运行参数详细说明
- 主函数参数部分
Parameter | Description |
---|---|
--log | log 日志存放路径,默认是空,如果有,则将保存log日志文件,例如:./log.log |
--project | OS+BSP 项目工程文件夹,默认为空,需要用户指定 |
--model | 神经网络模型文件路径,默认为 ./Models/keras_mnist.h5 |
--model_name | 神经网络模型转换后新的模型名,默认是 network |
--rt_ai_lib | RT-Thread 官方提供的 RT-AK Lib ,默认是 ../rt_ai_lib |
--platform | 指定硬件平台信息,目前支持:stm32 、k210 ,默认是 example |
- STM32 平台插件参数部分
Parameter | Description |
---|---|
--ext_tools | X-CUBE-AI 存放路径,模型转换工具,内有 stm32ai 可执行软件,需要用户指定 |
--cube_ai | X-CUBE-AI 运行所需的静态库,默认为./platforms/stm32/X-CUBE-AI.5.2.0 |
--rt_ai_example | 存放rt_ai_<model_name>_model.c 示例文件,默认是 ./platforms/stm32/docs |
--stm_out | 经过 stm32ai 线程处理之后产生的中间文件夹路径,默认是当天的时间戳命名 |
--workspace | stm32ai 运行时产生的临时工作区,默认是./stm32ai_ws |
--val_data | 默认为空,即使用内部自生成的随机数据集,允许用户自定义测试数据集, |
--compress | 表示将应用的全局压缩因子,仅应用在全连接层,可选 “1|4|8”,默认值:1 |
--batches | 指示生成了多少随机数据样本,默认是10 |
--mode | “analyze|validate” 模式(可选)+”generate“模式(必须有),1 表示选中,在{'001', '011', '101', '111'} 中选一个,默认是 001 |
–network | 在 Documents 中的模板文件的模型名,默认是 mnist |
–enable_rt_lib | 在 project/rtconfgi.h 中打开宏定义,默认是 RT_AI_USE_CUBE |
–clear | 是否需要删除 stm32ai 生成的中间文件夹 stm_out ,默认为False |
step2 编译和烧录
本教程仅展示 RT-Thread Studio
编译,另外还支持以下几种编译方式:
Keil
- 基于
RT-Thread Env
的Scons
- 不基于
RT-Thread Env
的Scons
RT-Thread Studio 编译和烧录
在 RT-Thread Studio
中,找到项目工程,右键,
更新软件包 + 刷新工程,
然后编译(),
最后烧录加显示。
这时候你就已经成功获得了一个集成了 AI
和 RT-Thread
的新的 ART-Pi BSP
,
就可以RT-Thread
系统上做应用开发啦。
示例应用代码提供
我们提供了一份运行模型推理的示例代码 mnist_app.c:
http://117.143.63.254:9012/www/RT-AK/mnist_app.zip:
- 下载解压,放置到
<BSP>/applications
路径下
- 选中
RT-Thread Studio
中的 项目工程,右击刷新
- 编译烧录,
- 输入命令:
mnsit_app
3. 完整的示例工程
完整的示例工程仓库地址:
下载即可食用
https://github.com/EdgeAIWithRTT/Project3-Mnist_Cube_RTT/tree/master/Mnist_RTT