猪行为识别数据集实战:1272张图与YOLOv8训练全解析

发布时间:2026/10/5 4:02:18

猪行为识别数据集实战:1272张图与YOLOv8训练全解析 简介这份猪行为识别数据集面向从事智慧养殖、动物行为分析与计算机视觉的开发者与研究人员用于解决猪圈场景下猪只日常行为自动分类的问题。数据集可识别喝、吃、睡觉、站立等典型行为平均正确识别率约92.6%适合目标检测与行为分类模型的训练、微调及算法验证。资源包共1275个文件包含1272张jpg图像与3个json标注文件压缩包约85.57MB图像覆盖多种猪圈实拍场景json采用coco格式可直接对接主流检测框架省去自行标注与格式转换的环节。目前已有214人学习下载具备一定参考热度。借助该数据集读者可快速搭建行为识别基线模型对比不同网络结构在真实养殖环境下的表现并据此优化数据增强与类别平衡策略为后续落地部署提供可靠的数据支撑。1. 猪行为识别数据集1272 张图、92.6% 准确率这份资源到底能不能直接上手养殖场里判断一头猪是在吃料、喝水、睡觉还是站着靠人盯监控基本不现实——一个栏舍几十头猪24 小时轮班看人力成本比设备还贵。这份猪行为识别数据集就是冲着这个场景来的1272 张猪圈实拍图片标注了喝、吃、睡觉、站立等行为类别平均正确识别率 92.6%标注格式是 coco json。如果你正在做 yolov8 训练自己的数据集这类落地任务或者想找一个真实养殖场景的行为识别数据集练手这份资源的价值在于它省掉了最耗时的采集和标注环节。它适合两类人一是做智慧养殖、动物行为分析的算法工程师二是想拿真实场景数据跑通检测行为分类流程的开发者。但 92.6% 这个数字有前提后面会拆开讲。2. 数据集结构与 coco json 标注先看清手里有什么再动手2.1 文件命名规律与图像来源从项目正文给出的文件名能读出不少信息。像9_1_mp4-10_jpg.rf.b25137884f2311f2a68a044e7069c456.jpg这种命名前缀9_1_mp4大概率是视频编号加帧序号说明图片是从监控视频抽帧来的不是摆拍。rf.后面那串哈希是标注工具导出时自动生成的唯一标识常见于 roboflow 这类平台的导出流程。10_00-1-1-_mp4-48则说明至少有两个视频源9 和 10 开头覆盖了不同时间段或不同栏舍。这个命名规律对训练有实际影响同一视频抽出的帧高度相似如果随机划分训练集和验证集会出现「同一头猪的相邻帧分别落在训练和验证里」的情况验证准确率会虚高。常见做法是按视频编号划分比如 9 开头的做训练、10 开头的做验证这样评估才接近真实泛化能力。2.2 coco json 的字段含义与读取coco json 格式的核心结构是images、annotations、categories三个数组。行为识别数据集和纯目标检测的区别在于类别标签对应的是「行为」而不是「物体」。喝、吃、睡觉、站立这四个类别标注框框的是猪的身体区域类别名描述的是这头猪当前在干什么。用 Python 读取并统计类别分布的代码如下import json from collections import Counter # 加载 coco json 标注文件 with open(annotations.json, r, encodingutf-8) as f: data json.load(f) # 建立 category_id 到类别名的映射 cat_map {c[id]: c[name] for c in data[categories]} print(类别列表:, cat_map) # 统计每个类别的标注框数量 counter Counter(ann[category_id] for ann in data[annotations]) for cid, cnt in counter.items(): print(f{cat_map[cid]}: {cnt} 个标注框) # 统计图片总数和标注框总数 print(图片总数:, len(data[images])) print(标注框总数:, len(data[annotations]))这段代码先建立类别 id 到名称的映射再用 Counter 统计每个类别的框数。跑完你就能看到喝、吃、睡觉、站立四类各有多少样本。如果某一类明显偏少比如「喝」只有几十个框训练时就要考虑过采样或类别权重否则模型会偏向多数类。2.3 标注质量的自检方法拿到 coco json 别急着训练先做两件事。第一用脚本把标注框画回原图肉眼抽查 20 张看框是否贴合猪的身体、类别是否标错。第二检查有没有越界框坐标超出图像宽高和零面积框。越界框在训练时会引发坐标归一化异常零面积框会让损失计算出 NaN。# 检查越界框和零面积框 img_map {img[id]: img for img in data[images]} bad 0 for ann in data[annotations]: img img_map[ann[image_id]] x, y, w, h ann[bbox] if w 0 or h 0: bad 1 print(零面积框:, ann[id]) if x 0 or y 0 or x w img[width] or y h img[height]: bad 1 print(越界框:, ann[id]) print(异常框总数:, bad)bbox字段是[x, y, width, height]格式x、y 是左上角坐标。这段逻辑就是逐框判断面积和边界。异常框数量如果超过总数的 1%建议先清洗再训练不然那 92.6% 的准确率你复现不出来。3. 用 yolov8 训练猪行为识别模型从配置到跑通3.1 环境准备与数据格式转换yolov8 不直接吃 coco json需要转成 yolo 的 txt 格式每行类别 x_center y_center width height坐标归一化到 0-1。转换脚本如下import json import os with open(annotations.json, r, encodingutf-8) as f: data json.load(f) # coco 的 category_id 可能不从 0 开始需要重映射为 0,1,2,3 cats sorted(data[categories], keylambda c: c[id]) cat_id_map {c[id]: i for i, c in enumerate(cats)} img_map {img[id]: img for img in data[images]} os.makedirs(labels, exist_okTrue) for ann in data[annotations]: img img_map[ann[image_id]] W, H img[width], img[height] x, y, w, h ann[bbox] # 转成归一化的中心点坐标和宽高 xc (x w / 2) / W yc (y h / 2) / H nw w / W nh h / H cls cat_id_map[ann[category_id]] name os.path.splitext(img[file_name])[0] .txt with open(os.path.join(labels, name), a) as out: out.write(f{cls} {xc:.6f} {yc:.6f} {nw:.6f} {nh:.6f}\n)关键点在cat_id_mapcoco 的 category_id 经常是 1、2、3、4 而不是 0 起始yolo 要求类别索引从 0 开始连续不重映射会直接报类别越界。归一化用 6 位小数足够精度再高对训练没帮助。3.2 data.yaml 配置与训练参数转换完要写 data.yaml指定训练、验证路径和类别名path: ./pig_behavior train: images/train val: images/val nc: 4 names: [drink, eat, sleep, stand]nc是类别数names顺序必须和转换时的cat_id_map一致否则标签全错。训练命令yolo detect train modelyolov8n.pt datadata.yaml epochs100 imgsz640 batch16选yolov8n是因为 1272 张图属于小数据集大模型容易过拟合。imgsz640是默认值如果原图分辨率远大于 640猪的细节会被压缩可以试 960 但显存要够。batch16在 8G 显存上比较稳爆显存就降到 8。3.3 训练过程要看哪些指标跑起来后重点盯三个box_loss是否稳定下降、mAP50是否在 50 轮后趋于平缓、验证集的precision和recall是否差距过大。如果 recall 明显低于 precision说明漏检多可能是「睡觉」这种姿态变化大的类别样本不够。92.6% 的平均准确率对应到 mAP50 大概在 0.9 上下如果你跑出来只有 0.7先回去查标注质量和数据集划分别急着调参。4. 行为识别的坑从数据划分到类别混淆的排查记录4.1 验证集准确率虚高现象训练完 mAP50 到 0.95换一批新视频测试掉到 0.7。原因随机划分导致同一视频的相邻帧同时进了训练和验证模型记住了背景而不是行为。解决按视频编号划分9 开头进训练、10 开头进验证重跑后验证指标会降但更真实。4.2 「站立」和「吃」互相误判现象模型把低头吃料的猪判成站立。原因这两个行为的身体姿态差异小主要区别在头部位置和朝向而标注框只框了身体头部信息被弱化。解决训练时开mosaic和mixup增强或者把标注框往上扩一点包含头部也可以在推理后加一个姿态后处理规则。4.3 小目标漏检现象远处的猪检测不到。原因1272 张图里猪的尺度差异大yolov8 默认 anchor 对小目标不友好。解决imgsz提到 960或者用yolov8s换更大的输入分辨率代价是推理变慢。4.4 类别不平衡导致「喝」被忽略现象「喝」的识别率明显低于其他三类。原因猪喝水时间短抽帧命中的样本少。解决统计各类框数后对「喝」类做过采样或在损失里加类别权重。先统计再动手别盲目调。4.5 coco json 里的 category_id 不连续现象转换后训练报IndexError或类别全乱。原因coco 的 category_id 是 1、2、3、4 或跳号。解决转换脚本里必须做 id 重映射这是最常见的翻车点没有之一。5. 进阶把行为识别接进实际监控流的验证方法训练出模型只是第一步真正落地要验证它在连续视频流上的表现。我一般会写一个抽帧推理脚本模拟实际监控的帧率看行为切换的连贯性——单帧准确率高不代表时序上不跳变。具体做法用 OpenCV 读一段猪圈视频每 5 帧推理一次把结果按时间戳存下来然后统计同一头猪的行为序列是否出现「吃→站→吃」这种不合理抖动。如果抖动频繁说明模型对相似姿态区分不稳可以在推理端加一个滑动窗口投票连续 3 帧多数一致才输出。另一个验证点是跨栏舍泛化。这份数据集的 1272 张图来自有限几个视频源换一个光照、栏杆样式不同的猪圈性能大概率下降。我的习惯是留出至少一个视频源完全不参与训练专门做跨场景测试这个数字才是你敢不敢上线的依据。92.6% 是数据集内的平均表现跨场景能保住 80% 以上就算可用。还有个实用技巧把「睡觉」和「站立」这两个静态行为先合并成一个「静止」类训练跑通后再拆开微调。因为静态行为的区分主要靠姿态细节直接四分类容易在早期就卡住。拆分类训练时冻结 backbone 只训 head学习率调到 1e-4通常 20 轮就能收敛。从那以后我每次拿到行为识别数据集都强制先跑一遍类别分布统计和标注可视化再决定怎么划分、怎么增强。这份猪行为数据集的价值在于它把采集和标注的脏活干了但 92.6% 能不能变成你自己的数字取决于你有没有认真对待划分和清洗这两步。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/5 4:02:18

Java+Swing+MySQL停车场管理系统:从数据建模到避坑实战

简介:一套基于Java语言、Swing图形框架和MySQL数据库的停车场管理系统,主要面向Java初学者、课程设计或毕业设计人群,解决车辆出入登记、车位动态分配、用户信息管理及交易记录查询等实际问题。系统采用MVC分层架构,通过JDBC完成数…

2026/10/5 4:02:18

基于Springboot的一站式家装服务管理系统毕设全解析

每年三四月,学Java的同学基本都躲不开一个问题:Springboot的毕业设计选题怎么定。选图书管理这类经典题目,怕答辩时没东西讲;选电商商城,又怕业务太复杂做不完。我近几年带过的毕设项目里,基于Springboot的…

2026/10/5 3:57:18

插件加载失败排查指南:从IAR、web boot到MusicFree的通用方法

plugins这个词,说大不大,说小不小。最近好几个热词都在围着它转——既有嵌入式开发老手在搜“IAR plugins是干什么的”,也有前后端工程师对着failed to load plugins web boot: 2 entries did not activate这种报错挠头,还有不少人…

2026/10/5 4:47:20

UE5地编法线贴图DirectX与OpenGL坐标系差异及转换指南

地编入门第一课,往往不是刷地形,也不是摆资产,而是先把法线贴图的坐标系搞清楚。很多人在 UE5 里导入一张法线贴图,发现光照方向不对、墙面凸起变凹陷、地面材质看起来发灰发闷,排查到最后,经常就是 Direct…

2026/10/5 4:47:20

从零手搓本地知识库问答机器人:LangChain+FAISS+本地模型实战

1. 为什么我要从零手搓一个个人知识库问答机器人先说结论:我折腾这个项目的出发点特别朴素——我的笔记和文档散落在四五个地方,Obsidian 里一堆 Markdown、本地存了几百个 PDF、浏览器书签里还躺着一堆技术博客,每次想找点东西都得靠grep加肉…

2026/10/5 4:47:20

数据结构栈

1. 栈的基本概念 1.1.1 概念 栈(Stack)是一种限定仅在表的一端进行插入和删除操作的线性表。这一端称为栈顶(top),另一端称为栈底(bottom)。当栈中不包含任何元素时,称为空栈。 栈遵…

2026/10/5 4:42:20

STM32 LwIP网线插拔自动恢复:轮询与中断方案详解

说实话,这标题我太有共鸣了。搞过 STM32 联网项目的工程师基本都栽过同一个跟头:板子刚开始调通 LwIP 的时候,网线插上 ping 得通,拔了再插,十几秒后怎么 ping 都没反应。接着就是关电源重上电,网络又活了。…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑