
简介本资源为面向目标检测任务的“手套与徒手”二分类数据集适用于YOLO系列算法的手部佩戴状态识别场景可支撑安全帽佩戴检测、工业操作规范监控、智能安防等应用适合具备一定深度学习基础、需要快速验证模型效果的开发者与研究人员。压缩包共2000个文件以VOC格式的xml标注文件为主同时提供YOLO格式的txt标签两种格式分别存放于独立文件夹便于按需选用包内附有data.yaml配置文件已划分好训练集与验证集可直接用于yolov5、yolov8、yolov9、yolov7、yolov10及yolo11等版本的模型训练与测试。资源整体约153.86MB标注信息包含类别索引与归一化后的中心点坐标、宽高比例方便直接读取解析。目前已有88人学习下载适合作为手部检测项目的入门数据或算法对比实验的基准数据集。1. 手套与徒手检测3893 张图像的数据集到底能跑出什么效果产线安全巡检里有个很典型的场景工人进入冲压、切割或化学品操作区域必须佩戴防护手套但摄像头拍到的画面里手部目标小、遮挡多、光照还乱靠人盯着屏幕看根本不现实。这个标题指向的就是解决这类问题的第一块砖——一个 3893 张图像、带标签、专门标注「戴手套的手」和「徒手」的 YOLO 格式数据集。它要解决的不是模型结构问题而是「有没有足够干净、类别定义清晰、拿来就能训练的数据」。适合谁用做工业安全视觉检测的算法工程师、想快速验证手部防护合规检测可行性的团队以及正在找垂直场景数据集练手 YOLO 训练流程的人。数据集本身不复杂但类别边界和标注质量决定了后面模型是能用还是只能看。2. 先搞清楚数据长什么样类别定义、标注格式与目录结构2.1 两类目标的边界怎么定手套手 vs 徒手这个数据集的核心价值在于把「手」拆成了两个互斥类别。常见做法是glove表示手部佩戴了防护手套bare_hand表示裸露皮肤的手。听起来简单但实际标注时边界很模糊——半指手套算哪类袖口遮住手腕但手指露出的算哪类我一般会按「掌心与指节区域是否有连续覆盖物」来判定只要主要抓握面被手套材料覆盖就归为glove。这个规则必须在标注阶段就写死否则同一批数据里会出现同类目标两种标法训练时模型直接学懵。从检索到的背景看YOLO 格式数据集通常配套data.yaml来声明类别名和路径。这个数据集既然标注为 YOLO 格式大概率是每张图对应一个.txt标签文件每行格式为class_id x_center y_center width height坐标是归一化到 0~1 的。下面是一个典型的data.yaml写法路径按你本地实际存放位置改# data.yaml path: ./glove_barehand_dataset # 数据集根目录 train: images/train # 训练集图像目录 val: images/val # 验证集图像目录 test: images/test # 测试集图像目录可选 nc: 2 # 类别数 names: # 类别名顺序必须与标签里的 class_id 一致 0: glove 1: bare_hand逻辑说明nc和names必须与标签文件里的类别索引严格对应。如果标注时glove是 0、bare_hand是 1这里就不能反。参数说明path建议用相对路径方便整个数据集文件夹迁移train/val/test三个子目录名可以自定义但要在 yaml 里写对。很多新手翻车就翻在这里——yaml 写的是images/train实际文件夹叫train/images训练脚本直接报找不到文件。2.2 3893 张图的分布检查别急着训练先做三件事拿到数据集第一反应不应该是直接yolo train而是先确认三件事类别是否平衡、图像尺寸是否统一、标签有没有越界或空文件。3893 张听起来不少但如果glove有 3500 张、bare_hand只有 393 张训出来的模型会对徒手严重漏检。我一般会写个脚本统计每个类别的实例数和图像数import os from collections import Counter label_dir ./glove_barehand_dataset/labels/train counter Counter() empty_files 0 for fname in os.listdir(label_dir): if not fname.endswith(.txt): continue path os.path.join(label_dir, fname) with open(path, r) as f: lines [l.strip() for l in f if l.strip()] if not lines: empty_files 1 continue for line in lines: cls_id int(line.split()[0]) counter[cls_id] 1 print(类别实例数:, dict(counter)) print(空标签文件数:, empty_files)逻辑说明遍历标签目录统计每个class_id出现的总次数同时记录空标签文件数量。参数说明label_dir换成你实际的标签路径如果空文件占比超过 5%说明有大量背景图或漏标需要人工复查。类别实例数差距超过 3:1 就要考虑过采样、加权损失或补充数据。这一步花十分钟能省掉后面几小时的无效训练。3. 用 YOLOv8 跑通训练环境、命令与关键参数3.1 环境配置Anaconda 建环境到 ultralytics 安装热词里「yolov8训练自己的数据集」「yolo环境配置」「yolo v8 anaconda环境配置要求」都是高频检索说明很多人卡在第一步。我一般用 conda 建一个干净环境避免和系统里的 torch 版本打架conda create -n yolo_glove python3.10 -y conda activate yolo_glove pip install ultralytics逻辑说明ultralytics包会自动拉取匹配的 PyTorch 和 CUDA 依赖。参数说明Python 选 3.10 是因为它在 ultralytics 和常见 CUDA 版本之间兼容性最稳如果你有 NVIDIA 显卡并且想用 GPU 训练装完后跑python -c import torch; print(torch.cuda.is_available())确认输出True。如果输出False要么是显卡驱动太旧要么是装成了 CPU 版 torch需要去 PyTorch 官网按 CUDA 版本重新装。3.2 训练命令与参数imgsz、batch、epochs 怎么定环境好了之后一条命令就能启动训练。但参数不能瞎填尤其是imgsz和batch直接决定显存占用和手部小目标的检出率yolo detect train \ data./glove_barehand_dataset/data.yaml \ modelyolov8n.pt \ imgsz640 \ epochs100 \ batch16 \ patience20 \ project./runs/glove \ nameexp1逻辑说明modelyolov8n.pt用的是 nano 版本适合先跑通流程imgsz640是 YOLOv8 的默认输入尺寸手部目标如果普遍偏小可以提到 960 或 1280但显存占用会明显上升。参数说明epochs100配合patience20表示 20 轮验证指标不提升就早停避免过拟合batch16在 8GB 显存上跑 640 尺寸基本安全如果报 OOM 就降到 8 或 4。project和name控制输出目录方便多次实验对比。训练过程中重点看mAP50和mAP50-95两个指标。如果glove的 AP 很高但bare_hand很低大概率是类别不平衡可以在训练时加cls0.8提高分类损失权重或者对bare_hand做复制过采样。3.3 推理验证用测试图看漏检和误检训练完别只看指标拿几张实际场景图跑推理肉眼确认yolo detect predict \ model./runs/glove/exp1/weights/best.pt \ source./glove_barehand_dataset/images/test \ conf0.25 \ saveTrue逻辑说明conf0.25是置信度阈值低于这个值的检测框会被过滤。参数说明如果发现漏检多把conf降到 0.1 试试如果误检多提到 0.4 或 0.5。输出图默认保存在runs/detect/predict下。这一步能暴露指标看不出的问题——比如模型把白色袖口误判成手套或者把远处的小手直接漏掉。4. 避坑与排查标注、训练、推理里最容易翻车的 5 个点4.1 现象训练 loss 正常下降但 mAP 一直是 0原因标签文件里的class_id从 1 开始编号而 YOLO 要求从 0 开始。很多标注工具导出时默认 1-based直接拿来训练就会出现类别索引越界模型输出全错。解决打开任意标签文件确认第一列是不是 0 和 1如果是 1 和 2写个脚本把所有class_id减 1。4.2 现象验证集指标很好实际推理漏检严重原因训练集和验证集来自同一批视频的相邻帧画面高度相似模型相当于在「背答案」。解决按视频来源或时间段划分 train/val而不是随机抽帧。如果数据集已经混好了至少确保验证集里有不同光照、不同背景的图。4.3 现象训练到一半报 CUDA out of memory原因batch或imgsz设太大或者workers开太多导致内存泄漏。解决先把batch减半再不行就把imgsz从 640 降到 512。另外workers4在 Windows 上容易出问题可以设成 0 用主进程加载数据。4.4 现象手套和徒手两类框大量重叠、互相误判原因标注时同一只手被两个人分别标成了两类或者半指手套的边界规则没统一。解决抽检 100 张训练图把两类框重叠度超过 0.5 的样本挑出来重新裁定类别。这个血泪经验告诉我数据集的类别一致性比数量重要得多。4.5 现象推理时手部小目标全部漏检原因imgsz640下如果原图里手只占几十个像素缩放后特征几乎消失。解决提高推理分辨率到 1280或者用切片推理SAHI把大图切块检测。另外可以在训练时加mosaic1.0增强小目标样本的曝光度。5. 进阶技巧用验证集反推标注质量与模型上限训练跑通之后真正决定这个方案能不能落地的是标注质量。我习惯在验证集上做一件事把模型预测置信度在 0.3~0.5 之间的框全部导出来人工看一遍。这些「模棱两可」的样本往往对应标注边界不清的手套或徒手修正它们对 mAP 的提升比加数据更明显。具体做法是在predict时加save_txtTrue和save_confTrue然后按置信度排序筛选yolo detect predict \ model./runs/glove/exp1/weights/best.pt \ source./glove_barehand_dataset/images/val \ conf0.3 \ save_txtTrue \ save_confTrue逻辑说明save_txt会把每个预测框按 YOLO 格式写到 txt 里save_conf会在每行末尾追加置信度。参数说明拿到这些 txt 后用脚本筛出置信度在 0.3~0.5 的行对应回原图人工复核。如果发现大量「模型觉得像手套但标的是徒手」的样本说明标注规则需要细化到「手套覆盖面积占比」这种可量化标准。另一个技巧是用yolo detect val单独跑验证并输出混淆矩阵yolo detect val \ model./runs/glove/exp1/weights/best.pt \ data./glove_barehand_dataset/data.yaml \ plotsTrue混淆矩阵能直接告诉你glove被误判成bare_hand的比例。如果这个比例超过 15%别急着调模型先回去查标注。我自己的习惯是每次准备加数据或换模型之前先花半小时看混淆矩阵和低置信度预测往往能发现比调参更值得修的问题。希望帮到你。本文还有配套的精品资源点击获取