恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

YOLO安全帽手套检测数据集实战:格式转换与训练避坑指南

  • 首页
  • 资讯中心
  • /
  • YOLO安全帽手套检测数据集实战:格式转换与训练避坑指南

相关资讯

水果蔬菜识别系统落地避坑指南:数据清洗、轻量CNN与PyQt多线程实战 2026/10/1 14:23:30
安徽节能水性漆喷漆房定制工厂实力参考 2026/10/1 14:18:29
MPS、MRP、APS 详解:核心定义、定位与三者区别 2026/10/1 14:18:29

最新资讯

SAP邮件模板中心化:从Maintain Email Templates到规范化落地实践
芯片打样PD器件封装实验室:材料兼容性验证入门
基于SpringBoot的校园编程俱乐部管理系统设计与实现
RK3588双路MIPI视觉优化:线程池架构与NPU内存复用实战
多波束测深数据处理六大硬核环节与工程落地指南
Windows11 安装 Claude Code 全流程:从 Node.js 到 PowerShell 环境配置

今日推荐

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

本周热门

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化+8邻接追踪)
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
新手入门看这篇:建设网站加盟避坑指南与SEO实操

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

YOLO安全帽手套检测数据集实战:格式转换与训练避坑指南

发布时间:2026/10/1 14:23:30
YOLO安全帽手套检测数据集实战:格式转换与训练避坑指南 简介YOLO安全帽手套检测数据集面向目标检测算法学习者与工程落地人员尤其适合需要训练自定义安全帽、手套检测模型的开发者。图片采集自真实工地场景质量高且场景丰富可用于安全巡检、智能监控、生产合规管理等方向。数据集采用LabelImg标注标注框质量高同时提供VOC、COCO、YOLO三种格式标签分别存放在不同文件夹可直接接入YOLO系列框架进行训练。整个压缩包约50.13MB共2000个文件其中包含1000个XML标注文件VOC格式、991个TXT标签文件YOLO格式并配有Python脚本用于训练集/验证集/测试集划分YAML配置文件用于参数设定还有HTML格式的图文训练教程。已有544人学习浏览配套教程从环境搭建、数据集修改到训练启动均有细致说明帮助新手绕过常见坑点快速获得可用的检测模型。1. YOLO安全帽手套检测数据集从这三处开始检查在工地的安全巡检项目里安全帽和手套检测是最常见的落地场景但把 YOLO 安全帽手套检测数据集真正用起来第一步不是训练而是检查三件事标签文件夹里是否有和图片同名的文件类别顺序是否和需求一致VOC 的 xml、COCO 的 json、YOLO 的 txt 三种格式到底用哪一种。这套资料把这三件事都处理好了1000 张真实场景图片不是合成图对原型验证完全够用。刚搭好 YOLO 环境、想拿干净数据把流程跑通的人或者做安全帽检测项目、需要一套能直接训练的数据集的人都比较适合。但直接开 train 会踩路径和类别顺序的坑下面把每个环节拆开讲脚本怎么用、参数怎么改、卡住看哪里一步步来。2. VOC、COCO、YOLO三种标签格式结构差异与转换逻辑资料包里三种标签是分开存放的训练时不要混着用也不建议把三种格式塞进同一个目录让 YOLO 自己猜。先搞清三种格式各自的结构后面改脚本才不会翻车。2.1 VOC的xml和COCO的json两种主流目标检测标注结构VOC 格式来自 PASCAL VOC 项目每张图片对应一个 xml 文件。以安全帽为例xml 里最核心的是 object 节点annotation foldersafety_hat/folder filename000001.jpg/filename size width1920/width height1080/height depth3/depth /size object namesafety_hat/name bndbox xmin320/xmin ymin180/ymin xmax580/xmax ymax330/ymax /bndbox /object /annotationbndbox 里存的是像素坐标左上角和右下角两个点。xml 的好处是每张图片独立审核时打开单个文件就能看到标注内容坏处是几百张图片要读几百个文件批量处理时稍微慢一点。COCO 格式整个数据集只有一个 json 文件用 images、annotations、categories 三个数组组织数据。images 数组存每张图片的 id、宽高、文件名categories 数组存类别列表annotations 数组里的每个对象用 image_id 关联到具体图片bbox 字段是 [x, y, w, h]。注意这里也是像素坐标但表示的语义是左上角起点加宽和高和 VOC 的 xmin、ymin、xmax、ymax 不一样。COCO 还有一个 segmentation 字段检测任务里通常是空的多边形或直接省略后来要做实例分割时才会用到。2.2 YOLO的txt归一化坐标class_id和坐标换算YOLO 格式最简单一个 txt 文件里每行一个目标五个值class_id、xc、yc、w、h全部归一化到 0 到 1 之间。归一化是指除以图片的宽和高xc (xmin xmax) / 2 / width yc (ymin ymax) / 2 / height w (xmax - xmin) / width h (ymax - ymin) / height反过来从 YOLO 转到 VOC 或 COCO就是乘回去再算出 xmin、xmax。这里最容易翻车的地方是 class_id。用 lableimg 标注时xml 里保存的是类别名字符串导出 YOLO 格式时按类别在配置文件里的顺序转成数字。如果你后边重新排了类别txt 里的数字没跟着变模型就会把安全帽识别成手套。资料包里这个顺序和 data.yaml 是配套的自己加类别时一定要留意顺序。2.3 三种格式互转时的几个检查点第一坐标必须分清像素还是归一化。很多转换脚本出错就是因为默认了输入格式VOC 转 YOLO 要先读图片宽高再除YOLO 转 VOC 要记得乘回去。第二class_id 从 0 开始还是从 1 开始。YOLO 严格从 0 开始COCO 的 category_id 习惯从 1 开始转换时要做偏移。第三注意同名的图片后缀图片是 000001.jpg 还是 000001.pnglabel 文件按 stem 匹配后缀不一致脚本会漏匹配。三种格式的核心字段可以这样对应格式存储单位坐标表示类别表示框字段VOC每张一个 xml像素 (xmin,ymin,xmax,ymax)字符串 namebndboxCOCO整个数据集一个 json像素 (x,y,w,h)数字 category_idbboxYOLO每张一个 txt归一化 (xc,yc,w,h)数字 class_id每行第一列为什么要三种格式都保留如果你只在 Ultralytics YOLO 上训练txt 就够了想用 mmdetection 或 Detectron2 练COCO json 更顺手想做数据审核、画框看看有没有漏标VOC 的 xml 可视化最直观。资料包把三种都给全省去自己装的转换脚本前提是你得知道自己当前在用的是哪一种。转换脚本遇到 xml 里带旋转角度的情况直接算中心点会把旋转框转没了这个坑我遇到过一次当时安全帽数据集里歪着戴的帽子全被算成了大框后来加了角度判断才修掉。3. 三个划分脚本怎么选从按比例划分到生成ImageSets文件资料包里给了三个 Python 脚本名字接近容易搞混先说清楚各自分工。3.1 先看懂三个脚本的分工第一个「训练集、验证集、测试集划分脚本图片标签划分写入新文件夹.py」负责把图片和标签按比例分到三组同时复制到新目录适合 YOLOv5 之后按目录结构读数据的版本。第二个是它的简化版只分成训练集和验证集适合不想单留测试集的快速原型。第三个是 split_train_val 生成 ImageSets 下 txt 文件划分脚本不做文件复制而是在已有目录基础上生成 train.txt、val.txt、trainval.txt 这类清单文件来自 darknet 时代的做法配合老项目或者 mmdetection 的自定义数据加载时更常见。如果你跑新版本 ultralytics用前两个脚本按目录划分就够了。如果是从 GitHub 拉的老项目第三个脚本的 txt 清单可能更合适。选脚本之前先确认自己训练的入口是「目录结构」还是「清单文件」这个决定选错了脚本跑了等于白跑。3.2 实操把1000张图片按8:1:1划分到train/val/test第一个脚本的核心逻辑可以理解成下面这样打乱图片列表按下标切三段图片和标签同步复制。import random import shutil from pathlib import Path src_images Path(images) src_labels Path(labels) dst_root Path(dataset) train_ratio, val_ratio, test_ratio 0.8, 0.1, 0.1 all_images list(src_images.glob(*.jpg)) list(src_images.glob(*.png)) random.seed(2024) # 固定随机种子保证每次划分结果一致 random.shuffle(all_images) n_train int(len(all_images) * train_ratio) n_val int(len(all_images) * val_ratio) for split_name, split_images in [ (train, all_images[:n_train]), (val, all_images[n_train:n_train n_val]), (test, all_images[n_train n_val:]), ]: for img in split_images: label src_labels / (img.stem .txt) dst_img_dir dst_root / split_name / images dst_lab_dir dst_root / split_name / labels # 图片和标签同步复制是关键漏一个训练时会报 dataset not found shutil.copy(img, dst_img_dir / img.name) if label.exists(): shutil.copy(label, dst_lab_dir / label.name)几个参数要注意random.seed(2024) 固定随机种子别人跑同一个脚本能得到同样结果复现实验时不会因为划分不同导致指标差一截。train_ratio、val_ratio、test_ratio 加起来要等于 1否则后边切片的边界对不上。如果只要训练集和验证集把 test_ratio 改成 0、val_ratio 改成 0.2 就行对应资料包里第二个脚本的写法。还有个容易被忽略的地方glob(.jpg) 和 glob(.png) 分开匹配数据里有大小写混用的 .JPG 就会漏掉。我一般会在脚本里加一行统一把后缀转成小写再匹配。复制用 shutil.copy源目录没被改动可以反复换比例重新划分。注意划分前先确认磁盘空间够不够图片加标签复制过去约占多少用 df -h 看一眼再跑避免复制到一半磁盘写满。3.3 train_list.txt和trainval_list.txt的格式与作用资料包里有两个 txt 文件train_list.txt 和 trainval_list.txt。它们对应的是传统划分方式train_list 里放所有训练图片的路径trainval_list 是训练加验证的总和。trainval 的作用是当你希望用更多数据做最终轮训练时直接引用这个清单不用再合并两个文件夹。这些 txt 的行格式一般是每行一张图片的路径可以是绝对路径也可以是相对于数据集根的相对路径。建议用相对路径因为项目换到别的机器上时绝对路径会失效一大半。老版 darknet 训练时还需要一个独立的 obj.names 文件列出类别名顺序要和 txt 里的 class_id 一致这又回到了第 2 章说的类别顺序问题。自己写生成脚本时注意两点一是路径分隔符Windows 是反斜杠Linux 是斜杠建议统一转成斜杠二是 txt 里的图片顺序和训练顺序有相关性如果原始文件按拍摄时间排划分时要先打乱否则模型会学到时间相关性。划分完我习惯先验证一下train、val、test 三个目录里图片数和 txt 数要一致。不一致通常是某个图片没有标签文件这种图片放进训练集会让 YOLO 报错或产生空标签。最简单的方式是用 Python 统计两边的文件后缀数量差数量对不上就回源目录排查。另外测试集单独留出来这一点资料包做得比较规范——很多人只用 train 和 val最后拿 val 当测试集mAP 会虚高一截部署时才发现精度对不上。4. YOLO环境搭建与训练GPU驱动到第一个模型跑通资料包里附带了两份 YOLO 环境教程一份是 GPU 显卡驱动版一份是 Ubuntu 安装教程。环境搭建的坑不在操作步骤而在版本匹配。4.1 GPU驱动、CUDA、PyTorch的版本匹配关系先明确三个层次显卡驱动是系统级的CUDA 是运行库PyTorch 里编译的 CUDA 版本要和前两层兼容。nvidia-smi 能看到的是驱动支持的 CUDA 最高版本nvcc -V 显示的是 CUDA Toolkit 版本。很多人在 conda 里装了 cudatoolkitnvcc 显示的版本和 PyTorch 实际用的不一定同一个这一点最容易把人绕晕。一套比较常见的搭配显卡驱动版本CUDAPyTorchRTX 30系列47011.7/11.8cu117/cu118V100/A10052512.1/12.2cu121/cu122RTX 40系列54512.4cu124装 PyTorch 用官方 cu121 索引比 conda 默认源稳得多。装完验证方式是小段代码跑通import torch 后 torch.cuda.is_available() 返回 True再打印 torch.cuda.get_device_name(0) 确认识别到的显卡型号无误。这一步过了再往下走不过就回头查驱动。4.2 修改data.yaml和模型配置类别数改错会直接崩资料包里是两类目标安全帽和手套。data.yaml 按自己的目录改成这样path: /home/workspace/safety_hat_dataset train: images/train val: images/val nc: 2 names: [safety_hat, glove]path 是数据集根目录train 和 val 是相对这个根的路径nc 必须是 2names 的顺序要和 labels 里 txt 的 class_id 严格一致。模型配置文件也要同步改如果用 yolov8s模型 yaml 里有 nc 字段改成 2。改漏一个就会报类别数不匹配或者训练时直接崩。资料包里的训练教程 html 写了怎么根据案例修改自己的数据集核心就是换路径、换 names、换 nc。教程里的路径是作者的全部替换成自己的路径全局搜索作者写的目录名一次性替换不要只改 data.yaml。其他参数像 batch 和 epochs 第一次先保持默认能跑通比什么都重要。4.3 训练启动命令与输出日志数据和环境都验证通过后启动训练# 用官方预训练权重做迁移学习收敛更快 yolo train modelyolov8s.pt datasafety_hat.yaml epochs200 batch16 imgsz640 device0epochs 先给 200batch 按显存调整imgsz640 是速度和精度的平衡点。1000 张图对 YOLOv8s 来说 200 轮足够看到明显收敛。日志里主要看三个 lossbox_loss、cls_loss、dfl_loss这三个对应 YOLO 的损失函数。前 30 轮 loss 下降快是正常的后面变慢也是正常的如果 loss 突然上涨或变成 nan基本可以断定是学习率问题或数据里混进了脏标签。训练结束后生成 runs/detect/train 目录里面有 weights/best.pt 和 last.pt还有混淆矩阵和 PR 曲线图。best.pt 是 val mAP 最高的权重部署时用这个last.pt 一般只用来续训。5. 训练排查与避坑图片路径、显存和标签错位的常见问题训练 YOLO 时最容易翻车的点不在模型而在数据准备和环境细节。下面几条是第一次跑数据集的人最常遇到的按「现象 → 原因 → 解决」写。5.1 Dataset not found路径拼接与孤立文件训练时报「Dataset not found」或「found no images in val」。原因基本都是 data.yaml 的 path 写了相对路径启动命令的工作目录不在数据集根目录下。YOLO 解析时会把 path 和 train、val 拼接拼接结果不存在就直接报错。很多时候不是图片真没了是拼接后路径不对。解决把 data.yaml 里的 path 改成绝对路径。训练前手动跑一段 Python确认 images 和 labels 两个目录都存在并且两边没有多余的孤立文件。还有一个容易忽略的点——文件夹里混进隐藏文件比如 Mac 的 .DS_Store打开目录时不会报错但会让 glob 统计数量不准。5.2 CUDA out of memorybatch、imgsz和cache训练没跑几步就报 CUDA out of memory。原因通常是 batch 和 imgsz 开太大。V100 32G 听起来很大imgsz1280 加 batch32 照样 OOM。解决先按 batch8、imgsz640 跑通再逐步加 batch加到显存占用接近 90% 为止用 nvidia-smi -l 1 实时监视。还有一个技巧如果开了 cacheTrue图片会缓存进显存这时候 OOM 不一定是 batch 的锅先把 cache 关掉试。5.3 loss变成nan或BN崩溃学习率与class_id越界训练中 loss 变成 nan或者 BN 层崩溃输出全部归零。最常见原因是学习率过高尤其是用预训练权重迁移时全部层用同一个高学习率BN 层的均值和方差会被搞崩。另一个原因是标签里 class_id 越界——txt 第一列的值大于等于 nc模型算损失时索引越界产生 nan。解决学习率从默认的 0.01 降到 0.001还在 nan 就把 batch 调小。数据侧写一个校验脚本遍历 labels 目录下所有 txt检查第一列最大值是否小于 nc、每行是不是 5 个数值。损坏的数据文件直接删掉或重新标注不要带脏标签硬训。我从那以后每次换数据集都强制先跑一遍标签校验脚本这个习惯帮我避开了很多半夜 debug。5.4 混淆矩阵行和列不等于100%这是正常的训练完看混淆矩阵有人会逐行算百分比发现行和列加起来不是 100%怀疑代码有 bug。实际上混淆矩阵每一行代表一个真实类别行内各列是该类被预测成各类的比例所以行可以加到 100。但列的分母是预测为该类的总数量和行的样本数不一致列加起来不等于 100 是正常的。这个现象在资料包训练教程生成的 runs 里也很常见不用处理。真正要看的是对角线数值对角线越亮说明分类越准。如果 mAP50 很高但 mAP50-95 偏低说明框的定位不错但和标注框的重合度差一点可以加大训练轮数或者把 imgsz 提到 1280 再试。以上几类问题第一次跑数据集时出现频率最高排查时按数据路径、标签内容、显存设置、输出指标这个顺序来能省不少时间。6. 进阶预训练权重、数据增强与mAP验证的实战技巧最后讲三个训练前就要做的选择。用预训练权重而不是从零训练。yolo 预训练模型下载最方便的方式就是 YOLO 命令行本身第一次指定 modelyolov8s.pt 时它会自动下载。迁移学习意味着把 COCO 上学到的通用特征搬过来安全帽和手套这种小目标检测用 yolov8s.pt 改 nc2 继续训练比随机权重初始化少跑上百轮最终 mAP 也更高。资料包的 1000 张图定向微调完全够用没必要从零开始。数据增强参数在 ultralytics 里集中在 hyp 配置中。默认的 mosaicTrue 对 1000 张小数据集特别重要它把四张图拼成一张等于变相扩充了样本量。hsv_h、hsv_s、hsv_v 控制颜色扰动工地这种光照变化大的场景可以把饱和度扰动从默认 0.7 加到 0.9但对比度扰动别调太高会让暗部的小目标彻底看不见。fliplr 水平翻转对安全帽这种左右对称的目标可以开但如果目标上有文字标识或方向性特征要慎用。训练结束后的验证不是看一眼 mAP 就完事。用 best.pt 跑一次 valyolo val modelruns/detect/train/weights/best.pt datasafety_hat.yaml重点看 mAP50 和 mAP50-95 两个指标。前者反映粗召回后者对框位置要求苛刻。安全帽在远距离下属于小目标mAP50-95 比 mAP50 低 10 到 15 个点是正常的用 imgsz1280 重新 val 一次差距会缩小。再多一步把 val 的批量预测图翻一遍重点看漏检和重复框。如果模型要放到板子或服务器上做推理部署最后一步是导出 ONNXyolo export modelruns/detect/train/weights/best.pt formatonnx imgsz640导出后可以用 onnxruntime 验证输入输出维度输入 1x3x640x640输出三个检测头的张量。默认导出的 onnx 带动态 shape部署引擎只接受静态 shape 时加 dynamicFalse 参数重新导出。这套资源的脚本和教程都是现成的按上面的顺序走完就能跑出自己的权重。我的习惯是先校验标签再 train再 val三步走完才敢把模型交给别人用。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号