点击上方,选择星标置顶,不定期资源大放送

阅读大概需要15分钟

Follow小博主,每天更新前沿干货

教程来自:https://github.com/PeterH0323/Smart_Construction

编辑:AI深度前沿视线

一、YOLO v5训练自己数据集教程

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

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

  • 1.3 文件放置规范

  • 1.4 聚类得出先验框(可选)

  • 1.5 选择一个你需要的模型

  • 1.6 开始训练

  • 1.7 看训练之后的结果

二、侦测

三、检测危险区域内是否有人

  • 3.1 危险区域标注方式

  • 3.2 执行侦测

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

四、生成 ONNX

五、增加数据集的分类

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

指标

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

对应的权重文件:https://pan.baidu.com/share/init?surl=ELPhtW-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

对应的权重文件:https://pan.baidu.com/share/init?surl=0hlKrgpxVsw4d_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

对应的权重文件:https://pan.baidu.com/share/init?surl=iMZkRNXY1fowpQCcapFDqw,提取码: a66e


1

  YOLOv5训练自己数据集教程

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

https://github.com/njvisionpower/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# number of classes
nc: 3# class names
names: ['person', 'head', 'helmet']

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

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

  • 每一行都是一个目标

  • 类别序号是零索引开始的(从0开始)

  • 每一行的坐标 class x_center y_center width height 格式

  • 框坐标必须采用归一化的 xywh格式(从0到1)。如果您的框以像素为单位,则将x_centerwidth除以图像宽度,将y_centerheight除以图像高度。代码如下:

import numpy as np
def 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.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  # number of classes     <============ 修改这里为数据集的分类数
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple# anchors
anchors: # <============ 根据 ./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 backbone
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]# YOLOv5 head
head:[[-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

例如使用我的 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 类型的合并

下载1:速查表
在「深度学习技术前沿」公众号后台回复:速查表,即可下载21张 AI相关的查找表,包括 python基础,线性代数,scipy科学计算,numpy,kears,tensorflow等等重磅!DLer-计算机视觉交流2群已成立!
大家好,这是DLer-计算机视觉微信交流2群!首先非常感谢大家的支持和鼓励,我们的计算机视觉交流群正在不断扩大人员规模!希望以后能提供更多的资源福利给到大家!欢迎各位Cver加入DLer-计算机视觉微信交流大家庭 。
本群旨在学习交流图像分类、目标检测、目标跟踪、点云与语义分割、GAN、超分辨率、人脸检测与识别、动作行为与时空运动、模型压缩和量化剪枝、迁移学习、人体姿态估计等内容。希望能给大家提供一个更精准的研讨交流平台!!!
进群请备注:研究方向+学校/公司+昵称(如图像分类+上交+小明)???? 长按识别添加,即可进群!

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

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

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

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

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

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

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

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

    点击上方"计算机视觉cv"即可"进入公众号" 重磅干货第一时间送达 前言 随着人工智能的发展,现在越来越多的场景需要人工智能.在工厂的厂区中以安全为首,但工人普 ...

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

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

  6. 工地安全帽佩戴检测yolov5

    工地安全帽佩戴检测利用深度学习神经网络算法以及yolov5网络架构,对画面区域人员安全帽佩戴实时检测分析.YOLOv5使用二进制交叉熵和 Logits损失函数计算类概率和目标得分的损失.同时我们也可以 ...

  7. 实践教程 | 浅谈 PyTorch 中的 tensor 及使用

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | xiaopl@知乎(已授权) 来源 | https://z ...

  8. 大数据毕设 - 深度学习安全帽佩戴检测系统(python OpenCV yolov5)

    文章目录 0 前言 1 课题背景 2 效果演示 3 Yolov5框架 4 数据处理和训练 4.1 安全帽检测 4.2 检测危险区域内是否有人 5 最后 0 前言

  9. 二十万字带你入门C语言-史上最强C语言教程(汇总篇)

    一.前言 至此,史上最强C语言教程系列已经全部完成,今天是给大家来做一个汇总,笔者目前已经完成了C语言阶段的学习,一直以来感谢大家的陪伴与支持,笔者后续还会继续更新C++.数据结构.Linux.Mys ...

最新文章

  1. NPOI读取Excel数据应用
  2. AI一分钟 | 传阿里百度京东6月回归A股;汽车合资股比限制将取消,特斯拉或成最大赢家...
  3. Arcface v1 论文翻译与解读
  4. Python的__getattr__方法学习
  5. 开源个.NetCore写的 - 并发请求工具PressureTool
  6. oracle的exp和imp,oracle exp和imp
  7. C++设计模式-享元模式
  8. kafka是什么_Kafka为什么快到根本停不下来?
  9. Java--继承(三)
  10. Mac ffmpeg推流记录
  11. 十分钟读完《金字塔原理》
  12. 小程序中的多表联合查询
  13. 良田摄像头 linux,良田万能摄像头高拍仪驱动下载|良田万能摄像头驱动 官方版 - 软件下载 - 绿茶软件园|33LC.com...
  14. 企业资源计划(ERP)原理与实践第一章
  15. 电驴找不到服务器,电驴怎么连接服务器?电驴连接不上服务器的解决方法介绍...
  16. 根据网络图片地址获取资源的字节流
  17. (Android-RTC-1)Android-WebRTC初体验
  18. python 写word图表标题_工作汇报神技!用Python三步生成带有图表的word报表
  19. USB转RS422带隔离电路设计(CAIS3082W替代方案)
  20. 一种与生活周旋的能力

热门文章

  1. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.20
  2. 视频jourk--hadoop2.2.0(第一个2.x的正式版本)框架介绍:笔记
  3. linux应用程序安装与管理
  4. java字符编码问题_java 字符编码问题
  5. sudo 命令表示 Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。 使用权限:在 /etc/sudoers 中有出现的使用
  6. 斯坦福CS231 BP后向传播
  7. UCI机器学习数据集库
  8. 函数连续但没有导数的例子
  9. 直播|微软徐一翀:在常识问答中超越人类水平!自注意力与外注意力机制
  10. ICLR2021 | 清华大学黄高团队:显存不够?不妨抛弃端到端训练