毕业设计项目 深度学习安全帽佩戴检测系统
1 前言今天学长向大家介绍一个机器视觉的毕设项目深度学习安全帽佩戴检测系统项目运行效果毕业设计 深度学习安全帽佩戴检测系统 项目分享:见文末!1 课题背景建筑工人头部伤害是造成建筑伤亡事故的重要原因。佩戴安全帽是防止建筑工人发生脑部外伤事故的有效措施,而在实际工作中工人未佩戴安全帽的不安全行为时有发生。因此,对施工现场建筑工人佩戴安全帽自动实时检测进行探究,将为深入认知和主动预防安全事故提供新的视角。然而,传统的施工现场具有安全管理水平低下、管理范围小、主要依靠安全管理人员的主观监测并且时效性差、不能全程监控等一系列问题。本项目基于yolov5实现了安全帽和危险区域检测。2 效果演示3 Yolov5框架我们选择当下YOLO最新的卷积神经网络YOLOv5来进行火焰识别检测。6月9日Ultralytics公司开源了YOLOv5离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的在我们还对YOLOv4的各种高端操作、丰富的实验对比惊叹不已时YOLOv5又带来了更强实时目标检测技术。按照官方给出的数目现版本的YOLOv5每个图像的推理时间最快0.007秒即每秒140帧FPS但YOLOv5的权重文件大小只有YOLOv4的1/9。目标检测架构分为两种一种是two-stage一种是one-stage区别就在于 two-stage 有region proposal过程类似于一种海选过程,网络会根据候选区域生成位置和类别而one-stage直接从图片生成位置和类别。今天提到的 YOLO就是一种 one-stage方法。YOLO是You Only Look Once的缩写,意思是神经网络只需要看一次图片就能输出结果。YOLO 一共发布了五个版本其中 YOLOv1 奠定了整个系列的基础后面的系列就是在第一版基础上的改进为的是提升性能。YOLOv5有4个版本性能如图所示网络架构图YOLOv5是一种单阶段目标检测算法该算法在YOLOv4的基础上添加了一些新的改进思路使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示输入端在模型训练阶段提出了一些改进思路主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放Mosaic数据增强Mosaic数据增强的作者也是来自YOLOv5团队的成员通过随机缩放、随机裁剪、随机排布的方式进行拼接对小目标的检测效果很不错基准网络融合其它检测算法中的一些新思路主要包括Focus结构与CSP结构Neck网络在目标检测领域为了更好的提取融合特征通常在Backbone和输出层会插入一些层这个部分称为Neck。Yolov5中添加了FPNPAN结构相当于目标检测网络的颈部也是非常关键的。FPNPAN的结构这样结合操作FPN层自顶向下传达强语义特征High-Level特征而特征金字塔则自底向上传达强定位特征Low-Level特征)两两联手从不同的主干层对不同的检测层进行特征聚合。FPNPAN借鉴的是18年CVPR的PANet当时主要应用于图像分割领域但Alexey将其拆分应用到Yolov4中进一步提高特征提取的能力。Head输出层输出层的锚框机制与YOLOv4相同主要改进的是训练时的损失函数GIOU_Loss以及预测框筛选的DIOU_nms。对于Head部分可以看到三个紫色箭头处的特征图是40×40、20×20、10×10。以及最后Prediction中用于预测的3个特征图①40×40×255 ②20×20×255 ③10×10×255相关代码classDetect(nn.Module):strideNone# strides computed during buildonnx_dynamicFalse# ONNX export parameterdef__init__(self,nc80,anchors(),ch(),inplaceTrue):# detection layersuper().__init__()self.ncnc# number of classesself.nonc5# number of outputs per anchorself.nllen(anchors)# number of detection layersself.nalen(anchors[0])//2# number of anchorsself.grid[torch.zeros(1)]*self.nl# init gridself.anchor_grid[torch.zeros(1)]*self.nl# init anchor gridself.register_buffer(anchors,torch.tensor(anchors).float().view(self.nl,-1,2))# shape(nl,na,2)self.mnn.ModuleList(nn.Conv2d(x,self.no*self.na,1)forxinch)# output convself.inplaceinplace# use in-place ops (e.g. slice assignment)defforward(self,x):z[]# inference outputforiinrange(self.nl):x[i]self.m[i](x[i])# convbs,_,ny,nxx[i].shape# x(bs,255,20,20) to x(bs,3,20,20,85)x[i]x[i].view(bs,self.na,self.no,ny,nx).permute(0,1,3,4,2).contiguous()ifnotself.training:# inferenceifself.onnx_dynamicorself.grid[i].shape[2:4]!x[i].shape[2:4]:self.grid[i],self.anchor_grid[i]self._make_grid(nx,ny,i)yx[i].sigmoid()ifself.inplace:y[...,0:2](y[...,0:2]*2-0.5self.grid[i])*self.stride[i]# xyy[...,2:4](y[...,2:4]*2)**2*self.anchor_grid[i]# whelse:# for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953xy(y[...,0:2]*2-0.5self.grid[i])*self.stride[i]# xywh(y[...,2:4]*2)**2*self.anchor_grid[i]# whytorch.cat((xy,wh,y[...,4:]),-1)z.append(y.view(bs,-1,self.no))returnxifself.trainingelse(torch.cat(z,1),x)def_make_grid(self,nx20,ny20,i0):dself.anchors[i].deviceifcheck_version(torch.__version__,1.10.0):# torch1.10.0 meshgrid workaround for torch0.7 compatibilityyv,xvtorch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)],indexingij)else:yv,xvtorch.meshgrid([torch.arange(ny).to(d),torch.arange(nx).to(d)])gridtorch.stack((xv,yv),2).expand((1,self.na,ny,nx,2)).float()anchor_grid(self.anchors[i].clone()*self.stride[i])\.view((1,self.na,1,1,2)).expand((1,self.na,ny,nx,2)).float()returngrid,anchor_grid4 数据处理和训练4.1 安全帽检测这里只是判断 【人没有带安全帽】、【人有带安全帽】、【人体】 3个类别 基于 data/coco128.yaml 文件创建自己的数据集配置文件 custom_data.yaml。创建自己的数据集配置文件# 训练集和验证集的 labels 和 image 文件的位置train:./score/images/train val:./score/images/val# number of classesnc:3# class namesnames:[person,head,helmet]创建每个图片对应的标签文件使用 data/gen_data/gen_head_helmet.py 来将 VOC 的数据集转换成 YOLOv5 训练需要用到的格式。使用标注工具类似于 Labelbox 、CVAT 、精灵标注助手 标注之后需要生成每个图片对应的 .txt 文件其规范如下每一行都是一个目标类别序号是零索引开始的从0开始每一行的坐标 class x_center y_center width height 格式框坐标必须采用归一化的 xywh格式从0到1。如果您的框以像素为单位则将x_center和width除以图像宽度将y_center和height除以图像高度。代码如下importnumpyasnpdefconvert(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] x1int(box[0])y1int(box[1])x2int(box[2])y2int(box[3])dwnp.float32(1./int(size[0]))dhnp.float32(1./int(size[1]))wx2-x1 hy2-y1 xx1(w/2)yy1(h/2)xx*dw ww*dw yy*dh hh*dhreturn[x,y,w,h]生成的 .txt 例子10.18300000869203360.13963964302092790.134000006364658470.1591591630131006210.52400002488866450.291291298344731330.08000000379979610.1681681722402572610.60600002878345550.295795802958309650.084000003989785910.177177181467413910.67600003210827710.253753759898245330.100000004749745130.2132132183760404600.393000018666498360.25525526143610480.178000008454546330.282282289117574700.72000003419816490.55705707054585220.252000011969357730.429429439827799800.77200003666803240.25675676297396420.15200000721961260.23123123683035374选择模型在文件夹 ./models 下选择一个你需要的模型然后复制一份出来将文件开头的 nc 修改为数据集的分类数下面是借鉴 ./models/yolov5s.yaml来修改的# parametersnc:3# number of classes 修改这里为数据集的分类数depth_multiple:0.33# model depth multiplewidth_multiple:0.50# layer channel multiple# anchorsanchors:-[10,13,16,30,33,23]# P3/8-[30,61,62,45,59,119]# P4/16-[116,90,156,198,373,326]# P5/32# 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)]开始训练这里选择了 yolov5s 模型进行训练权重也是基于 yolov5s.pt 来训练python train.py--img640\--batch16--epochs10--data./data/custom_data.yaml \--cfg./models/custom_yolov5.yaml--weights./weights/yolov5s.pt项目运行效果毕业设计 深度学习安全帽佩戴检测系统 项目分享:见文末!

相关新闻

springboot基于java的教学资源管理系统(源码+文档+运行视频+讲解视频)

springboot基于java的教学资源管理系统(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 SpringBoot框架与Java语言的结合,为教学资源管理系统提供了高效、稳定的开发环境。该系…

2026/7/6 4:43:08 阅读更多 →
基于PHP、asp.net、java、Springboot、SSM、vue3的基金预测分析平台的设计与实现

基于PHP、asp.net、java、Springboot、SSM、vue3的基金预测分析平台的设计与实现

目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 在经济不断发展的情况下,中国证券市场也趋于完…

2026/7/5 15:32:27 阅读更多 →
Claude Opus 4.6 深度解析:全面超越GPT-5.2,一步API国内零门槛接入实战教程

Claude Opus 4.6 深度解析:全面超越GPT-5.2,一步API国内零门槛接入实战教程

摘要:Anthropic 正式发布 Claude Opus 4.6 大语言模型,在知识工作、编码推理、长文本处理等核心场景评测中全面超越 GPT-5.2,新增 1M token 上下文窗口、Agent 协作等重磅功能。本文详细解析模型性能优势、产品生态升级,并提供一步…

2026/7/6 1:11:23 阅读更多 →

最新新闻

HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

HS工具箱深度评测:一站式在线工具平台如何提升开发与办公效率

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也遇到过这样的场景:开发时突然需要把图片转成Base64编码,临时去搜在线工具,结果要么广告…

2026/7/6 11:29:59 阅读更多 →
数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理 2.6 节:图像采样量化实战,Python 实现 8-bit 灰度图转换与伪轮廓分析

数字图像处理实战:Python实现8-bit灰度图转换与伪轮廓分析当一张风景照片在显示器上呈现出明显的阶梯状色块时,我们看到的正是数字图像处理中典型的"伪轮廓"现象。这种现象源于图像量化过程中的信息损失,而理解其背后的原理对于从事…

2026/7/6 11:27:57 阅读更多 →
STM32L152RE与TPAFE0808构建多通道信号采集系统

STM32L152RE与TPAFE0808构建多通道信号采集系统

1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是常见需求。TPAFE0808作为8通道模拟前端芯片,配合STM32L152RE低功耗MCU,能够构建高效的多通道信号控制系统。这种组合特别适合需要同时监测多个传感器…

2026/7/6 11:25:53 阅读更多 →
4万星和5.7万星的两个框架,我焊在一起后它们封神了

4万星和5.7万星的两个框架,我焊在一起后它们封神了

第一个,AI 在「要构建什么」还没想清楚的时候就开始写代码。你跟它讨论需求,聊了三轮,它突然来一句「我来帮你实现吧」,然后一顿输出,写完一看,方向跑偏了。代码能跑,但不是你想要的。删了重来&…

2026/7/6 11:25:53 阅读更多 →
Transformer 架构 6 大核心组件拆解:从位置编码到多头注意力数学推导

Transformer 架构 6 大核心组件拆解:从位置编码到多头注意力数学推导

Transformer架构6大核心组件深度解析:从数学原理到工程实现引言:重新定义序列建模的里程碑2017年,一篇名为《Attention Is All You Need》的论文彻底改变了自然语言处理领域的游戏规则。Transformer架构的提出不仅终结了RNN/CNN在序列建模中的…

2026/7/6 11:25:53 阅读更多 →
如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南

如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南

如何用Squirrel-RIFE轻松实现专业级视频补帧:从入门到精通的完整指南 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件,显存占用更小,是DAIN速度的10-25倍,包含抽帧处理,去除动漫卡顿感 项目地址: https://gitcod…

2026/7/6 11:23:51 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻