K210视觉识别模块学习笔记8:Mx_yolo3本地模型训练环境搭建_部署模型到亚博canmv(失败)

今日开始学习K210视觉识别模块: 本地模型训练环境搭建

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

固件库:        canmv_yahboom_v2.1.1.bin

本地训练      Mx_yolo3

 这里就简单地提示一下下载安装哪些软件,然后主要是使用Mx_yolo3 进行本地训练模型的......

本文不用浪费时间看了! 这次对本地训练出的模型的部署是失败的

不知道为何,也许是亚博智能固件库对模型的处理导入函数写的与Mx_yolo3 生成的模型不适配???

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

目录

配置要求:

下载安装的软件:

 Mx_yolov3本地训练自己的模型

 采集图片数据集:

标注处理数据集:

训练模型:

编程导入模型

源代码如下:

修改步骤如下:

 修改后的代码如下:

测试识别效果:

 网上查阅资料贴出:


配置要求:

win10电脑,最好有显卡GPU,我的配置如下:

下载安装的软件:

这里制作提示要安装哪些软件环境啥的,具体细节省略,下方网上查阅资料标出的文章有具体细节

Mx_yolov3的安装并使用GPU训练_mx yolov3 3.0下载-CSDN博客

 1、Mx_yolov3

 2.CUDA和CUDNN

 3、Python3.7.3

 Mx_yolov3本地训练自己的模型

这里详细讲一下如何使用 Mx_yolov3本地训练自己的模型

就以识别鼠标为例,从获取数据集、标注处理数据集、训练模型、导入模型为顺序讲·

 采集图片数据集:

这里说明必须使用K210来拍摄采集数据图片,并尽可能多的图片

这次我对着鼠标拍摄了58张不同角度的图片,实际为了准确率,这点数据集明显是不够的,

实际最好需要几百张

标注处理数据集:

打开文件夹可以打开采集好的所有数据图片(放在一个文件夹中)

英文输入法下,按‘W’可以与鼠标配合开始绘制标注框图

选择保存文件夹可以将标注好的xml文件选择地方保存好

 这里我将所有图片放在了imagine文件夹中,将标注好的xml文件放在xml文件夹:

训练模型:

将训练图片与标注的俩个文件夹地址选择好,填好参数啥的就能训练了:

等待训练完成后就能导出模型了:

编程导入模型

解压导出的模型压缩包后,只有一个komdel、label是我们需要用到的:

先将mx.kmodel文件复制到SD卡

因为固件库的原因,它的boot代码我们无法使用,但需要打开boot来复制它的anchor内容:

这里我们之前在mixhub网站训练模型的代码来导入使用它的模型:

源代码如下:

import sensor, image, time, lcd, gc, cmath
from maix import KPUlcd.init()                          # Init lcd display
lcd.clear(lcd.RED)                  # Clear lcd screen.# sensor.reset(dual_buff=True)      # improve fps
sensor.reset()                      # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
#sensor.set_vflip(True)              # 翻转摄像头
#sensor.set_hmirror(True)            # 镜像摄像头
sensor.skip_frames(time = 1000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.print("ready load model")labels = ["six"] #类名称,按照label.txt顺序填写
anchor = (1.06, 1.22, 1.36, 1.56, 1.75, 2.03, 2.41, 2.88, 3.58, 4.45) # anchors,使用anchor.txt中第二行的值kpu = KPU()
# 从sd或flash加载模型
kpu.load_kmodel('/sd/det.kmodel')
#kpu.load_kmodel(0x300000, 584744)
kpu.init_yolo2(anchor, anchor_num=(int)(len(anchor)/2), img_w=320, img_h=240, net_w=320 , net_h=240 ,layer_w=10 ,layer_h=8, threshold=0.6, nms_value=0.3, classes=len(labels))while(True):gc.collect()clock.tick()img = sensor.snapshot()kpu.run_with_output(img)dect = kpu.regionlayer_yolo2()fps = clock.fps()if len(dect) > 0:for l in dect :a = img.draw_rectangle(l[0],l[1],l[2],l[3],color=(0,255,0))info = "%s %.3f" % (labels[l[4]], l[5])a = img.draw_string(l[0],l[1],info,color=(255,0,0),scale=2.0)print(info)del infoa = img.draw_string(0, 0, "%2.1ffps" %(fps),color=(0,60,255),scale=2.0)lcd.display(img)

修改步骤如下:

根据上面提供的源代码进行修改:

先修改导入模型的名称为刚才训练好的kmodel的名称:

在复制软件训练好的boot.py文件中的anchor数据到代码中

最后复制label的类名称到代码中:

 修改后的代码如下:


import sensor, image, time, lcd, gc, cmath
from maix import KPUlcd.init()                          # Init lcd display
lcd.clear(lcd.RED)                  # Clear lcd screen.# sensor.reset(dual_buff=True)      # improve fps
sensor.reset()                      # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
#sensor.set_vflip(True)              # 翻转摄像头
#sensor.set_hmirror(True)            # 镜像摄像头
sensor.skip_frames(time = 1000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.print("ready load model")labels = ["mouse"] #类名称,按照label.txt顺序填写
anchor = (2.71875, 3.578124999999999, 3.1875, 5.125, 2.46875, 3.125, 2.90625, 3.96875, 2.28125, 4.40625) # anchors,使用anchor.txt中第二行的值kpu = KPU()
# 从sd或flash加载模型
kpu.load_kmodel('/sd/mx.kmodel')
#kpu.load_kmodel(0x300000, 584744)
kpu.init_yolo2(anchor, anchor_num=(int)(len(anchor)/2), img_w=320, img_h=240, net_w=320 , net_h=240 ,layer_w=10 ,layer_h=8, threshold=0.4, nms_value=0.3, classes=len(labels))while(True):gc.collect()clock.tick()img = sensor.snapshot()kpu.run_with_output(img)dect = kpu.regionlayer_yolo2()fps = clock.fps()if len(dect) > 0:for l in dect :if l[5]>0.7:a = img.draw_rectangle(l[0],l[1],l[2],l[3],color=(0,255,0))info = "%s %.3f" % (labels[l[4]], l[5])a = img.draw_string(l[0],l[1],info,color=(255,0,0),scale=2.0)print(info)del infoa = img.draw_string(0, 0, "%2.1ffps" %(fps),color=(0,60,255),scale=2.0)lcd.display(img)

测试识别效果:

惨不忍睹的识别效果....不知道是亚博智能有关anchor以及yolov固件库不兼容问题还是什么..

将限制不限制置信度L[5]>0.7的语句删除掉,它甚至能全屏都是mouse:

 网上查阅资料贴出:

关于Mx_yolo3的模型训练详细教程[保姆式教程] DF创客社区

 Mx-yolov3+Maixpy+ K210进行本地模型训练和目标检测-CSDN博客

k210部署自行训练的口罩识别模型_k210固件和亚博固件-CSDN博客

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

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

相关文章

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…

【算法】分布式共识Paxos

一、引言 在分布式系统中,一致性是至关重要的一个问题。Paxos算法是由莱斯利兰伯特(Leslie Lamport)在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算…

Linux--Socket编程预备

目录 1. 理解源 IP 地址和目的 IP 地址 2.端口号 2.1端口号(port)是传输层协议的内容 2.2端口号范围划分 2.3理解 "端口号" 和 "进程 ID" 2.4理解 socket 3.传输层的典型代表 3.1认识 TCP 协议 3.2认识 UDP 协议 4. 网络字节序 5. socket 编程接…

代码随想录day21 二叉树最后一天 || 669修剪二叉树 108将有序数组转变为平衡搜索二叉树 538把搜索二叉树变为累加二叉树

669修剪二叉树 力扣题目链接 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果…

基于Neo4j将知识图谱用于检索增强生成:Knowledge Graphs for RAG

Knowledge Graphs for RAG 本文是学习https://www.deeplearning.ai/short-courses/knowledge-graphs-rag/这门课的学习笔记。 What you’ll learn in this course Knowledge graphs are used in development to structure complex data relationships, drive intelligent sea…

【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 目录 UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#x…

SpringBoot3 JDK21 Vue3开源后台RBAC管理系统 | 2024年好用的开源RBAC管理系统 | 数据权限的探索

序言 项目现已全面开源,商业用途完全免费! 当前版本:v0.7.2。 如果喜欢这个项目或支持作者,欢迎Star、Fork、Watch 一键三连 🚀!! 在构建此代码框架的过程中,我已投入了大量精力&…

Flink内存管理机制

前言 在Flink的后台界面,可以看到整个Flink的内存情况。 如JobManager的内存情况: TaskManager的内存情况 一、Flink内存管理 Flink TaskManager内存组成整体结构图如下: 二、总内存管理 三、JobManager内存管理内存管理 四、TaskManager内…

视频主题Qinmei 3.0视频站源码_WordPress影视视频主题/附详细安装教程

Qinmei 3.0主题主要是将 wordpress 改造成纯 api 的站点,以便实现前后端分离的技术栈,目前的进度已经大致完成,唯一的问题就是需要安装 JWT token 插件。 功能介绍: 支持豆瓣以及 bangumi 的一键获取信息, 豆瓣 api 目前使用的是…

blender顶点乱飞的问题解决

初学blender,编辑模式下移动某些顶点,不管是移动还是滑动都会出现定点乱飞的问题,后来才发现是开了吸附工具的原因!!!! 像下面这样,其实我只是在Z轴上移动,但是就跑的很…

02 Golang面向对象编程_20240727 课程笔记

视频课程 最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个是其中的第二部,后续还会有很多。 视频已经录制完成,完整目录截图如下: 课程目录 01 结构体的声明.mp402 使用var根据结构体…

SQL labs-SQL注入(四,sqlmap对于post传参方式的注入)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 序言:本文主要讲解基于SQL labs靶场,sqlmap工具进行的post传参方式的SQL注入。 传参方式有两类,一类是直接在url栏内进行url编码后进行的传参&am…

K8s 核心组件——API Server

1. Kubernetes API Server 概述 1.1 基本概念 Kubernetes API Server(API Server)是 Kubernetes 的核心组件之一,负责暴露 Kubernetes API 给用户和客户端,接收和处理来自客户端的请求,并将其存储到 etcd 中。Kubern…

杂谈(杂鱼谈论c语言)——2.大小端字节序

⼤⼩端字节序和字节序判断 当我们了解了整数在内存中存储后&#xff0c;我们调试看⼀个细节&#xff1a; #include <stdio.h> int main() {int a 0x11223344;return 0; } 调试的时候&#xff0c;我们可以看到在a中的 0x11223344 这个数字是按照字节为单位&#xff0c;…

渗透测试 - 攻击思路与手段、工具分享

导语&#xff1a; 我在CSDN活跃已有6年&#xff0c;这是国内最优秀的IT学习平台之一。尽管有人对其持批评态度&#xff0c;我个人认为它拥有独特的优势。 最近我参加了一场网络安全工作的面试&#xff0c;在广州与面试官深入交流了半个多小时。尽管未能通过面试&#xff0c;但这…

【Android】linux

android系统就是跑在linux上的系统。Linux层里面包含系统和硬件驱动等一些本地代码的环境。 linux的目录 mount: 用于查看哪个模块输入只读&#xff0c;一般显示为&#xff1a; [rootlocalhost ~]# mount /dev/cciss/c0d0p2 on / type ext3 (rw) proc on /proc type proc (…

真诚推荐3款超实用工具,强大好用到停不下来

Screen Studio Screen Studio是一款专为macOS设计的屏幕录制和视频编辑软件&#xff0c;具有多种功能和特点&#xff0c;使其成为内容创作者、教育工作者和专业人士的重要工具。它不仅支持屏幕录制&#xff0c;还支持摄像头和麦克风录制&#xff0c;可以创建精美的视频&#xf…

C# 植物大战僵尸

Winform 版本开发 高效率、流畅植物大战僵尸 git地址&#xff1a;冯腾飞/植物大战僵尸

UE4-构建光照后导入的静态网格体变黑

当我们将我们的静态网格体导入到项目当中的时候&#xff0c;此时我们进行重新构建光照&#xff0c;我们在从新构建完光照后&#xff0c;会发现我们的静态网格体全部变黑了&#xff0c;此时是因为没有设置光照贴图分辨率和坐标索引引起的。 将General Settings中的L…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功&#xff0c;但数据完全推不过来。 通过抓包发现&#xff0c;是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下&#xff1a; 二、大量数据可以正常推送成功&#xff0c;不定时…