AI嵌入式K210项目(29)-模型加载

2024-02-19 21:20

本文主要是介绍AI嵌入式K210项目(29)-模型加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、下载部署包
  • 二、C++部署
  • 三、搭建文件传输环境
  • 四、文件传输
  • 五、调试
  • 六、MicroPython部署
  • 总结


前言

上一章节介绍了如何进行在线模型训练,生成部署包后,本章介绍加载模型;

一、下载部署包

训练结束后,在训练任务条目中选择下载按钮;
在这里插入图片描述
下载得到部署资源包。
部署资源包内包含:测试结果图片、生成的kmodel、部署配置文件deploy_config.json、部署资源压缩包。
部署资源压缩包解压后,参照README.md可以实现上板部署过程;
在这里插入图片描述
C++部署资源压缩包deployment_source.zip解压后结构如下:
在这里插入图片描述
MicroPython部署资源压缩包mp_deployment_source.zip解压后结构如下:
在这里插入图片描述

二、C++部署

若使用MicroPython的部署包请参见下一章节。
注意:训练环境中nncase和nncase-kpu的版本和SDK的版本要对应, nncase和nncase-kpu版本为2.4.0, SDK版本为1.1。
上板部署过程分为以下几个步骤:
K230 SDK需要在Linux环境下编译,推荐使用Ubuntu Liunx 20.04。 使用docker编译环境,下载k230_sdk

# 下载docker编译镜像
docker pull ghcr.io/kendryte/k230_sdk
# 可以使用以下命令确认docker镜像拉取成功
docker images | grep k230_sdk
# 下载sdk
git clone -b v1.1 --single-branch https://github.com/kendryte/k230_sdk.git
cd k230_sdk
# 下载工具链, make prepare_sourcecode 会自动下载Linux和RT-Smart toolchain,
buildroot package, AI package等. 请确保该命令执行成功并没有Error产生, 下载时间和速度
以实际网速为准。
make prepare_sourcecode
# 创建docker容器, $(pwd):$(pwd)表示系统当前目录映射到docker容器内部的相同目录下, 将系
统下的工具链目录映射到docker容器内部的/opt/toolchain目录下
docker run -u root -it -v $(pwd):$(pwd) -v $(pwd)/toolchain:/opt/toolchain -
w $(pwd) ghcr.io/kendryte/k230_sdk /bin/bash

这里使用的CANMV-K230开发板,还有一种K230-EVB开发板
在这里插入图片描述

# 在docker中编译镜像, 请耐心等待完成, 不同类型开发板编译命令不同
# 如果是CANMV-K230开发板
make CONF=k230_canmv_defconfig
# 如果是K230-EVB开发板
make CONF=k230_evb_defconfig

SD卡镜像也可在嘉楠开发者社区资料下载板块找到。
CANMV-K230开发板,编译结束后在output/k230_canmv_defconfig/images目录下可以找到编译好的镜像文件:

k230_canmv_defconfig/images
├── big-core
├── little-core
├── sysimage-sdcard.img # SD卡镜像
└──
sysimage-sdcard.img.gz # SD卡镜像压缩包

CANMV-K230开发板支持SD卡镜像启动
烧录TF卡
详细烧录步骤参考K230_SDK_使用说明。
Linux: 如使用Linux烧录TF卡,需要先确认SD卡在系统中的名称/dev/sdx, 并替换如下命令中的/dev/sdx

sudo dd if=sysimage-sdcard.img of=/dev/sdx bs=1M oflag=sync

Windows: 如使用Windows烧录, 建议使用the balena Etcher工具。将生成的sysimage-sdcard.img下载到本地,使用烧录工具the balena Etcher进行烧录。
在这里插入图片描述
其它更详细的烧录方法,请参考K230_SDK_使用说明。
确认启动开关选择在SD卡启动模式下,将烧录完成的TF卡插入进开板板卡槽中,然后将电源开关K1拔到ON位置,系统可上电。如果您有接好串口,可在串口中看到启动日志输出。 系统上电后,默认会有二个串口设备,可分别访问小核Linux和大核RTSmart 大核RTSmart系统中会开机会自动启动一个应用程序,可按q键退出至命令提示符终端;

三、搭建文件传输环境

windows系统
(1) Tftpd64安装,在https://bitbucket.org/phjounin/tftpd64/downloads/下载。
(2) MobaXterm安装:在https://mobaxterm.mobatek.net/download.html下载安装。
(2)配置PC网络:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开发板网络配置:
开发板上电,电源线、网线、 COM口连接线配置见文档: K230_SDK_使用说明。打开MobaXterm,通过两路COM串口连接开发板, COM编号不固定,较小为小核串口,较大为大核串口。
在这里插入图片描述
小核进入后回车,进入如下界面,使用root登录:
在这里插入图片描述
大核进入后回车,进入如下界面
在这里插入图片描述
在小核配置网络
在这里插入图片描述
大小核共享存储区域: /sharefs
在这里插入图片描述
当要从Tftpd64配置的文件中拷贝数据时,在小核界面使用如下命令:
#192.168.1.2 为PC的局域网IP

# 192.168.1.2 为PC的局域网IP
tftp -g -r your_file_name 192.168.1.2

当将开发板文件拷贝到PC端Tftpd64配置的文件夹下时,在小核使用如下命令:

# 192.168.1.2 为PC的局域网IP
tftp -p -r your_file_name 192.168.1.2

在Linux系统中, PC正常连接网络,开发板可以通过网线连接PC所在网关下其他网口,通过scp命令实现文件传输。
开发板上电,进入大小核COM界面,在小核执行scp传输命令:

# 从PC拷贝文件至开发板
scp 用户名@域名或IP:文件所在目录 开发板目的目录
# 从开发板拷贝文件至PC
scp 开发板待拷贝目录 用户名@域名或IP:PC目的目录

将部署资源压缩包deployment_source.zip解压,阅读README.md,将子文件夹example_code_k230拷贝到SDK文件目录下的src/big/nncase子目录下,授予权限,编译elf可执行文件。编译K230-EVB开发板的可执行文件

chmod +x build_app.sh
./build_app.sh evb

编译结束后在example_code_k230文件夹下的k230_bin中可以获得编译完成的main.elf文件。
编译CANMV-K230开发板的可执行文件:

chmod +x build_app.sh
./build_app.sh

四、文件传输

在小核/sharefs下新建一子目录test_deploy

cd /sharefs
mkdir test_deploy
cd test_deploy

通过tftp将部署资源包中的kmodel文件、 deploy_config.json文件、 main.elf文件和待测试图片文件拷贝到小核/sharefs/test_deploy目录下

五、调试

上板调试命令

# 进入大核对应目录下, 执行main.elf deploy_config.json 图片/None debug_mode
# deploy_config.json是部署配置文件
# 图片/None 如果是图片路径, 则执行静态图推理, 如果调用摄像头进行视频流推理, 此参数为None
# debug_mode: 调试模式, 有0、 1、 2三个选项; 分别对应不调试、 简单调试、 详细调试

在大核中进入/sharefs/test_deploy目录下,执行main.elf可执行文件。

# 静态图推理调试
main.elf deploy_config.json test.jpg 1
# 视频流推理调试
main.elf deploy_config.json None 1

六、MicroPython部署

注意:训练环境中nncase和nncase-kpu的版本和SDK的版本要对应, nncase和nncase-kpu版本为2.4.0, SDK版本为1.1。
上板部署过程分为以下几个步骤:
CanMV 的目的是让 AIOT 编程更简单, 基于 Micropython 语法, 运行在Canaan强大的嵌入式AI SOC系
列上。目前它在K230上运行。使用docker编译环境,下载k230_CanMV。

git clone https://github.com/kendryte/k230_canmv.git
cd k230_canmv
make prepare_sourcecode
# 生成docker镜像(第一次编译需要, 已经生成docker镜像后跳过此步骤, 可选)
docker build -f k230_sdk/tools/docker/Dockerfile -t k230_docker
k230_sdk/tools/docker
# 启动docker环境(可选)
docker run -u root -it -v $(pwd):$(pwd) -v
$(pwd)/k230_sdk/toolchain:/opt/toolchain -w $(pwd) k230_docker /bin/bash
# 默认使用canmv板卡, 如果需要使用其他板卡, 请使用 make CONF=k230_xx_defconfig, 支持的
板卡在configs目录下
make

编译完成后会在 output/k230_xx_defconfig/images 目录下生成 sysimage-sdcard.img 镜像。
按下图步骤,建立连接。点击如下按钮:
在这里插入图片描述
选择除大小核串口外的第三个串口:
在这里插入图片描述
连接建立后,选择文件->打开文件,选择解压的部署包mp_deployment_source中的##_image.py和##__video.py,编辑更改kmodel和deploy_config.json文件的拷贝路径。
在这里插入图片描述
点击左下角的绿色三角按钮运行,点击串行终端查看命令行输出。


总结

K210的介绍就到这里,接下来给大家介绍最新的K230芯片开发板,如需购买可以到pdd和淘宝搜索维脑科技,购买CANMV-K230开发吧;在这里插入图片描述

这篇关于AI嵌入式K210项目(29)-模型加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726014

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建