齐护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 嵌入式系统的重要性及其应用广度 在当今快速发展的技术领域中,嵌入式系统扮演着至关重要的角色。这些系统是专门设计的计算机硬件和软件的组合,旨在执行特定任务,如控制、监…...

探索编程乐趣:绘制螺旋图的奇幻之旅
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:编程的魔法世界 二、绘制螺旋图的准备工作 三、代码实战:…...

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

ubuntu 安装VMtool 实现复制粘贴
如果只是安装一个根本没有用,而是两个命令都要安装 sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop引用博客...

智慧仓储新动力:EasyCVR+AI视频智能监管系统方案助力仓储安全高效管理
一、背景 随着物流行业的快速发展和智能化水平的提升,智慧仓储视频智能监管系统已成为现代仓储管理的重要组成部分。本系统通过综合运用物联网、视频分析、边缘计算等技术手段,实现对仓储环境的全面监控、智能分析和高效管理。 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(使用ES见:) 1.ES生态圈 ES: Logstash:数据处理服务程序,解析转换加工数据; Kibana:数据展示、集群管理,数据可视化、ES管理与监控、报表等…...

断更是我的错
打算在暑假每天两个文章,大概是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 之前,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…...