如何发布自己的html网站,泊头哪里有做网站的,网站域名申请步骤,crm客户管理软件平台点击上方“计算机视觉cv”即可“进入公众号”重磅干货第一时间送达前言随着人工智能的发展#xff0c;现在越来越多的场景需要人工智能。在工厂的厂区中以安全为首#xff0c;但工人普遍缺乏佩戴安全帽意识#xff1b;工厂环境复杂#xff0c;有各种各样的禁止进入的区域现在越来越多的场景需要人工智能。在工厂的厂区中以安全为首但工人普遍缺乏佩戴安全帽意识工厂环境复杂有各种各样的禁止进入的区域普通的图像识别算法很难实现加上使用传统的人工监管存在诸多缺点。基于计算机视觉的安全帽自动识别技术设计通过在施工现场布设视频监控设备或利用现有的施工监控设备采用机器视觉的相关方法进行安全帽的自动识别可以实现对作业人员安全帽佩戴情况信息的全程快速识别在降低监管费用的同时提升了监管信息化水平。项目链接https://github.com/PeterH0323/Smart_Construction数据集链接https://github.com/njvisionpower/Safety-Helmet-Wearing-DatasetSmart_Construction该项目是使用 YOLOv5 来训练在智能工地安全领域中头盔目标检测的应用, 先来一波演示指标yolov5s 为基础训练epoch 50分类PRmAP0.5总体0.8840.8990.888人体0.8460.8930.877头0.8890.8830.871安全帽0.9170.9210.917对应的 yolov5s 权重文件百度云https://pan.baidu.com/s/1ELPhtW-Q4G8UqEr4YrV_5A提取码: b981yolov5m 为基础训练epoch 100分类PRmAP0.5总体0.8860.9150.901人体0.8440.9060.887头0.90.9110.9安全帽0.9130.9290.916对应的 yolov5m 权重文件百度云https://pan.baidu.com/s/10hlKrgpxVsw4d_vHnPHwEA提取码: psstyolov5l 为基础训练epoch 100分类PRmAP0.5总体0.8920.9190.906人体0.8560.9140.897头0.8930.9130.901安全帽0.9270.9290.919对应的 yolov5l 权重文件百度云https://pan.baidu.com/s/1iMZkRNXY1fowpQCcapFDqw提取码: a66e1.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格式(从0到1)。如果您的框以像素为单位则将x_center和width除以图像宽度将y_center和height除以图像高度。代码如下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.231231236830353741.3 文件放置规范文件树如下在这里插入图片描述1.4 聚类得出先验框(Yolov5 内部已做适配可选)使用代码 ./data/gen_anchors/clauculate_anchors.py 修改数据集的路径FILE_ROOT rxxx # 根路径ANNOTATION_ROOT rxxx # 数据集标签文件夹路径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?id1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J1.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.pt3. 检测危险区域内是否有人3.1 危险区域标注方式我这里使用的是 精灵标注助手标注生成了对应图片的 json 文件3.2 执行侦测侦测图片会保存在 ./inferenct/output/ 文件夹下运行命令python area_detect.py --source ./area_dangerous --weights ./weights/helmet_head_person_s.pt3.3 效果在危险区域里面的人体会被 红色框 选出来4. 生成 ONNX4.1 安装 onnx 库pip install onnx4.2 执行生成python ./models/export.py --weights ./weights/helmet_head_person_s.pt --img 640 --batch 1onnx 和 torchscript 文件会生成在 ./weights 文件夹中5. 增加数据集的分类关于增加数据集分类的方法SHWD 数据集里面没有 person 的类别先将现有的自己的数据集执行脚本生成 yolov5 需要的标签文件 .txt之后再用 yolov5x.pt 加上 yolov5x.yaml 使用指令检测出人体python detect.py --save-txt --source ./自己数据集的文件目录 --weights ./weights/yolov5x.ptyolov5 会推理出所有的分类并在 inference/output 中生成对应图片的 .txt 标签文件修改 ./data/gen_data/merge_data.py 中的自己数据集标签所在的路径执行这个python脚本会进行 person 类型的合并总结以上就是 YOLOv5 实现 智慧工地安全帽和危险区域检测系统 的全部内容。欢迎 star ✨✨✨本文转载自csdn博客文章链接https://blog.csdn.net/hxj0323/article/details/109257255