尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

YOLOv5肉鸡健康状态检测:从数据集构建到树莓派部署全流程

发布时间:2026/9/28 17:17:58

资讯中心
01
ARTICLE

YOLOv5肉鸡健康状态检测:从数据集构建到树莓派部署全流程

YOLOv5肉鸡健康状态检测:从数据集构建到树莓派部署全流程
简介本资源面向从事智慧养殖与计算机视觉的开发者、学生及科研人员提供YOLOv5养殖场肉鸡健康状态检测的权重文件与配套数据集用于识别肉鸡异常与正常两类状态可直接支撑目标检测训练与推理任务。压缩包共983个文件约58.62MB包含441张jpg图像、435个txt标签、29个yaml配置、24个py脚本及3个pt权重等覆盖数据、配置、训练与部署脚本。数据集已按train、val、test划分完毕并附data.yamlnc为2类别为Abnormal与Normalyolov5、yolov7、yolov8、yolov9等算法均可直接训练。目前已有145人学习。读者可获得开箱即用的检测权重、规范化的目录结构、可复现的训练配置以及标签与脚本参考便于快速验证模型效果并迁移到自有养殖场景。1. 从一张鸡舍巡检图说起YOLOv5 肉鸡健康状态检测到底在做什么凌晨三点鸡舍巡检的师傅打着手电筒一排排看过去靠的是眼睛和经验判断哪只鸡精神萎靡、羽毛蓬乱、站姿异常。一个万只规模的肉鸡场人工巡检一轮要两三个小时等发现病鸡往往已经错过了最佳隔离窗口。YOLOv5 养殖场肉鸡健康状态检测这套方案要解决的就是把这件事交给摄像头加模型固定机位拍鸡群用 YOLOv5 检测每只鸡的状态类别把异常个体框出来报警。它适合两类人——一类是手里已经有养殖场图像、想跑通自己数据集的算法工程师另一类是做智慧农业项目、需要一套能落地检测权重的开发者。权重和数据集是这套方案的两条腿缺一条都跑不起来下面从数据组织讲到训练调参再到部署验证把能抄的部分都写清楚。2. 数据集怎么攒从鸡舍原图到 YOLOv5 标注格式2.1 肉鸡健康状态该分几类类别定义决定模型上限很多人一上来就问权重在哪下其实更该先问你的类别定义清楚了吗。肉鸡健康状态检测不是简单的“鸡/非鸡”二分类常见做法是按可见症状分 4 到 6 类比如健康、精神萎靡低头缩颈、跛行站姿异常、羽毛异常蓬乱脱落、以及需要单独拎出来的死淘个体。类别数直接决定标注成本和模型难度我一般建议第一版控制在 4 类以内先把健康与明显异常区分开跑通闭环再扩类。类别定义有两个硬约束。第一类别之间必须视觉可分如果“精神萎靡”和“跛行”在俯拍图里几乎一样标注一致性会崩模型学到的就是噪声。第二类别要贴合你的业务动作检测出“跛行”是为了挑出来单独观察那它就得是一个独立类而不是混进“异常”。定义阶段最好拉上养殖场的技术员一起过一遍样例图他们的判断标准才是标注的 ground truth。2.2 采集与标注图像质量比数量更早决定成败鸡舍环境对图像极不友好粉尘、氨气雾化、光照不均、鸡只密集遮挡。采集时优先保证三件事——固定机位减少视角变化、补光均匀避免大面积阴影、分辨率不低于 1080p 保证单只鸡有足够像素。一个常见误区是猛拍几千张高度相似的图结果模型过拟合到某个机位。我的经验是同一栋鸡舍至少覆盖早中晚三个时段、两到三个机位单类有效样本 800 到 1500 个 instance 就能起步。标注用 labelImg 或 X-AnyLabeling 都行输出 YOLO 格式的 txt。每张图对应一个同名 txt每行是类别id 中心x 中心y 宽 高坐标全部归一化到 0 到 1。密集鸡群标注最耗时的不是画框是判断边界鸡只挨在一起时框要尽量贴合单只个体宁可略紧不要大幅重叠否则训练时正样本区域互相污染。# 标准 YOLOv5 数据集目录结构照着建就不会在训练时报找不到标签 dataset/ ├── images/ │ ├── train/ # 训练集图片jpg/png │ └── val/ # 验证集图片 ├── labels/ │ ├── train/ # 与 train 图片同名的 txt │ └── val/ └── data.yaml # 数据集描述文件目录结构本身不复杂坑在于 images 和 labels 必须严格同名同层级差一个字符 YOLOv5 就会把这张图当无标签负样本处理训练 loss 会莫名其妙地抖。划分比例常见 8:2 或 7:3验证集要包含不同时段和机位的图不能全是同一批。2.3 data.yaml 与标签校验三个必查项data.yaml 是数据集和训练脚本之间的契约写错一个字段训练直接起不来。# data.yaml path: /data/chicken # 数据集根目录 train: images/train # 相对 path 的训练图路径 val: images/val nc: 4 # 类别数必须和标注里的最大 id1 一致 names: # 类别名顺序必须和标注 id 对应 0: healthy 1: lethargy 2: lameness 3: feather_abnormal参数说明nc写错是最常见的翻车点标注里出现 id3 但 nc 写成 3训练时这类标签会被静默丢弃。names的顺序必须和标注时用的 id 一一对应顺序错了模型学出来的类别就是错位的。写完 yaml 后跑一段校验脚本统计每类 instance 数和坐标越界情况。import os, glob def check_labels(label_dir, nc): cnt {i: 0 for i in range(nc)} bad [] for f in glob.glob(os.path.join(label_dir, *.txt)): with open(f) as fp: for line in fp: p line.split() if len(p) ! 5: bad.append((f, field_count)); continue cid int(p[0]) if cid nc: bad.append((f, class_out_of_range)); continue vals list(map(float, p[1:])) if any(v 0 or v 1 for v in vals): bad.append((f, coord_out_of_range)); continue cnt[cid] 1 print(每类 instance 数:, cnt) print(异常标签数:, len(bad)) return bad check_labels(/data/chicken/labels/train, nc4)这段脚本做三件事统计每类样本量看是否严重不均衡、检查每行是否恰好 5 个字段、检查类别 id 和归一化坐标是否越界。跑完如果发现某类只有几十个 instance先补数据再训练别指望靠调参救回来。3. 权重怎么来从官方预训练到肉鸡场景微调3.1 为什么必须用预训练权重起步YOLOv5 官方在 COCO 上训练的权重yolov5s.pt 这类已经学到了通用的边缘、纹理、形状特征这些底层特征对鸡只检测同样有效。从预训练权重微调比从随机初始化训练收敛快得多小数据集上 mAP 通常能高出十几个点。选哪个规格看你的部署端yolov5s 约 7M 参数适合树莓派 5 或边缘盒子yolov5m/l 精度更高但推理慢适合有 GPU 的服务器端。养殖场检测场景我一般从 yolov5s 起步精度不够再往上换。3.2 环境配置conda 建环境到跑通第一轮训练环境是新手最容易卡住的地方按顺序来基本不会错。# 1. 建独立环境避免和系统里的 torch 打架 conda create -n yolov5 python3.9 -y conda activate yolov5 # 2. 拉源码用官方仓库别用来路不明的魔改版 git clone https://github.com/ultralytics/yolov5 cd yolov5 # 3. 装依赖torch 按你的 CUDA 版本单独装 pip install -r requirements.txt # 有 GPU 的话去 pytorch 官网拿对应 cuda 版本的安装命令 # 4. 验证环境 python detect.py --weights yolov5s.pt --source data/images/参数说明python3.9是兼容性最稳的版本3.11 以上偶尔会遇到依赖编译问题。requirements.txt里的 torch 版本可能和你的 CUDA 不匹配装完先跑python -c import torch; print(torch.cuda.is_available())返回 False 就说明 GPU 没接上得重装对应版本。detect.py 那步是冒烟测试能出结果说明环境和权重都没问题。3.3 训练命令与关键超参数把默认值改对训练入口是 train.py核心参数就那么几个但每个都影响结果。python train.py \ --data /data/chicken/data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 150 \ --hyp data/hyps/hyp.scratch-low.yaml \ --name chicken_v1 \ --cache参数说明--img 640是输入尺寸鸡只密集时可以考虑 960 提升小目标召回但显存和速度要权衡。--batch 16按显存调显存不够就降到 8 并配合--accumulate梯度累积。--epochs 150对小数据集偏多配合早停patience 默认 100会自动停。--hyp选 low 增强配置因为鸡舍图像本身噪声大过强的 mosaic、mixup 反而让模型学不到真实形态。--cache把图缓存到内存加速训练数据集大时注意内存占用。训练过程中重点盯三个指标box_loss 和 cls_loss 是否稳定下降、mAP0.5 是否在涨、验证集 loss 是否开始反弹。如果训练 loss 降但验证 mAP 不涨多半是过拟合减 epoch 或加数据增强如果两个 loss 都不降检查学习率和标签。3.4 超参数怎么调学习率、锚框与增强的取舍YOLOv5 的超参数集中在 hyp yaml 里肉鸡场景我一般动这几个。学习率lr0默认 0.01小数据集建议降到 0.001 到 0.005避免一开始就把预训练特征冲垮。lrf是最终学习率比例默认 0.01保持即可。锚框anchors默认是 COCO 的如果你的鸡只框普遍偏小或偏扁跑一次python utils/autoanchor.py重新聚类能明显提升召回。数据增强方面mosaic默认 1.0鸡舍密集场景可以降到 0.5因为四图拼接会让本就拥挤的画面更乱。hsv_h/hsv_s/hsv_v控制色调饱和度亮度扰动鸡舍光照不均适当调大 v 的扰动有帮助。flipud上下翻转默认 0俯拍场景可以开到 0.5因为鸡只朝向没有绝对的上下语义。这些值没有标准答案我的习惯是先跑一轮默认看混淆矩阵里哪类错得多再针对性调。4. 训练完怎么验指标、可视化与常见误判4.1 看懂 results.csv 和混淆矩阵训练结束在 runs/train/chicken_v1/ 下会生成 results.csv、混淆矩阵和 PR 曲线。results.csv 每行是一个 epoch 的指标重点看metrics/mAP_0.5和metrics/mAP_0.5:0.95前者宽松后者严格。混淆矩阵能告诉你哪两类在互相误判比如 lethargy 被大量判成 healthy说明这两类视觉差异不够要么补样本要么合并类别。验证时别只看总体 mAP要分类看。健康类样本多mAP 高是正常的异常类样本少哪怕 mAP 只有 0.5 也可能已经可用关键看召回——漏检一只病鸡的代价远大于误报。我一般把异常类的置信度阈值调低宁可多框几个让巡检人员复核。4.2 用验证脚本跑一批真实图看效果指标是数字肉眼验证才踏实。拿一批没参与训练的鸡舍图跑推理把结果可视化出来。python detect.py \ --weights runs/train/chicken_v1/weights/best.pt \ --source /data/chicken/test_images \ --img 640 \ --conf-thres 0.25 \ --iou-thres 0.45 \ --save-txt \ --project runs/detect/chicken_test参数说明--conf-thres 0.25比默认 0.25 略低为了多召回异常个体。--iou-thres 0.45控制 NMS 重叠阈值鸡只密集时调低能减少框合并。--save-txt把检测结果存成 txt 方便后续统计每栏异常数量。跑完重点看两类失败漏检病鸡没框出来和误检健康鸡被框成异常前者调低 conf后者调高或补负样本。4.3 树莓派 5 上部署自己训练的 YOLOv5 模型边缘部署是养殖场落地的刚需树莓派 5 性能比前代强不少跑 yolov5s 量化后能到可用帧率。步骤是先把 best.pt 导出 ONNX再在树莓派上用 onnxruntime 推理。# 在训练机上导出 ONNX python export.py --weights runs/train/chicken_v1/weights/best.pt --include onnx --img 640 --opset 12 # 树莓派上装 onnxruntime pip install onnxruntime # 推理 python -c import onnxruntime as ort, cv2, numpy as np sess ort.InferenceSession(best.onnx) img cv2.resize(cv2.imread(test.jpg), (640, 640)) blob img[:, :, ::-1].transpose(2, 0, 1)[None].astype(np.float32) / 255 out sess.run(None, {sess.get_inputs()[0].name: blob}) print(out[0].shape) 参数说明--opset 12兼容性最好opset 太高部分 onnxruntime 版本不支持。树莓派上推理前记得做同样的预处理BGR 转 RGB、归一化、NCHW预处理不一致是部署后精度掉点最常见的原因。如果帧率不够可以降到 img 416 或换 yolov5n精度换速度。5. 避坑与排查肉鸡检测训练里最容易翻车的五件事5.1 现象训练 loss 正常但 mAP 一直是 0原因data.yaml 的nc或names和标注 id 对不上或者 labels 目录和 images 目录不同名导致所有标签被当负样本。解决跑 2.3 的校验脚本确认每类 instance 数不为 0确认 images 和 labels 文件名严格一致。5.2 现象模型把健康鸡大量误判为异常原因异常类样本里混入了健康鸡的误标或者异常类定义太宽泛标注一致性差。解决抽样复查异常类标注把模棱两可的框删掉或重新归类如果两类视觉确实难分考虑合并类别别硬分。5.3 现象验证集 mAP 高但现场部署效果差原因验证集和训练集来自同一时段同一机位分布太接近模型没学到跨场景泛化能力。解决划分验证集时强制按机位或时段切分让验证集包含训练时没见过的场景现场部署前一定用真实新图再验一轮。5.4 现象树莓派上推理结果和 PC 上不一致原因预处理不一致最常见的是 PC 上用了 letterbox 保持长宽比树莓派上直接 resize 变形或者颜色通道顺序搞反。解决把训练时的预处理逻辑原样搬到部署端letterbox 的填充值和缩放比例都要一致用同一张图在两端跑逐像素对比输入张量。5.5 现象训练到一半显存爆了原因--img调太大或--batch超过显存也可能是--cache把大数据集全塞进内存。解决降 batch 配合--accumulate保持等效 batch sizeimg 从 640 降到 512 试试数据集大时去掉--cache改用磁盘缓存。6. 把权重用起来置信度阈值分档与持续迭代的小技巧训练出 best.pt 只是开始真正决定这套方案好不好用的是推理阶段的阈值策略和后续迭代节奏。我踩过的最大坑是拿一个固定 conf 阈值跑所有场景结果白天光照好时误检一堆晚上光照差时漏检一片。后来改成按场景分档光照充足的白天用 conf 0.4 压误检傍晚和夜间用 conf 0.2 保召回配合巡检人员复核整体可用性提升明显。这个分档没有理论最优就是拿一批真实图跑不同阈值统计漏检和误检的代价选业务能接受的那个点。另一个习惯是给模型留后悔药。每次现场发现新的失败案例比如某种特殊站姿没被识别把图存下来攒够一两百张就增量微调一轮用上一版 best.pt 当预训练权重学习率调低到 0.0005epoch 30 左右即可。这样模型会随着鸡舍的实际数据慢慢长本事而不是一次训练定终身。增量微调时务必保留一部分旧数据一起训否则容易灾难性遗忘把之前学会的类别忘掉。验证迭代效果别只看 mAP做个简单的现场对照同一批新图用旧权重和新权重各跑一遍人工数漏检和误检数量哪个少用哪个。指标是给训练看的现场漏检数才是给业务看的。最后提醒一句权重文件和数据集版本要对应记录我一般用chicken_v1_20240115.pt这种带日期和版本的命名不然过两个月自己都分不清哪个权重配哪批数据。这套方案值不值得做取决于你的鸡舍能不能稳定出图、类别定义能不能和业务对齐这两点成立剩下的就是按上面的步骤一轮轮磨。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。