恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

柑橘害虫检测数据集:2类别YOLOV5目录格式与训练避坑指南

  • 首页
  • 资讯中心
  • /
  • 柑橘害虫检测数据集:2类别YOLOV5目录格式与训练避坑指南

相关资讯

跨时钟域亚稳态详解:从D触发器原理到同步器设计与MTBF量化 2026/10/12 12:14:36
CAN与CAN-FD总线深度解析:从物理层到工程实战的硬实时通信之道 2026/10/12 12:14:36
ARM Cortex-A9体系结构深度解析:工作状态、运行模式与存储格式 2026/10/12 12:14:36

最新资讯

可重构智能表面辅助多用户MIMO:无源波束成形与交替优化仿真解析
Spring JDBC声明式事务管理:从原理到实战的深度解析
CentOS 6 上安装 MongoDB 4.0 的完整指南与踩坑实录
open-code-review:自动化代码评审流水线实践
黑盒测试与白盒测试:核心概念、方法与实践指南
CTF安卓逆向App3解题全记录:Java层到Native层完整链路

今日推荐

Debian新手入门:从部署到日常操作的完整指南
MongoDB复制集扩缩容实战:从rs.add到选主事故复盘
条形码目标检测数据集实战:从YOLOv8训练到部署

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

柑橘害虫检测数据集:2类别YOLOV5目录格式与训练避坑指南

发布时间:2026/10/12 12:19:36
柑橘害虫检测数据集:2类别YOLOV5目录格式与训练避坑指南 简介这份资源面向从事农业智能化、目标检测算法学习与落地的开发者提供柑橘害虫检测的YOLOv5格式数据集可直接用于模型训练与验证省去繁琐的数据清洗与格式转换环节。数据聚焦苍蝇、木虱两类害虫图像为1000至4000像素的大尺度RGB图片贴近真实田间拍摄场景适合作为目标检测入门练手或农业病害检测项目的训练素材。压缩包共603个文件以301个txt标签、300张jpeg图像为主另含1个可视化py脚本与1张png预览图整体约260MB其中训练集240张图片及对应标签验证集60张图片及对应标签并附2类别txt文本信息。可视化脚本无需修改即可运行随机传入一张图片便能绘制边界框并保存到当前目录便于快速核验标注质量。目前已有403人学习下载适合需要现成YOLOv5目录结构、希望快速跑通训练流程的读者参考使用。1. 柑橘害虫检测数据集2 类别 YOLOV5 目录格式到底长什么样果园里挂满黄板上面粘着密密麻麻的小虫植保员拿手机拍了几百张照片想训一个能自动数虫、分类的模型——这是很多农业 AI 项目最真实的起点。但真正动手时八成的人会卡在同一个地方手里只有一堆散乱的照片不知道 YOLOV5 要的目录格式到底怎么摆训练集和验证集怎么切标注文件放哪data.yaml里写什么。这个标题讲的就是一份已经整理好的柑橘害虫检测数据集2 个类别按 YOLOV5 目录格式组织训练集和验证集都齐了。它解决的不是“模型怎么设计”而是“数据怎么喂进去”这个最容易被低估、却最影响成败的环节。适合谁适合手上有果园虫情图像、想快速跑通 YOLOV5 训练流程的植保方向开发者也适合刚接触目标检测、想拿一个真实农业场景练手的新手。下面我按自己踩过的路把这份数据集的目录结构、标注格式、训练配置和避坑点一次讲透。2. YOLOV5 目录格式拆解images 与 labels 的镜像关系2.1 为什么 YOLOV5 非要 images 和 labels 分开存YOLOV5 的数据组织逻辑和很多早期检测框架不一样。它不把标注信息塞进一个大 CSV也不要求每张图配一个同名的 XML而是采用“图像目录 标签目录”镜像对应的方式。你有一张images/train/001.jpg就必须有一个labels/train/001.txt文件名主干完全一致只是扩展名和所在目录不同。这种设计的好处是加载快、路径解析简单坏处是新手容易只复制图片忘了标签或者标签文件名多了一个空格训练时直接报“找不到标签”。我一般会先确认三个层级数据集根目录、images和labels两个平行目录、以及它们下面各自的train和val子目录。柑橘害虫检测这份数据既然是 2 类别标签文件里每行就是类别编号 x_center y_center width height坐标全部归一化到 0 到 1 之间。类别编号从 0 开始0 和 1 分别对应两种害虫具体谁是谁要看data.yaml里的names顺序顺序错了模型学出来的类别就全反了。提示归一化坐标是相对于图像宽高算的不是像素值。如果你拿到的标注是像素坐标必须自己除一次宽高否则训练 loss 会大得离谱。2.2 一份标准目录树和 data.yaml 的对应写法下面是我整理这类数据集时最常用的目录结构柑橘害虫检测也按这个来。你可以直接对照自己手里的文件缺哪层补哪层。citrus_pest_dataset/ ├── images/ │ ├── train/ # 训练集图像jpg 或 png │ │ ├── 001.jpg │ │ └── ... │ └── val/ # 验证集图像 │ ├── 101.jpg │ └── ... ├── labels/ │ ├── train/ # 训练集标签与图像同名 .txt │ │ ├── 001.txt │ │ └── ... │ └── val/ │ ├── 101.txt │ └── ... └── data.yaml # 数据集描述文件data.yaml是 YOLOV5 训练时唯一需要指定的数据入口内容不多但每个字段都关键# 数据集根路径建议写绝对路径避免相对路径歧义 path: /home/user/citrus_pest_dataset train: images/train # 相对 path 的训练图像目录 val: images/val # 相对 path 的验证图像目录 # 类别数量柑橘害虫是 2 类 nc: 2 # 类别名称顺序必须和标签里的类别编号一致 names: 0: citrus_leafminer # 柑橘潜叶蛾 1: citrus_aphid # 柑橘蚜虫这里path写绝对路径最稳因为 YOLOV5 在不同工作目录下启动时相对路径的基准会变。train和val只写到images那一层框架会自动把images替换成labels去找标签所以你的labels目录名不能改成别的。nc和names的键值对数量必须一致2 类别就写 0 和 1别写 1 和 2YOLOV5 的类别索引从 0 开始。2.3 标签文件逐行解析与常见格式错误打开一个labels/train/001.txt你看到的应该是这样的内容0 0.453125 0.612500 0.078125 0.095000 1 0.721875 0.430000 0.062500 0.080000 0 0.312500 0.725000 0.085000 0.110000每行代表一个目标框五个字段用空格隔开。第一个字段是类别编号后面四个是归一化后的中心点 x、中心点 y、宽度、高度。注意是中心点坐标不是左上角坐标这一点和 VOC 的xmin ymin xmax ymax完全不同。我见过有人直接把 VOC 的四个角点坐标填进去训练时框全跑到图像外面模型学了个寂寞。常见格式错误有这么几类字段之间用了逗号而不是空格坐标没归一化还是 0 到 640 的像素值类别编号写了 2 但nc是 2合法编号只有 0 和 1文件名主干和图像对不上比如图像叫001.jpg标签叫001_1.txt。这些错误 YOLOV5 不一定报错但训练结果会莫名其妙地差属于典型的“玄学翻车”。我的习惯是训练前先跑一个校验脚本把标签逐行读一遍检查字段数、数值范围和类别编号。import os label_dir citrus_pest_dataset/labels/train nc 2 errors [] for fname in os.listdir(label_dir): if not fname.endswith(.txt): continue with open(os.path.join(label_dir, fname)) as f: for line_no, line in enumerate(f, 1): parts line.strip().split() # 每行必须是 5 个字段 if len(parts) ! 5: errors.append(f{fname}:{line_no} 字段数{len(parts)}) continue cls_id int(parts[0]) coords [float(x) for x in parts[1:]] # 类别编号必须在 0 到 nc-1 之间 if cls_id 0 or cls_id nc: errors.append(f{fname}:{line_no} 类别越界 {cls_id}) # 归一化坐标必须在 0 到 1 之间 if any(c 0 or c 1 for c in coords): errors.append(f{fname}:{line_no} 坐标越界 {coords}) print(f共发现 {len(errors)} 个问题) for e in errors[:20]: print(e)这段脚本做三件事检查每行是否恰好五个字段、类别编号是否在合法范围、四个坐标是否落在 0 到 1 之间。参数nc要和data.yaml保持一致label_dir指向你要检查的标签目录。跑完如果输出“共发现 0 个问题”说明标签格式基本干净可以进入训练配置。如果有问题按行号定位回去改别带着脏数据硬训。3. 用 YOLOV5 跑通柑橘害虫检测训练从环境到第一个权重3.1 环境配置与依赖版本选择YOLOV5 的代码仓库对 PyTorch 和 CUDA 版本比较敏感我一般不会直接pip install -r requirements.txt了事而是先确认显卡驱动支持的 CUDA 上限再选对应的 PyTorch。柑橘害虫检测这种 2 类别、图像数量通常几千张规模的任务一张 8GB 显存的卡足够没必要上多卡分布式。环境步骤我习惯这样走# 创建独立环境避免和系统里的其他 torch 冲突 conda create -n citrus_yolo python3.9 -y conda activate citrus_yolo # 安装 PyTorch这里以 CUDA 11.8 为例具体版本按你的驱动来 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 克隆 YOLOV5 仓库并安装依赖 git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txtpython3.9是我在农业检测项目里用得最稳的版本3.10 以上偶尔会遇到某些依赖轮子缺失。PyTorch 的 CUDA 版本一定要和nvidia-smi右上角显示的 CUDA Version 兼容不是必须完全相等但不能超过。装完用python -c import torch; print(torch.cuda.is_available())验证输出True才算环境通了。如果输出False先别急着训检查驱动和 CUDA 版本匹配这一步省不得。3.2 训练命令与关键超参数怎么设环境通了之后训练命令本身不复杂但参数设不对结果差很多。我跑柑橘害虫检测常用的起手命令是这样的python train.py \ --data /home/user/citrus_pest_dataset/data.yaml \ --weights yolov5s.pt \ --img 640 \ --batch 16 \ --epochs 100 \ --project runs/train \ --name citrus_pest_v1 \ --cache逐项说--data指向你的data.yaml这是唯一必须改的路径。--weights yolov5s.pt表示从 COCO 预训练权重开始微调农业数据集通常不大从头训容易过拟合用预训练权重收敛快得多。--img 640是输入分辨率柑橘害虫在黄板上往往只占几十个像素640 是精度和显存的平衡点如果虫体特别小可以试 1024但显存要翻倍。--batch 16在 8GB 卡上跑 640 分辨率比较稳爆显存就降到 8。--epochs 100对 2 类别任务通常够看验证集 mAP 曲线如果 60 轮后还在涨可以加到 150。--cache把图像缓存到内存加快读取数据量超过显存承受范围时别加。训练过程中重点看三个指标box_loss、obj_loss和验证集的mAP0.5。box_loss下降说明框的位置在学对obj_loss下降说明目标有无的判断在收敛mAP0.5是最终效果的直接反映。如果box_loss一直不降回去查标签坐标是不是没归一化如果mAP卡在很低的值检查类别编号和names顺序是否对应。3.3 训练集与验证集划分的实操建议这份数据已经分好了训练集和验证集但很多人会问比例多少合适我的经验是农业检测任务按 8:2 或 7:3 切验证集不能少于总图像的 15%否则 mAP 波动大看不出真实效果。更重要的是划分时要保证两个类别的样本在训练集和验证集里都有足够数量不能出现验证集里某个类别只有两三张图的情况那样该类别的 mAP 没有统计意义。如果你拿到的是未划分的原始数据我一般用脚本按文件名随机切同时固定随机种子保证每次划分一致import os, random, shutil random.seed(42) # 固定种子保证可复现 src_img raw_images train_img citrus_pest_dataset/images/train val_img citrus_pest_dataset/images/val files [f for f in os.listdir(src_img) if f.endswith((.jpg, .png))] random.shuffle(files) split int(len(files) * 0.8) # 80% 训练 for i, f in enumerate(files): dst train_img if i split else val_img shutil.copy(os.path.join(src_img, f), os.path.join(dst, f))random.seed(42)是后悔药保证你下次再切一遍结果一样方便对比实验。split控制训练集比例0.8 就是 8:2。复制完图像后标签文件要按同名规则复制到对应的labels/train和labels/val别只复制图片。切完之后建议再跑一遍 2.3 节的校验脚本确认两个子集的标签都干净。4. 柑橘害虫检测的避坑与排查那些让 mAP 掉一半的细节4.1 现象训练 loss 正常但 mAP 一直是 0原因最常见的是data.yaml里names的顺序和标签里的类别编号反了或者nc写成了别的数字。模型学是学了但预测出来的类别和验证集对不上mAP 自然为 0。另一个可能是验证集路径写错框架读到了空目录评估时没有正样本。解决先打印data.yaml确认nc和names再随机抽几个验证集标签看类别编号是否在names范围内。然后手动跑一次val.py加上--verbose看每个类别的指标如果某个类别样本数为 0说明验证集划分有问题。4.2 现象小目标漏检严重黄板上的小虫根本框不出来原因柑橘害虫在图像里往往只占 20 到 50 像素YOLOV5 默认的 640 分辨率下经过多次下采样后这些小目标在特征图上几乎消失。加上如果标注时框画得偏大或偏小模型更难学。解决把--img提到 1024 或 1280同时--batch相应降到 4 或 2。另一个办法是检查标注框的宽高分布如果大量框的宽高小于 0.02归一化后说明目标确实太小可以考虑切片推理把大图切成小块再检测。我一般会先用--img 1024试一轮看 mAP 有没有明显提升再决定要不要上切片。4.3 现象训练到一半显存爆了报 CUDA out of memory原因--batch或--img设得太大或者--cache把整个数据集缓存进内存后显存被挤占。YOLOV5 在训练初期显存占用会波动有时候前几轮没事后面突然爆。解决先把--batch减半比如 16 降到 8。如果还爆去掉--cache改用--workers 4提高数据加载并行度。实在不行降--img到 512。另外注意--rect参数开启矩形训练可以减少填充带来的显存浪费但小目标任务里我一般不开因为填充少了对小目标的上下文信息有影响。4.4 现象验证集 mAP 很高但拿新拍的果园照片一测全错原因训练集和验证集来自同一批拍摄条件光照、角度、背景都相似模型过拟合到了这批数据的特定分布。新照片换了时间、天气、手机分布偏移模型就崩了。解决划分验证集时故意留出一部分不同时间段或不同果园拍的照片哪怕数量少也能反映泛化能力。另外训练时开数据增强YOLOV5 默认的--augment已经包含 HSV 抖动、翻转、缩放对农业场景够用。如果新数据分布差异大最直接的办法是拿几十张新图标注后加入训练集再微调几轮。4.5 现象标签文件明明存在训练却报“No labels found”原因labels目录名被改成了label或annotations或者images和labels不在同一级。YOLOV5 的路径替换逻辑是写死的它只认images换labels这一种。解决严格按 2.2 节的目录树摆images和labels必须同级子目录名train和val也要一致。如果实在想用别的目录名得改train.py里的路径替换逻辑不推荐容易引入新 bug。检查时用ls一层层看别凭记忆。5. 把 2 类别柑橘害虫模型推到可用的几个进阶技巧训练跑通只是第一步真正要拿去果园用还得在推理和后处理上做点文章。我一般会在detect.py的基础上加两个改动一是把置信度阈值和 NMS 的 IoU 阈值调一调二是对输出做类别过滤。柑橘害虫检测里两种虫的形态差异不算特别大默认的--conf-thres 0.25有时候会把背景上的斑点误检成虫我通常提到 0.4 再试看召回率掉多少。NMS 的--iou-thres默认 0.45如果同一只虫被框了多个重叠框降到 0.3 能压掉重复。python detect.py \ --weights runs/train/citrus_pest_v1/weights/best.pt \ --source /path/to/new_photos \ --img 1024 \ --conf-thres 0.4 \ --iou-thres 0.3 \ --save-txt \ --project runs/detect \ --name orchard_test--save-txt会把检测结果按 YOLO 格式存下来方便你后续统计每张图里两种虫的数量。--img 1024和训练时保持一致推理分辨率低于训练分辨率会掉点。跑完看runs/detect/orchard_test里的可视化图重点看误检和漏检分别出现在什么背景上如果误检集中在黄板边缘的反光可以在预处理里加一步裁剪边缘。另一个我常用的技巧是导出 ONNX 做推理加速尤其是要部署到边缘设备时。YOLOV5 自带export.py一行命令导出python export.py \ --weights runs/train/citrus_pest_v1/weights/best.pt \ --include onnx \ --img 1024 \ --batch 1--batch 1是给边缘设备用的动态 batch 在 ONNX Runtime 里有时会出问题。导出后拿onnxruntime跑一遍对比 PyTorch 和 ONNX 的输出框是否一致差异大说明某些算子导出有问题得回退到 TorchScript。这一步我踩过坑某次导出后 mAP 掉了 5 个点查了半天发现是--img没和训练一致ONNX 里写死了 640推理时输入 1024 就错位了。最后说个验证习惯。每次训完一个权重我不会只看mAP0.5而是把验证集里 mAP 最低的那 10 张图单独拎出来看。柑橘害虫检测里低 mAP 的图往往是虫体密集重叠、或者光照过曝导致虫体和黄板颜色接近。把这些图挑出来补标、加进训练集下一轮 mAP 通常能涨 2 到 3 个点。这个习惯比盲目加 epoch 有用得多。希望帮到你。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号