前言

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

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

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

项目链接(文末附下载):https://github.com/xiaobingchan/Smart_Construction

数据集链接(文末附下载):https://github.com/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.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 聚类得出先验框(可选)

使用代码 ./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

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

onnx 和 torchscript 文件会生成在 ./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 ✨✨✨

项目开源链接:https://github.com/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 2020代码开源的论文,全在这里了!

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 2020 放榜!一文看尽10篇论文的开源项目(检测/GAN/SR等方向)

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

大神没交棒,但YOLOv5来了!

大神接棒,YOLOv4来了!

YOLOv4-Tiny来了!371 FPS!

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

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

发布于 2020-11-10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 安全帽佩戴检测算法研究

    摘 要 安全帽佩戴监控是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确 率与检测速度都有较高的要求.本文提出一种基于神经网络架构搜索的安全帽佩戴检测算法 NAS-YOLO.该神经网络架构由 ...

  9. 基于YOLO模型的安全帽佩戴检测

    YOLO模型的基本原理 YOLO网络是一个以目标检测为目的而设计的网络.YOLO系列算法的基本思想是将输入图像分 割为S×S个单元格, 且每个单元格生成B 个边界框, 由被检测目标中心点所在的单元格负 ...

最新文章

  1. ecshop目录结构
  2. JDK 5.0 注解的使用
  3. linux centos7 升级gcc版本 使用 yum centos-release-scl devtoolset-8-gcc* 非源码编译
  4. 062_JavaScript异常
  5. 计算机教师专业发展论文,关于教师专业发展的计算机专业论文
  6. ctk介绍、安装、使用详细说明pdf文档(中文).rar_Minio 安装和使用详解,还有对.net api进行了二次封装...
  7. python3学习之元组
  8. 无损音乐下载器 Delphi版
  9. qq企业邮箱创建过程
  10. html5分镜头脚本范例,分镜头脚本范例
  11. app 上架到苹果应用商店
  12. 连接一个HTTPS网站的前300毫秒,都发生了什么? | ArcBlock 课堂预告
  13. colt python 357magnum_357磁(357 Magnum)——欧美十佳手枪
  14. Jquery-获取子元素children,find
  15. 【bzoj4806~bzoj4808】炮车马后——象棋四连击
  16. 索尼玩复兴 为何就不能向“巨硬”学习
  17. Linux向日葵同步剪贴板,Windows远程桌面可双向复制粘贴图片了,向日葵客户端9.0.3更新...
  18. 什么牌子的台灯对孩子的视力好?618好用性价比高的护眼台灯
  19. ThreadLocal线程内部存储类
  20. am最新版安装包_am下载_am大全_手游排行榜_网游/单机游戏_九游

热门文章

  1. 【分享】linux下u盘使用
  2. 0623TP框架联系
  3. Ubuntu上安装Robomongo及添加到启动器
  4. Crawler - 如何爬取列表后进行文章的爬取
  5. 关于JAVA中的synchronized,一段不错的解释...
  6. iOS平台快速发布HT for Web拓扑图应用
  7. TP类库解析和使用系列[Input类]
  8. 字中字效果-html5实例
  9. curl有php内存缓存,PHP CURL内存泄露的解决方法
  10. 插入公式_一个小工具,彻底帮你搞定在Markdown中插入公式的问题