K210视觉识别模块学习笔记4: 训练与使用自己的模型_识别字母

今日开始学习K210视觉识别模块: 模型训练与使用_识别字母

亚博智能的K210视觉识别模块......  

固件库: maixpy_v0.6.2_52_gb1a1c5c5d_minimum_with_ide_support.bin

文章提供测试代码讲解、完整代码贴出、测试效果图、测试工程下载

这里也算是正式开始进入到视觉识别的领域了,先从训练模型 与 识别字母开始吧......

本文目标很简单,就是尝试训练自己的模型识别字母A与B

目录

工具软件准备:

工具软件打包下载:

拍摄图片:

文件与图片处理:

新建文件夹:

Image_tool 图片处理:

labeling软件标注训练集:

打开文件夹:

更改保存输出:

打开自动保存:

框注限制识别的区域:

检查xml文件夹:

labels填写标签:

网站创建项目:

部署模型文件:

修改主函数:

测试程序前有些固件问题需要调整:

下载适配的固件:

先擦除固件:

然后使用kflash_kui烧录以下固件库到flash:

重启开机测试效果展示:

固件与模型打包下载:

网上学习资料贴出:

OpenCV Label标注软件

之前尝试下载使用多个固件的尝试:


工具软件准备:

自己训练模型主要有俩个工具软件需要准备:

1、  Image_tool  (用于图像格式清晰度转换)

2、   labelImg(用于打标签)

工具软件打包下载:

当然你也可以不使用和我一样的工具软件,网上有许多各种各样的功能更多的软件:(文末有链接可以了解其他软件)

https://download.csdn.net/download/qq_64257614/89383899

拍摄图片:

1、确保拍摄角度与实际应用场景相匹配。

2、如果可能,模拟K210模块如何查看这些图片。即使用K210来取图,(这需要自己编程K210拍摄图片的例程):

K210视觉识别模块学习笔记3:内存卡写入拍摄图片_LED三色灯的操作_按键操作_定时器的配置使用-CSDN博客

3、光线要充足且均匀,避免过曝或欠曝,以及阴影和反光。

4、拍摄不同角度、不同光照条件、不同背景、不同大小和形状的图像,以增加模型的泛化能力。

5、考虑图像的各种旋转、缩放和倾斜,以模拟实际应用中的变化。

这里我也是拍摄了一共25张AB各个角度的照片:

文件与图片处理:

新建文件夹:

像我一样新建一个文件夹   (这个文件夹名称任意)

但是在里面新建以下的几个项目名称必须一致:

Image_tool 图片处理:

这个是选择图像所在文件夹进行转换的:

转换完成会在图像目录产生一个新的文件夹inages_out

然后我们删掉原来的文件夹,将"inages_out"名称改为"inages"

labeling软件标注训练集:

注意点:

有些人可能会出现双击程序,弹出了一个命令控制台,结果2秒就退出,无法打开labeling的情况,这时应检查它的所在目录有无中文字符,如果有,请不要放在有中文字符的目录!

其余打不开情况请检查你的Python环境

打开文件夹:

更改保存输出:

打开自动保存:

框注限制识别的区域:

然后像这样将图片中所有A\B都框柱出来:

检查xml文件夹:

全部标注完后应该有相应数量的xml文件生成在文件夹:

labels填写标签:

这一步是要在之前创建的labels.txt中填写我们用到的标注:

我们用到了A\B,俩个标注用换行隔开

网站创建项目:

在线训练模型网址如下:

 MaixHub

 先准备好之前整个文件准备的压缩包(zip格式):

跟着以下步骤进行点击创建:
 

我们发现其实这个网站也可以进行数据标注:

然后回到刚才的项目,选择了数据集后创建任务:

这里我也没研究这些参数有何意义,但我问了AI,并将它的解释放在下文:

  1. 迭代次数(Epochs)
    • 迭代次数决定了模型在整个数据集上训练的次数。
    • 如果迭代次数太少,模型可能无法充分学习数据的特征;如果迭代次数太多,模型可能会过拟合。
    • 建议从较小的迭代次数开始(如10个epochs),然后根据验证集的性能逐渐增加。
  2. 批数据量大小(Batch Size)
    • 批数据量大小决定了在更新模型参数之前用于计算梯度损失的数据样本数量。
    • 较大的批数据量可以加速训练,但可能会消耗更多的内存;较小的批数据量可以更有效地适应不同的数据分布,但可能会降低训练速度。
    • 根据硬件资源和数据集大小选择合适的批数据量大小,常见的选择包括32、64、128等。
  3. 最大学习率(Learning Rate)
    • 学习率决定了模型参数在每次迭代中更新的幅度。
    • 如果学习率太大,模型可能无法收敛;如果学习率太小,训练可能会非常缓慢。
    • 可以使用学习率衰减策略(如指数衰减、余弦衰减等),在训练过程中逐渐减小学习率。
    • 初始学习率的选择通常需要根据实验来确定,常见的选择包括0.01、0.001等。
  4. 标注框限制(Bounding Box Constraints)
    • 在目标检测任务中,标注框限制可能涉及标注框的大小、比例或位置等。
    • 这些限制可以根据具体任务和数据集进行调整,以确保标注框的准确性和一致性。
  5. 数据均衡(Data Balancing)
    • 如果数据集中不同类别的样本数量差异很大,可能会导致模型对某些类别的识别性能较差。
    • 可以使用数据均衡技术(如过采样少数类、欠采样多数类等)来平衡不同类别的样本数量。
  6. 标准化平均值(Mean Normalization)和标准差(Standard Deviation Normalization)
    • 在数据预处理阶段,对输入数据进行标准化可以提高模型的训练速度和性能。
    • 标准化平均值和标准差通常根据训练数据的统计信息来确定。对于图像数据,常见的做法是对每个颜色通道分别计算平均值和标准差,并在输入模型之前将数据减去平均值并除以标准差。

需要注意的是,以上参数的具体调整值需要根据实际任务和数据集进行确定。在训练过程中,可以使用交叉验证、早停(Early Stopping)等技术来监控模型的性能,并根据验证集的性能调整训练参数。此外,还可以使用网格搜索(Grid Search)等调参方法来系统地搜索最佳参数组合。

 

就是需要我们调整各个参数进行训练,使得准确率提升:

像我这就最终通过多次调整参数训练出来了100准确率的模型了:

然后就是训练出高准确率的模型后,选择手动部署模型,来下载模型文件:

部署模型文件:

解压模型后直接把内容都复制到SD卡:

修改主函数:

它的主函数写的有些问题,需要我们添加一行代码在头部:

from machine import UART

 

测试程序前有些固件问题需要调整:

K210固件库支持多下载码(或称为多固件、多版本固件)

下载适配的固件:

先擦除固件:

然后使用kflash_kui烧录以下固件库到flash:

maixpy_v0.6.2_52_gb1a1c5c5d_minimum_with_ide_support.bin

重启开机测试效果展示:

固件与模型打包下载:

https://download.csdn.net/download/qq_64257614/89385496

网上学习资料贴出:

K210 Mx-yolov3模型训练和物体识别-CSDN博客

[教程]从0自制模型,实现多物体识别(以k210多数字识别举例)_哔哩哔哩_bilibili

OpenCV Label标注软件

之前尝试下载使用多个固件的尝试:

之前尝试过下载多个固件,但貌似没法使用......

也许只是我操作不太对......

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

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

相关文章

动态库(DLL)和静态库(LIB)的区别

链接时间: 静态库(LIB)在编译链接时整合到程序中。动态库(DLL)在程序运行时动态加载。 内存共享: 静态库导致每个程序副本都包含库代码。动态库允许多个程序共享同一份代码。 更新维护: DLL更新…

通信网优:薪资从3k-20k究竟要多久?

随着华为中标结果的不断公布,通信网优行业有了新变化。各大通信公司关于今年的网优业务市场份额也陆续公布,从目前的中标结果来看 杭州东信网络技术有限公司和南京嘉环科技股份有限公司并列排名第一,信科通信科技有限公司排名第三。而北京电旗…

ABP框架+Mysql(三)

创建,更新和删除图书 创建新书籍 创建 modal form 在 Acme.BookStore.Web 项目的 Pages/Books 目录下新建一个 CreateModal.cshtml Razor页面: CreateModal.cshtml.cs 打开 CreateModal.cshtml.cs 代码文件(CreateModalModel 类),替换成以下代码: using System.Threading.…

使用多种云进行OSS存储,详细教程

文章目录 这边文章是交大家进行多种云的存储,市场上主流的云存储,腾讯云,华为云,由于阿里云腾讯云 这边文章是交大家进行多种云的存储,市场上主流的云存储,腾讯云,华为云,由于 阿里云 阿里云本人以及出了详细的教程,这里就不讲解了,可以直接查看链接 阿里云实现思路: link 腾…

Html大前端与前端的区别:深度解析与实用指南

Html大前端与前端的区别:深度解析与实用指南 在谈论Html大前端与前端之间的区别时,我们首先需要理解这两者各自的定义和涵盖的范围。在软件开发的广阔领域中,前端与Html大前端各自扮演着不同的角色,并且随着技术的不断演进&#…

C/C++|回调函数的正确打开方式

最近在学习muduo库,其中的回调给我弄得晕头转向,后来才发现主要是回调函数的使用逻辑还没摸清楚,所以这里用一个简单的案例,来探究他们都是如何使用回调函数的。 一般回调函数都是用在类中: 我们将创建一个 EventHan…

【贪心算法题目练习】

1. 分发饼干 这道题目和我们之前讲到的田忌赛马的问题很相似,只不过这这里不需要劣等马去抵消掉优等马,直接上贪心策略: 先将两个数组排序。针对胃口较小的孩子,从小到大挑选饼干: i. 如果当前饼干能满足,直接喂(最小…

Windows安装Linux子系统WSL

Windows安装Linux子系统WSL 一、相比直接安装虚拟机优缺点:1、优点:2、缺点:二、开启WSL服务1、开启开发人员模式2、点开你电脑的设置然后点击应用3、安装过程4.启动5.那么共享文件在哪里呢?注意三、集成VScode开发环境1、新建终端2、选择WSL一、相比直接安装虚拟机优缺点:…

Flutter开发效率提升1000%,Flutter Quick教程之对组件进行拖拽与接收

1,首先,所有可以选择的组件,都在左边的组件面板里。从里面点击任何一个,按住左键,向右边的手机面板上进行拖拽即可。 2,拖拽后,我们要选择一个接收组件。什么时候可以接收组件,就是当…

Go 内存分配机制

是什么? Go语言内置运行的runtime,抛弃传统的内存分配方式,比如内存池,预分配等,这样不会每次内存分配都给系统调用。 为什么? golang的内存分配机制将程序员从手动管理内存的繁琐任务脱离出来。 怎么用…

反转字符串中的单词-力扣

此题将问题分为三步进行解决: 第一步,删除字符串中多余的空格,removeSpaces函数中删除所有的空格,并手动在每个单词后添加一个空格,最后重构字符串s第二步,将整个字符串反转第三步,对反转后的字…

代码随想录训练营Day57(单调栈解决最近大于或小于关系):Leetcode739、496、面试经典百题:Leetcode80、274

Leetcode739: 问题描述: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请…

龙叔Linux:别名(alias)

在Linux中,别名(alias)是一个命令的简短形式,通常用于简化或替换更长的命令序列。你可以使用alias命令来创建、查看和删除别名,定制自己专属的命令。一、创建别名 1.1、临时创建 你可以使用alias命令在命令行中直接定…

B-TREE教程(个人总结版)

背景 在计算机科学中,数据存储和检索的效率是一个重要的研究课题。B-树(B-Tree)作为一种自平衡树结构,特别适合于在磁盘存储中处理大规模数据。它通过保持树的高度平衡,使得搜索、插入和删除操作的时间复杂度保持在对…

Spring (30)如何在Spring应用中启用Spring Security

在Spring应用中启用Spring Security涉及几个关键步骤,包括引入Spring Security依赖、创建安全配置类以及配置应用的安全细节。下面,我们将深入探讨这些步骤,并通过代码示例和源码分析来详细解析如何启用和配置Spring Security。 1. 引入Spri…

python 五子棋游戏代码

下面是一个简单的五子棋游戏的Python代码示例。这个示例包括了游戏逻辑和用户界面的基本实现,但并不完整,例如没有AI对战功能。 import numpy as np import pygame # 初始化游戏界面 def init_game(): global board, screen, width, height width,…

微信小程序的view的属性值和用法

在微信小程序中,view 是一个基础的视图组件,用于承载其他视图组件或者展示文本、图片等内容。view 组件具有多种属性,用于控制其行为和样式。以下是一些常用的 view 属性及其用法: class / style: 控制视图的样式,可以…

docker部署Minio对象存储及使用

1.拉取镜像 docker pull minio/minio2.创建数据目录 mkdir -p /data/minio/data3.启动容器 docker run -p 39000:9000 -p 39090:9090 \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYjyadmin" \ -e "MINIO_SECRET_KEYjyzx2023" \ -v /data…

【八股】Hibernate和JPA:理解它们的关系

在Java开发中,持久化框架是至关重要的工具,它们帮助开发者将Java对象与关系数据库中的数据进行映射和管理。Hibernate和JPA(Java Persistence API)是两个广泛使用的持久化框架。那么,Hibernate和JPA之间到底是什么关系…

沃通CA根证书获数科网维《商用密码根证书授信证明》

近日,沃通CA三款根证书获数科网维《商用密码根证书授信证明》,将列入数科受信根证书列表并预置到数科文档阅读器。这标志着沃通CA国产化适配能力进一步提升,沃通国产文档签名证书与数科国产文档阅读器兼容互认,能够更好地响应政企…