当前位置: 首页 > news >正文

齐护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

相关文章:

齐护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图像…...

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候,我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍,还可能错过重要的机会。 但是现在,有一个神奇的工具——个微管理系统,可以帮助我们轻松应对这个问题 ,实现微信自动回复。 首…...

【ARM 裸机】按键输入

本节学习按键输入,先拷贝上一节工程文件, 1、驱动编写 新建 key 的 .h 和 .c 文件; 再查看一下硬件原理图如下; 由此可知,KEY0 按键接在 UART1_CTS 引脚上,默认情况下为高电平,按键按下为…...

站在ESG“20+”新起点上,看中国ESG先锋探索力量

全链减碳、建设绿色工厂、打造零碳产品、守护生物多样性、向受灾群众捐助……不知你是否察觉,自“双碳”目标提出以来,一股“可持续发展热潮”正覆盖各行各业,并且渗透到我们衣食住行的方方面面。在资本市场,ESG投资热潮更是席卷全…...

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…...

软件设计师备考 | 案例专题之数据库设计 概念与例题

相关概念 关注上图中的两个部分&#xff1a; 概念结构设计 设计E-R图&#xff0c;也即实体-联系图。 工作步骤&#xff1a;选择局部应用、逐一设计分E-R图、E-R图合并。进行合并时&#xff0c;它们之间存在的冲突主要有以下3类&#xff1a; 属性冲突。同一属性可能会存在于…...

【全网最全】2024电工杯数学建模A题成品论文+前三题完整解答matlab+py代码等(后续会更新成品论文)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模A题成品论文前三题完整解答matlabpy代码等&#xff08;后续会更新成品论文&#xff09;「首先来看看目前已有的资料&am…...

基于.net开发的博客系统

基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统&#xff0c;采用.net core微服务技术搭建&#xff0c;采用传统的MVC模式&#xff0c;使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…...

python给图片加上图片水印

python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度&#xff0c;位置可自定义 效果 原始图片&#xff1a; 水印图片&#xff1a; 添加水印后的图片&#xff1a; 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…...

Redis实现MQ

MQ的提出 上游发出请求后阻塞等待下游给到反馈&#xff0c;否则整个流程将一直阻塞。 提出mq之后&#xff1a;即有producer mq consumer 三者 MQ的特点 异步解耦 在有了 mq 后&#xff0c;producer 不需要过分关心 consumer 的身份信息&#xff0c;只需要把消息按照指定的协议…...

【Linux】进程终止与进程等待

目录 进程终止 errno exit和_exit 进程等待 wait和waitpid 宏&#xff1a;WIFEXITED 非阻塞等待 进程终止 下面要谈的一个话题就是进程终止&#xff0c;就是说一个进程退出了&#xff0c;可能有三种情况 1.进程代码执行完&#xff0c;结果是正确的 2.进程代码执行完&…...

数据结构_链式二叉树(Chained binary tree)基础

✨✨所属专栏&#xff1a;数据结构✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 二叉树的遍历 前序、中序以及后序遍历 学习二叉树结构&#xff0c;最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则&#xff0c;依次对二叉树中的结点进行相应的操作&#xff…...

python梯度下降法求解三元线性回归系数,并绘制结果

import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(0) X1 2 * np.random.rand(100, 1) X2 3 * np.random.rand(100, 1) X3 4 * np.random.rand(100, 1) y 4 3 * X1 5 * X2 2 * X3 np.random.randn(100, 1) # 合并特征 X_b np.hsta…...

Linux基础(五):常用基本命令

从本节开始&#xff0c;我们正式进入Linux的学习&#xff0c;通过前面的了解&#xff0c;我们知道我们要以命令的形式使用操作系统&#xff08;使用操作系统提供的各类命令&#xff0c;以获得字符反馈的形式去使用操作系统。&#xff09;&#xff0c;因此&#xff0c;我们是很有…...

原始字面常量(C++11)

原始字面常量&#xff08;C11&#xff09; 文章目录 原始字面常量&#xff08;C11&#xff09;前言一、原始字面量二、代码示例总结 前言 字面量一般是指数值&#xff08;12、454等&#xff09;和字符串&#xff08;“Hw”、“h\t”&#xff09;&#xff0c;但是有时候我们想表…...

C++|设计模式(〇)|设计模式的六大原则

这里文章只做简要描述&#xff0c;作为扫盲 在软件开发过程中&#xff0c;遵循一定的设计原则可以帮助开发者创建更加灵活、可维护和可扩展的系统。设计模式的六大原则是面向对象设计的核心理念&#xff0c;本文将详细介绍这些原则&#xff0c;并结合实例说明它们的重要性和应用…...

【排序算法】——归并排序(递归与非递归)含动图

制作不易&#xff0c;三连支持一下吧&#xff01;&#xff01;&#xff01; 文章目录 前言一.归并排序递归方法实现二.归并排序非递归方法实现 前言 这篇博客我们将介绍归并排序的原理和实现过程。 一、归并排序递归方法实现 基本思想&#xff1a; 归并排序&#xff08;MERGE-…...

Mysql自增id、uuid、雪花算法id的比较

MySQL自增id: 优点&#xff1a; 1.简单易用 ​ MySQL自增id 由数据库自动生成。 2.效率高 自增id是按顺序递增的&#xff0c;可以提高插入和查询的效率。 3.索引效率高 自增id可以作为主键或索引列&#xff0c;提高查询效率。 缺点&#xff1a; 1.不适用于分布式系统 在分布式…...

【会议征稿,IEEE出版】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024,6月28-30)

第九届信息科学、计算机技术与交通运输国际学术会议&#xff08;ISCTT 2024&#xff09;将于2024年6月28-30日在中国绵阳举行。 ISCTT 2024将围绕 “信息科学”、"计算机技术”、“交通运输” 等最新研究领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专…...

二十八篇:嵌入式系统实战指南:案例研究与未来挑战

嵌入式系统实战指南&#xff1a;案例研究与未来挑战 1. 引言 1.1 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中&#xff0c;嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合&#xff0c;旨在执行特定任务&#xff0c;如控制、监…...

探索编程乐趣:绘制螺旋图的奇幻之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;编程的魔法世界 二、绘制螺旋图的准备工作 三、代码实战&#xff1a;…...

C# 语法糖

语法糖 var关键字&#xff08;隐式类型变量&#xff09;&#xff1a;自动属性&#xff1a;简化的事件访问器&#xff1a;Lambda表达式和匿名方法&#xff1a;扩展方法&#xff1a;LINQ查询&#xff1a;异步编程&#xff08;async和await&#xff09;&#xff1a;嵌套匿名类型&a…...

ubuntu 安装VMtool 实现复制粘贴

如果只是安装一个根本没有用&#xff0c;而是两个命令都要安装 sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop引用博客...

智慧仓储新动力:EasyCVR+AI视频智能监管系统方案助力仓储安全高效管理

一、背景 随着物流行业的快速发展和智能化水平的提升&#xff0c;智慧仓储视频智能监管系统已成为现代仓储管理的重要组成部分。本系统通过综合运用物联网、视频分析、边缘计算等技术手段&#xff0c;实现对仓储环境的全面监控、智能分析和高效管理。 TSINGSEE青犀视频汇聚Ea…...

gcc源码分析(AST抽象语法树)

文章目录 三、AST相关1、AST(抽象语法树)1.1 树结点的声明1.2 树结点的结构1.2.1 tree_node联合体1.2.2 tree_base结构体1.2.3 tree_common结构体1.2.4 常量结构体1.2.5 **标识符节点**2、符号绑定,作用域与block树节点2.1 lang_identifier结构体2.2 c_binding结构体2.3 scop…...

ES基础概念

本文不介绍如何使用ES&#xff08;使用ES见&#xff1a;&#xff09; 1.ES生态圈 ES&#xff1a; Logstash&#xff1a;数据处理服务程序&#xff0c;解析转换加工数据&#xff1b; Kibana&#xff1a;数据展示、集群管理&#xff0c;数据可视化、ES管理与监控、报表等&#xf…...

断更是我的错

打算在暑假每天两个文章&#xff0c;大概是6月20多号开始吧。...

红队攻防渗透技术实战流程:云安全之云原生安全:云堡垒机

红队云攻防实战 1. 云原生安全-防护设备-云堡垒机1. 云原生安全-防护设备-云堡垒机 堡垒机攻防:(意义) https://mp.weixin.qq.com/s/-WcgyVoTCZuPamVtI5MrJw 堡垒机漏洞:(已知)https://avd.aliyun.com/search?q=%E5%A0%A1%E5%9E%92%E6%9C%BA 云堡垒机:(云攻防) http…...

Down with typename

1. 隐式类型名的详情 C20 之前&#xff0c;typename 在一些其他情况下是不必要的: • 指定继承类的基类型时 • 在构造函数中将初始值传递给基类时 • 在类声明中使用类型成员时 #include <iostream> struct Impl {Impl(){ std::cout << "Impl ctor" &…...

CSS3背景与渐变

背景与渐变 background-size background-size 属性用于设置背景图像的尺寸。您可以指定绝对或相对单位,或者使用关键词来控制背景图像在元素背景区域中的大小。 .element {background-size: [length | percentage | cover | contain] | [length | percentage] [length | per…...