齐护K210系列教程(三十二)_在线模型训练

在线模型训练

  • 概念理解
  • 准备工作
  • 1 采集图像
    • 1.1 图像要求
    • 1.2 使用K210采集图片
  • 2 标注图像
  • 3 打包数据集
  • 4 上传数据
    • 4.1创建项目
      • 4.1.1图像分类创建项目
      • 4.1.2图像检测创建项目
    • 4.2上传数据
      • 4.2.1分类检测上传数据
      • 4.2.2图像检测上传数据
  • 5 训练模型
  • 6 部署模型以及测试
  • 7 测试效果
    • 7.1图像检测
    • 7.2 图像分类
  • 8 齐护编程 程序
    • 8.1图像检测
    • 8.2 图像分类
  • 9.课程资源下载
    • 9-1 程序
    • 9-2 模型
  • 联系我们

我们可以通过Maixhub网站提供的模型训练功能,来实现分类模型和目标检测模型的训练,需要准备好需要训练的数据集。

概念理解

首先我们要理解两个应用概念:

目标分类: 识别图片所属的种类,返回的数据只有类别和概率值。

目标检测:识别目标,返回数据有物品的种类、概率值,以及位置信息等

简单理解,如果不需要检测物体坐标输出的, 用目标分类, 需要坐标则目标检测。

准备工作

请先下载要使用的工具 下载

1 采集图像

1.1 图像要求

采集的图像分辨率为:224x224

采集图像数量

  • 目标分类: 每类图片数量不低于40张
  • 目标检测: 每类图片数量不低于100张

1.2 使用K210采集图片

使用以下脚本下载到AIstart k210主板内,复制到文本文件,然后存成main.py放入到SD卡内。

这是一个拍照存到SD卡的程序,对着我们要识别的物体拍照,尽量多角度的拍,跟后面实际要识别的角度、环境光等越接近拍下来,后面就识别精度越高,自动存在AIstart的SD卡内,后面我们要用到。

def capture_main(key):def draw_string(img, x, y, text, color, scale, bg=None , full_w = False):if bg:if full_w:full_w = img.width()else:full_w = len(text)*8*scale+4img.draw_rectangle(x-2,y-2, full_w, 16*scale, fill=True, color=bg)img = img.draw_string(x, y, text, color=color,scale=scale)return imgdef del_all_images():os.chdir("/sd")images_dir = "cap_images"if images_dir in os.listdir():os.chdir(images_dir)types = os.listdir()for t in types:os.chdir(t)files = os.listdir()for f in files:os.remove(f)os.chdir("..")os.rmdir(t)os.chdir("..")os.rmdir(images_dir)# del_all_images()os.chdir("/sd")dirs = os.listdir()images_dir = "cap_images"last_dir = 0for d in dirs:if d.startswith(images_dir):if len(d) > 11:n = int(d[11:])if n > last_dir:last_dir = nimages_dir = "{}_{}".format(images_dir, last_dir+1)print("save to ", images_dir)if images_dir in os.listdir():img = image.Image()img = draw_string(img, 2, 200, "please del cap_images dir", color=lcd.WHITE,scale=1, bg=lcd.RED)lcd.display(img)sys.exit(1)os.mkdir(images_dir)last_cap_time = 0last_btn_status = 1save_dir = 0save_count = 0os.mkdir("{}/{}".format(images_dir, save_dir))while(True):img0 = sensor.snapshot()if set_windowing:img = image.Image()img = img.draw_image(img0, (img.width() - set_windowing[0])//2, img.height() - set_windowing[1])else:img = img0.copy()# img = img.resize(320, 240)if key.value() == 0:time.sleep_ms(30)if key.value()  0 and (last_btn_status  1) and (time.ticks_ms() - last_cap_time > 500):last_btn_status = 0last_cap_time = time.ticks_ms()else:if time.ticks_ms() - last_cap_time > 5000:img = draw_string(img, 2, 200, "release to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)else:img = draw_string(img, 2, 200, "release to capture", color=lcd.WHITE,scale=1, bg=lcd.RED)if time.ticks_ms() - last_cap_time > 2000:img = draw_string(img, 2, 160, "keep push to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)else:time.sleep_ms(30)if key.value()  1 and (last_btn_status  0):if time.ticks_ms() - last_cap_time > 5000:img = draw_string(img, 2, 200, "change 齐护编程ject type", color=lcd.WHITE,scale=1, bg=lcd.RED)lcd.display(img)time.sleep_ms(1000)save_dir += 1save_count = 0dir_name = "{}/{}".format(images_dir, save_dir)os.mkdir(dir_name)else:draw_string(img, 2, 200, "capture image {}".format(save_count), color=lcd.WHITE,scale=1, bg=lcd.RED)lcd.display(img)f_name = "{}/{}/{}.jpg".format(images_dir, save_dir, save_count)img0.save(f_name, quality=95)save_count += 1last_btn_status = 1img = draw_string(img, 2, 0, "will save to {}/{}/{}.jpg".format(images_dir, save_dir, save_count), color=lcd.WHITE,scale=1, bg=lcd.RED, full_w=True)lcd.display(img)del imgdel img0def main():try:capture_main(key)except Exception as e:print("error:", e)import uios = uio.StringIO()sys.print_exception(e, s)s = s.getvalue()img = image.Image()img.draw_string(0, 0, s)lcd.display(img)
main()

使用请参考这里

使用读卡器从SD拷贝文件,删除掉无效图片。这里我拍了两种物体,分别是我们的C02mini和TFT模块,每种大概有100张左右。
在这里插入图片描述

2 标注图像

打开我们刚才下好的工具软件,进行标注。

分类图像不需要操作此步。
在这里插入图片描述

  1. 选择一个需要标类别图片的目录

  2. 选择输出标文件的目录

  3. 点标注,框住要识别的物体如图所示
    在这里插入图片描述

  4. 输入标签名之后点OK,然后点保存。

  5. 通过切换图片对目录下所有图片进行标注。

3 打包数据集

分类图像不需要操作此步。

将图片和标数据打包成zip文件

文件格式为 zip 压缩包,大小500M以内

  • 数据集格式:同 Pascal VOC 数据集
  • 图片数量限制为2000张,超出该数量的图片会被忽略
  • 压缩包内应包含 images 文件夹和 xml 文件夹;一张图片对应一个名字相同的 xml 标注文件
  • 目录结构:
    在这里插入图片描述

标结果打包成两个zip文件
在这里插入图片描述

4 上传数据

4.1创建项目

4.1.1图像分类创建项目

打开MaixHub,登录后点击模型训练。填入项目名称以及项目类型。根据自己需要选择正确的项目类型。
在这里插入图片描述

进入项目后进行数据采集
在这里插入图片描述

4.1.2图像检测创建项目

创建时选择项目类型为图像检测即可.
在这里插入图片描述

4.2上传数据

4.2.1分类检测上传数据

创建亲的数据集,标类型选择分类。
在这里插入图片描述

点击查看后采集数据
在这里插入图片描述

  1. 为分类添加标签名
  2. 选中一个标签为该标签上传图片。
  3. 选择该分类所有图片
  4. 上传图片
    在这里插入图片描述

再次点数据集,查看刚刚创建的数据集是否正确。

切换标签,检查一下选择的图片是否正确。
在这里插入图片描述

4.2.2图像检测上传数据

上传2~3步制作的zip数据包即可。
在这里插入图片描述

同样也可以查看是否正确。
在这里插入图片描述

5 训练模型

在数据集中选择数据然后确定。
在这里插入图片描述

部署平台选择nncase
在这里插入图片描述

点击,在这里插入图片描述
输入训练名称开始训练。
在这里插入图片描述

等待模型训练完成。

6 部署模型以及测试

点部署模型后选择手动部署,下载对应模型。
在这里插入图片描述

下载解压后得到三个文件
在这里插入图片描述

  • main.py 用于测试的程序文件

  • .kmodel模型文件,拷贝到SD卡内。

  • report.json 报告文件,内含锚点数据。

将.kmodel和main文件复制到SD卡进行测试。记得修改摄像头垂直和水平镜像
在这里插入图片描述
在这里插入图片描述

7 测试效果

7.1图像检测

在这里插入图片描述
在这里插入图片描述

7.2 图像分类

在这里插入图片描述
在这里插入图片描述

8 齐护编程 程序

8.1图像检测

在这里插入图片描述

8.2 图像分类

在这里插入图片描述

9.课程资源下载

9-1 程序

下载

9-2 模型

下载

联系我们

扫码或者点这里加群了解更多!
在这里插入图片描述
Created by qdprobot

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

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

相关文章

JDBC总结

目录 JDBC(java database connection) JDBC连接数据库步骤: 1. 在项目中添加jar文件,如图所示 2.加载驱动类 向数据库中插入数据代码示例: 第一种: 第二种: 查询操作 : 第一种: 第二种: JDBC(java database connection) java数据库连接.api(应用程序编程接口) ,可…

一文讲清!传统企业的进销存管理难题该怎么解决?

有没有开源的进销存软件啊? 确实,市面上存在不少开源的进销存软件。但客观地讲,开源软件往往面临着安全隐患,因为代码公开,容易成为黑客攻击的目标。此外,开源软件的功能模块通常较为固定,难以…

初出茅庐的小李博客之MQTT.fx客户端接入EMQX Platform

EMQX Platform 概览 EMQX Platform 是 EMQ 推出的一款面向物联网领域的 MQTT 消息中间件产品。作为全球首个 MQTT 5.0 消息云服务,EMQX Platform 提供了一站式运维代管、独有隔离环境的 MQTT 消息服务。在万物互联的时代,EMQX Platform 可以帮助您快速构…

python数据类型之列表

目录 1.创建列表 2.列表基础操作 常用操作 对列表元素顺序随机打乱 列表下标和切片 字符串分割为列表 列表位移 列表切片替换 3.列表内置方法 4.列表排序 简单排序 使用key参数按指定规则排序 二维列表排序 自定义排序规则函数 5.列表排序算法 选择排序 柱状图…

C# 利用Xejen框架源码,我们来开发一个基于Dapper技术的数据库通用的帮助访问类,通过Dapper的增删改查,可以访问Sqlite数据库

Dapper 是一个轻量级的对象关系映射(ORM)工具,适用于 .NET 平台。它由 Stack Overflow 团队开发,旨在提供简单、高效的数据访问功能。与其他重量级 ORM(如 Entity Framework)相比,Dapper 更加轻…

基于Python图像增强算法:低光增强+图像修复+超分辨率重建

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在图像处理与计算机视觉领域,图像增强技术是提高图像质量和可用性的重要手段。在实…

单片机io扩展

输入输出扩展 i2c扩展 方案1:PCF8575 PCF8575双向IO口扩展模块 16位输入输出I2C通讯 单片机级联扩展板 方案2:PCA955A 输出扩展 74HC595 io口扩展模块输出口扩展 参考链接 中微爱芯发[2004] 1号           签发人: (szlcsc.com)https://…

❤ Vscode和Idea都可以使用的-AI插件(官方-百度出的)

❤ Vscode和Idea都可以使用的-AI插件(官方-百度出的) 最新AI特别火,给大家推荐一下最新出的VScode插件,辅助我们写代码! 1、下载地址: > https://comate.baidu.com/zh/shopping?inviteCodefkzlak8f …

jmeter中Ultimate Thread Group设计梯度压测场景

Ultimate Thread Group Ultimate Thread Group 线程组是模拟波浪式压测或者阶梯式负载压测 1、Start Threads Count:线程数量 2、Initial Delay,sec:每组开始添加到测试执行之前的延迟(xx秒开始启动线程) 3、Startu…

python中的线程并行

文章目录 1. 单线程2. 线程池ThreadPoolExecutor 1. 单线程 现在有1154张图片需要顺时针旋转后保存到本地,一般使用循环1154次处理,具体代码如下所示,img_paths中存储1154个图片路径,该代码段耗时约用97ms。 t1time.time() for …

Python筑基之旅-MySQL数据库(四)

目录 一、数据表操作 1、新增记录 1-1、用mysql-connector-python库 1-2、用PyMySQL库 1-3、用PeeWee库 1-4、用SQLAlchemy库 2、删除记录 2-1、用mysql-connector-python库 2-2、用PyMySQL库 2-3、用PeeWee库 2-4、用SQLAlchemy库 3、修改记录 3-1、用mysql-conn…

Java轻松转换Markdown文件到Word和PDF文档

Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择。但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的文档格式呈现。通过将 Markdown 转换为 Word 和…

OpenHarmony实战开发——网络组件axios可以在OpenHarmony上使用了

什么是axios 上古浏览器页面在向服务器请求数据时,因为返回的是整个页面的数据,页面都会强制刷新一下,这对于用户来讲并不是很友好。并且我们只是需要修改页面的部分数据,但是从服务器端发送的却是整个页面的数据,十分…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

python实用系列:按顺序重命名文件

啊,好久没更博客了,今天偶然想换个桌面壁纸,于是上网搜了两个比较满意的桌面壁纸,都是压缩包: 当我想要给他们放到我的桌面壁纸文件里的时候患了难,因为他们的名字有相同的: anime文件夹里边&a…

揭秘!亚马逊、Vinted卖家如何借助自养号测评实现爆单?

​作为一名跨境卖家,你一定梦想着能够在亚马逊上实现爆单,让产品火爆销售。下面就分享五个秘诀,帮助你实现这个梦想: 1. 优质产品:首先,确保你的产品质量优秀,能够满足消费者的需求。品质好的产…

基于Matlab使用BP神经网络进行电力系统短期负荷预测

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 电力系统的短期负荷预测对于电力调度和能源管理具有至关重要的作用。通过准确地预测电力负荷&…

【产品经理】输出

引言:        在最近频繁的产品管理职位面试中,我深刻体会到了作为产品经理需要的不仅仅是对市场和技术的敏锐洞察,更多的是在复杂多变的环境中,如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享…

CAN网络管理(TJA1145如何实现MCU的休眠唤醒)

节点唤醒方式 本地唤醒: 唤醒源来源于自身模块,比如常说的KL15,控制器由KL15线供电,即只能在钥匙置于“ACC”或者“ON”档时运行软件和维持CAN通信 对于正在运行的CPU软件,无论它处在什么状态,只要Hardwa…

Plesk中如何移除之前添加的域名

我这边想要移除我之前绑定到主机的域名,但是不知道如何在主机上面进行移除,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,但是不知道如何在Plesk上操作移除域名,因为也是对于Hostease主机产品不是很了…