YOLOv5实操——检测是否戴口罩

news2025/7/24 9:05:29

文章目录

  • 数据集和代码的准备
    • yolov5源码下载
    • 数据集的下载
    • 制作个人数据集
      • 数据集标注
      • json 转 txt
  • 训练阶段
    • 模型训练
    • 可视化
  • 测试阶段

数据集和代码的准备

yolov5源码下载

yolov5官方下载地址

数据集的下载

直接下载别人制作好的数据集

Mask Wearing Dataset 下载
在这里插入图片描述

在这里插入图片描述
然后将其放入与yolov5-master同级的目录下。
在这里插入图片描述
打开MaskDataSet ,可以看到其目录结构如下:
在这里插入图片描述
images文件夹下的图片
在这里插入图片描述
lables文件夹下对应的同名txt文件。
在这里插入图片描述
data.yaml : trainval 分别制定了训练集和测试集文件夹相对于yolov5-master的路径。nc指定了标签的个数一共两个。names指定了标签的名称分别为maskno-mask

train: ../MaskDataSet/train/images   
val: ../MaskDataSet/valid/images

nc: 2
names: ['mask', 'no-mask']

制作个人数据集

我们也可以制作自己的数据集进行训练

数据集标注

首先要安装 lableme,在当前的虚拟环境下键入pip install labelme 。安装完成后,再次输入labelme,即可进入labelme的图形化界面。
在这里插入图片描述
【file】——>【Change Output Dir】, 选择保存标签的新文件夹(labelme生成的标签是json文件的格式,后续需要转化成txt文件才能被yolov5使用)
【file】——>【Save Automatically】自动保存
在这里插入图片描述

快捷键Clt+R ,创建长方形分别框住所有的检测目标。并填写标签(如此处我填写的是mask,代表戴口罩),选择ok 。然后点击【next image】,对其他的图片进行标注。
在这里插入图片描述

json 转 txt

标注完成后会生成对应的json文件, 我们需要将其转换为yolov5中需要的txt文件。
转换的脚本如下:

import os
import json
import numpy as np

dir_json = 'E:\\project\\yolo\\data\\json\\'  # json存储的文件目录
dir_txt = 'E:\\project\\yolo\\data\\labels\\'  # txt存储目录
if not os.path.exists(dir_txt):
    os.makedirs(dir_txt)
list_json = os.listdir(dir_json)


def json2txt(path_json, path_txt):  # 可修改生成格式
    with open(path_json, 'r') as path_json:
        jsonx = json.load(path_json)
        with open(path_txt, 'w+') as ftxt:
            for shape in jsonx['shapes']:
                label = str(shape['label']) + ' '
                xy = np.array(shape['points'])
                strxy = ''
                for m, n in xy:
                    m = int(m)
                    n = int(n)
                    strxy += str(m) + ' ' + str(n) + ' '

                label += strxy
                ftxt.writelines(label + "\n")


for cnt, json_name in enumerate(list_json):
    print('cnt=%d,name=%s' % (cnt, json_name))
    path_json = dir_json + json_name
    path_txt = dir_txt + json_name.replace('.json', '.txt')
    json2txt(path_json, path_txt)

训练阶段

模型训练

在运行代码之前,需要搭建pytorch的虚拟环境。可以参见教程Windows系统用Anaconda安装pytorch的gpu版本

然后在pycharm 中切换虚拟环境
在这里插入图片描述
打开train.py文件,配置相关参数

--data ../MaskDataSet/data.yaml
--cfg models/yolov5s.yaml
--weights weights/yolov5s.pt
--batch-size 16

debug记录
【1】No module named ‘cv2’
解决方法:pip install opencv-python
【2】RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 2.56 GiB already allocated; 0 bytes free; 2.57 GiB reserved in total by PyTorch)
解决方法:在参数设置中,将batchsize 调小一点
【3】TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
解决方法:点击进入Traceback 中最后一个蓝色链接(tensor.py文件)将self.numpy修改为self.cpu().numpy()
在这里插入图片描述

可视化

我们可以使用tensorboard对训练结果进行可视化
首先安装tensorboard pip install tensorboard
然后在pycharm中打开终端 cd yolov5-master, tensorboard --logdir=./runs
在这里插入图片描述
在浏览器中查看http://localhost:6006/
在这里插入图片描述

测试阶段

添加detect.py的配置文件

--source
./inference/images/
--weights
./weights/best.pt
--conf
0.4

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

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

相关文章

模型压缩算法库 MMRazor 全面升级,更灵活、更自动

MMRazor 是 OpenMMLab 开源项目里模型压缩领域的算法工具箱,目前支持了知识蒸馏、模型通道剪枝和模型结构搜索,模型量化部分正在开发中。 量化设计 RFC(request for comment)链接也放在这啦,欢迎各位小伙伴去提需求和建…

分享一个超好看回忆相册(代码自取)

目录 前言 正文 部分代码 单面截图 更改文档标题 更改图片 更改文字 源码 前言 Calabash Brothers 《葫芦兄弟》(又名:葫芦娃),是上海美术电影制片厂于1985-1987年原创出品的13集系列剪纸动画片,是中国动画第…

python基于PHP+MySQL家政管理系统的设计与实现

随着大家生活水平的提高,在生活中家政服务变得越来越受大家的欢迎,如何来选择一个好的员工就也变得越来越重要,如何让人们足不出户就能找到自己满意的家政人员是本网站要解决的主要问题,我们建立一个家政公司信息系统来实现需求者从网站中快速的获取正确真实的家政服务信息的手…

阿里云账户新手实名认证教程(超简单秒通过)

阿里云账号注册后需要实名认证后才可以使用,阿里云百科教大家快速实名认证的方法,不需要上传身份证的等信息,以个人认证为例,直接拿你当支付宝扫一下即可通过实名认证,阿里云百科来详细说下阿里云个人或企业实名认证方…

单链表(一篇带你掌握单链表)

在之前我们已经学习了顺序表,顺序表有一定的缺陷,比如需要扩容,在插入和删除时需要挪动数据等问题,在此基础上我们可以学习一一种新的数据结构-单链表,相对来说它可以按需申请空间,并且不需要挪动数据。 我…

Spring Security登录流程分析

本文内容来自王松老师的《深入浅出Spring Security》,自己在学习的时候为了加深理解顺手抄录的,有时候还会写一些自己的想法 登录流程分析 要搞请求Spring Security认证流程,我们先得认识与之相关的三个基本组件:AuthenticationMa…

Redis——》事务

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》事务一、概念二、示例multi、execdiscardwatch三、事务发生错误1、入队阶段发生错误2、执…

数据库课程设计——学籍管理系统

目录 1 问题的提出 1 2 需求分析 2 2.1需求描述 2 2.2数据字典 3 2.2.1数据项 3 2.2.2主要的数据流定义 6 2.3数据流图和业务流图 7 2.3.1顶层数据流图 7 2.3.2第一层数据流图 8 2.3.3第一层数据流图 8 2.3.4第一层数据流图 9 2.3.5第一层数据流图 9 3 概念结构设计 10 3.1实…

docker基础命令

docker基础 docker中的三个基本概念: 镜像: Docker 镜像(Image),就相当于是一个 root 文件系统 容器: 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一…

基于STM32的DS18B20多点测温系统(Proteus仿真+程序)

编号:22 基于STM32的DS18B20多点测温系统 功能描述: 本设计由STM32F103单片机三路DS18B20温度传感器1602液晶显示模块组成。 1、主控制器是STM32F103单片机 2、三路共用“单总线”DS1820温度传感器测量温度 3、1602液晶显示温度,保留一位小…

[附源码]java毕业设计明光中学考试系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Meta开源新工具啊,Git地位危险了?

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 从事编程开发的同学,绝大多数都会和版本控制系统打交道。 提到版本控制系统,目前比较主流的就是Git和SVN,尤其是Git,使用最为广泛。 关于Git和SVN之间…

python绘制Bubble气泡图pltscatter

python绘制Bubble气泡图pltscatter 先上结果: 基础语法: Axes.scatter(x, y**,** sNone**,** cNone**,** markerNone**,** cmapNone**,** normNone**,** vminNone**,** vmaxNone**,** alphaNone**,** linewidthsNone**,** , edgecolorsNone,* plotnonf…

nVisual 场景搭建所需接口

使用nVisua在创建新的项目步骤是搭建场景、创建对象、创建对象连接,本章小编带大家先了解搭建场景需要的接口。 场景搭建可根据自身项目需要搭建园区、建筑、楼层、机房这几类场景。分别用到了地图场景创建接口、CAD场景创建接口、静态图片背景创建接口。 1.地图场…

企业内训系统源码,为企业量身定制学习平台

如何进行企业内训系统开发?不同的直播平台的功能是不同的,企业的发展与员工的素质、能力、工作人效等不可分割,如何提高员工的工作能力,企业内部培训是离不开的,那么企业内训系统如何开发?怎么做一个企业学…

Spring Cloud面试题

什么是Spring Cloud Spring Cloud是目前最常用的微服务开发框架(微服务的特点就是"模块化、功能化",微服务架构的本质是将原来的整体项目划分成多个功能模块,每个功能模块都可以独立运行提供服务),它利用Sp…

wps和office可以同时装吗?

wps和office是很多用户都在使用的办公软件,那就有小白用户问了一台电脑可以存在wps和office吗?两个软件兼容吗?wps和office性质上都是办公软件,但是并不算重复,因此是可以同时安装的。 wps和office能同时安装吗 答&…

合并多个PDF怎么合并?建议学会这几个合并方法

你们平时工作的时候,看到自己的电脑桌面有很多文档文件,会不会觉得很杂乱?如果不将这些资料好好整理一番,都不能好好完成接下来的工作。其实如果是同种类型的PDF文件,我们可以将它们合并,这样既可以归类&am…

STM32单片机DS18B20测温液晶1602显示例程(Proteus仿真+程序)

编号:21 STM32单片机DS18B20测温液晶1602显示例程 功能描述: 本设计由STM32F103C8T6单片机最小系统DS18B20温度传感器1602液晶显示模块组成。 1、主控制器是STM32F103C8T6单片机 2、DS1820温度传感器测量温度 3、1602液晶显示温度,保留一位…

理解Linux32位机器下虚拟地址到物理地址的转化

文章目录前言一、基本概念介绍二、虚拟地址到物理地址的转化过程总结前言 简要介绍LINUX32位系统下虚拟地址到物理地址的转化过程。 一、基本概念介绍 在32位机器下,IO的基本单位是块(块:4kb),在程序编译成可执行程序时也划分好了以4kb为单…