OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

2023-05-16

文章目录

    • 1.采集
    • 2.连接
    • 3.训练
      • 复制API KEY
      • 上传照片
      • 模型创建
      • 生成神经网络
      • 训练神经网络
      • 测试神经网络
      • 备份保存
    • 4.下载
    • 代码分析

注意: 只有 OpenMV4 Plus可以自己训练神经网络,其他版本的性能不够

本节讲解如何使用edgeimpulse.com网站来自行训练神经网络模型,进而实现机器学习的功能

edgeimpulse.com是一个在线网站,是一个为嵌入式产品非常快速地生成嵌入式上面使用的神经网络的模型,非常地易用且快速,大概只需要5min左右就可以训练出一个OpenMV4 Plus上使用的模型

机器学习有什么用? 利用机器学习我们可以知道OpenMV里面的图像是什么,比如图像里有没有人(进行人检测),或者是知道我们图像里的人是否有戴口罩(进行口罩识别),也可以利用机器学习来分辨一些其他物品和图片(是水杯还是矿泉水拼,电池还是烟头…),可以分辨一切你想要的东西,但是前提是训练好一个合适的模型


看完了上述部分,那么我们到底该如何使用OpenMV来训练神经网络模型

  1. 采集: 我们需要利用OpenMV的IDE来采集我们的数据集,根据经验,每一个分类至少需要100张左右的数据集进行训练
  2. 上传: 将我们在OpenMV的IDE中采集到的图像上传到edgeimpulse的在线网站上
  3. 训练:edgeimpulse的网站上进行在线训练模型
  4. 下载: 将我们训练好的模型和生产的代码下载到OpenMV中,直接运行即可

以 “口罩识别” 为例

1.采集

打开OpenMV的IDE——>菜单栏——>工具——>数据集编辑器——>新数据集

新建一个文件夹命名,再打开即可

数据集编辑器新建文件夹,我们新建两个文件夹并且分类

  • 人戴口罩mask.class,存储100-200张戴口罩的人脸照片
  • 人不戴口罩face.class,存储100-200张不戴口罩的人脸照片

2.连接

  1. 连接OpenMV
  2. 点击IDE中的连接
  3. 然后运行
  4. 点击OpenMV的左侧菜单栏中的"数据采集"按钮(按钮图标是个照片),点一下就会保存一张图片,会按顺序依次命名
  5. 我们可以保存多个角度,戴眼镜或不戴眼镜等多种照片
  6. 可以男女都采集一次,让男女都可以识别到,保证训练集的多样化
  7. 如果发现采集过程中人脸跑出了图像外,可以对该张图像右键——>删除
  8. **采集图像时人物的背景最好是纯色的!**这样训练出的模型特征会比较明显,准确率会高一点

3.训练

将我们的数据集上传到edgeimpulse的网站上进行在线训练

复制API KEY

  • 更改项目名称
  • 在上方菜单栏找到钥匙keys
    在这里插入图片描述
  • 进入钥匙keys,复制API KEY(注意:如果显示不全就对页面进行缩放处理!)
  • 也可以右键——>检查来复制
    在这里插入图片描述

上传照片

  • 复制之后得到一串数字,这就是我们的API Key,我们可以用次来与OpenMV的IDE进行联通

    • 将我们采集的照片上传上去打开OpenMV的IDE——>工具——>数据集编辑器——>Export——>通过API Key进行上传"Upload to Edge Impulse by API Key"
    • 在弹出的窗口中输入刚刚复制的API
    • 还会弹出一个窗口让你选择上传时训练集和数据集的比例,默认为80%和20%——>上传的照片有80%用于训练神经网络,有20%用于和我们镜头中的图像进行匹配
      在这里插入图片描述

  • 回到网站,我们可以看到刚刚上传上来的数据集
    在这里插入图片描述
    我这里还没有上传,所以是0
    在这里插入图片描述


注意!!!

我们用星瞳科技的方法上传API可能输出现创建SSL上下文错误的问题,因此我们直接自行上传文件夹即可
在这里插入图片描述
有几个标签文件夹就分几次上传,记得要自己输入标签!


  • 在左侧的菜单栏选择Data acquisition数据采集
    可以看到已经收集了410份数据,一共有两个分类LABELS = 2
    点开其中的一个数据就可以看到我们保存的图像在这里插入图片描述
    另外的Test Data测试数据是我们用来测试的数据集,只有20%的照片,因此只有38份数据
    这部分数据是不参与模型的训练的,是在模型训练完成后用于测试模型准确率的(20%的数据由系统随机选择)
    在这里插入图片描述

模型创建

  • 进行模型的创建——>在左侧菜单栏选择Impulse design脉冲设计

  • 首先进行图像的处理,我们选择默认大小即可,系统训练时会将图像变成长宽等比例的图像,我们选择默认值即可
    在这里插入图片描述

  • 创建模块Add a processing block,我们的OpenMV默认的是图像,因此选择image图像即可
    在这里插入图片描述

  • 添加下一个模块,我们一般默认选择后面带⭐的Transfer Learning迁移学习,训练会快一些
    在这里插入图片描述

  • 训练结束后会生成Output features
    此处有两个,一个是戴口罩的mask,另一个是不戴口罩的face

  • 选择Save Impulse保存,上方会显示保存成功
    在这里插入图片描述


生成神经网络

  • 选择左侧菜单栏Impulse design脉冲设计——>image图像进行图像的DSP预处理
    Raw data中的图像是OpenMV的IDE原生采集的图像
    DSP result中是DSP预处理后的图像
    Parameters中可以修改图像的格式是RGB565彩图还是GREYSTYLE灰度图
    在这里插入图片描述

  • Generate features中生成features
    在这里插入图片描述

  • 显示Job complete完成后可以观察生成的数据集!
    我们可以看出face和mask这两种颜色基本上是分开的,而不是混乱地混合在一起地,就证明我们地数据集采集地不错
    如果出现全部颜色都特别混乱,交叉混合在一起那么说明我们前期数据集的采集特征不够明显(可能是背景环境太复杂或者是人脸图片种类不够丰富,比如表情单一)在这里插入图片描述
    当前我们的数据特征还是比较分明的,因此可以进行下一步


训练神经网络

  • 选择左侧菜单栏Impulse design脉冲设计——>Transfer learning进行迁移学习
    所有机器学习的参数选择默认均可

  • Number of training cycles设置学习的轮数

  • Learning rate设置学习率,Learning如果设置得大可以提高学习得速度,小了速度会变慢,但过大过小都会导致无法完成学习目标

  • Data augmentation设置数据增强,我们可以勾选也可以不勾选,它可以在训练的过程中随机变换数据,让你训练更多的轮数并且不会过拟合,用来提高训练的准确度

  • Minimum confidence rating设置置信度,默认为0.8
    在这里插入图片描述

右边会显示工作的进度

  • Job started表示训练开始
  • 正常情况下loss的值是越来越低的,准确度accuracy的值是越来越高的
    这个网站是比较智能的,在训练的过程中不一定会达到你设置训练的轮数,如果在中间运行时系统发现结果已经足够准确,那么就会停止训练,防止过拟合

  • 显示Job completed后即我们基本的模型已经训练完成,在训练结束后我们可以把页面滑到下面,可以看到训练后得出的数据
    在这里插入图片描述

  • 左边的三项分别代表准确率accuracy、误差loss、类型classes

  • 中间代表confusion matrix代表混淆的元素:如图有4个戴口罩的数据被识别成了没带口罩

  • 右边代表了“预估”神经网络在设备上运行的性能表现:需要1.2ms占用RAM297K、占用ROM585.1K


  • 左侧菜单栏Retrain model重新训练模型对我们的神经网络进行重新的训练
  • 左侧菜单栏Live classification实时分类进行单独某张图片的测试

测试神经网络

我们先进行Model testing,下方的文件都是我们的测试集(最开始被分出来的20%),我们利用我们刚刚训练出的模型来对测试集进行测试
在这里插入图片描述

此处我们发现有一张图片是不确定的,我们可以找到这张图片:右键——>show classification查看训练结果
在这里插入图片描述

我们发现跳回了刚刚说的Live classification实时分类!其实就是这个意思啦,这张有0.74认为是戴口罩,有0.26认为是不戴口罩(因为头发都遮住了大半张脸)
在这里插入图片描述


备份保存

通过Versioning设置版本
可以在这里进行版本的保存,可以在以后的工作直接回来使用这个
不保存的话,下次训练出来的模型就会覆盖当前模型!

在这里插入图片描述


4.下载

利用Deployment对训练好的模型进行导出
选择OpenMV——>Bulid,生成后会自动地下载下来
在这里插入图片描述


下载后我们发现它生成了三个文件

  • trained.tfilite是我们生成的模型
  • labels.txt是我们的两个分类:face+mask
  • .py文件是我们在OpenMV上运行的代码
    在这里插入图片描述

将三个文件拷贝到OpenMV内置的flash中
.py文件在IDE中打开


代码分析

# Edge Impulse - OpenMV Image Classification Example

import sensor, image, time, os, tf # os是与文件相关的类     tf是用到神经网络的类 

# 设置感光元件
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_windowing((240, 240))       # Set 240x240 window.
sensor.skip_frames(time=2000)          # Let the camera adjust.

# 设置神经网络的模型——>这就是我们刚刚训练出的模型文件,已经保存到u盘中了
net = "trained.tflite"

# labels获取神经网络的标签 
labels = [line.rstrip('\n') for line in open("labels.txt")] 
    # line.rstrip('\n')表示如果遇到换行符"\n",就把换行符从labels中删掉
    # 因为我们保存的labels文件中有换行符,因此得删掉

clock = time.clock()
while(True):
    clock.tick()

    img = sensor.snapshot()

    # 在采集到的照片中进行tf.classify()的分类
    for obj in tf.classify(net, img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
            # tf.classify()会返回OpenMV视野中识别到的物体的列表
            # 返回obj.rect()是物体对应的框框  obj.output()是这个物体对应的每个标签的得分
            
        print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
        
        img.draw_rectangle(obj.rect())
        
        #我们可以打印每个标签的得分
        print(obj.output())
        
        # 将得分和标签一一对应,返回一个列表
        predictions_list = list(zip(labels, obj.output()))
                # zip()表示把标签labels和得分obj.output()一一对应
                    # 会打印出如[('face',0.9411765),('mask',0.0627451)]
        
        # 将得分输出
        for i in range(len(predictions_list)):
            print("%s = %f" % (predictions_list[i][0], predictions_list[i][1]))
            
            if predictions_list[0][1]>0.8:
                img.draw_string(0,0, 'face')
            else:
                img.draw_string(0,0, 'mask')
                              
    print(clock.fps(), "fps")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别 的相关文章

  • openmv是双串口

    openmv是双串口
  • c++ primer和c++ primer plus的区别

    c 43 43 primer和c 43 43 primer plus的区别 xff0c 我自己是先买的c 43 43 primer https www php cn faq 439403 html https zhidao baidu co
  • 关于mybatis-plus的雪花算法以及主键策略ASSIGN_ID

    1 有mybatis plus 3 5 0 Sequence类还是构造雪花算法的实现类 xff1a 其函数和下面这篇博客写的功能完全一致 xff1a https www modb pro db 150947 为了放置该博客失效 xff1a
  • C++ Primer Plus拾遗

    本博文整理了C 43 43 Primer Plus前六章中的部分知识点 xff0c 一般为不常用的小技巧或基础概念性的内容 C与C 43 43 的语言特性 C语言特性 结构化编程 xff08 Structured Programming x
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • 蓝牙 舵狗 openmv通信相关

    总的思路是以openmv 接收蓝牙的指令 xff0c 如果是自动选项 xff0c 就在openmv 运行识别红球进行固定距离跟踪的程序 xff1b 如果是手动选项 xff0c openmv就直接把所得到的数据传给STM xff13 xff1
  • 学习OpenMV(一)详细参数及简单介绍

    目录 一 Open MV 简介 1 OpenMV摄像头的特点 xff1a 2 OpenMV摄像头的应用 xff1a 3 规格 xff1a 二 搭建环境 xff0c Open MV IDE安装 1 Windows系统 2 Linux系统 三
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物
  • C++ Primer Plus (Fifth Edition)pdf

    下载地址 xff1a 网盘下载 本书是久负盛名的C 43 43 经典教程 xff0c 其内容是C 43 43 大师Stanley B Lippman丰富的实践经验和C 43 43 标准委员会原负责人Jos e Lajoie对C 43 43
  • TFmini-Plus在Arduino上的开发例程

    TFmini Plus在Arduino上的开发例程 本例程以Arduino Uno 和 DUE板作为示例 xff0c 主要帮助客户快速熟悉我公司雷达 xff0c 减少产品的研发周期 关于Arduino的详细介绍请参考以下网站 xff1a 英
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • mybatis plus 查询排序_MyBatis-Plus | 最简单的查询操作教程(Lambda)

    引言 是对MyBatis Plus的功能进行简单介绍 xff0c 虽然是介绍 xff0c 也让我们领略到他的优雅与强大 你是不是已经被吸引了 xff1f 别着急 xff0c 上一节 xff0c 我们算是参观了MyBatis的风景 xff0c
  • C++primer plus和C++ primer的读书心得

    C 43 43 两本巨著primer plus和primer太过于经典 xff0c 以至于读过多次 xff0c 每次阅读仍然有新的收获 xff0c 所以将一些零碎的知识点整理在这里 xff0c 与大家共同进步 1 i 43 43 与 43
  • 【Vue3】element-plus中el-tree的递归处理赋值回显问题

    目录 一 xff1a 先获取所有权限tree二 xff1a 在获取所有该角色能有的权限tree三 xff1a 递归处理勾选tree节点 由于项目是从0 1开始构建的 rbac都需要重新构建对接 所以涉及到了权限管理和菜单管理 一级菜单包含多
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    文章目录 1 采集2 连接3 训练复制API KEY上传照片模型创建生成神经网络训练神经网络测试神经网络备份保存 4 下载代码分析 注意 xff1a 只有 OpenMV4 Plus可以自己训练神经网络 xff0c 其他版本的性能不够 本节讲
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头
  • OpenMV识别色块与STM2F4通过串口通信

    花了三天时间学习了一下OpenMV的简单使用 xff0c 在这写个博客记录一下 xff0c 并且上传自己的代码 xff0c 以方便交流学习 第一次发帖 xff0c 不周之处见谅 首先概括一下我实现的功能 xff1a OpenMV识别红色色块
  • OpenMV4开发笔记4-舵机控制

    OpenMV4的舵机控制脚有3个 P7 P8 P9 即可以控制3个舵机 Servo 1 gt P7 PD12 Servo 2 gt P8 PD13 OpenMV3 M7 OpenMV4 H7上增加 Servo 3 gt P9 PD14 注意
  • 毕业设计 单片机与OpenMV机器视觉目标跟踪系统

    文章目录 0 前言 课题简介 设计框架 3 openMV实现舵机定位色块STM32 3 硬件设计 4 软件设计 4 1 硬件连接 4 2 软件代码 OpenMV端 4 3 软件代码 STM32端 4 4 利用PC端测试数据数据是否发送接收正

随机推荐

  • 使用select函数搭建TCP客户端和服务器

    select的TCP服务器 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt inclu
  • Linux--UDP编程

    目录 一 实现的过程 二 代码 xff1a 1 ser c 2 cli c 三 运行结果 四 服务器端断开重运行 xff0c 客户端还能发送吗 xff1f xff08 可以 xff09 五 可以同时运行两个客户端吗 xff1f xff08
  • 51单片机串行通信奇偶校验的设置方法

    51单片机串行通信奇偶校验的设置方法 悬赏分 xff1a 10 解决时间 xff1a 2009 12 5 10 21 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • pycharm连接VMware

    一 上传目录的配置 1 打开虚拟机 xff0c 进入终端查看host ip addr 输出此命令 记住下面会用到 2 打开pycharm新建一个py文件 3 点击ok后会出现如下图 设置好后先点击1 xff0c 测试是否连接成功 xff0c
  • 请确保您已登录客户机操作系统。在客户机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insall.pl安装VMware Tools。

    解决Ubuntu安装VM Tools请确保您已登录客户机操作系统 在客户机中装载CD驱动器启动终端 xff0c 使用tar解压缩安装程序 xff0c 然后执行vmware insall pl安装VMware Tools whafal的博客
  • 使用SSH远程连接工具(MOBAXTERM)连接虚拟机时输入中文乱码问题

    使用SSH远程连接工具连接虚拟机时输入中文乱码问题 一 xff1a 出现的中文输入问题 二 xff1a 造成的可能原因和出现原因的环境 出现原因的环境 xff1a 本机环境win10 xff0c 虚拟机环境centos7 出现这样情况的可能
  • vscode的alt+b失效解决

    1 先安装插件 xff0c 如下 2 一共有两种方式打开浏览器 xff0c 一个是alt 43 b xff0c 还有一个是alt 43 shift 43 b 但是对于刚安装上open in browser插件 xff0c alt 43 b是
  • 解决ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

    如何解决ERROR 2003 HY000 Can t connect to MySQL server on localhost 10061 1 登录到安装Mysql的主机 xff0c 打开cmd命令行工具 xff0c 执行命令mysql u
  • vscode中converting to execution character set: Illegal byte sequence

    我的这个问题是由于之前跟博主安装的时候在tasks json文件中添加了 34 fexec charset 61 GBK 34 删除后便可以正常运行了 当时即使我没添加这个代码控制台也没出现乱码的情况 xff0c 但还是加上了 xff0c
  • 工作日志day04

    再次安装虚拟机时常见的不确定点 软件选择 安装位置 点击完成 设置用户名的时候可能与数字 xff0c 以及强度有关 注销以管理员身份登录填写root用户名和自己设的密码 网络设置之后可以ping通 sudo yum y install tr
  • linux

    目录 基本命令 文件和用户管理 用户 创建用户 删除用户 修改用户属性 用户组 创建组 组的类型 提权 用户的权限 基本权限UGO 权限的三类对象 权限的三种类型 设置权限 编写程序 增加执行权限 更改属主 xff0c 属组 基本权限ACL
  • 机器学习.

    目录 一 机器学习概述 1 1人工智能概述 1 2什么是机器学习 1 2 1定义 1 2 2解释 1 2 3数据集的构成 1 3机器学习算法分类 1 3 1总结 1 3 2机器学习算法分类 1 4机器学习开发流程 1 5学习框架和资料介绍
  • NMEA-0813协议报文解析(QT/C++)

    文章目录 一 协议说明 二 具体实现 1 GNRMC 2 GNGGA 总结 一 协议说明 34 GN 34 联合模式协议头 xff1b 34 GP 34 GPS模式协议头 xff1b 34 GL 34 GLONASS模式协议头 xff1b
  • 寄存器位设置

    作为嵌入式工程师 xff0c 一定要掌握寄存器的控制 xff0c 想要了解基本的寄存器控制 xff0c 最简单的方法就是使用单片机练手 xff0c 51 xff0c stm0 xff0c stm8 xff0c MSP430等 xff0c 与
  • STM32 —— STM32 的串口通信

    STM32 STM32 的串口通信 STM32的串口通信接口有两种 xff0c 分别是 xff1a UART 通用异步收发器 USART 通用同步异步收发器 而对于大容量 STM32F10x 系列芯片 xff0c 分别有 3 个 USART
  • STM32 —— 串口数据接收

    STM32 串口接收数据 我们已经在前面的博客中讲过了串口通信中发送数据和中断的一些基本原理 xff0c 这里主要介绍串口接收数据的相关内容 定长字符串的接收 当接收单字节时 xff0c 我们就可以使用最简单的接收方式即可 xff0c 这种
  • 远距离WiFi模块,无人机传输技术,无线通信视频传输技术

    随着科技的发展 xff0c 无人机应用范围的不断扩展且愈加广泛 无人机的起飞 xff0c 航行 xff0c 悬停 xff0c 返回的任何一个阶段 xff0c 都需要进行无线遥控 xff0c 这就需要很高的灵敏度了 同时在无人机飞行的过程中
  • OpenMV:14巡线小车

    文章目录 追小球的小车巡线小车 这个例子展示了在OpenMV Cam上使用get regression xff08 xff09 方法获得ROI的线性回归 使用这种方法 xff0c 可以轻松让机器人跟踪所有指向相同大致方向的线 本例程可以用于
  • OpenMV:16神经网络

    文章目录 导论利用神经网络进行特征识别 已停用 神经网络检测函数检测函数 96 tf classify 96 返回值加载神经网络函数 96 tf load 返回值 96 例程1 图像中央人检测例程2 整幅图像人脸检测 导论 OpenMV内置
  • OpenMV:19OpenMV4 Plus训练神经网络进行口罩识别

    文章目录 1 采集2 连接3 训练复制API KEY上传照片模型创建生成神经网络训练神经网络测试神经网络备份保存 4 下载代码分析 注意 xff1a 只有 OpenMV4 Plus可以自己训练神经网络 xff0c 其他版本的性能不够 本节讲