齐护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,一经查实,立即删除!

相关文章

leetcode 152. 乘积最大子数组

. - 力扣(LeetCode) 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组 (该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入…

MongoDB关系处理:优化数据管理、提升性能的最佳实践

MongoDB 是一种 NoSQL 数据库,它使用文档模型来存储数据,这与关系型数据库(RDBMS)有显著不同。本文将详细介绍 MongoDB 中的关系处理,包括基本语法、命令、示例、应用场景、注意事项和总结。 基本语法 文档和集合 M…

30.静态代码分析工具clang-tidy

文章目录 基本介绍安装clang-tidy使用clang-tidy配置文件和格式文件配置文件格式文件使用配置文件和格式化文件 在代码中设置排除clang-tidy检测reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 基本介绍 clang-tidy 是一个基于…

JDBC总结

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

Java中的垃圾回收机制

在Java编程语言中,垃圾回收(Garbage Collection, GC)机制是内存管理的一个核心部分。它的主要目标是自动释放那些不再被程序使用的对象所占用的内存空间,从而防止内存泄漏,并确保程序的稳定运行。下面,我将…

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

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

初出茅庐的小李博客之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…

项目管理:Jira,禅道,GitHub Issues对比

Jira、禅道(ZenTao)和GitHub Issues都是项目管理工具,但它们在功能、适用场景和特性上有所不同。以下是它们之间的对比: 功能: Jira:是一款强大的项目管理工具,适用于各种项目,尤其…

Vue3组件间通信通过回调函数传递数据

Vue3组件间通信通过回调函数传递数据 一、前言1、使用场景2、实现方法1. 父组件中定义回调方法2. 子组件中触发回调方法 二、结论 一、前言 在 Vue 3 中,组件之间的通信是一个重要的主题。在许多情况下,你可能需要从子组件向父组件传递数据或触发父组件…