点击上方“计算机视觉cv”即可“进入公众号”

重磅干货第一时间送达

前言

随着人工智能的发展,现在越来越多的场景需要人工智能。在工厂的厂区中以安全为首,但工人普遍缺乏佩戴安全帽意识;工厂环境复杂,有各种各样的禁止进入的区域,普通的图像识别算法很难实现;加上使用传统的人工监管存在诸多缺点。

基于计算机视觉的安全帽自动识别技术设计通过在施工现场布设视频监控设备或利用现有的施工监控设备,采用机器视觉的相关方法进行安全帽的自动识别,可以实现对作业人员安全帽佩戴情况信息的全程快速识别,在降低监管费用的同时提升了监管信息化水平。

项目链接:

https://github.com/PeterH0323/Smart_Construction

数据集链接:

https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset

Smart_Construction

该项目是使用 YOLOv5 来训练在智能工地安全领域中头盔目标检测的应用, 先来一波演示!

指标

yolov5s 为基础训练,epoch = 50

分类 P R mAP0.5
总体 0.884 0.899 0.888
人体 0.846 0.893 0.877
0.889 0.883 0.871
安全帽 0.917 0.921 0.917

对应的 yolov5s 权重文件:百度云:https://pan.baidu.com/s/1ELPhtW-Q4G8UqEr4YrV_5A,提取码: b981


yolov5m 为基础训练,epoch = 100

分类 P R mAP0.5
总体 0.886 0.915 0.901
人体 0.844 0.906 0.887
0.9 0.911 0.9
安全帽 0.913 0.929 0.916

对应的 yolov5m 权重文件:百度云:https://pan.baidu.com/s/10hlKrgpxVsw4d_vHnPHwEA,提取码: psst


yolov5l 为基础训练,epoch = 100

分类 P R mAP0.5
总体 0.892 0.919 0.906
人体 0.856 0.914 0.897
0.893 0.913 0.901
安全帽 0.927 0.929 0.919

对应的 yolov5l 权重文件:百度云:https://pan.baidu.com/s/1iMZkRNXY1fowpQCcapFDqw,提取码: a66e


1.YOLO v5训练自己数据集教程

使用的数据集:Safety-Helmet-Wearing-Dataset,感谢这位大神的开源数据集!

本文结合 YOLOv5官方教程 来写

环境准备

首先确保自己的环境:

    Python >= 3.7    Pytorch == 1.5.x

训练自己的数据

提示:

关于增加数据集分类的方法,请看【5. 增加数据集的分类】


1.1 创建自己的数据集配置文件

因为我这里只是判断 【人没有带安全帽】、【人有带安全帽】、【人体】 3个类别 ,基于 data/coco128.yaml 文件,创建自己的数据集配置文件 custom_data.yaml

# 训练集和验证集的 labels 和 image 文件的位置train: ./score/images/trainval: ./score/images/val

# number of classesnc: 3

# class namesnames: ['person', 'head', 'helmet']

1.2 创建每个图片对应的标签文件

使用标注工具类似于 Labelbox 、CVAT、精灵标注助手 标注之后,需要生成每个图片对应的 .txt 文件,其规范如下:

  • 每一行都是一个目标
  • 类别序号是零索引开始的(从0开始)
  • 每一行的坐标 class x_center y_center width height 格式
  • 框坐标必须采用归一化的 xywh格式(从01)。如果您的框以像素为单位,则将x_centerwidth除以图像宽度,将y_centerheight除以图像高度。代码如下:
import numpy as npdef convert(size, box):    """    将标注的 xml 文件生成的【左上角x,左上角y,右下角x,右下角y】标注转换为yolov5训练的坐标    :param size: 图片的尺寸: [w,h]    :param box: anchor box 的坐标 [左上角x,左上角y,右下角x,右下角y,]    :return: 转换后的 [x,y,w,h]    """

    x1 = int(box[0])    y1 = int(box[1])    x2 = int(box[2])    y2 = int(box[3])

    dw = np.float32(1. / int(size[0]))    dh = np.float32(1. / int(size[1]))

    w = x2 - x1    h = y2 - y1    x = x1 + (w / 2)    y = y1 + (h / 2)

    x = x * dw    w = w * dw    y = y * dh    h = h * dh    return [x, y, w, h]

生成的 .txt 文件放置的名字是图片的名字,放置在 label 文件夹中,例如:

./score/images/train/00001.jpg  # image./score/labels/train/00001.txt  # label

生成的 .txt 例子:

1 0.1830000086920336 0.1396396430209279 0.13400000636465847 0.159159163013100621 0.5240000248886645 0.29129129834473133 0.0800000037997961 0.168168172240257261 0.6060000287834555 0.29579580295830965 0.08400000398978591 0.17717718146741391 0.6760000321082771 0.25375375989824533 0.10000000474974513 0.213213218376040460 0.39300001866649836 0.2552552614361048 0.17800000845454633 0.28228228911757470 0.7200000341981649 0.5570570705458522 0.25200001196935773 0.42942943982779980 0.7720000366680324 0.2567567629739642 0.1520000072196126 0.23123123683035374

1.3 文件放置规范

文件树如下

在这里插入图片描述

1.4 聚类得出先验框(Yolov5 内部已做适配,可选)

使用代码 ./data/gen_anchors/clauculate_anchors.py ,修改数据集的路径

FILE_ROOT = r"xxx" # 根路径ANNOTATION_ROOT = r"xxx"  # 数据集标签文件夹路径ANNOTATION_PATH = FILE_ROOT + ANNOTATION_ROOT

跑完会生成一个文件 anchors.txt,里面有得出的建议先验框:

Best Accuracy = 79.72%

Best Anchors = [[14.74, 27.64], [23.48, 46.04], [28.88, 130.0], [39.33, 148.07], [52.62, 186.18], [62.33, 279.11], [85.19, 237.87], [88.0, 360.89], [145.33, 514.67]]

1.5 选择一个您需要的模型

在文件夹 ./models 下选择一个你需要的模型然后复制一份出来,将文件开头的 nc = 修改为数据集的分类数,下面是借鉴 ./models/yolov5s.yaml来修改的

# parametersnc: 3  # number of classes     <============ 修改这里为数据集的分类数depth_multiple: 0.33  # model depth multiplewidth_multiple: 0.50  # layer channel multiple

# anchorsanchors: # <============ 根据 ./data/gen_anchors/anchors.txt 中的 Best Anchors 修改,需要取整(可选)  - [14,27, 23,46, 28,130]   - [39,148, 52,186, 62.,279]   - [85,237, 88,360, 145,514]

# YOLOv5 backbonebackbone:  # [from, number, module, args]  [[-1, 1, Focus, [64, 3]],  # 0-P1/2   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4   [-1, 3, BottleneckCSP, [128]],   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8   [-1, 9, BottleneckCSP, [256]],   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16   [-1, 9, BottleneckCSP, [512]],   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32   [-1, 1, SPP, [1024, [5, 9, 13]]],   [-1, 3, BottleneckCSP, [1024, False]],  # 9  ]

# YOLOv5 headhead:  [[-1, 1, Conv, [512, 1, 1]],   [-1, 1, nn.Upsample, [None, 2, 'nearest']],   [[-1, 6], 1, Concat, [1]],  # cat backbone P4   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],   [-1, 1, nn.Upsample, [None, 2, 'nearest']],   [[-1, 4], 1, Concat, [1]],  # cat backbone P3   [-1, 3, BottleneckCSP, [256, False]],  # 17

   [-1, 1, Conv, [256, 3, 2]],   [[-1, 14], 1, Concat, [1]],  # cat head P4   [-1, 3, BottleneckCSP, [512, False]],  # 20

   [-1, 1, Conv, [512, 3, 2]],   [[-1, 10], 1, Concat, [1]],  # cat head P5   [-1, 3, BottleneckCSP, [1024, False]],  # 23

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)  ]

1.6 开始训练

这里选择了 yolov5s 模型进行训练,权重也是基于 yolov5s.pt 来训练

python train.py --img 640 --batch 16 --epochs 10 --data ./data/custom_data.yaml --cfg ./models/custom_yolov5.yaml --weights ./weights/yolov5s.pt

其中,yolov5s.pt 需要自行下载放在本工程的根目录即可,下载地址:https://drive.google.com/open?id=1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

1.7 看训练之后的结果

训练之后,权重会保存在 ./runs 文件夹里面的每个 exp 文件里面的 weights/best.py ,里面还可以看到训练的效果


2. 侦测

侦测图片会保存在 ./inferenct/output/ 文件夹下

运行命令:

python detect.py --source   0  # webcam                            file.jpg  # image                             file.mp4  # video                            path/  # directory                            path/*.jpg  # glob                            rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa  # rtsp stream                            http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8  # http stream

例如使用我的 s 权重检测图片,可以运行以下命令,侦测图片会保存在 ./inferenct/output/ 文件夹下

python detect.py --source 图片路径 --weights ./weights/helmet_head_person_s.pt

3. 检测危险区域内是否有人

3.1 危险区域标注方式

我这里使用的是 精灵标注助手标注,生成了对应图片的 json 文件

3.2 执行侦测

侦测图片会保存在 ./inferenct/output/ 文件夹下

运行命令:

python area_detect.py --source ./area_dangerous --weights ./weights/helmet_head_person_s.pt

3.3 效果:在危险区域里面的人体会被 红色框 选出来


4. 生成 ONNX

4.1 安装 onnx

pip install onnx

4.2 执行生成

python ./models/export.py --weights ./weights/helmet_head_person_s.pt --img 640 --batch 1

onnxtorchscript 文件会生成在 ./weights 文件夹中


5. 增加数据集的分类

关于增加数据集分类的方法:

SHWD 数据集里面没有 person 的类别,先将现有的自己的数据集执行脚本生成 yolov5 需要的标签文件 .txt,之后再用 yolov5x.pt 加上 yolov5x.yaml ,使用指令检测出人体

python detect.py --save-txt --source ./自己数据集的文件目录 --weights ./weights/yolov5x.pt

yolov5 会推理出所有的分类,并在 inference/output 中生成对应图片的 .txt 标签文件;

修改 ./data/gen_data/merge_data.py 中的自己数据集标签所在的路径,执行这个python脚本,会进行 person 类型的合并


总结

以上就是 YOLOv5 实现 智慧工地安全帽和危险区域检测系统 的全部内容。欢迎 star ✨✨✨

本文转载自csdn博客,文章链接:https://blog.csdn.net/hxj0323/article/details/109257255

英文数据集txt_YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)相关推荐

  1. YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)

    前言 Amusi 发现一个很棒的开源项目,利用YOLOv5进行目标检测的"落地化"应用:安全帽佩戴检测. 该项目使用了YOLOv5s.YOLOv5m.YOLOv5l来训练安全帽佩戴 ...

  2. YOLOv5在建筑工地中安全帽佩戴检测的应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一.YOLO v5训练自己数据集教程 1.1 创建自己的数据集配置 ...

  3. 最强干货实践教程 | YOLOv5在建筑工地中安全帽佩戴检测的应用

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 教程来自:https://github.com/PeterH0323/Smart_Constr ...

  4. 干货 | YOLOv5在建筑工地中安全帽佩戴检测的应用

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:https://github.com/PeterH0323/ ...

  5. 【目标检测】基于yolov5的安全帽佩戴检测系统(附代码和数据集)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 文末获取代码和数据集,请看检测效果: 1. 介绍 基于 ...

  6. yolov4训练自己的数据集实现安全帽佩戴检测

    昨儿立下来的flag,今天还是要含泪完成的,抓紧时间赶呀!!! 本次用yolov4来实现人佩戴安全帽检测,若未佩戴安全帽则将人脸框出来,若佩戴安全帽,则将安全帽以及人脸框出来,多说无益,直接看效果吧! ...

  7. 开源 | 安全帽佩戴检测数据集

    最近图像领域比较火热的两个方向都与复工复产相关,一方面是口罩识别,另一方面,就是智能工地安全领域中的安全帽佩戴检测,很多同学或许没想到印象的大工地现在已经随着计算机视觉领域的发展如此智能化了.人民的生 ...

  8. 【目标检测】基于yolov7的安全帽佩戴检测和识别(附代码和数据集,Ubuntu系统)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 本次项目是在Ubuntu系统上运行的,Windows系 ...

  9. 安全帽佩戴检测——安全生产中的黑科技

    根据数据调查,2017年建筑业的36次较大事故中,因坍塌伤亡的人员占到了81%,其中大部分原因是工作人员没有按照规定佩戴安全帽.为此不少企业为此煞费苦心,比如在门口贴上佩戴安全帽的标语,做安全知识培训 ...

最新文章

  1. dataframe 空值替换为0_缓解Pandas中DataFrame占用内存过高
  2. python 开放_Python
  3. C#实现的【阿拉伯数字转换成中文大写金额】
  4. 【STM32】系统控制寄存器
  5. Spark2.4.0 SparkEnv 源码分析
  6. C++ char[] 与 string 转换
  7. 误删了计算机桌面回收站,我电脑回收站里的东西已经被删除几天了?怎么可以找回!谢谢...
  8. 施乐悄悄修复影响某些打印机中的严重缺陷
  9. 金三银四,Android高级开发面试题目,帮你助力
  10. CSDN免费获得积分和直接获取下载码的方法,亲测有效
  11. 饭卡可以用水冲洗吗_关于饭卡使用与管理的规定
  12. APP开发项目团队成员要求及职责
  13. java获取excel嵌入对象_EXCEL,使用嵌入对象(.dot)作为报告模板
  14. teamview+ccproxy实现远程局域网本地访问
  15. [Elasticsearch]4.可伸缩性解密:集群、节点和分片
  16. python爬虫——百度贴吧图片爬取 小项目
  17. 崔莺莺到宋楚瑜,张你怎么看待?
  18. 如何去反编译一个ipa包
  19. 做自媒体没素材怎么办?
  20. 【金九银十】大专生学java好找工作

热门文章

  1. 企业实战01:Oracle数据库概述
  2. android 参数 attrs.xml,使用attrs.xml自定义属性
  3. la环球乐园里的机器人_北京环球度假区核心工程完工,你知道这里面都有什么主题景区吗?...
  4. 查一个字段中字符集超过30的列_详细解读MySQL的30条军规
  5. BugkuCTF-MISC题cisco(writeup)
  6. 个人求职简历计算机应用技术学院信息门户,计算机应用技术专业求职简历范文...
  7. c语言二维数组对每一列排序,二维数组对每一行进行排序。。
  8. php上传商品信息并显示,第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)...
  9. 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】(C语言)
  10. 和氟西汀类似的备注_撒狗粮:可爱又霸气的给男朋友的微信备注