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

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

时间:2021-10-10 02:55:48

相关推荐

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

前言

Amusi 发现一个很棒的开源项目,利用YOLOv5进行目标检测的"落地化"应用:安全帽佩戴检测

该项目使用了YOLOv5s、YOLOv5m、YOLOv5l来训练安全帽佩戴检测数据集,代码和权重均已开源!安全帽佩戴检测数据集也是开源的(共含7581 张图像)!

项目教程也相当详细,推荐入门练手学习!而且有意思的是,该项目和数据集的两位作者均是中国人,点赞!

项目链接(文末附下载):/xiaobingchan/Smart_Construction

数据集链接(文末附下载):/xiaobingchan/Safety-Helmet-Wearing-Dataset

Smart_Construction

该项目是使用 YOLOv5 来训练在智能工地安全领域中头盔目标检测的应用

指标

yolov5s 为基础训练,epoch = 50

对应的权重文件百度云,提取码:b981

yolov5m 为基础训练,epoch = 100

对应的权重文件百度云,提取码:psst

yolov5l 为基础训练,epoch = 100

对应的权重文件百度云,提取码:a66e

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

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

本文结合YOLOv5官方教程来写

环境准备

首先确保自己的环境:

Python >= 3.7Pytorch == 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 创建每个图片对应的标签文件

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

每一行都是一个目标类别序号是零索引开始的(从0开始)每一行的坐标class x_center y_center width height格式框坐标必须采用归一化的 xywh格式(从0到1)。如果您的框以像素为单位,则将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 - x1h = y2 - y1x = x1 + (w / 2)y = y1 + (h / 2)x = x * dww = w * dwy = y * dhh = h * dhreturn [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 聚类得出先验框(可选)

使用代码./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需要自行下载放在本工程的根目录即可,下载地址官方权重

1.7 看训练之后的结果

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

2. 侦测

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

运行命令:

python detect.py --source 0 # webcamfile.jpg # image file.mp4 # videopath/ # directorypath/*.jpg # globrtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa # rtsp streamhttp://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8 # http stream

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类型的合并

欢迎 star ✨✨✨

项目开源链接:/PeterH0323/Smart_Construction

CVer-目标检测交流群

建了目标检测微信群,目前近450人。想要进检测群的同学,可以直接加微信号:CVer5555。加的时候备注一下:目标检测+学校+昵称,即可。然后就可以拉你进群了。可以在群里交流讨论2D/3D目标检测、遥感/水下目标检测等方向。

另外强烈推荐阅读,Amusi 整理过的最全资料系列如下:

GitHub:深度学习最全资料集锦GitHub:图像分类最全资料集锦GitHub:目标检测最全论文集锦GitHub:图像分割最全资料集锦GitHub:目标跟踪最全资料集锦GitHub:人群密度估计最全资料集锦GitHub:车道线检测最全资料集锦GitHub:TensorFlow最全资料集锦GitHub:Anchor-free目标检测最全资料集锦GitHub:数据增广最全资料集锦GitHub:语义分割最全资料集锦GitHub:人群计数最全资料集锦

推荐大家关注计算机视觉论文速递知乎专栏和CVer微信公众号,可以快速了解到最新优质的CV论文。

推荐阅读

如何将深度学习研究论文实现为代码的几个要点

300+篇CVPR 代码开源的论文,全在这里了!

955 不加班的公司名单:955.WLB

北京提供计算机视觉CV算法岗的公司名单

上海提供计算机视觉CV算法岗的公司名单

大盘点 | 十大即插即用的涨点神器!

YOLOv5被禁用!Kaggle全球小麦检测竞赛结果惹争议

CVPR 引用量最高的10篇论文!何恺明ResNet登顶,YOLO占据两席!

ICCV 引用量最高的10篇论文!何恺明两篇一作论文:Mask R-CNN和PReLU

ECCV 引用量最高的10篇论文!SSD登顶!何恺明ResNet改进版位居第二

OpenCV4.4刚刚发布!支持YOLOv4、EfficientDet检测模型,SIFT移至主库!

目标检测四大开源神器Detectron2/mmDetection/darknet/SimpleDet

超越YOLOv4!PP-YOLO:更快更好的目标检测网络

ECCV 放榜!一文看尽10篇论文的开源项目(检测/GAN/SR等方向)

有人手写实现李航《统计学习方法》书中全部算法

大神没交棒,但YOLOv5来了!

大神接棒,YOLOv4来了!

YOLOv4-Tiny来了!371 FPS!

ResNet最强改进版来了!ResNeSt:Split-Attention Networks

周志华教授:如何做研究与写论文

发布于 -11-10

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