手把手在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,一经查实,立即删除!

相关文章

IndexController

目 录 1 IndexController.. 1 1.1 * 后台管理首页... 2 1.2 * 页面跳转... 2 // 取最新的20条日志... 2 1.3 * 个人设置页面... 3 IndexControllerpackage com.my.blog.website.controller.admin;

Java数组填充:Arrays.fill()方法

Arrays.fill()方法 Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。这个方法属于Java标准库中的java.util.Arrays类 1. 方法介绍: 填充到所有位置 Arrays.fill(Type[] array, Type value) 参数: array 是目标数组,可以是…

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…

Java多线程学习(概念笔记)

面试题:并行和并发有什么区别? 现在都是多核CPU,在多核CPU下 并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程 面试题:创建线…

JavaScript编写评分控件

编写一个评分控件&#xff0c;用一个单行5列的Table做评分控件&#xff0c;监听td的click事件&#xff0c;点击一个td的时候&#xff0c;将这个td及之前的td背景色变为红色&#xff0c;之后的td背景色变为白色。 关键代码&#xff1a; <!DOCTYPE html> <html lang&q…

HeidiSQL导出SQL文件

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

对象数组与指针与引用

一.对象指针的使用 #include<iostream> using namespace std; class A{ public:A(int a){xa;}void show_a(){cout<<x<<endl;}private:int x; }; int main() { A ob&#xff08;2&#xff09;,*p;//声明A的对象和对象指针 ob.show_a();//利用对象名访问对象的…

什么是面向对象【大白话Java面试题】

什么是面向对象 同样是解决一个问题&#xff0c;面向对象的角度是将问题抽象成对象的形式。通过分类的思维方式&#xff0c;将问题分成几个解决方案的对象。给每个对象赋值属性和方法&#xff0c;对每个对象的细节进行面向过程的思维&#xff0c;执行自己的方法来解决问题。 …

接口测试vs功能测试

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

[2023] 14届

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

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

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

Acwing 2868.子串分值 贡献法

对于一个字符串 S&#xff0c;我们定义 S 的分值 f(S) 为 S 中恰好出现一次的字符个数。 例如 f(“aba”)1&#xff0c;f(“abc”)3, f(“aaa”)0 现在给定一个字符串 S[0…n−1]&#xff08;长度为 n&#xff09;&#xff0c;请你计算对于所有 S 的非空子串 S[i…j](0≤i≤j…

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

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

语音合成(TTS)开源调研与测评

2023年作为AI元年,各个领域的技术都有大规模的革新,语音领域的TTS(语音合成)也有很多新技术出现,比如Bert-Vits2、OpenVoice等等,都风靡一时。 笔者由于工作需要,近一个月在调研开源TTS,由于业务需要,主要看合成音频的效果(MOS)和合成速度(RTF)这两个指标,以及克…

关于vue2和vue3

Vue.js 是一个流行的前端框架&#xff0c;用于构建用户界面。Vue2 和 Vue3 是该框架的两个主要版本&#xff0c;它们之间存在一些关键的区别。下面我将详细介绍这两个版本的区别&#xff0c;并提供使用案例来说明这些区别。 响应式系统的底层实现&#xff1a; Vue2&#xff1a;…

nowcoder运维面试题集锦

TCP套接字中不会阻塞的是哪一种操作&#xff1f; 在TCP套接字中&#xff0c;不会阻塞的操作是绑定操作。具体来说&#xff0c;bind函数用于将特定的IP地址和端口号与套接字关联&#xff0c;这个操作本身并不引起阻塞。而其他一些操作&#xff0c;如读操作&#xff08;read、rea…

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

文章目录 接口开发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…