齐护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 标注图像
打开我们刚才下好的工具软件,进行标注。
分类图像不需要操作此步。
-
选择一个需要标类别图片的目录
-
选择输出标文件的目录
-
点标注,框住要识别的物体如图所示

-
输入标签名之后点OK,然后点保存。
-
通过切换图片对目录下所有图片进行标注。
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分类检测上传数据
创建亲的数据集,标类型选择分类。

点击查看后采集数据

- 为分类添加标签名
- 选中一个标签为该标签上传图片。
- 选择该分类所有图片
- 上传图片

再次点数据集,查看刚刚创建的数据集是否正确。
切换标签,检查一下选择的图片是否正确。

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 管理员阿呆又失败了,这次一定要堵住漏洞 解法 注意到: <!-- flag in id 1000 -->拦截很多种字符,连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…...
软件设计师备考 | 案例专题之数据库设计 概念与例题
相关概念 关注上图中的两个部分: 概念结构设计 设计E-R图,也即实体-联系图。 工作步骤:选择局部应用、逐一设计分E-R图、E-R图合并。进行合并时,它们之间存在的冲突主要有以下3类: 属性冲突。同一属性可能会存在于…...
【全网最全】2024电工杯数学建模A题成品论文+前三题完整解答matlab+py代码等(后续会更新成品论文)
您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片链接,那是获取资料的入口! 【全网最全】2024电工杯数学建模A题成品论文前三题完整解答matlabpy代码等(后续会更新成品论文)「首先来看看目前已有的资料&am…...
基于.net开发的博客系统
基于.net开发可以批量上传md文件生成文章的博客系统 .NET 个人博客 基于.net开发的博客系统 个人博客系统,采用.net core微服务技术搭建,采用传统的MVC模式,使用EF core来对mysql数据库(sqlite数据库)进行CRUD操作项目 为什么要自己开发博客…...
python给图片加上图片水印
python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度,位置可自定义 效果 原始图片: 水印图片: 添加水印后的图片: 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…...
Redis实现MQ
MQ的提出 上游发出请求后阻塞等待下游给到反馈,否则整个流程将一直阻塞。 提出mq之后:即有producer mq consumer 三者 MQ的特点 异步解耦 在有了 mq 后,producer 不需要过分关心 consumer 的身份信息,只需要把消息按照指定的协议…...
【Linux】进程终止与进程等待
目录 进程终止 errno exit和_exit 进程等待 wait和waitpid 宏:WIFEXITED 非阻塞等待 进程终止 下面要谈的一个话题就是进程终止,就是说一个进程退出了,可能有三种情况 1.进程代码执行完,结果是正确的 2.进程代码执行完&…...
数据结构_链式二叉树(Chained binary tree)基础
✨✨所属专栏:数据结构✨✨ ✨✨作者主页:嶔某✨✨ 二叉树的遍历 前序、中序以及后序遍历 学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的结点进行相应的操作ÿ…...
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基础(五):常用基本命令
从本节开始,我们正式进入Linux的学习,通过前面的了解,我们知道我们要以命令的形式使用操作系统(使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。),因此,我们是很有…...
原始字面常量(C++11)
原始字面常量(C11) 文章目录 原始字面常量(C11)前言一、原始字面量二、代码示例总结 前言 字面量一般是指数值(12、454等)和字符串(“Hw”、“h\t”),但是有时候我们想表…...
C++|设计模式(〇)|设计模式的六大原则
这里文章只做简要描述,作为扫盲 在软件开发过程中,遵循一定的设计原则可以帮助开发者创建更加灵活、可维护和可扩展的系统。设计模式的六大原则是面向对象设计的核心理念,本文将详细介绍这些原则,并结合实例说明它们的重要性和应用…...
【排序算法】——归并排序(递归与非递归)含动图
制作不易,三连支持一下吧!!! 文章目录 前言一.归并排序递归方法实现二.归并排序非递归方法实现 前言 这篇博客我们将介绍归并排序的原理和实现过程。 一、归并排序递归方法实现 基本思想: 归并排序(MERGE-…...
Mysql自增id、uuid、雪花算法id的比较
MySQL自增id: 优点: 1.简单易用 MySQL自增id 由数据库自动生成。 2.效率高 自增id是按顺序递增的,可以提高插入和查询的效率。 3.索引效率高 自增id可以作为主键或索引列,提高查询效率。 缺点: 1.不适用于分布式系统 在分布式…...
【会议征稿,IEEE出版】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024,6月28-30)
第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024)将于2024年6月28-30日在中国绵阳举行。 ISCTT 2024将围绕 “信息科学”、"计算机技术”、“交通运输” 等最新研究领域,为来自国内外高等院校、科学研究所、企事业单位的专…...
二十八篇:嵌入式系统实战指南:案例研究与未来挑战
嵌入式系统实战指南:案例研究与未来挑战 1. 引言 1.1 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中,嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合,旨在执行特定任务,如控制、监…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...



