新闻详情

新闻详情

首页 / 资讯中心 / 详情

16300张打哈欠检测数据集:双格式标签与YOLOv8训练实战

发布时间:2026/9/28 16:50:04来源:尧图网络
16300张打哈欠检测数据集:双格式标签与YOLOv8训练实战
简介本资源为面向YOLO系列目标检测算法的打哈欠行为识别数据集适用于疲劳驾驶监测、课堂专注度分析等场景适合具备一定深度学习基础、需要快速开展模型训练与验证的开发者与研究人员。压缩包共2000个文件以xml标注文件为主同时提供YOLO格式txt与VOC格式xml两套标签分别存放于独立文件夹并附带data.yaml配置文件可直接适配yolov5、yolov8、yolov9、yolov7、yolov10及yolo11等主流版本。数据集已按训练与验证需求划分完毕图像总量达16300张涵盖不打哈欠与打哈欠两类目标标注坐标采用归一化中心点与宽高比例便于直接读取训练。目前已有236人学习下载读者可借助该数据集完成从数据加载、模型微调到精度评估的完整流程快速验证打哈欠检测方案节省自行采集与标注的时间成本。1. 打哈欠检测数据集16300 张图带双格式标签为什么它值得先跑一遍疲劳驾驶预警里打哈欠识别是个高频刚需场景但真正动手时卡住大多数人的不是模型结构而是数据。网上能找到的公开集要么只有几百张、类别不均衡要么标签格式单一想换到 YOLOv8 还得自己写转换脚本。这份 16300 张图像的打哈欠数据集直接把「不打哈欠 / 打哈欠」两类样本连同 YOLO 格式和 VOC 格式两套标签一起打包还附带了划分好的 data.yaml省掉了从零标注和格式转换这两段最耗时的活。它适合三类人一是做疲劳检测、驾驶行为分析的产品和算法同学需要一个能直接开训的基线数据二是刚接触 YOLO 系列、想拿一个真实二分类检测任务练手的新手三是已经在用 YOLOv5/v8/v9/v7/v10/YOLO11 任意一个版本想快速验证自己训练管线是否跑通的老手。数据集本身不绑定某个具体版本标签是标准 YOLO txt 加 VOC xml 双份配置文件也备好了拿到手改个路径就能开跑。下面按「先看清结构、再动手训练、最后避坑」的顺序拆开讲。2. 数据集结构与双格式标签先搞懂目录再动手2.1 目录布局与 data.yaml 的字段含义拿到压缩包解压后常见的目录组织是这样一个 images 文件夹放全部图像一个 labels 文件夹放 YOLO 格式的 txt另外单独一个 VOC 文件夹放 xml。data.yaml 里通常包含 train、val、nc、names 四个关键字段。nc 是类别数这里是 2names 是类别名列表顺序必须和标签里的 class 索引严格对应0 对应「不打哈欠」1 对应「打哈欠」一旦顺序写反模型学出来的语义就整个颠倒。# data.yaml 典型结构路径按自己解压位置改 train: ../datasets/yawn/images/train # 训练集图像目录 val: ../datasets/yawn/images/val # 验证集图像目录 nc: 2 # 类别数量不打哈欠、打哈欠 names: # 索引0和1必须与标签一致 0: no_yawn 1: yawn逻辑说明YOLO 训练时只读 train/val 指向的图像目录标签目录默认由图像路径把images替换成labels推导出来所以图像和标签的文件名必须一一对应img_016_10568.jpg对应img_016_10568.txt。参数上nc 写错会导致训练直接报维度不匹配names 顺序写反不会报错但推理结果会整体反义这是最隐蔽的坑之一。2.2 YOLO txt 与 VOC xml 的坐标差异两种格式描述的是同一个框但表达方式完全不同。YOLO 用归一化中心点加宽高VOC 用左上角和右下角的绝对像素坐标。理解这个差异才能在需要时自己写转换。# YOLO 格式class x_center y_center width height全部归一化到 0~1 1 0.4821 0.5310 0.2140 0.3025 # VOC 格式xmin ymin xmax ymax绝对像素 object nameyawn/name bndbox xmin312/xminymin268/yminxmax498/xmaxymax452/ymax /bndbox /object逻辑说明YOLO 的 x_center、y_center 是框中心相对整图宽高的比例width、height 也是相对比例所以换分辨率不用改标签VOC 是绝对坐标换分辨率就得重算。参数上归一化值范围是 0 到 1如果发现 txt 里出现大于 1 的数说明这份标签没归一化直接喂给 YOLO 会训练发散。常见做法是写个脚本把 VOC 批量转 YOLO转换公式是x_center (xmin xmax) / 2 / W其余同理。2.3 划分好的 train/val 怎么核对数据集号称已经划分好但接手后第一件事仍是核对避免训练集和验证集出现同一张图的重复样本那会让验证指标虚高。用下面这段脚本快速统计两边数量和类别分布。import os from collections import Counter def count_labels(label_dir): counter Counter() for f in os.listdir(label_dir): if not f.endswith(.txt): continue with open(os.path.join(label_dir, f)) as fp: for line in fp: cls line.split()[0] # 每行第一个字段是类别索引 counter[cls] 1 return counter print(train:, count_labels(labels/train)) print(val: , count_labels(labels/val))逻辑说明这段脚本遍历标签目录统计每个类别出现的框数用来判断两类是否均衡。参数上如果某一类框数不到另一类的三分之一训练时就要考虑加权重或补样本。跑完对比 train 和 val 的分布如果差异过大说明划分有偏需要重新分层抽样。3. 用 YOLOv8 跑通训练从环境到第一条曲线3.1 环境准备与依赖版本YOLOv8 走 ultralytics 包装起来最省事。建议单独建虚拟环境避免和系统里的 torch 版本打架。CUDA 版本要和显卡驱动匹配这一步翻车的人最多。conda create -n yawn python3.10 -y conda activate yawn # 按自己 CUDA 版本装 torch下面以 cu118 为例 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics yolo checks # 检查环境和 GPU 是否识别正常逻辑说明yolo checks会打印 torch 版本、CUDA 是否可用、GPU 型号是排查环境问题的第一道关。参数上python 建议 3.9 到 3.11太新可能没有对应 wheeltorch 的 index-url 要和本机 CUDA 对齐装错版本会出现「torch.cuda.is_available() 返回 False」的经典问题。3.2 启动训练与关键超参配置文件路径改好后一条命令就能开训。第一次跑建议先用小 epoch 验证管线通不通再拉长训练。yolo detect train \ datadatasets/yawn/data.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ lr00.01 \ patience20 \ projectruns/yawn \ nameexp1逻辑说明model 用 yolov8n.pt 是官方预训练权重小模型先跑通再换 s/m/l。epochs 是训练轮数imgsz 是输入分辨率batch 受显存限制显存不够就往下调。lr0 是初始学习率0.01 是常见起点。patience 是早停耐心值20 轮指标不涨就停省时间。project 和 name 决定结果保存路径方便多次实验对比。3.3 看训练曲线判断是否正常训练启动后重点盯三个量box_loss、cls_loss、mAP50。box_loss 管框位置cls_loss 管分类两个都该稳步下降。mAP50 是 IoU 阈值 0.5 下的平均精度是判断模型好坏的直接指标。# 训练结束后在验证集上单独评估 yolo detect val \ modelruns/yawn/exp1/weights/best.pt \ datadatasets/yawn/data.yaml \ imgsz640逻辑说明val 命令会输出每类的 precision、recall、mAP重点看两类是否均衡。参数上如果「打哈欠」类 recall 明显低于「不打哈欠」说明正样本偏难或偏少可以调数据增强或加样本。常见做法是训练中途用 tensorboard 看曲线tensorboard --logdir runs/yawn就能在浏览器里看。4. 换到 YOLOv5/v7/v9/v10/YOLO11标签复用与配置差异4.1 标签通用性为什么一套 txt 能喂多个版本YOLO 系列从 v5 到 YOLO11检测任务的标签格式一直是class x_center y_center width height归一化五元组没有变过。这意味着这份数据集的 txt 标签可以直接被任意版本读取不需要转换。差异只在配置文件字段名和训练脚本入口上。版本配置字段训练入口备注YOLOv5nc / namestrain.py需 clone 仓库YOLOv7nc / namestrain.py配置结构接近 v5YOLOv8nc / namesyolo detect trainultralytics 统一入口YOLOv9nc / namestrain.py官方仓库脚本YOLOv10nc / namesyolo detect train兼容 ultralytics 风格YOLO11nc / namesyolo detect train同上逻辑说明字段名基本一致所以 data.yaml 大多能直接复用。参数上v5 和 v7 的 data.yaml 里 train/val 常写成 txt 列表文件路径而不是目录这点要注意区分写错会报「找不到文件」。4.2 从 v8 迁到 v5 的实操改动如果团队历史项目是 v5把这份数据接进去只需改两处data.yaml 的路径写法以及训练命令。# YOLOv5 训练data.yaml 里 train/val 指向图像目录或 txt 列表 python train.py \ --data datasets/yawn/data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch-size 16 \ --epochs 100逻辑说明v5 用 argparse 传参和 v8 的 keyvalue 风格不同。参数上--img 对应 v8 的 imgsz--batch-size 对应 batch。常见做法是先用 v5s 小模型验证数据没问题再换大模型。如果 v5 报标签越界多半是 txt 里有坐标大于 1回到 2.2 节核对归一化。4.3 多版本对比时的公平性想横向比 v8 和 YOLO11 谁在这份数据上更强必须控制变量同一份 train/val 划分、同样 imgsz、同样 epoch、同样 batch。否则比出来的差异可能来自超参而非模型。# 统一超参跑两个版本只改 model yolo detect train datadatasets/yawn/data.yaml modelyolov8n.pt epochs100 imgsz640 batch16 namev8_base yolo detect train datadatasets/yawn/data.yaml modelyolo11n.pt epochs100 imgsz640 batch16 namev11_base逻辑说明两条命令除 model 外完全一致结果才有可比性。参数上n 系列是小模型适合快速对比要冲精度再换 s 或 m。跑完对比 runs 下两个目录的 results.csv看 mAP50-95 的差距是否稳定。5. 避坑与排查训练打哈欠检测最容易翻车的五件事5.1 类别索引与 names 顺序对不上现象训练能跑loss 也降但推理时把打哈欠判成不打哈欠或者两类结果整体互换。原因标签里的 class 0/1 和 data.yaml 里 names 的顺序不一致模型学到的语义被颠倒。解决打开任意一个 txt看第一列是 0 还是 1再对照 names 列表确保 0 对应 no_yawn、1 对应 yawn。改完重新训练别指望微调能救回来。5.2 图像与标签文件名不匹配现象训练日志里出现大量「ignoring corrupted image」或某类样本数为 0。原因images 和 labels 目录里文件名对不上比如图像是 .jpg 而标签是 .JPG或者有图像没标签。解决写脚本比对两个目录的文件名集合找出差集。常见做法是统一小写扩展名缺标签的图直接移出训练集别硬塞。5.3 坐标未归一化导致训练发散现象box_loss 一开始就很大且不下降或者直接 NaN。原因txt 里坐标是绝对像素值而非 0 到 1 的比例YOLO 按归一化解析框跑到图外。解决抽查几个 txt若数值大于 1 就是没归一化用 2.2 节的公式批量重算。注意 VOC 转 YOLO 时最容易漏掉除以宽高这一步。5.4 显存不足与 batch 设置现象训练刚启动就 OOM显存溢出。原因batch 或 imgsz 超过显卡容量16300 张图在 640 分辨率下 batch 16 对 8G 显存偏紧。解决先把 batch 降到 8 或 4或把 imgsz 降到 416 试跑。参数上YOLO 支持batch-1自动选但自动值不一定最优手动调更稳。5.5 验证集指标虚高现象val 的 mAP 高得离谱实际推理却很差。原因train 和 val 里有重复或高度相似的图等于变相泄题。解决用图像哈希或文件名比对剔除跨集重复样本。常见做法是划分时按人/场景分组同一段视频抽的帧不要同时进 train 和 val。6. 进阶技巧用这份数据做疲劳检测的落地验证数据跑通只是第一步真正落地要验证模型在连续视频流上的表现。单帧检测打哈欠容易误报比如张嘴说话、大笑都会被判成哈欠。我的习惯是加一个时间窗口做后处理连续 N 帧里检测到打哈欠的比例超过阈值才触发预警这样能压掉大部分瞬时误报。from collections import deque class YawnTracker: def __init__(self, window30, ratio0.6): self.history deque(maxlenwindow) # 滑动窗口帧数 self.ratio ratio # 触发比例阈值 def update(self, is_yawn): self.history.append(1 if is_yawn else 0) if len(self.history) self.history.maxlen: return False return sum(self.history) / len(self.history) self.ratio tracker YawnTracker(window30, ratio0.6) # 每帧推理后调用 tracker.update(检测到打哈欠)逻辑说明window 是观察窗口30 帧在 30fps 下约 1 秒ratio 是窗口内打哈欠帧占比阈值0.6 表示六成帧判定为哈欠才报警。参数上window 太小会抖动太大反应迟钝按实际帧率调。这套后处理不依赖具体 YOLO 版本v8 或 YOLO11 的输出都能接。验证时别只看 mAP要拿一段真实驾驶或模拟视频跑统计误报和漏报。我一般会准备两段素材一段正常说话、一段真实打哈欠分别看触发次数。如果正常说话频繁触发就把 ratio 往上调或加大 window。另外模型对光照和侧脸敏感夜间红外画面和白天可见光画面最好分别验证必要时补对应场景样本再微调。从那以后我每次拿到新数据集都强制先跑一遍类别分布统计和文件名比对再开训。这两步花不了十分钟却能省掉几小时排查 loss 不降的玄学时间。这份打哈欠数据集结构清晰、双格式标签齐全拿来当疲劳检测的起点很合适按上面的步骤走一遍基本能当天看到第一条训练曲线。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

速腾RS-LiDAR-16 ROS配置避坑指南:IP设置与Rviz点云调试 2026/9/28 17:40:07

速腾RS-LiDAR-16 ROS配置避坑指南:IP设置与Rviz点云调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
历史复杂SQL治理:AI语义理解与工具改写实战复盘 2026/9/28 17:40:07

历史复杂SQL治理:AI语义理解与工具改写实战复盘

接手过一个跑了八年的报表系统,里面的 SQL 是我见过最壮观的东西。单条语句一千两百行,FROM 子句里嵌着四层子查询,同一个订单表被 JOIN 了七次,没有一行注释。你问当初写这段代码的人为什么要这么写,他早离职了。这种…

阅读更多 →
无脚本工业机器人:大模型驱动的实时感知-决策-执行闭环 2026/9/28 17:40:07

无脚本工业机器人:大模型驱动的实时感知-决策-执行闭环

1. 这不是科幻片,是正在发生的现场直播“无脚本、零遥控、数百万人围观”——这十个字不是标题党,而是过去三个月里我蹲守在多个工业机器人测试现场、拆解了二十多份实时日志、反复回放了上百小时直播录像后,确认的真实状态。它背后没有神秘算…

阅读更多 →
富斯FS-i6刷10通道固件实战:从驱动安装到救砖全指南 2026/9/28 17:40:07

富斯FS-i6刷10通道固件实战:从驱动安装到救砖全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
机器人自主决策的三层架构:感知-世界模型-执行 2026/9/28 17:40:07

机器人自主决策的三层架构:感知-世界模型-执行

1. 这不是“AI遥控器”,而是机器人第一次真正睁开了自己的眼睛“无脚本、零遥控、数百万人围观”——这行标题刚刷出来时,我正调试一台工业机械臂的视觉伺服模块,手边还摊着三份不同厂商的ROS2行为树配置文档。看到这句话的第一反应不是兴奋&…

阅读更多 →
AI写图形库:90%代码靠AI,10%的坑如何用测试与审查排掉 2026/9/28 17:40:00

AI写图形库:90%代码靠AI,10%的坑如何用测试与审查排掉

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉