【工业场景】用YOLOv8实现工业安全帽识别

        工业安全帽识别是一项重要的工作安全管理措施,旨在防止工作场所发生头部伤害事故。通过使用YOLOv8等深度学习模型,可以实时准确地检测出工人是否佩戴安全帽,及时发现违规行为,为工人提供更安全的工作环境。

        使用YOLOv8实现工业安全帽识别的背景意义主要包括以下几点:

        1. 提高工作场所安全:工业安全帽识别能够有效地监测工人是否佩戴安全帽,及时发现违规行为,增加工作场所的安全性。这对于一些高危行业,如建筑、矿山等领域,尤为重要。

        2. 减少事故发生:头部伤害是工作场所意外事故中常见的一种,可能导致严重的伤害甚至失明、致残等后果。通过安全帽识别技术,能够在事故发生前及时预警,减少事故的发生。

        3. 自动化管理:传统的安全帽检测工作需要大量的人力投入,费时费力。而使用YOLOv8等深度学习模型实现自动化的安全帽识别,可以大大减少人力资源的浪费,提高工作效率。

        4. 数据统计与分析:通过安全帽识别技术,可以对佩戴安全帽的情况进行统计与分析,为企业提供有关工作人员安全意识、管理水平等方面的数据支持,进一步完善和优化工作安全管理措施。

        总之,使用YOLOv8实现工业安全帽识别有着重要的背景意义,可以提高工作场所的安全性,减少事故发生,实现自动化管理,并为企业提供数据支持,进一步推动工作场所的安全管理工作。


目录

🍉🍉1.数据集介绍

🍇🍇2.实现效果

🍓🍓3.YOLOv8算法步骤

🍋3.1数据准备

🍋3.2模型选择

🍋3.3加载预训练模型

🍋3.4数据组织 

🍭🍭4.目标检测训练代码

🐸🐸5.目标检测推理代码

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🍉🍉1.数据集介绍

首先介绍使用的数据集,数据集中共包含7581张影像,部分影像展示如下:

label包含7581个xml格式的label文件和7581个txt格式的label文件。

示例xml文件内容为:

示例txt文件内容为:

1 0.225 0.3277777777777778 0.20833333333333334 0.3037037037037037
1 0.07152777777777779 0.2657407407407408 0.14305555555555557 0.5314814814814816
0 0.5041666666666667 0.42592592592592593 0.13333333333333333 0.1962962962962963

        其中训练验证比例为9:1,也可自行分数据集。

🍇🍇2.实现效果

        使用YOLOv8实现的预测效果如下:

安全帽检测识别精度为95%,不戴安全帽的识别精度为98%

🍓🍓3.YOLOv8算法步骤

         通过目标检测方法对数字仪表表盘进行目标识别的方法不限,本文仍以YOLOv8为例进行说明。

🍋3.1数据准备

        数据集共包含7581张影像,其中训练集5457张,验证集607张,测试集1517张。主要是安全帽、不戴安全帽、人、帽子、车和拿东西,从混淆矩阵中可以看到,安全帽和不戴安全帽的占比最高。感兴趣的同学也可以自行数据清洗,删除不需要的label类别。

        模型训练label部分采用的是YOLO格式的txt文件,所以如果自己的数据集是xml格式需要进行转换哦。具体txt格式内容如1.数据集介绍中所示。

🍋3.2模型选择


        以YOLOv8n为例,模型选择代码如下:

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

        其中yolov8n.yaml为./ultralytics/cfg/models/v8/yolov8n.yaml,可根据自己的数据进行模型调整,打开yolov8n.yaml显示内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
 
# Parameters
nc: 7 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
 
# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
 
# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 12
 
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)
 
  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 18 (P4/16-medium)
 
  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2f, [1024]] # 21 (P5/32-large)
 
  - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

         主要需要修改的地方为nc,也就是num_class,此处数据集类别为7类,所以nc=7。如果自己进行了数据清洗,只保留了安全帽和不带安全帽2类的话,此处的nc=2

        如果其他的模型参数不变的话,就默认保持原版yolov8,需要改造模型结构的大佬请绕行

🍋3.3加载预训练模型

        加载预训练模型yolov8n.pt,可以在第一次运行时自动下载,如果受到下载速度限制,也可以自行下载好(下载链接),放在对应目录下即可。

🍋3.4数据组织 

         yolov8还是以yolo格式的数据为例,./ultralytics/cfg/datasets/data.yaml的内容示例如下:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)
 
# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  # ...
  77: teddy bear
  78: hair drier
  79: toothbrush

        这个是官方的标准coco数据集,需要换成自己的数据集格式,此处建议根据自己的数据集设置新建一个helmet_detect_coco128.yaml文件,放在./ultralytics/cfg/datasets/目录下,最后数据集设置就可以直接用自己的helmet_detect_coco128.yaml文件了。以我的helmet_detect_coco128.yaml文件为例:

 
path: /home/datasets/helmet  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test: images/test # test images (optional)
 
names:
  0: helmet
  1: people
  2: no-helmet
  3: hat
  4: person
  5: carry objects
  6: car2

🍭🍭4.目标检测训练代码


        准备好数据和模型之后,就可以开始训练了,train.py的内容显示为:

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='helmet_detect_coco128.yaml', epochs=100, imgsz=640)

训练完成后的结果如下:

        其中weights文件夹内会包含2个模型,一个best.pth,一个last.pth。

        至此就可以使用best.pth进行推理检测是否佩戴安全帽了。

在此贴上我的训练结果:

🐸🐸5.目标检测推理代码

批量推理python代码如下:

from ultralytics import YOLO
from PIL import Image
import cv2
import os
 
 
model = YOLO('/yolov8/runs/detect/train4/weights/best.pt')  # load a custom model
path = '/home/dataset/helmet/images/test/'  #test_image_path_dir
img_list = os.listdir(path)
for img_path in img_list:
###  =============detect=====================
    im1 = Image.open(os.path.join(path,img_path))
    results = model.predict(source=im1, save=True,save_txt=True)

 推理得到的可视化结果如下: 

 

 

 若需要完整数据集和源代码可以私信

整理不易,欢迎一键三连!!!


送你们一条美丽的--分割线--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zy_destiny

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

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

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

打赏作者

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

抵扣说明:

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

余额充值