200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 英文数据集txt_YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)

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

时间:2020-03-22 20:41:42

相关推荐

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

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

重磅干货第一时间送达

前言

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

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

项目链接:

/PeterH0323/Smart_Construction

数据集链接:

/njvisionpower/Safety-Helmet-Wearing-Dataset

Smart_Construction

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

指标

yolov5s 为基础训练,epoch = 50

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

yolov5m 为基础训练,epoch = 100

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

yolov5l 为基础训练,epoch = 100

对应的yolov5l 权重文件:百度云:/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/train

val:./score/images/val

#numberofclasses

nc:3

#classnames

names:['person','head','helmet']

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

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

每一行都是一个目标类别序号是零索引开始的(从0开始)每一行的坐标class x_center y_center width height格式框坐标必须采用归一化的 xywh格式(从01)。如果您的框以像素为单位,则将x_centerwidth除以图像宽度,将y_centerheight除以图像高度。代码如下:

importnumpyasnp

defconvert(size,box):

"""

将标注的xml文件生成的【左上角x,左上角y,右下角x,右下角y】标注转换为yolov5训练的坐标

:param size:图片的尺寸:[w,h]

:parambox:anchorbox的坐标[左上角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.15915916301310062

1 0.5240000248886645 0.29129129834473133 0.0800000037997961 0.16816817224025726

1 0.6060000287834555 0.29579580295830965 0.08400000398978591 0.1771771814674139

1 0.6760000321082771 0.25375375989824533 0.10000000474974513 0.21321321837604046

0 0.39300001866649836 0.2552552614361048 0.17800000845454633 0.2822822891175747

0 0.7200000341981649 0.5570570705458522 0.25200001196935773 0.4294294398277998

0 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来修改的

#parameters

nc:3#numberofclasses<============修改这里为数据集的分类数

depth_multiple:0.33#modeldepthmultiple

width_multiple:0.50#layerchannelmultiple

#anchors

anchors:#<============根据./data/gen_anchors/anchors.txt中的BestAnchors修改,需要取整(可选)

-[14,27,23,46,28,130]

-[39,148,52,186,62.,279]

-[85,237,88,360,145,514]

#YOLOv5backbone

backbone:

#[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

]

#YOLOv5head

head:

[[-1,1,Conv,[512,1,1]],

[-1,1,nn.Upsample,[None,2,'nearest']],

[[-1,6],1,Concat,[1]],#catbackboneP4

[-1,3,BottleneckCSP,[512,False]],#13

[-1,1,Conv,[256,1,1]],

[-1,1,nn.Upsample,[None,2,'nearest']],

[[-1,4],1,Concat,[1]],#catbackboneP3

[-1,3,BottleneckCSP,[256,False]],#17

[-1,1,Conv,[256,3,2]],

[[-1,14],1,Concat,[1]],#catheadP4

[-1,3,BottleneckCSP,[512,False]],#20

[-1,1,Conv,[512,3,2]],

[[-1,10],1,Concat,[1]],#catheadP5

[-1,3,BottleneckCSP,[1024,False]],#23

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

]

1.6 开始训练

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

pythontrain.py--img640--batch16--epochs10--data./data/custom_data.yaml--cfg./models/custom_yolov5.yaml--weights./weights/yolov5s.pt

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

1.7 看训练之后的结果

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

2. 侦测

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

运行命令:

pythondetect.py--source0#webcam

file.jpg#image

file.mp4#video

path/#directory

path/*.jpg#glob

rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa#rtspstream

http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8#httpstream

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

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

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

3.1 危险区域标注方式

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

3.2 执行侦测

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

运行命令:

pythonarea_detect.py--source./area_dangerous--weights./weights/helmet_head_person_s.pt

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

4. 生成 ONNX

4.1 安装onnx

pipinstallonnx

4.2 执行生成

python./models/export.py--weights./weights/helmet_head_person_s.pt--img640--batch1

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

5. 增加数据集的分类

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

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

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

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

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

总结

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。