news 2026/9/8 22:46:09

YOLOv5头盔佩戴检测系统:从数据集到部署的完整实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv5头盔佩戴检测系统:从数据集到部署的完整实战指南

简介:面向深度学习入门者与毕业设计学生,这是一套基于YOLOv5的头盔佩戴检测识别完整项目,覆盖数据标注、模型训练、推理部署与结果展示全流程,可直接用于工地安全帽佩戴检测场景。资源共77个文件、约23.72MB,包含13个Python源码(涵盖数据转换、训练、检测等模块)、24个YAML配置文件(含多种数据集与超参配置)、26张JPEG示例图像、6个Shell脚本、说明文档及教学视频,并已提供训练好的权重文件,免去长时间训练成本。已有608人学习下载。项目配套教程从数据收集整理、VOC格式转换到YOLOv5训练调参均有说明,同时给出Dockerfile与依赖清单,便于环境复现;ipynb交互式笔记可逐步演示运行过程。对于需要完成课程设计或毕业设计的同学,这套资源能提供清晰的代码框架和可直接运行的基础模型,帮助理解目标检测落地的关键环节。 最近好多做毕设和在工地做安全管理的朋友问我头盔检测怎么做,市面上相关的项目资料不少,但真正能跑通的却不多。我手上有一套“基于YOLOV5的头盔佩戴检测识别系统”的完整资源包,里面源码、数据集、训练好的权重、教程全都有,我整理了一下,把整个项目从拆解到复现的过程写成这篇分享,适合正在做毕业设计的学生、安全智能化的从业者,以及想入门YOLOV5目标检测的学习者参考。

这套系统的核心任务很明确:从监控画面或图片中识别工人头部区域,判断是否佩戴了安全头盔。模型本质上是一个单阶段目标检测器,基于YOLOV5实现,把“戴了头盔的头部”和“没戴头盔的头部”分别作为独立类别检出。相比人工巡检,这套方案能7x24小时工作,而且部署成本不高,一台普通办公电脑就能训练和推理。

1. 项目全貌拆解与核心价值

1.1 这套资源包里到底装了什么

拿到压缩包先别急着解压跑代码,先看清楚目录结构,搞清楚每个文件是干什么用的。一个正规的头盔检测项目资源包通常包含以下四类东西。

第一是源码。里面会有完整的YOLOv5工程目录,包括detect.py(推理脚本)、train.py(训练脚本)、val.py(验证评估脚本)等核心文件。注意,YOLOv5官方仓库是持续更新的,资源包里打包的往往是某个稳定版本,比如v5.0v6.0,这个版本号在配置文件yolov5s.yaml里能看到。

第二是数据集。常见的开源安全头盔数据集有SHWD,包含7581张图像,标注了head(未佩戴)和helmet(佩戴)两类目标。资源包中的数据集一般也是这个格式的整理版,目录结构如下:

dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ ├── train.txt └── val.txt

标签文件是YOLO格式的txt文件,每行代表一个目标,格式为“类别id 中心点x坐标 中心点y坐标 宽度 高度”,坐标值全部归一化到0到1之间。

第三是训练好的权重文件。正常情况下在runs/train/exp/weights/目录下,里面会有best.ptlast.pt两个文件。best.pt是验证集上效果最好的模型,last.pt是最后一轮训练的结果。实操时推理、部署都用best.pt

第四是教程文档。一般是PDF或Markdown格式,内容包括环境搭建、数据配置、训练命令、推理命令。教程的价值在于把你从零带到能跑通,但实际训练中很多细节还是需要自己摸索,我下面补充的这些内容正好能弥补教程里没写透的部分。

1.2 为什么头盔检测任务选择YOLOv5

目标检测领域的模型很多,两阶段的Faster R-CNN精度高但速度慢,单阶段的SSD速度尚可但小目标效果一般。YOLOv5能在头盔检测这个场景里成为“默认选项”,是因为它在精度、速度、易用性之间取得了很好的平衡。

具体来说,YOLOv5s模型只有7.2M左右的参数量,在GTX 1660这种入门级显卡上,推理一张640x640的图片只需要十几毫秒,实测能跑到60到90帧。在SHWD这类中小规模数据集上训练,只要数据质量正常,mAP@0.5达到90%以上是大概率事件。

另外一个很现实的原因是生态。YOLOv5出世早、用户多,基于它的二次开发和部署方案非常成熟,OnnxRuntime、NCNN、TensorRT这些推理框架都支持它。对做毕设的学生来说,资源丰富意味着遇到问题更容易搜到解决方案;对实际项目来说,落地技术路线成熟稳定。头盔检测这种任务,模型结构不需要多复杂,重点在数据集质量和工程化能力,用YOLOv5是效率最高的选择。

2. 训练前必须理清的三个关键点

2.1 数据集的构成与组织方式

很多同学上来就python train.py直接跑,结果报错找不到标签文件,或者训练出来的模型检测效果一塌糊涂。问题往往出在数据集上。

头盔检测数据集的标注类别有讲究。标准做法是设两个类别:类别0是helmet(戴了安全帽的头部),类别1是head(没戴的头部)。检测模型其实只负责找出这两种目标,至于“戴没戴”是后续逻辑判断的事——只要在画面中检出head,就意味着该位置有人且未佩戴。

也有做法是只标注一个类别,把所有佩戴的头部框出来,用helmet单类别检测。这种做法的问题是,如果一个工人完全没戴帽子,模型根本不会输出任何目标,你没法判断“是没有人”还是“有人但没戴”。所以在实际工程中,强烈建议用双类别方案。

拿到数据集后,第一件事是检查标签文件跟图片能不能对得上。我一般写个脚本统计数据集情况:

import os def check_dataset(labels_dir, images_dir): label_files = os.listdir(labels_dir) image_files = os.listdir(images_dir) print(f"标注文件数量: {len(label_files)}") print(f"图片文件数量: {len(image_files)}") empty_labels = 0 for f in label_files: path = os.path.join(labels_dir, f) if os.path.getsize(path) == 0: empty_labels += 1 print(f"空标注文件数量: {empty_labels}") check_dataset("dataset/labels/train", "dataset/images/train")

检查重点有两个:一是图片和标签数量是否匹配,二是是否存在空的标签文件。空标签对应的是没有目标的背景图,这类图片可以保留,但数量太多会让模型偏向“什么都不检”。

2.2 配置文件与超参数怎么改

YOLOv5训练前需要修改两个配置文件。第一个是模型配置文件,比如models/yolov5s.yaml,核心是nc(类别数)字段,头盔检测改成nc: 2。第二个是数据集配置文件,比如data/helmet.yaml,内容如下:

train: dataset/images/train val: dataset/images/val nc: 2 names: ['helmet', 'head']

这里特别要注意trainval的路径写法。YOLOv5支持绝对路径和相对路径,但相对路径是相对于你执行训练命令时所在的目录。建议直接用绝对路径,省得来回排查路径报错问题。

超参数文件data/hyps/hyp.scratch-low.yaml一般不用大改,默认参数适用于大多数场景。训练时batch-sizeimg-sizeepochs这些值在命令行传入即可。初次实验建议用batch-size 16img-size 640epochs 100。如果显卡显存不够,batch-size降到8或4,img-size降到416,但要注意输入分辨率降低后,小目标的检测效果会变差。

还有一点很多人容易忽略:预训练权重yolov5s.pt要不要带上?要从头训练就得用--weights yolov5s.pt,这个文件会在首次训练时自动下载;想清空权重从头训练就加--weights ''。实操中几乎总是用预训练权重做迁移学习,因为COCO数据集上学到的特征对头盔检测很有帮助,能加快收敛,提高最终精度。

2.3 模型选型:s、m、l还是x

YOLOv5提供n、s、m、l、x五个规格,从n到x网络深度和宽度依次增加,精度更高但速度更慢。头盔检测属于目标较大、背景相对单一的任务,不需要用到l或x这种重模型,YOLOv5s足够。如果你的硬件条件很差,只有CPU没有GPU,可以考虑YOLOv5n,但训练时间依然会比较煎熬。

我实际测试过在同样数据集和参数下,YOLOv5s和YOLOv5m的效果,ms的mAP@0.5能高1到2个百分点,但推理速度慢了将近一倍。对于视频实时监控场景,帧率很关键,所以综合取舍下来,s是性价比最高的选择。

3. 从零跑通完整训练流程

3.1 环境准备与安装避坑

先把环境搞定。我用的环境是Python 3.8 + PyTorch 1.8.1 + CUDA 11.1,这是经过大量用户验证的组合,稳定不容易翻车。安装PyTorch时要特别注意版本和CUDA版本要匹配,用官方命令安装:

pip install torch==1.8.1 torchvision==0.9.1 --extra-index-url https://download.pytorch.org/whl/cu111

装完验证一下GPU是否可用:

python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"

输出True说明CUDA环境正常。很多小白在第一步就卡住,运行后输出False,这是因为CUDA驱动和PyTorch编译时的CUDA接口版本不对应。建议直接用更新的版本,比如Python 3.9 + PyTorch 2.0以上,配合CUDA 11.8,兼容性更好。

然后安装YOLOv5依赖,在项目根目录下执行:

pip install -r requirements.txt

如果下载速度慢,可以使用国内镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

这里有个坑:YOLOv5官方requirements.txt里没有锁定每个库的版本,有些库版本更新后API变了,会导致运行报错。比如最近numpy更新到2.x后,旧版YOLOv5里有不少报错。解决办法是把依赖手动指定成经过验证的版本,我常用的版本组合是numpy==1.23.5opencv-python==4.8.0.76matplotlib==3.7.0

3.2 训练执行与过程监控

环境没问题后,在项目根目录执行训练命令:

python train.py --data helmet.yaml --cfg yolov5s.yaml --weights yolov5s.pt --epochs 100 --batch-size 16 --img 640 --device 0

训练过程中,YOLOv5会在终端每隔一段时间打印一次日志,包括当前epoch数、GPU显存占用、分类损失、边界框回归损失、mAP等指标。同时在runs/train/exp目录下生成results.pngresults.txt,前者绘制了训练过程各种指标的变化曲线,后者是纯文本数据。

观察训练是否正常的几个经验值:正常情况下一开始的box_loss大约在0.08到0.12之间,随着训练进行缓慢下降并最终平稳;mAP@0.5如果数据质量好,一般到第50个epoch左右就能达到85%以上。如果曲线忽高忽低、震荡剧烈,通常说明学习率过大,可以在训练命令中降低--lr0这个参数。

还有一个经常被忽略的点:YOLOv5每轮的训练日志会显示Class Images Instances P R mAP50,注意看Instances一列,如果某一类的样本数特别少,模型的P和R值会明显偏低。这说明你的数据集类别不均衡,要么补充样本,要么调整权重。

3.3 模型评估与推理验证

训练完成后,先看验证集效果。YOLOv5的val.py默认会对最后一次训练的权重进行评估:

python val.py --data helmet.yaml --weights runs/train/exp/weights/best.pt --img 640

验证结果会打印出每个类别对应的精确率P、召回率R和mAP。对头盔检测来说,我更看重召回率R,也就是“该检出的没戴头盔目标有没有漏掉”。R达不到90%以上,在安全场景里意味着有大量漏检,后果很严重。如果R偏低,优先考虑的是数据不够、标注不准,而不是调模型结构。

推理验证用detect.py

python detect.py --weights runs/train/exp/weights/best.pt --source test.jpg --conf-thres 0.5

输出图片会保存到runs/detect/exp,画面上会显示类别名称和置信度。把几张没戴头盔的测试图丢进去跑一遍,心里就有底了。

4. 常见问题排查与实战经验

4.1 训练报错与显存问题速查表

跑项目的过程难免遇到各种问题,我把头盔检测项目里最容易碰到的坑整理成表格,按故障现象、原因排查、解决方案三个维度来写:

故障现象可能原因解决方案
CUDA out of memorybatch-size过大或输入分辨率过高降低--batch-size到8或4,或降低--img到416
FileNotFoundError: .../train.txt数据路径配置错误检查helmet.yaml中的路径是否与实际目录一致,改用绝对路径
训练时loss直接为NaN学习率过大或数据中存在异常标签检查标签文件坐标是否超出0到1范围,降低--lr0为0.001
模型对所有图片都输出helmet数据集类别严重不均衡补充head类别的样本,或做数据增强
mAP一直为0配置文件中nc类别数与标签文件类别id不匹配检查helmet.yamlnc是否等于2,标签文件里类别id是否只有0和1
推理时框的位置完全错误使用了COCO预训练权重但没有覆盖类别数训练前确认已经修改了yolov5s.yaml中的nc字段

显存不足是新手遇到最多的报错,也是最容易解决的。除了降低batch-size,还可以开启梯度累积,在训练命令中加--cache-ram把数据缓存到内存,能减少磁盘IO。显存型显卡只有4G以下的话,建议直接换yolov5n而不是yolov5s,省显存效果也不错。

4.2 检测效果不佳的优化手段

模型训练出来了但检测效果不理想,先别急着换模型结构,依照下面优先级处理。

第一步是扩充数据。数据量太少是一切问题的根源。头盔检测的数据集如果能到5000张以上,效果会有明显的提升空间。可以做简单的数据增强:随机旋转、左右翻转、亮度调整、添加噪声。YOLOv5自带增强策略,默认的hyp文件里已经配置了hsv_hhsv_sfliplr等参数,训练时始终会生效,但补充真实场景的数据仍然是最有效的办法。

第二步是检查标注质量。我遇到过一种情况:标注框比实际头盔大一圈,或者漏标了远处的目标,这都会让模型训练时学歪。用python utils/plots.py可视化检查一批标签,把标注框画到图片上看一眼,比自己瞎猜强得多。

第三步是调整置信度阈值和NMS参数。推理时--conf-thres默认是0.25,如果误检太多就调到0.5;如果漏检多,可以降到0.1。NMS阈值--iou-thres默认是0.45,目标重叠严重可以调低到0.3。这些参数对最终效果的影响远大于调几层卷积网络结构。

4.3 部署到实际场景的几点体会

训练完的模型最终要部署到实际场景,比如工地实时监控。这里有几个经验可以分享。

第一个经验是导出ONNX格式。YOLOv5官方提供export.py,一条命令就能把.pt转成.onnx

python export.py --weights runs/train/exp/weights/best.pt --include onnx --img 640

ONNX格式的模型可以脱离PyTorch环境运行,用OnnxRuntime推理速度比PyTorch原生推理快不少,也更方便嵌入到其他平台。

第二个经验是实际场景的模型需要更新。工地场景和白天的照片训练出来的模型,在夜间或者逆光环境下效果大概率会打折扣。所以数据采集时要有意识地覆盖不同光照、不同角度、不同距离的样本,而不是只收集“好看”的正面样本。

第三个经验是预警机制需要加工。模型输出的是每个目标的类别和位置,实际安全系统里要做的逻辑判断包括:如果同时检测到head,立即上报告警;结合目标框中心点和跟踪算法判断人员是否进入了危险区域。这部分业务逻辑是关键,把模型集成进业务系统能发挥真正的价值。

最后分享一个我实测过的小技巧,训练完模型之后,用那些漏检的图片做一次“难例挖掘”,把漏检图片加入训练集重新微调。两个epoch就能显著提高模型在困难样本上的表现。我在跑头盔项目时,仅做了三轮难例补充,漏检率就下降了一半。这个项目非常适合作为目标检测实战入门的第一课,从数据处理到训练部署,链路完整、任务落地、坑也不算太深。上手的时候遇到问题,欢迎对照我上面的这些排查方法来处理。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 22:45:51

纯C语言实现LPC共振峰提取:完整流程与代码解析

简介:这是一份基于线性预测编码(LPC)的语音共振峰提取C语言实现,面向语音处理初学者、算法研究人员及嵌入式开发者,解决从语音信号中估计声道共振峰参数的问题。工程围绕杜宾递推、牛顿迭代、汉明窗分帧与端点检测展开…

作者头像 李华
网站建设 2026/9/8 22:45:45

前端登录态管理实战:从no user logged in报错到自动触发登录流程

1. 当"no user logged in"出现在控制台:拆解这个报错的真实含义先聊一个很常见的场景。你负责的前端项目部署之后,测试同学或者用户打开页面,控制台里飘出一行红字:no user logged in please autorig to trigger log-in…

作者头像 李华
网站建设 2026/9/8 22:45:28

NSGA3工程落地指南:高维多目标优化生产级实现

简介:本资源是一套面向算法研究者与高校研究生的NSGA-III多目标优化实战项目,聚焦于解决高维、非线性、Pareto前沿分布不规则的复杂优化问题。项目基于Python完整复现NSGA-III核心流程,包括参考点均匀生成(uniformpoint.py&#x…

作者头像 李华
网站建设 2026/9/8 22:45:10

ESP-IDF v6.0 更新解读:安全栈升级 PSA Crypto 与芯片矩阵扩展

ESP-IDF v6.0 更新解读:安全栈升级 PSA Crypto 与芯片矩阵扩展 【免费下载链接】esp-idf Espressif IoT Development Framework. Official development framework for Espressif SoCs. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf ESP-IDF v6…

作者头像 李华
网站建设 2026/9/8 22:45:00

低功耗开发本质:芯片能力、系统协同与业务重构三层穿透

1. 项目概述:为什么低功耗开发不是“省电小技巧”,而是设备级生存能力你打开手机看一眼电量,发现刚充完电三小时就掉到20%;你调试一块工业传感器模块,插上USB线能跑,拔掉电池就死机;你写的嵌入式…

作者头像 李华