手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210,将在线训练的模型部署在K210(代码后面给出)上,能够识别卡皮巴拉水杯(没错,卡皮巴拉,情绪稳定,真的可爱!)。数据集是用K210拍摄的图片存储在SD卡中(拍照采集数据集代码后面会给出),然后传至云端训练。将过程记录作为笔记学习,希望能对大家的学习有所帮助。

本文分为在线训练部署代码两部分。

在线训练

在线训练进入MaiHub官网(需要注册账号)。

点击开始训练

如果之前没用过的话,点击新建训练

我是检测卡皮巴拉水杯,所以选的图像检测,只是想试试的小伙伴建议跟我选一样,后面给出的代码可以直接运行。

此时点击准备数据集

没使用过的伙伴直接点击创建数据集就行

新建好数据集后会发现多出了新建那个名字,选择该数据集点击确定就行。

数据集下面有采集数据和标注数据两个步骤,先点击采集数据。

采集数据下面出现5个选项,我采用的是上传图片,因为是用K210搭配摄像头拍摄的图片。然后点击选择图片,会弹出文件框,将采集的图片全选上传。

这个图片我建议用K210搭配摄像头拍摄采集,因为这样的图片更符合实际摄像头读取的图片。
采集代码如下,每按一次按键就拍摄一张图片:

import sensor, lcd, image
from Maix import GPIO
from fpioa_manager import fm
from machine import UART
import time# 配置LED蓝、红引脚
fm.register(12, fm.fpioa.GPIO0, force=True)
fm.register(14, fm.fpioa.GPIO1, force=True)
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT, value=1) # 构建LED对象
LED_R = GPIO(GPIO.GPIO1, GPIO.OUT, value=1) # 构建LED对象# 配置按键引脚
fm.register(16, fm.fpioa.GPIO1)
KEY = GPIO(GPIO.GPIO1, GPIO.IN)# 摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) # 设置为后置模式lcd.init() # LCD初始化# clock = time.clock()i = 0 # 图像命名索引while True:# clock.tick()img = sensor.snapshot()  # 拍摄照片lcd.display(img) # 实时显示摄像头图像# print(clock.fps()) #打印 FPSif KEY.value() == 0: # 按键按下# 蓝灯亮提示正在拍照LED_B.value(0)print(i)# 拍摄并保存相关文件,按顺序命名file_name = "/sd/example{}.jpg".format(i)img.save(file_name)LED_B.value(1) # 蓝灯灭提示拍照完成i += 1 # 索引递增time.sleep(0.5) # 添加短暂延时,防止按键抖动

我拍了131张图片,前121张作为训练集,后10张作为验证集。

图片上传完成之后就标注数据

将所有的标签标注完就可以了

基本上都是默认设置,但我使用的是K210,所以部署平台是nncase,之后创建任务开始训练。

部署代码

训练完成后选择手动部署,会下载一个压缩包。压缩包解压后有3个文件如下:

一开始我是将这三个文件放在SD卡进行运行,后来老是报错运行内存不足,试了很多办法(没错,你们试过的方法我都试过,包括增大GC内存,降低分辨率等等)都没用,就自己写了个调用.kmodel的代码,可以直接运行。代码如下:
 

import sensor,lcd,time
import KPU as kpu#设置摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
input_size = (224, 224)
sensor.set_windowing(input_size)
sensor.set_vflip(1)    #设置摄像头后置# 新添加
input_size = (224, 224)
labels = ['卡皮巴拉']lcd.init() #LCD初始化clock = time.clock()#1、从Flash加载模型。将模型烧录到开发板Flash。烧录方法参考pdf教程。
#task = kpu.load(0x300000)#2、从SD加载模型卡上。将kmodel文件通过读卡器拷贝到SD卡。
# task = kpu.load("/sd/facedetect.kmodel")
task = kpu.load("/sd/model-110097.kmodel")
#模型描参数
# anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
anchor = [2.69, 3.02, 3.28, 2.98, 4.56, 4.03, 2.0, 1.72, 3.72, 3.66]
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)while(True):clock.tick()img = sensor.snapshot()code = kpu.run_yolo2(task, img) #运行yolo2网络#识别到卡皮巴拉就画矩形表示if code:for i in code:print(i)#b = img.draw_rectangle(i.rect())pos = i.rect()img.draw_rectangle(pos)img.draw_string(pos[0], pos[1] + pos[3] + 5, "ka pi ba la", scale=2, color=(255, 0, 0))  # 在方框下方显示标签名字img.draw_string(pos[0], pos[1], "%.2f" %(i.value()), scale=2, color=(255, 0, 0), mono_space = False)#LCD显示lcd.display(img)print(clock.fps())   #打印FPS

代码很简单,不懂的地方可以评论交流。

运行效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio,文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了,这里我整理了遇到的坑和解决问题的最终配置…

算法打卡day21(开始回溯)

今日任务: 1)77.组合 77.组合 题目链接:77. 组合 - 力扣(LeetCode) 文章讲解:代码随想录 (programmercarl.com) 视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77…

HeidiSQL导出SQL文件

目前开发阶段的数据库可视化工具逐渐转为了HeidiSQL,本文讲一讲导出到sql文件的小细节,给自己做个记录补充。 安装或数据库可视化工具比较可参考: windows下全免费手动搭建php8mysql8开发环境及可视化工具安装 导出 原来用Navicat的时候&am…

接口测试vs功能测试

接口测试和功能测试的区别: 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京东、小红书、得物……等公司&#xff0c;还有一些银行也都与华为鸿蒙达成了合作。使得一时之间市场紧缺鸿蒙开发人才&#xff0c;不少公司不惜重金争抢人才。 据智联招聘的最新数据显示…

Java使用数组实现栈、队列、堆

数组模拟栈&#xff1a; const int N 10010; // ******************** 栈 int stk[N], tt//tt是下标; // 插入 stk[k] x; // 删除 tt--; // 判断栈是否为空 if (tt > 0) not empty else empty // 栈顶 stk[tt]; // ******************** 队列 // 在队尾插入…

京西商城——商品相关接口开发

文章目录 接口开发django原生CBV开发商品分类菜单接口继承APIView开发商品类型分类接口通过序列化器开发商品详情接口 接口开发 django原生CBV开发商品分类菜单接口 先直接给出最终的views类&#xff0c;先简单的解释一下&#xff1a; 在基于CBV&#xff08;基于类视图的&am…

二维数组定义 求和,最值,求平均值 JS

定义二维数组 二维数组的求和&#xff0c;最值&#xff0c;求平均值 Eg1 // 二维数组 const matrix [[1, 2, 3],[4, 5, 6],[7, 8, 9] ];// 初始化求和、最大值和最小值 let sum 0; let max Number.MIN_VALUE; let min Number.MAX_VALUE;// 遍历二维数组 for (let i 0; i…

基于SSM的戒烟网站(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的戒烟网站&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

《操作系统导论》第15章读书笔记:机制:地址转换(address translation)

《操作系统导论》第15章读书笔记&#xff1a;机制&#xff1a;地址转换&#xff08;address translation&#xff09; —— 杭州 2024-03-30 夜 文章目录 《操作系统导论》第15章读书笔记&#xff1a;机制&#xff1a;地址转换&#xff08;address translation&#xff09;1.前…

正点原子imx6ull-mini不使用网络更新内核系统

参考视频&#xff1a;【【正点原子】Linux网络环境搭建篇】 参考文档&#xff1a;从正点原子官方下载 这几天在学imx6ull写网络驱动检测出网卡&#xff0c;但是一直ping不通ubuntu&#xff0c;电脑还有ubuntu、开发板都处于同一个网段&#xff0c;跟着正点原子的视频试了双网…

flutter Got socket error trying to find package nested at

flutter Got socket error trying to find package nested at xxx 报错信息&#xff1a;“Got socket error trying to find package nested at” 通常出现在Flutter尝试从pub.dev获取依赖包时&#xff0c;由于网络问题导致无法连接到pub.dev或者无法正确解析包的路径。 例如&…

2_1.Linux中的网络配置

#1.什么是IP ADDRESS# internet protocol ADDRESS ##网络进程地址 ipv4 internet protocol version 4 ip是由32个01组成 11111110.11111110.11111110.11111110 254.254.254.254 #2.子网掩码# 用来划分网络区域 子网掩码非0的位对应的ip上的数字表示这个ip的网络位 子网掩码0位…

S7-1500PLC与ABB机器人RobotStudio调试演示

(1)建立空工作站 (2)选择机器人、导入吸盘、托盘、传送带 (3) 将导入的吸盘变为工具 (4)创建机器人系统 布局如下 (5)创建物体 (6)设置物体本地原点 (7)创建传送带Smart组件

[操作系统课设]GeeKOS操作系统的研究与实现

一.GeekOS操作系统概论 1.1教学操作系统 &#xff08;1&#xff09;针对RISC结构MIPS处理器 操作系统&#xff1a;Nachos、OS/161 &#xff08;2&#xff09;针对CISC结构Intel IA-32 (or x86)通用处理 操作系统&#xff1a;MINIX、GeekOS 我们用到的是&#xff1a;GeekOS 1&…

二分(二段性)

本文用于记录个人算法竞赛学习&#xff0c;仅供参考 一.二分算法 二分算法一般用于具有二段性的问题&#xff0c;数据不一定具有单调性&#xff0c;所以单调可二分&#xff0c;可二分不一定就要单调。 二.整数二分 1. 模板一&#xff1a;将区间[l, r]划分为[l, mid] 和 [mid…

字符串(KMP)

P3375 【模板】KMP - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; #define ll long long const int N1e6100; int n0,m; char s1[N]; char s2[N];…

36.HarmonyOS鸿蒙系统 App(ArkUI) 创建第一个应用程序hello world

36.HarmonyOS App(ArkUI) 创建第一个应用程序helloworld 线性布局 1.鸿蒙应用程序开发app_hap开发环境搭建 3.DevEco Studio安装鸿蒙手机app本地模拟器 打开DevEco Studio,点击文件-》新建 双击打开index.ets 复制如下代码&#xff1a; import FaultLogger from ohos.fau…

通俗易懂Redis缓存穿透,缓存击穿,缓存雪崩

1.1 缓存穿透 原因&#xff1a;当我们查询一个数据的时候&#xff0c;缓存中没有&#xff0c;就会去查询我们的关系型数据库&#xff0c;而且查询不到的数据是不会放到我们的缓存中&#xff0c;就会导致我们每次的请求都会来到我们的关系型数据库中&#xff0c;从而导致关系型…