当前位置: 代码迷 >> 综合 >> RT-Thread AI Kit 之 RISC-V 插件初体验
  详细解决方案

RT-Thread AI Kit 之 RISC-V 插件初体验

热度:53   发布时间:2023-12-21 14:51:48.0

应广大开发者要求,我们加班加点推出了 RT-AK(RT-AK:RT-Thread AI Kit 简称) 支持的第二个插件:支持基于 K210 芯片等一些开发板,目前RT-AK已经能够在嘉楠堪智的 KD233 和亚博 YB-DKA01 上正常工作。

说明1:一直致力于推出保姆级教程

说明2:RT-AK 之 K210 插件地址:

https://github.com/RT-Thread/RT-AK-plugin-k210

说明3:本文章中的项目代码地址:https://githuib.com/EdgeAIWithRTT/Project4-Mnist_RT-AK_K210

在该片文章引用的例程中,没有用到摄像头和 LCD。但是在项目中,有包含 LCD 的例程。

克隆下载即可使用,欢迎 fork、star、watch 三连~

1. 运行 RT-AK 前的准备工作

准备以下几份重要重要重要(重要的事情说3遍)的材料:

1.1 BSP

硬件

嘉楠堪智的 KD233 或者亚博 YB-DKA01,或其它基于 K210 芯片的开发板(可能需要定制 BSP,请与我们联系)

这里,我们准备好了一份 BSP

下载地址:http://117.143.63.254:9012/www/RT-AK/sdk-bsp-k210.zip

交叉编译工具链 (Windows)

xpack-riscv-none-embed-gcc-8.3.0-1.2-win32-x64.zip | Version: v8.3.0-1.2

链接:(请复制外部浏览器打开)https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v8.3.0-1.2/xpack-riscv-none-embed-gcc-8.3.0-1.2-win32-x64.zip

1.2 RT-AK 准备

RT-AK 克隆到本地

1$ git clone https://github.com/RT-Thread/RT-AK.git edge-ai

1.3 神经网络模型

由于 k210 原厂工具仅支持三种模型格式:TFLiteCaffeONNX

所以提前将 keras 神经网络模型转换成了 tflite 模型,位于 RT-AK/rt_ai_tools/Models/mnist.tflite

如果没有找到该模型,请更新 RT-AK 仓库

或者在此处可见:

https://github.com/EdgeAIWithRTT/Project5-Mnist_RT-AK_K210/tree/master/models

1.4 原厂工具

1.NNCase

已经提前下载好,位于 RT-AK/rt_ai_tools/platforms/plugin_k210/k_tools 路径下

2.K-Flash 烧录工具,下载请选择 K-Flash.zip

Github 下载地址: https://github.com/kendryte/kendryte-flash-windows/releases

2. 执行步骤

代码将会自动使用 NNCase 模型转换工具,获得一个集成了 AI 的 BSP

内部的流程请看源码或者 plugin_k210 仓库下的 readme 文档

2.1 基础运行命令

请在 edge-ai/RTAK/tools 路径下运行该程序。

RT-AK 运行的过程中

  1. 会自动拉取 K210 插件的仓库到 RT-AK/rt_ai_tools/platforms 路径下

  2. BSP 基础上将会集成 AI 模型的,不包括模型推理等应用代码,应用代码请看下文

  3. RT-AK/rt_ai_tools/platforms/plugin_k210 路径下会生成 .kmodelconvert_report.txt 两个文件

  • .kmodel AI 模型转换之后的 kmodel 模型

  • convert_report.txt AI 模型转换过程的 log 日志


1# 基础运行命令
2python aitools.py --project=<your_project_path> --model=<your_model_path> --model_name=<your_model_name> --platform=k210 --clear
3
4# 示例
5$ D:\Project\edge-ai\RT-AK\rt_ai_tools>python aitools.py --project=D:\Project\K210_Demo\k210_rthread_bsp --model=.\Models\mnist.tflite --model_name=mnist --platform=k210 --embed_gcc=D:\Project\k210_third_tools\xpack-riscv-none-embed-gcc-8.3.0-1.2\bin --dataset=.\platforms\plugin_k210\datasets\mnist_datasets

RT-AKK210 插件示例 Demo 运行成功界面:

2.2 其他运行命令补充说明

 1# 非量化,不使用 KPU 加速, --inference_type2$ python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=k210  --inference_type=float34# 非量化,指定交叉编译工具链路径5$ python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=k210 --embed_gcc=<your_RISCV-GNU-Compiler_path> --inference_type=float67# 量化为 uint8,使用 KPU 加速,量化数据集为图片8$ python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=k210 --embed_gcc=<your_RISCV-GNU-Compiler_path> --dataset=<your_val_dataset>9
10# 量化为 uint8,使用 KPU 加速,量化数据集为音频之类非图片,--dataset_format
11$ python aitools.py --project=<your_project_path> --model=<your_model_path> --platform=k210 --embed_gcc=<your_RISCV-GNU-Compiler_path> --dataset=<your_val_dataset> --dataset_format=raw
12
13# 示例(量化模型,图片数据集)
14$ python aitools.py --project="D:\Project\k210_val" --model="./Models/facelandmark.tflite" --model_name=facelandmark --platform=k210 --embed_gcc="D:\Project\k210_third_tools\xpack-riscv-none-embed-gcc-8.3.0-1.2\bin" --dataset="./platforms/plugin_k210/datasets/images"

2.3 运行参数说明

RT-AK 中的参数包含了两部分,

  • 基础参数

  • K210 插件参数

基础参数详见 https://github.com/RT-Thread/RT-AK/tree/main/RT-AK/rt_ai_tools 中的 0x03 参数说明

插件参数详见 https://github.com/RT-Thread/RT-AK-plugin-k210/README.md 中的 3. 命令行参数详细说明

上述示例命令行的参数说明

3. 编译 & 下载

如果在执行 RT-AK 得过程中添加了 --embed_gcc 这个参数,可跳过以下部分:

设置编译环境

方法一:set RTT_EXEC_PATH=

方法二:修改 rtconfig.py 文件,在第22行新增 os.environ['RTT_EXEC_PATH'] = r'your_toolchains'

编译:

1scons -j 6    

如果编译正确无误,会产生 rtthread.elfrtthread.bin文件。

其中 rtthread.bin 需要烧写到设备中进行运行。

下载:

可以看到,下载后得显示界面并没有什么变化,

那是因为 RT-AK 内部不提供应用程序代码,想要让 AI 模型成功运行,需要开发者们自行编写,在本文得末尾,我们提供了一份示例代码。

4. 示例应用代码说明

我们提供了一份运行模型推理的示例应用代码,

下载地址: http://117.143.63.254:9012/www/RT-AK/mnist_app_k210.zip

下载解压,放置到 <BSP>/applications 路径下

编译烧录即可。

4.1 代码流程

系统内部初始化

  • 系统时钟初始化

RT-AK Lib 模型加载并运行

  • 注册模型(代码自动注册,无需修改)

  • 找到注册模型

  • 初始化模型,挂载模型信息,准备运行环境

  • 运行(推理)模型

  • 获取输出结果

4.2 核心代码

 1// main.c2/* Set CPU clock */3sysctl_clock_enable(SYSCTL_CLOCK_AI);  // 使能系统时钟(系统时钟初始化)4...56// 注册模型的代码在 rt_ai_mnist_model.c 文件下的第31行,代码自动执行7// 模型的相关信息在 rt_ai_mnist_model.h 文件8/* AI modol inference */9mymodel = rt_ai_find(MY_MODEL_NAME);  // 找到注册模型
10if (rt_ai_init(mymodel, (rt_ai_buffer_t *)IMG9_CHW) != 0)  // 初始化模型,传入输入数据
11...
12if(rt_ai_run(mymodel, ai_done, NULL) != 0)    // 模型推理一次
13...
14output = (float *)rt_ai_output(mymodel, 0);  // 获取模型输出结果
15
16/* 对模型输出结果进行处理,该实验是Mnist,输出结果为10个概率值,选出其中最大概率即可 */
17for(int i = 0; i < 10 ; i++)
18{
19    // printf("pred: %d, scores: %.2f%%\n", i, output[i]*100);
20    if(output[i] > scores  && output[i] > 0.2)
21    {
22        prediction = i;
23        scores = output[i];
24    }
25}

如何更换模型输入数据补充说明

示例数据在 applications 文件夹下,模型不用重新训练,只需更改第18行和第51行即可

详细得 Mnist Demo 工程链接,包括训练和数据处理。

Github:https://github.com/EdgeAIWithRTT/Project4-Mnist_RT-AK_K210

4.3 结果显示


你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

???????????? 点击阅读原文了解RT-AK

  相关解决方案