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

数据集和代码的准备

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
要制作Yolov5的数据集,首先需要下载并使用Labelme这个工具。Labelme是一个用于标记数据集的工具,可以帮助我们标记需要检测的目标和其对应的边界框。在Labelme中,你可以打开要标记的图像,然后手动绘制目标的边界框并为其添加标签。完成标记后,可以将数据保存为json格式的文件。 接下来,你需要按照一定的文件夹结构组织你的数据集。一种常见的方式是创建一个名为MaskDataSet的文件夹,并在其中创建train、test和valid三个子文件夹。在每个子文件夹中,分别创建一个images文件夹和一个labels文件夹。这样,你可以将所有训练图像放在train/images文件夹下,将对应的标签文件放在train/labels文件夹下,以此类推。 另外,在MaskDataSet文件夹下,你还需要创建一个data.yaml文件,用于描述数据集的相关信息,例如类别数目、类别名称等。最后,你还需要将Yolov5的源码放置在合适的位置,以便后续使用。 请注意,本文所使用的Yolov5版本为6.1,而且是GPU版(虽然CPU也可以运行,但速度会慢很多)。同时,需要确保你的环境中安装了torch1.7.1和cuda10.1。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [YOLOv5系列 1、制作自己的数据集](https://blog.youkuaiyun.com/fjlaym/article/details/123992962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyw2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值