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://xiahunao.cn/news/3266405.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

vite5+vue3开发阅读APP实战笔记20240725

目前界面长成这样: 配置别名 修改vite.config.js import {defineConfig} from vite import vue from vitejs/plugin-vue import path from "path"// https://vitejs.dev/config/ export default defineConfig({server: {open: true,port: 8088,},plug…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此,一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中,研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

Qt自定义带前后缀图标的PushButton

写在前面 Qt提供QPushButton不满足带前后缀图标的需求,因此考虑自定义实现带前后缀图标的PushButton,方便后续快速使用。 效果如下: 同时可设置前后缀图标和文本之间间隙: 代码实现 通过前文介绍的Qt样式表底层实现 可以得…

DMv8共享存储集群部署

DMv8共享存储集群部署 环境说明 操作系统:centos7.6 服务器:2台虚拟机 达梦数据库版本:达梦V8 安装前准备工作 参考达梦官方文档:https://eco.dameng.com/document/dm/zh-cn/ops/DSC-installation-cluster.html#%E4%B8%80%E3…

深度模型中的优化 - 基本算法篇

序言 在深度学习中,模型优化是提升模型性能与训练效率的关键环节。深度模型通过优化算法不断调整其内部参数,以最小化损失函数,从而实现对复杂数据的有效拟合与预测。本篇章将简要概述深度模型中的几种基本优化算法,包括梯度下降…

I2C framework

/dev/i2cX是i2c总线设备驱动文件。I2C总线是一种字符设备。 先来看驱动drivers/i2c/i2c-core-base.c 驱动drivers/i2c/i2c-core-base.c注册了i2c总线类i2c_bus_type,我们说的i2c0等具体的i2c总线需要注册到这个i2c_bus_type.

传知代码-智慧医疗:纹理特征VS卷积特征(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S1076633223003537?__cf_chl_rt_tkJ9Aipfxyk5d.leu48P20ePFNd4B2aunaSmzVpXCg.7g-1721292386-0.0.1.1-6249 论文概述 今天我们把视线…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations,进去编辑,如下: 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

建立两个基于域名访问的网站

题目 1、配置web服务器,当访问网站www.haha.com时显示:haha 2、配置web服务器,当访问网站www.xixi.com/secret/显示:this is secret 一、 ① # 恢复快照,关闭安全软件 # 安装所需软件 [rootserver ~] # yum install …

mac怎样清理photoshop垃圾的方法 ps清理缓存和垃圾 苹果电脑暂存盘已满怎么清理

很多使用过ps,尤其是Adobe全家桶的小伙伴会发现,这些软件占用缓存很多,而且随着使用时间的增长,缓存也会越多,并不会自动清理。那么mac系统怎么清理ps暂存盘呢?mac又该怎么最高效清理磁盘空间呢&#xff1f…

删除的视频怎样才能恢复?详尽指南

在日常生活中,我们有时会不小心删除一些重要的视频文件,或者在整理存储空间时不慎丢失了珍贵的记忆片段。这时候,我们可以通过一些数据恢复工具和技巧,找回这些被删除的视频。本文将详细介绍几种常见且有效的视频恢复方法&#xf…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 💪💪💪 谢谢你这么帅…

纬创软件赞助 | 两岸曲艺青年汇在台湾会馆举办

7月6日下午,北京台湾会馆处处洋溢着掌声、笑声、欢呼声。由中国曲艺家协会、北京市台联主办,北京国际和平文化基金会、相声天团、吴兆南相声剧艺社、北京德云社文化传播有限公司等协办的“艺道同欢”两岸曲艺青年汇在这里隆重举办。纬创软件赞助了本次活…

生成式人工智能代理 AI Agent:从思维到行动的技术飞跃

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

利用换元法计算积分的常见题型(考研高数复习)

考研中常见的几种换元法积分计算题 (1)被积式仅包含一个根式:根号下为有 a a a 和 x x x 的平方和/平方差 此种类型的积分题型,可以通过构造单个锐角大小为 t t t 的直角三角形,利用勾股定理和三角函数进行代换。 平方和的情况 形如 ∫…

opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言 AIS_ManipulatorOwner是OpenCascade中的一个类,主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类,允许用户通过可视化工具(如旋转、平移、缩放等)来操纵几何对象。 以下是AIS_ManipulatorOwner的基…

32单片机开发bootloader程序

一,单片机为什么要使用bootloader 1、使用bootloader的好处 1) 程序隔离:可以同时存在多个程序,只要flash空间够大,或者通过外挂flash,可以实现多个程序共存,在多个程序之间切换使用。 2)方便程…

JavaWeb学习——请求响应、分层解耦

目录 一、请求响应学习 1、请求 简单参数 实体参数 数组集合参数 日期参数 Json参数 路径参数 总结 2、响应 ResponseBody&统一响应结果 二、分层解耦 1、三层架构 三层架构含义 架构划分 2、分层解耦 引入概念 容器认识 3、IOC&DI入门 4、IOC详解 …

STM32-寄存器DMA配置指南

配置步骤 在STM32F0xx中文参考手册中的DMA部分在开头给出了配置步骤 每个通道都可以在外设寄存器固定地址和存储器地址之间执行 DMA 传输。DMA 传输的数据 量是可编程的,最大达到 65535。每次传输之后相应的计数寄存器都做一次递减操作,直到 计数为&am…

PHP基础语法-Part1

脚本格式 PHP脚本以<?php开头&#xff0c;以?>结尾&#xff1b; PHP语句以分号结尾&#xff08;;&#xff09; PHP是解释型语言&#xff1b; 输入和输出 获取用户的输入&#xff1a; $input readline("input:"); echo $input; echo "input:";…