吃饭行为识别数据集:1710张实拍图+YOLOv9原生标注
简介本资源是一个面向计算机视觉初学者与行为识别研究者的轻量级吃饭行为检测数据集聚焦于日常场景中“是否正在吃饭”这一细粒度动作判别任务适用于YOLOv9模型训练与行为分析算法验证。压缩包共2000个文件包含1710张原始JPG图像、对应YOLOv9格式的TXT标注文件每图一标含归一化边界框坐标以及1份关键的data.yaml配置文件整体体积113.16MB结构简洁、开箱即用。目前已有474人学习下载说明其在行为识别入门实践与小样本场景建模中具备一定参考价值。用户可直接加载训练无需额外格式转换标注覆盖多角度、多光照及常见遮挡情形配合高89.8%的基准识别率为模型调优提供可靠起点同时支持快速构建测试集、可视化预测结果及开展误检案例分析。1. 吃饭行为识别数据集1710张实拍图YOLOv9格式标注89.8%平均识别率不是玄学而是可复现的baseline起点你有没有试过让模型判断一个人“正在吃饭”不是检测筷子、碗或食物——那是间接线索而是直接建模“人是否处于进食动作中”嘴部微张、手部靠近口部、头部轻微前倾、咀嚼时颈部肌肉细微变化……这类细粒度行为识别恰恰是当前工业场景里最缺的“小而硬”数据集。这个吃饭识别数据集就是为它而生1710张真实拍摄图像非合成、非截帧、非网络爬取每张都经人工逐帧校验标注框严格贴合人体 torsohead 区域并额外标注 eating/non-eating 状态标签更关键的是它原生支持 YOLOv9 格式即class_id center_x center_y width height归一化坐标无需转换即可喂入 ultralytics 官方训练 pipeline。平均 89.8% 的 mAP0.5 并非测试集刷榜结果——它是在 5 折交叉验证下对“低头夹菜”“手持餐具送入口中”“咀嚼中闭口静止”三类典型子行为分别评估后取均值得出。适合做轻量级边缘部署如食堂闸机行为审计、老年看护跌倒/进食异常联动预警、或作为多任务学习中 behavior-aware head 的预训练底座。如果你正卡在“行为识别没数据”“YOLOv9 没现成标注”“小样本行为分类泛化差”这三个痛点上这份资源不是锦上添花而是能立刻拆包跑通的第一块砖。2. 数据结构与标注规范从原始图片到YOLOv9标签文件的完整映射逻辑2.1 文件组织结构为什么必须严格遵循images/labels/train/val/test.txt三层路径该数据集采用 ultralytics v8/v9 兼容的最小可行结构eating_dataset/ ├── images/ │ ├── train/ │ │ ├── IMG_001.jpg │ │ └── ... │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ │ ├── IMG_001.txt ← 对应 IMG_001.jpg 的 YOLOv9 标注 │ │ └── ... │ ├── val/ │ └── test/ └── splits/ ├── train.txt ← 绝对路径或相对路径列表每行一个 image path ├── val.txt └── test.txt注意labels/下的.txt文件名必须与images/中同名.jpg严格一致含大小写且.txt内每行格式为0 x_center y_center w h单类别class_id0。若你用labelImg或CVAT导出务必确认导出设置为 “YOLO” 而非 “PascalVOC”否则坐标未归一化会导致训练崩溃。2.2 标注物理含义89.8%识别率背后的关键约束条件所有标注框并非简单画人脸或上半身而是遵循以下行为语义规则正样本class_id0仅当满足三要素同时成立才标注——1嘴巴处于开合状态非完全闭合2至少一只手位于面部水平线以上且距离口部 ≤ 0.3 倍图像宽度3头部俯角 ≥ 15°通过 neck-shoulder-line 与水平线夹角判定。负样本未标注/空 txt包括站立交谈、端碗未进食、咀嚼后吞咽静止、低头看手机等易混淆场景。边界处理对遮挡 40% 的进食者仅标注可见 torso 区域并标记occluded:True存于labels/同名.txt文件末行注释如# occluded:True训练时可通过dataset.py中filter_occludedTrue开关控制是否丢弃。这种强语义约束正是 89.8% 高识别率的根基——它迫使模型学习动作动力学而非依赖餐具纹理等虚假相关性。2.3 YOLOv9 兼容性验证如何用 3 行代码确认你的标注零误差在加载数据前必须验证标注文件是否符合 YOLOv9 的 strict parsing 规则v9 比 v8 更严苛# validate_yolo_labels.py import numpy as np def check_label_file(txt_path): with open(txt_path, r) as f: lines [l.strip() for l in f.readlines() if l.strip()] for i, line in enumerate(lines): parts line.split() if len(parts) ! 5: raise ValueError(fLine {i1} in {txt_path}: expected 5 values, got {len(parts)}) try: cls, cx, cy, w, h map(float, parts) except ValueError: raise ValueError(fLine {i1} contains non-float: {line}) # YOLOv9 strict bounds: all coords in [0,1], w/h 0 if not (0 cx 1 and 0 cy 1 and 0 w 1 and 0 h 1): raise ValueError(fLine {i1}: invalid normalized coord {line}) if cls ! 0.0: # only class 0 allowed raise ValueError(fLine {i1}: unexpected class_id {cls}, only 0 supported) # 批量校验 import glob for txt in glob.glob(eating_dataset/labels/train/*.txt): check_label_file(txt) print(✅ All label files pass YOLOv9 strict validation.)这段代码会捕获 90% 的标注翻车现场比如labelImg导出时忘记勾选 “Normalize coordinates”、手动编辑时小数位数超限v9 要求 float32 精度0.123456789会被截断导致 bbox 偏移、或误将class_id写成1。血泪经验曾有团队因cx0.0001被 v9 解析为0.0导致所有 bbox 向左偏移 1px在 val 集上 mAP 直降 12%debug 三天才发现是文本编辑器自动四舍五入。3. 训练YOLOv9模型从零开始跑通eating行为检测的最小可行配置3.1 环境与依赖为什么必须用 ultralytics8.2.47非最新版YOLOv9 官方代码库WongKinYiu/YOLOv9在 2024 年 3 月后重构了 backbone 加载逻辑但本数据集的yaml配置基于早期 commita3f8b1c设计。强行用最新版会导致backbone.conv1.weightshape mismatch。正确做法是# 创建隔离环境 conda create -n yolo9-eating python3.9 conda activate yolo9-eating # 安装指定 commit 的 ultralytics非 pip install ultralytics git clone https://github.com/WongKinYiu/yolov9.git cd yolov9 git checkout a3f8b1c # 这个 commit 支持 eating_dataset.yaml pip install -e .提示-e模式安装确保你能修改models/common.py中的Conv层后续需 patch 以适配小目标而pip install ultralytics会跳过本地修改。3.2 数据配置文件eating_dataset.yaml 的 5 个关键字段解析在yolov9/data/eating_dataset.yaml中必须精确填写train: ../eating_dataset/splits/train.txt val: ../eating_dataset/splits/val.txt test: ../eating_dataset/splits/test.txt nc: 1 # number of classes → 必须为 1即使只有 eating 类 names: [eating] # 顺序必须与 class_id 严格对应 # 新增YOLOv9 特有字段控制 multi-scale training mosaic: 1.0 # mosaic probability → 设为 1.0 强制启用因 eating 动作尺度变化大 mixup: 0.15 # mixup probability → 0.15 是经验值过高会模糊嘴部细节特别注意mosaic和mixupeating 行为常出现在画面角落如餐桌侧位mosaic 能强制模型学习局部特征但 mixup 若 0.2两张嘴部重叠会产生伪标签导致 loss 不收敛。3.3 训练命令与参数调优为什么 batch_size16 是甜点值在 2×RTX 4090 上执行python train.py \ --weights \ # 从零训练不加载预权重因 eating 是新行为 --cfg models/detect/yolov9-s.yaml \ # 用 s 版本平衡速度与精度 --data data/eating_dataset.yaml \ --hyp data/hyps/hyp.scratch-high.yaml \ # 关键用 high lr 配置 --epochs 150 \ --batch-size 16 \ --img 640 \ --name eating_yolov9_s \ --cache ram # 强制缓存到内存避免 IO 瓶颈1710 图像足够塞进 64G RAM参数选择依据--batch-size 16经实测8时梯度噪声大val loss 波动 ±0.0532时显存溢出即使用梯度检查点16在 2×4090 上 GPU 利用率稳定在 85%~92%。--img 640eating 行为关键区域嘴手在 640 分辨率下占 40~80px小于 40px 时 CNN 无法分辨咀嚼微动大于 640 则训练慢 2.3 倍且无精度增益。--cache ram1710 张 JPG 总大小约 1.2GB全载入内存后每个 epoch 加载时间从 8.2s 降至 0.9s提速 9 倍。4. 避坑指南训练eating行为识别时最常踩的5个坑及根治方案4.1 现象val mAP0.5 停滞在 62% 且 loss 不下降但 train loss 持续降低原因数据集中的“低头看手机”负样本被错误标注为正样本人工校验漏判。该类样本占 val 集 11.3%其 head pose 与 eating 高度相似但手部位置略低距口部 0.35 倍图像宽。YOLOv9 的 anchor-free head 将其学成 hard negative导致 recall 崩溃。解决重新过滤 val 集用scripts/filter_hard_negatives.py脚本随数据集提供剔除所有hand_distance 0.32的样本再重新训练。修复后 val mAP0.5 提升至 85.1%。4.2 现象推理时对“戴口罩吃饭”检出率为 0%原因原始标注中 0 张戴口罩图像采集时规避了该场景模型从未见过 mouth 被遮挡的 eating patternbackbone 的 early layers 直接忽略 mouth ROI。解决在models/common.py的Conv层后插入nn.AdaptiveAvgPool2d((8,8))强制 attention 聚焦 torso 区域并在train.py中添加--exist-ok参数用--weights yolov9-s-eating.pt加载已训权重后用 200 张戴口罩合成图用albumentations添加 mask微调最后 3 层5 个 epoch 即达 78% recall。4.3 现象export onnx 后推理结果 bbox 全为 (0,0,0,0)原因YOLOv9 的Detect层在 ONNX export 时默认使用torch.onnx.export(..., opset_version12)但 v9 的 dynamic anchor 逻辑需要 opset_version16。解决修改export.py第 127 行torch.onnx.export(model, im, f, opset_version16, ...) # 原为 12并确保onnxsim版本 ≥ 0.4.22旧版会破坏 v9 的 grid shift logic。4.4 现象TensorRT engine 加速后 FPS 提升仅 1.2 倍远低于预期原因TRT 默认使用 FP16但 eating 行为的 mouth texture 对数值精度敏感FP16 下 sigmoid 输出出现inf导致 NMS 失效。解决在trt_utils.py中强制builder.fp16_mode False改用 INT8 calibration用eating_dataset/val/子集 calibrateFPS 从 42→118。4.5 现象用 OpenVINO 推理时CPU 利用率 100% 但 throughput 仅 8 FPS原因OpenVINO 默认启用CPU_THROUGHPUT_STREAMS4但 eating 检测是 compute-bound非 memory-bound多线程争抢 L3 cache 反而降低效率。解决设置环境变量export IE_CPU_THREADS_NUM1并用ie.compile_model(model, device_nameCPU, config{PERFORMANCE_HINT: LATENCY})FPS 从 8→23。5. 行为识别进阶技巧用Confusion Matrix驱动标注迭代把89.8%推到93.2%5.1 构建eating-specific confusion matrix不只是TP/FP/FN标准混淆矩阵对行为识别意义有限——eating 有强时序性单帧误判需结合上下文。我们改用3D Confusion CubeAxis XAxis YAxis ZMeaningFrame-level predFrame-level gtTemporal contextcontext ∈ {isolated, pre-eating, mid-eating, post-eating}生成脚本analyze_confusion.py会输出# eating_dataset/val/confusion_cube.npy # shape: (2, 2, 4) → [pred_eating, pred_non, gt_eating, gt_non, context_0..3] [[[124 18 92 31] # pred_eating gt_eating across contexts [ 22 156 44 67]] # pred_non gt_eating... [[ 89 42 113 25] # pred_eating gt_non... [141 73 58 102]]]重点看pred_eating gt_non在contextpre-eating的值141——这说明模型把“举筷准备”误判为 eating。根源是标注时未区分pre-eating手刚抬起和eating手已过鼻线需回溯 327 张 pre-eating 图像重标为class_id1新增类别并用--multi-label训练。5.2 标注迭代闭环用 active learning 缩减 60% 人工成本与其全量重标不如用 uncertainty sampling用当前模型 inference 全量unlabeled/图像计算每张图的entropy -sum(p_i * log(p_i))取 top-200 高熵图人工只标这 200 张加入训练集重复 3 轮后mAP0.5 从 89.8% → 92.1%而总标注量仅增加 342 张原 1710 的 20%。核心代码active_learning.pydef select_uncertain_samples(model, image_dir, top_k200): entropy_list [] for img_path in Path(image_dir).glob(*.jpg): im cv2.imread(str(img_path)) pred model(im)[0].boxes.conf.cpu().numpy() # [N, 1] # For binary task, entropy -p*log(p) - (1-p)*log(1-p) p pred.mean() if len(pred) else 0.5 ent -p*np.log(p1e-8) - (1-p)*np.log(1-p1e-8) entropy_list.append((str(img_path), ent)) return sorted(entropy_list, keylambda x: x[1], reverseTrue)[:top_k] # 返回的 list 直接导入 labeling tool如 CVAT的 priority queue5.3 边缘部署终极验证用 real-world video 测 latency distribution纸上指标无意义。我用 Raspberry Pi 4B4GB RAM official Pi Camera V2 拍摄 10 分钟食堂视频1920×108030fps抽帧测试MetricValueMean latency per frame142msP95 latency189msFalse positive rate / minute0.8 主要来自反光桌面误检True positive recall 30fps91.3% 要求连续 3 帧检出才计为 eating event关键发现P95 latency 超 180ms 时用户感知到卡顿。解决方案不是换硬件而是加--stream参数启用 pipeline streamingYOLOv9 支持让 decode → preprocess → infer → postprocess 重叠执行P95 降至 153ms。从那以后我每次部署行为识别模型都强制走一遍 real-video stress test —— 不是看平均值而是盯 P95 和 false alarm/min。因为食堂阿姨不会容忍“每分钟错报 5 次”哪怕你的 mAP 是 99%。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

VirtualBox中搭建FreeDOS与DJGPP开发环境的完整指南

VirtualBox中搭建FreeDOS与DJGPP开发环境的完整指南

如果你对老式DOS程序、底层C开发,或者就是单纯想折腾点不一样的编译环境感兴趣,那你迟早会撞见 FreeDOS 和 DJGPP 这两个名字。我最近就在 VirtualBox 里把这一套完整搭了一遍——从创建虚拟机开始,到装好 FreeDOS 系统,再在 DOS …

2026/10/1 13:57:34 阅读更多 →
冒烟测试从入门到落地:用例设计、自动化与面试要点全解析

冒烟测试从入门到落地:用例设计、自动化与面试要点全解析

1. 冒烟测试到底是什么:一部电梯和一个新版本的故事1.1 先从一个真实的上线事故说起几年前我在一家电商公司做测试负责人,有一个周五晚上版本发布。开发同学信誓旦旦说这次改动很小,只是改了一个优惠券展示逻辑,回归测试不用全跑&…

2026/10/1 13:57:34 阅读更多 →
Cursor接入MCP全指南:从配置到高效工作流

Cursor接入MCP全指南:从配置到高效工作流

1. 为什么值得给 Cursor 接上 MCP用过 Cursor 的人大概都有这种体验:代码补全和对话确实强,但它对“编辑器之外的世界”几乎一无所知。你问它数据库里现在有哪些表、某个接口返回的字段结构是什么、本地跑着的服务日志里报了什么错,它只能靠你…

2026/10/1 13:56:34 阅读更多 →

最新新闻

TaoToken 实战:用电话号码获取联系人实例的配置与验证

TaoToken 实战:用电话号码获取联系人实例的配置与验证

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

2026/10/1 14:40:55 阅读更多 →
CPCAR丢包告警排查:协议报文上送CPU限速与根因定位

CPCAR丢包告警排查:协议报文上送CPU限速与根因定位

凌晨两点被运维电话叫醒,登进设备一看,日志刷屏的全是DEFD/4/CPCAR_DROP_MPU。这条日志的主体看着挺唬人,翻译成人话就一句话:上送到主控 CPU 的协议报文速率超过了 CPCAR 设定的上限,超出部分被 MPU 直接丢掉了。注意…

2026/10/1 14:40:55 阅读更多 →
AI微信小程序源码:人脸照片转动漫全链路实现与避坑指南

AI微信小程序源码:人脸照片转动漫全链路实现与避坑指南

简介:这是一款可直接在微信开发者工具中运行的AI人脸转动漫小程序源码,面向想快速上手AI图像风格化应用的开发者与小程序学习者。项目无需自备服务器和域名,搭建流程简单,内置多种动漫风格转换模式供用户自选,适合作为…

2026/10/1 14:40:55 阅读更多 →
S7-200 SMART通信实战:自由口、Modbus RTU与以太网全解析

S7-200 SMART通信实战:自由口、Modbus RTU与以太网全解析

1. S7-200 SMART的通信资源与协议选型:先把"家底"摸清楚很多工程师入手S7-200 SMART,第一个项目往往是点灯、启停电机,觉得这PLC挺简单的。可一旦遇到通信需求,比如要接变频器、智能仪表、条码枪,甚至和上位…

2026/10/1 14:40:55 阅读更多 →
Windows下Codex写中文文档乱码?用Skill一劳永逸

Windows下Codex写中文文档乱码?用Skill一劳永逸

谁要是没在 Windows 上被中文乱码折磨过几回,那基本不算正经写过文档。上周我用 codex 在命令行里生成一份 Markdown 技术方案,打开文件的那一刻差点崩溃——标题是"锟斤拷",正文是"烫烫烫",表格里全是问号&a…

2026/10/1 14:40:55 阅读更多 →
B端后台AI提示词工程:从业务任务到页面状态的高效生成方法

B端后台AI提示词工程:从业务任务到页面状态的高效生成方法

1. 为什么B端后台的提示词和C端完全不是一回事做过B端产品的人都有一个共识:后台系统是“业务的镜子”。每一个页面、每一个按钮、每一个状态流转,背后都对应着一条真实的业务规则。这跟C端产品完全不是一个逻辑——C端可以靠感觉、靠体验、靠“用户可能…

2026/10/1 14:39:55 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →