Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AI_人工智能
RT-AK_AI-Kit_人工智能
RT-AK 之 RISCV 支持初体验
发布于 2021-06-17 18:18:53 浏览:1309
订阅该版
[TOC] 应广大开发者要求,我们加班加点推出了 RT-AK 支持的第二个插件:支持基于 K210 芯片的一些开发板, 目前 RT-AK 能够在嘉楠堪智的 `KD233` 和亚博 `YB-DKA01` 上正常工作。 *说明1:一直致力于推出保姆级教程* *说明2:RT-AK 之 K210 插件仓库地址:https://github.com/RT-Thread/RT-AK-plugin-k210* *说明3:本文章所用的项目代码地址:https://github.com/EdgeAIWithRTT/Project4-Mnist_RT-AK_K210* 在该片文章引用的例程中,没有用到摄像头和 `LCD`。但是在项目中,有包含 `LCD` 的例程。 克隆下载即可使用,欢迎 `fork、star、watch` 三连~ ![image-20210617101653999](https://oss-club.rt-thread.org/uploads/20220714/78e546e367d8cf65f5881dbdcfbe7169923bb05d.png) # 1. 运行 RT-AK 前的准备工作 准备以下几份份**重要重要重要**的材料: | Index | Prepare | Example | | :---: | :-------------------------------: | ----------------------------------------------------- | | 1 | 硬件以及 `BSP` 以及交叉编译工具链 | `K210 BSP`
`xpack-riscv-none-embed-gcc-8.3.0-1.2` | | 2 | `RT-AK` | RT-AK 代码克隆到本地 | | 3 | 神经网络模型 | `./rt_ai_tools/Model/mnist.tflite` | | 4 | `K210` 原厂工具 | `NNCase`:模型转换工具
`KFlash`:固件下载工具 | ## 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](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) | `Version: v8.3.0-1.2` ## 1.2 RT-AK 准备 将 `RT-AK` 克隆到本地 ```shell $ git clone https://github.com/RT-Thread/RT-AK.git edge-ai ``` ## 1.3 神经网络模型 由于 `k210` 原厂工具仅支持三种模型格式: `TFLite`、`Caffe`、`ONNX` 所以提前将 `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` 路径下运行该程序。 ![image-20210616200108220](https://oss-club.rt-thread.org/uploads/20220714/e79fc3f65df604738199cf5a9d10b1b792dff6b2.png) 在 `RT-AK` 运行的过程中 1. 会自动拉取 `K210` 插件的仓库到 `RT-AK/rt_ai_tools/platforms` 路径下 2. 在 `BSP` 基础上将会集成 AI 模型的,不包括模型推理等应用代码,应用代码请看下文 3. 在 `RT-AK/rt_ai_tools/platforms/plugin_k210` 路径下会生成 `
.kmodel` 和 `convert_report.txt` 两个文件 - `
.kmodel` AI 模型转换之后的 `kmodel` 模型 - `convert_report.txt` AI 模型转换过程的 `log` 日志 ![image-20210617111819068](https://oss-club.rt-thread.org/uploads/20220714/21dbd7cbcebb3b50a2d70c9ddab6c3416dba94c1.png) ![image-20210617112301513](https://oss-club.rt-thread.org/uploads/20220714/19d4159445fb632d3afeb20dfc690ee3a5237c13.png) ```shell # 基础运行命令 python aitools.py --project=
--model=
--model_name=
--platform=k210 --clear # 示例 $ 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-AK` 之 `K210` 插件示例 `Demo` 运行成功界面: ![run_rt_ak](https://oss-club.rt-thread.org/uploads/20220714/7d0925c5c7361934285cc17f9b31da827f3181b8.png) ## 2.2 其他运行命令补充说明 ```bash # 非量化,不使用 KPU 加速, --inference_type $ python aitools.py --project=
--model=
--platform=k210 --inference_type=float # 非量化,指定交叉编译工具链路径 $ python aitools.py --project=
--model=
--platform=k210 --embed_gcc=
--inference_type=float # 量化为 uint8,使用 KPU 加速,量化数据集为图片 $ python aitools.py --project=
--model=
--platform=k210 --embed_gcc=
--dataset=
# 量化为 uint8,使用 KPU 加速,量化数据集为音频之类非图片,--dataset_format $ python aitools.py --project=
--model=
--platform=k210 --embed_gcc=
--dataset=
--dataset_format=raw # 示例(量化模型,图片数据集) $ 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/blob/main/README.md 中的 `3. 命令行参数详细说明` 上述示例命令行的参数说明 | Parameter | Description | | ------------ | ------------------------------------------------------------ | | --project | `OS+BSP` 项目工程文件夹,默认为空,**需要用户指定** | | --model | 神经网络模型文件路径,默认为 `./Models/keras_mnist.h5` | | --model_name | 神经网络模型转换后新的模型名,默认是 `network` | | --platform | 指定目标平台信息,目前支持:`stm32`、`k210`,默认是 `example`,具体体可用的目标平台由 `platforms/xxx.json` 注册 | | --embed_gcc | 交叉编译工具链路径,**非必须**。如果有,则会更改 `rt_config.py` 文件,如果无指定,则需要在编译的时候指定该工具链路径 | | --dataset | 模型量化过程中所需要用到的数据集,只需要在设置 `--inference-type` 为 `uint8` 时提供这个参数 | # 3. 编译 & 下载 如果在执行 RT-AK 得过程中添加了 `--embed_gcc` 这个参数,可跳过以下部分: - 设置编译环境 - 方法一: `set RTT_EXEC_PATH=
` - 方法二:修改 `rtconfig.py` 文件,在第22行新增 `os.environ['RTT_EXEC_PATH'] = r'your_toolchains'` 编译: ```shell scons -j 6 ``` 如果编译正确无误,会产生 `rtthread.elf`、`rtthread.bin`文件。 其中 `rtthread.bin` 需要烧写到设备中进行运行。 下载: 可以看到,下载后得显示界面并没有什么变化, 那是因为 RT-AK 内部不提供应用程序代码,想要让 AI 模型成功运行,需要开发者们自行编写,在本文得末尾,我们提供了一份示例代码。 ![image-20210617171954055](https://oss-club.rt-thread.org/uploads/20220714/3ab1136f6aada6dc75bc70711d8f4baf8df0e848.png) # 4. 示例应用代码说明 我们提供了一份运行模型推理的示例应用代码, 下载地址: http://117.143.63.254:9012/www/RT-AK/mnist_app_k210.zip 下载解压,放置到 `
/applications` 路径下 编译烧录即可。 ## 4.1 代码流程 **系统内部初始化**: - 系统时钟初始化 **RT-AK Lib 模型加载并运行**: - 注册模型(代码自动注册,无需修改) - 找到注册模型 - 初始化模型,挂载模型信息,准备运行环境 - 运行(推理)模型 - 获取输出结果 ## 4.2 核心代码 ```c // main.c /* Set CPU clock */ sysctl_clock_enable(SYSCTL_CLOCK_AI); // 使能系统时钟(系统时钟初始化) ... // 注册模型的代码在 rt_ai_mnist_model.c 文件下的第31行,代码自动执行 // 模型的相关信息在 rt_ai_mnist_model.h 文件 /* AI modol inference */ mymodel = rt_ai_find(MY_MODEL_NAME); // 找到注册模型 if (rt_ai_init(mymodel, (rt_ai_buffer_t *)IMG9_CHW) != 0) // 初始化模型,传入输入数据 ... if(rt_ai_run(mymodel, ai_done, NULL) != 0) // 模型推理一次 ... output = (float *)rt_ai_output(mymodel, 0); // 获取模型输出结果 /* 对模型输出结果进行处理,该实验是Mnist,输出结果为10个概率值,选出其中最大概率即可 */ for(int i = 0; i < 10 ; i++) { // printf("pred: %d, scores: %.2f%%\n", i, output[i]*100); if(output[i] > scores && output[i] > 0.2) { prediction = i; scores = output[i]; } } ``` **如何更换模型输入数据补充说明**: 示例数据在 `applications` 文件夹下,模型不用重新训练,只需更改第18行和第51行即可 详细得 Mnist Demo 工程链接,包括训练和数据处理。 - Github: https://github.com/EdgeAIWithRTT/Project4-Mnist_RT-AK_K210 ## 4.3 结果显示 ![image-20210617172014067](https://oss-club.rt-thread.org/uploads/20220714/daf50f535ad21890cd83b5351ebe2c42497d7f2f.png)
4
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
lebhoryi
这家伙很懒,什么也没写!
文章
30
回答
6
被采纳
1
关注TA
发私信
相关文章
1
RT-Thread AI Kit 相关资料和教程在哪里?
2
20号的开发者大会上,人脸识别AI
3
2020 开发者大会演示的 AI 套件什么时候开源?
4
请问RT-AK有没有部署MobileNet的例子呢
5
请问RT-AK会支持paddlepaddle的模型吗
6
嵌入式比赛中要求的 RT-Thread ai toolkit 能介绍一下吗?
7
使用rt_ai_tools转换模型时报错
8
求一个识别人有没有带口罩的模型?
9
RT-AK的人物检测例子下载后编译失败
10
cube ai部署后报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部