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

棉花叶片病害识别数据集与YOLO目标检测实战指南

发布时间:2026/9/24 19:16:27

资讯中心
01
ARTICLE

棉花叶片病害识别数据集与YOLO目标检测实战指南

棉花叶片病害识别数据集与YOLO目标检测实战指南
简介这份资源面向从事农业图像识别与深度学习目标检测的开发者、研究生及竞赛选手提供一套可直接投入训练的棉花叶片病害识别数据集覆盖Bacterial Blight、Curl virus、Fussarium wilt与Healthy四类目标共5837张图像可用于YOLO系列、Faster R-CNN、SSD等主流检测模型的训练与验证。压缩包为zip格式内含2000个文件以1999个txt标签文件和1个yaml类别配置文件为主txt对应每张图片的标注框信息yaml则指定类别名称与路径便于框架直接读取整体约372.94MB图片与标签已按训练集、验证集、测试集划分完毕开箱即可用于YOLOv5至YOLOv10等版本。目前已有368人学习下载适合希望快速搭建病害检测基线、验证模型迁移效果或开展对比实验的读者能省去数据采集与标注环节将精力集中于网络结构调优与精度提升。1. 棉花叶片病害识别数据集与目标检测从田间痛点到可复现方案棉花叶片病害识别数据集配合目标检测解决的是田间真实场景下“病斑在哪、有多大、属于哪一类”的问题。分类模型只能告诉你这片叶子有病但目标检测能框出病斑位置和面积占比这对精准施药和分级预警更实用。我见过不少植保团队拿着几千张分类图想直接训检测模型结果 mAP 卡在 0.3 上不去根因就是标注粒度和数据分布没对齐。这个方向适合两类人一是做农业 AI 落地的算法工程师需要一套能跑通的 YOLO 训练流程二是植保科研人员想用目标检测量化病害严重度。数据集通常包含健康、枯萎、黄化、斑点等类别标注格式以 YOLO txt 或 COCO json 为主图像来源多为田间自然光拍摄背景杂乱、叶片重叠、小目标密集是常态。下面按“数据准备→格式转换→训练调参→避坑→进阶验证”的路径拆开讲每一步都给出可抄的命令和参数。2. 棉花叶片病害数据集的结构拆解与标注规范2.1 数据集目录长什么样、每类多少张才够用常见做法是把数据集组织成 images 和 labels 两个平行目录images 下分 train/val/testlabels 下保持同名 txt。一个典型的棉花叶片病害检测数据集类别数在 4 到 8 之间比如健康叶片、枯萎病、黄萎病、叶斑病、红蜘蛛危害。每类实例数建议不低于 800 个标注框总图数 2000 到 5000 张起步。如果某类只有两三百个框训练时该类 AP 会明显掉队这时候要么补标要么用 mosaic 和 copy-paste 增强硬撑。目录结构示例cotton_leaf_detection/ ├── images/ │ ├── train/ # 约70% │ ├── val/ # 约20% │ └── test/ # 约10% ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml注意train/val/test 必须按“田块”或“拍摄日期”划分不能随机打散同一片叶子的多角度图否则验证集精度虚高上线就翻车。2.2 标注格式YOLO txt 与 COCO json 的取舍YOLO txt 每行格式是class_id x_center y_center width height全部归一化到 0~1。COCO json 适合多任务和复杂属性但训练 YOLO 时还得转。我一般直接用 YOLO txt因为 labelImg、Labelme、CVAT 都能导出转换脚本也简单。标注时框要贴紧病斑边缘不要把整片叶子框进去否则模型学到的“病斑”其实是叶片轮廓。对于小目标病斑建议放大到 640 以上再标或者用分割转检测的方式生成紧致框。# coco2yolo.py 核心转换逻辑 import json, os from PIL import Image def coco_to_yolo(coco_json, img_dir, out_dir): with open(coco_json) as f: data json.load(f) # 建立 image_id - (width, height, file_name) 映射 img_info {img[id]: img for img in data[images]} # 建立 category_id - 连续 class_id 映射 cat_ids sorted({ann[category_id] for ann in data[annotations]}) cat2cls {cid: i for i, cid in enumerate(cat_ids)} for ann in data[annotations]: info img_info[ann[image_id]] w, h info[width], info[height] x, y, bw, bh ann[bbox] # COCO 格式为左上角 xywh xc (x bw / 2) / w yc (y bh / 2) / h nw, nh bw / w, bh / h cls cat2cls[ann[category_id]] line f{cls} {xc:.6f} {yc:.6f} {nw:.6f} {nh:.6f}\n txt_path os.path.join(out_dir, info[file_name].replace(.jpg, .txt)) with open(txt_path, a) as f: f.write(line)逻辑说明COCO 的 bbox 是左上角坐标加宽高YOLO 要的是中心点加宽高且都要除以图像宽高做归一化。参数上cat2cls保证类别 id 从 0 连续排列否则 YOLO 训练时会报类别越界。out_dir要和 images 目录平行文件名保持一致只换后缀。2.3 数据清洗三类必须删掉的脏样本第一类标注框面积小于图像面积 0.1% 的基本是误标或灰尘留着会拉低小目标召回。第二类同一张图里框大量重叠且类别矛盾的比如一个病斑同时标了枯萎和黄化这种样本会让分类头学乱。第三类曝光过度或严重模糊的模型学不到纹理特征反而引入噪声。清洗脚本可以按框面积、IoU、图像拉普拉斯方差三个指标过滤阈值分别设 0.001、0.7、50。3. 用 YOLOv8 在本地跑通棉花叶片病害检测的最小命令3.1 环境安装与 data.yaml 的五个必填字段先建虚拟环境装 ultralytics 和 opencv。命令如下conda create -n cotton_det python3.10 -y conda activate cotton_det pip install ultralytics opencv-python pyyamldata.yaml 必须写清楚五个字段path是数据集根目录train、val、test是相对路径nc是类别数names是类别名列表。示例path: /data/cotton_leaf_detection train: images/train val: images/val test: images/test nc: 5 names: [healthy, fusarium_wilt, verticillium_wilt, leaf_spot, red_spider]注意names的顺序必须和标注时的 class_id 严格对应错一位整个模型就废了这是血泪经验。3.2 训练命令与关键参数imgsz、batch、lr0 怎么定最小训练命令yolo detect train \ data/data/cotton_leaf_detection/data.yaml \ modelyolov8s.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.01 \ lrf0.01 \ patience30 \ device0 \ projectcotton_runs \ nameexp1参数说明imgsz640是平衡速度和精度的起点如果病斑普遍小于 32x32 像素提到 1024 但 batch 要降到 8 或 4。batch16在 8G 显存上跑 yolov8s 比较稳爆显存就减半。lr00.01是 SGD 的初始学习率用 AdamW 的话降到 0.001。patience30表示 30 轮验证指标不升就早停省时间。lrf0.01是最终学习率因子余弦退火到初始值的 1%。3.3 训练过程看什么loss 曲线与 mAP 的异常信号训练日志里重点盯三个量box_loss、cls_loss、mAP50。正常情况 box_loss 从 1.5 左右降到 0.5 以下cls_loss 从 2.0 降到 0.3 左右。如果 box_loss 震荡不降检查标注框是否有大量越界或宽高为 0。如果 mAP50 在第 20 轮就冲到 0.9 然后不动大概率是验证集和训练集同分布泄漏按田块重新划分。如果 cls_loss 一直高于 box_loss 一个量级说明类别不平衡严重需要给稀有类加权或过采样。# 快速统计各类别实例数判断是否失衡 import os, collections label_dir /data/cotton_leaf_detection/labels/train counter collections.Counter() for txt in os.listdir(label_dir): with open(os.path.join(label_dir, txt)) as f: for line in f: counter[int(line.split()[0])] 1 print(counter) # 输出如 Counter({0: 3200, 1: 900, 2: 750, 3: 2100, 4: 400})逻辑说明这个脚本遍历训练集所有 txt统计每个 class_id 出现的次数。如果最大类和最小类差距超过 10 倍训练时就要在 data.yaml 里加class_weights或者用fraction参数控制采样比例。参数上counter的 key 就是类别 idvalue 是实例数直接对应 names 列表。4. 棉花叶片病害检测的避坑与排查清单4.1 现象mAP 虚高但实地测试全错原因训练集和验证集来自同一批拍摄图叶片角度、光照、背景几乎一样模型记住了背景而不是病斑特征。解决按田块或日期重新划分确保验证集来自不同地块。如果数据量不够至少把验证集的图像做一次亮度、对比度、旋转的强增强模拟实地差异。4.2 现象小病斑全部漏检大斑也框不准原因YOLO 的 anchor 默认针对 COCO 的大中目标棉花病斑很多是 10~30 像素的小目标。解决把imgsz提到 1024同时用yolo detect train ... anchors...自定义 anchor或者直接换 yolov8x 并开启close_mosaic10让最后 10 轮关掉 mosaic 增强提升小目标定位精度。4.3 现象训练到一半 loss 变成 NaN原因学习率太大或者标注里有宽高为 0 的框导致除零。解决先跑一遍数据校验脚本把宽高小于 0.001 的行删掉然后把lr0降到 0.001加warmup_epochs5让前 5 轮线性升温。如果还 NaN检查图像是否有损坏文件用cv2.imread批量读一遍。4.4 现象推理时框重叠严重同一病斑出多个框原因NMS 的 IoU 阈值默认 0.7 太高或者模型对同一目标重复激活。解决推理时加iou0.5conf0.25max_det300。如果还重叠说明训练时正样本分配有问题换用yolov8的taskdetect默认 TAL 分配策略不要手动改 anchor 匹配。4.5 现象类别混淆枯萎和黄化分不开原因这两类在早期视觉特征高度相似标注时边界模糊。解决合并成“病害叶片”一个大类或者引入多标签分类头让模型同时输出多个概率。如果必须分开至少每类补 500 个典型样本并在标注规范里写清楚枯萎以维管束褐变为准黄化以叶脉间失绿为准。5. 进阶用验证集反推标注质量与模型边界训练完不是终点拿验证集做一次“反向审计”能挖出很多标注问题。具体做法用训练好的模型对验证集推理把预测框和真实框做匹配找出那些模型置信度很高但和 GT 的 IoU 低于 0.3 的样本。这些样本大概率是标注错了或者病斑定义有歧义。我一般会导出前 50 张这样的图人工过一遍修正标注后重新训一轮mAP 通常能再涨 3 到 5 个点。yolo detect val \ modelcotton_runs/exp1/weights/best.pt \ data/data/cotton_leaf_detection/data.yaml \ imgsz640 \ conf0.25 \ iou0.5 \ save_jsonTrue \ projectcotton_val \ nameauditsave_jsonTrue会输出 COCO 格式的预测结果方便和 GT 做脚本比对。conf0.25是置信度阈值审计时可以降到 0.1 多捞一些可疑样本。iou0.5控制 NMS 强度避免同一目标被拆成多个框干扰审计。另一个技巧是看模型在测试集上的“错误集中度”。如果 80% 的漏检都发生在图像右下角那可能是拍摄时右下角有阴影或遮挡补数据时针对性拍这个区域。如果误检集中在某类背景比如地膜、滴灌带就在训练集里加这类负样本或者用yolo detect train ... single_clsTrue先跑一版单类检测确认病斑位置再细分。最后说个习惯每次训完模型我都会把 best.pt 在测试集上跑一遍导出混淆矩阵和 PR 曲线存到项目目录里。下次换模型或调参时直接对比这两张图比看 mAP 数字更直观。棉花叶片病害检测这个方向数据质量比模型结构重要得多标注框贴紧病斑、按田块划分验证集、定期审计标注这三件事做到位YOLOv8s 就能跑出可用的结果。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

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

03
WHY YAOTU

想打造同款高转化官网?

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

场景化定制

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

营销型架构

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

全周期服务

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

免费获取你的建站方案

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