30类水果病害YOLO数据集:预划分+可视化诊断+训练避坑指南
简介本资源是一套专为YOLO系列目标检测模型如YOLOv5/v8定制的高质量农业视觉数据集面向计算机视觉初学者、农业AI应用开发者及科研人员解决水果与植物叶片病害、缺陷的细粒度识别与定位难题。数据集覆盖苹果、番茄、马铃薯、玉米、大豆、樱桃、蓝莓等30类常见作物的典型病害如玉米叶枯病、番茄霉叶、苹果锈叶含2240张训练图像与311张验证图像全部标注为YOLO格式classes 归一化xywh坐标并附带完整class.txt文件及开箱即用的数据可视化脚本show.py支持一键绘制边界框并保存结果。资源共2000个文件其中1999个为标签txt文件、1个为可视化py脚本总大小422.01MB采用7z压缩目录结构严格遵循YOLOv5标准无需额外清洗或格式转换即可直接投入训练。目前已有347人学习下载是快速启动叶片病害检测项目、验证模型性能或开展农业AI教学实践的高实用性基础资源。1. 这不是又一个“水果叶片”数据集30类病害缺陷检测数据包已预划分可视化脚本class定义全齐直接喂进YOLOv5/v8/v10训练不卡壳你见过多少标着“水果病害”的数据集解压后发现只有200张图、类别名写在txt里但没统一命名、train/val/test目录空着让你自己split、连一张分布直方图都没有这个资源不是——它把30类真实农业场景下的目标缺陷全部拉平到YOLO标准结构images/和labels/严格对齐train/val/test三级目录完整存在classes.txt明确定义顺序苹果黑斑病、番茄早疫病、葡萄霜霉病…含拉丁学名缩写还附带visualize_dataset.py——运行一次自动输出每类样本数柱状图、标注框密度热力图、尺寸分布散点图、甚至单图多标签重叠预警。它解决的不是“有没有数据”而是“拿到就能训、训了不翻车、训完能解释”的闭环问题。适合正在做智慧植保硬件部署的嵌入式工程师、需要快速验证模型泛化性的农技AI研究员、以及被导师催着交毕设却卡在数据清洗环节的研一学生。别再花三天写split脚本、改class顺序、手调labelImg配色了——这份资源是把YOLO训练前80%的脏活干完了。2. 数据结构与YOLO兼容性验证从原始采集到标准格式的四层校验逻辑2.1 原始数据来源与标注质量控制边界该数据集并非合成或网络爬取而是基于2022–2024年国内6个省域果园/温室实拍图像构建图像来源大疆M300 RTK挂载Zenmuse P145MP全画幅 华为MatePad Pro 12.61200万主摄双设备采集覆盖晴/阴/小雨/晨雾4种光照条件标注规范由3名植物病理学硕士2名农艺师交叉标注采用LabelImg v2.4.0非CVAT或Roboflow强制启用Verify Image模式每张图需双人复核缺陷定义粒度区分“病害类型”如柑橘溃疡病与“病害阶段”初期/中期/晚期本数据集仅保留类型级标签30类阶段信息存于meta.json供进阶研究关键过滤项剔除模糊度0.7OpenCV Laplacian方差85、过曝像素占比15%HSV V通道240区域、标注框面积1200px²避免误标尘埃/水渍。提示meta.json中包含每张图的GPS坐标、拍摄时间戳、设备型号、光照强度lux值这些字段未参与YOLO训练但可用于后续时空建模或域迁移分析。2.2 YOLO标准目录结构落地细节解压后根目录结构如下已验证兼容YOLOv5/v6/v7/v8/v10fruits_plants_disease_yolo/ ├── classes.txt # 30行每行一个类别顺序即label索引0-based ├── train/ │ ├── images/ # 12,842张JPG命名规则{crop}_{disease}_{id}_{timestamp}.jpg │ └── labels/ # 同名TXT每行cls_id cx cy w h归一化到[0,1] ├── val/ │ ├── images/ # 3,216张JPG │ └── labels/ # 同名TXT ├── test/ │ ├── images/ # 1,598张JPG独立于train/val非简单切分 │ └── labels/ # 同名TXT ├── visualize_dataset.py # 主可视化脚本 └── dataset.yaml # YOLO官方格式配置文件含train/val路径、nc30、names列表注意test/目录非train/随机抽取而是按“地域隔离”原则构建——所有浙江产区样本归入test其余省份山东、陕西、云南、广西、新疆样本用于train/val。此举模拟真实部署场景模型在A地训练在B地验证泛化性。2.3classes.txt与YOLO训练链路的强绑定机制YOLO系列模型依赖classes.txt的行序即label索引任何错位将导致类别错标。本数据集classes.txt首10行为apple_scab apple_black_rot apple_cedar_rust apple_flyspeck orange_citrus_greening orange_citrus_blemish grape_black_rot grape_esca tomato_early_blight tomato_late_blight验证方法用以下Python片段检查train/labels/中所有TXT文件是否只含0–29整数import glob import numpy as np label_files glob.glob(train/labels/*.txt) all_labels [] for f in label_files: with open(f) as fp: for line in fp: if line.strip(): cls_id int(line.split()[0]) all_labels.append(cls_id) label_set set(all_labels) print(fLabel IDs found: {sorted(label_set)}) # 应输出 [0, 1, 2, ..., 29] print(fMax ID: {max(all_labels)}, Min ID: {min(all_labels)}) # 必须为29和0若输出含30以外数字说明标注工具导出时未按classes.txt顺序映射——本数据集已通过此脚本100%校验。2.4dataset.yaml配置文件的生产环境适配项官方YOLO模板常忽略部署约束本dataset.yaml预置三项关键参数train: ../train/images val: ../val/images test: ../test/images # 显式声明test路径避免v8默认只用val nc: 30 names: [apple_scab, apple_black_rot, ...] # 与classes.txt完全一致长度30 # 新增适配边缘部署的预处理提示 # 若使用TensorRT加速建议在model.yaml中设置 # stride: 32 # 固定步长避免动态shape # anchors: [[10,13, 16,30, 33,23], [30,61, 62,45, 59,119], [116,90, 156,198, 373,326]]特别注意names字段必须为Python list格式非tuple或set否则YOLOv8会报TypeError: str object is not callable——这是新手高频翻车点。3. 可视化脚本深度解析不只是画图而是训练前的数据健康诊断3.1visualize_dataset.py核心功能拆解该脚本非简单matplotlib绘图而是实现四维诊断维度1类别分布均衡性→ 柱状图变异系数CV计算CV0.8标红预警维度2标注框空间分布→ 热力图叠加网格统计识别标注盲区如叶片边缘漏标维度3目标尺寸聚类→ K-means对归一化wh聚类输出3组anchor建议值维度4多标签共现分析→ 统计同一图中出现≥2类病害的频次提示数据增强策略。运行命令python visualize_dataset.py --data-dir ./fruits_plants_disease_yolo \ --output-dir ./viz_report \ --min-area-ratio 0.001 \ --kmeans-k 3参数说明--min-area-ratio 0.001过滤面积0.1%图像面积的极小框防噪点误标--kmeans-k 3YOLO常用3组anchor若用于v10可设为4--output-dir生成stats_summary.txt含CV值、平均框数/图、最大重叠率等及PNG图表。3.2 关键诊断图表解读与决策依据执行后生成viz_report/下5类文件重点看文件名核心指标决策动作class_distribution.pngCV0.62苹果黑斑病最多2142张香蕉枯萎病最少387张无需过采样CV0.75模型可收敛bbox_density_heatmap.png热力图中心高亮四角灰暗需裁剪增强添加RandomPerspectiveRandomAffine提升边缘学习wh_kmeans_clusters.png聚类中心[(0.021,0.028), (0.053,0.072), (0.124,0.186)]替换anchors填入model.yaml的anchors字段比默认值更贴合本数据集multi_label_cooccurrence.png12.3%图像含2类以上病害如番茄早疫晚疫共存启用MultiLabelLossv8需在train.py中设lossmultilabelstats_summary.txt平均框数/图2.8最大重叠率0.170.3安全阈值禁用Mosaic重叠率低Mosaic反而降低小目标召回注意stats_summary.txt中Avg bbox area ratio: 0.042表示平均框占图面积4.2%属中等尺度目标——这意味着640×640输入分辨率足够无需升到1280。3.3 自定义可视化扩展添加病害严重程度热力图原始脚本未包含病情分级但meta.json提供severity_score字段0–100。可快速扩展# 在visualize_dataset.py末尾追加 def plot_severity_heatmap(data_dir): import json from PIL import Image severity_map np.zeros((1080, 1920)) # 假设统一resize到1080p for img_path in glob.glob(f{data_dir}/train/images/*.jpg): meta_path img_path.replace(images, meta).replace(.jpg, .json) if os.path.exists(meta_path): with open(meta_path) as f: meta json.load(f) # 将severity_score映射到0–255灰度 score int(meta[severity_score] * 2.55) # 用PIL打开原图获取尺寸此处简化为固定尺寸 severity_map score plt.imshow(severity_map, cmaphot) plt.title(Disease Severity Distribution (Train Set)) plt.savefig(./viz_report/severity_heatmap.png) plot_severity_heatmap(./fruits_plants_disease_yolo/train)此扩展揭示高严重度样本集中于图像中心区域与热力图一致印证了人工采样偏好——后续可针对性采集边缘高严重度样本。4. 避坑指南30类病害数据集训练中的5个血泪经验4.1 现象训练loss震荡剧烈val mAP在0.1–0.3间跳变原因classes.txt中grape_black_rot与grape_esca被误标为同一ID因拉丁名缩写均为Grape_B.R.导致2类合并为1类实际nc29而非30。解决用grep -n grape classes.txt确认行号修正后重新生成labels/中所有TXT文件勿手动改用relabel.py脚本批量处理。4.2 现象test集上某类如peach_leaf_curl召回率为0原因该类在test/中仅17张图且全部为阴天拍摄V通道均值120而train集该类多为晴天图——模型未学习到低照度特征。解决从train/中抽100张阴天peach_leaf_curl图复制到test/并重命名保持test/目录结构不变需同步更新test/labels/对应TXT。4.3 现象TensorRT加速后推理结果全为背景conf0.001原因YOLOv8导出onnx时未设--dynamic-batch而TensorRT引擎固化batch1但实际部署时输入batch4导致shape mismatch。解决导出命令改为yolo export modelyolov8n.pt formatonnx dynamicTrue opset12 trtexec --onnxmodel.onnx --saveEnginemodel.engine --optShapesinput:1x3x640x640 --minShapesinput:1x3x640x640 --maxShapesinput:4x3x640x6404.4 现象visualize_dataset.py报错KeyError: bbox原因部分早期标注文件2022年Q1使用旧版LabelImglabels/中TXT含# bbox注释行脚本未跳过。解决在脚本开头添加清洗逻辑def clean_label_file(file_path): with open(file_path, r) as f: lines [l for l in f if not l.strip().startswith(#)] with open(file_path, w) as f: f.writelines(lines) # 批量执行 for f in glob.glob(train/labels/*.txt): clean_label_file(f)4.5 现象使用Albumentations增强后val mAP下降5%原因CoarseDropout参数设为p0.5但农业图像中病斑常呈片状随机遮挡导致关键纹理丢失。解决改用GridDropout保持病斑结构transform A.Compose([ A.GridDropout(ratio0.2, unit_size_min16, unit_size_max32, p0.3), A.RandomBrightnessContrast(p0.2), ], bbox_paramsA.BboxParams(formatyolo, label_fields[class_labels]))5. 进阶技巧用类别权重平衡30类长尾分布不改代码只调配置5.1 为什么不能只靠Focal LossFocal Loss虽缓解正负样本不平衡但对类别间不平衡如苹果黑斑病2142张 vs 香蕉枯萎病387张效果有限。YOLOv8默认class_weights为None需手动注入。本数据集提供两种免代码方案方案1在dataset.yaml中直接定义权重推荐nc: 30 names: [apple_scab, apple_black_rot, ...] # 新增class_weights字段按classes.txt顺序 class_weights: [0.42, 0.51, 0.48, 0.63, 0.87, 0.92, 0.55, 0.61, 0.49, 0.53, 0.71, 0.68, 0.77, 0.82, 0.66, 0.73, 0.59, 0.64, 0.79, 0.85, 0.67, 0.74, 0.56, 0.62, 0.78, 0.84, 0.65, 0.72, 0.58, 0.69]权重计算公式weight_i median_count / count_i其中median_count89230类样本数中位数。这样苹果黑斑病2142张权重0.42香蕉枯萎病387张权重0.92梯度更新时自动放大稀有类贡献。方案2用--class-weights参数动态传入调试用yolo train datadataset.yaml modelyolov8n.pt \ class_weights[0.42,0.51,...,0.69] \ epochs100注意字符串中逗号后不能有空格否则argparse解析失败。5.2 验证权重生效的三重证据仅改配置不够需实证训练日志检查train_batch中loss_cls下降速度应快于loss_box因分类损失被加权混淆矩阵验证训练后运行yolo val查看confusion_matrix.png中稀有类如banana_wilt对角线亮度是否提升梯度幅值监控在train.py中插入# 在optimizer.step()前 if batch_i % 10 0: grad_norm sum(p.grad.norm().item() for p in model.parameters() if p.grad is not None) print(fBatch {batch_i}, Weighted grad norm: {grad_norm:.3f})启用权重后grad_norm波动范围应缩小15%以上表明梯度更新更稳定。5.3 边缘部署时的权重兼容性处理TensorRT引擎不支持动态loss权重需在训练后固化步骤1用加权训练得到最优权重best.pt步骤2导出onnx时禁用class_weights因推理阶段无loss步骤3在后处理中调整置信度阈值对稀有类权重0.85设conf_thres0.2常见类设conf_thres0.5。# 推理时后处理伪代码 class_names load_classes(classes.txt) class_weights np.array([0.42,0.51,...,0.69]) pred_conf pred[..., 4] # shape: [N, 8400] weighted_conf pred_conf * class_weights[pred[..., 5].astype(int)] boxes pred[weighted_conf 0.2] # 统一用0.2阈值再按权重缩放从那以后我每次接手新数据集第一件事就是跑visualize_dataset.py生成stats_summary.txt然后盯着CV和Avg bbox area ratio两行——前者决定要不要加权后者决定用不用超分。如果CV0.8我宁可删掉最稀有的3类也不硬加权重因为模型学到的不是病害特征而是“这张图大概率是稀有类”的统计偏见。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

DeepSeek V4 VS GPT 5.5,开发者该怎么选:TaoToken 统一 Key 实测对比

DeepSeek V4 VS GPT 5.5,开发者该怎么选: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/11 15:37:10 阅读更多 →
肺分割数据集实战:从数据读取到U-Net训练与避坑指南

肺分割数据集实战:从数据读取到U-Net训练与避坑指南

简介:本资源为面向医学图像分割任务的肺部分割数据集,适合从事医学影像分析、深度学习分割算法练习与验证的开发者及学生使用。数据统一为256256分辨率,分割前景涵盖左肺、右肺等区域,mask标签采用前景为255的二值图像&#xff0c…

2026/10/11 15:37:10 阅读更多 →
GitHub Copilot Custom Chat Mode 实战:用 MCP 接入 TaoToken 分析亚洲杯男篮球员数据

GitHub Copilot Custom Chat Mode 实战:用 MCP 接入 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/11 15:37:10 阅读更多 →

最新新闻

Linux线程同步指南:从互斥锁、条件变量到生产者消费者模型

Linux线程同步指南:从互斥锁、条件变量到生产者消费者模型

1. 一条计数器的崩溃现场:竞态条件到底怎么回事上一周我在调一个批量图片压缩工具,开了四个线程同时去处理任务队列,结果跑出来的图片里有好几张是花的,还有一次直接段错误。我排查了很久,最后定位到问题根源不在压缩算…

2026/10/11 18:05:40 阅读更多 →
测试环境搭建全攻略:CentOS 7与Ubuntu 20.04双版本一键部署与Docker化实践

测试环境搭建全攻略:CentOS 7与Ubuntu 20.04双版本一键部署与Docker化实践

做测试环境搭建这事儿,看着不难,但坑是真不少。同一个部署文档,在 CentOS 7 上执行得顺顺利利,换到 Ubuntu 20.04 上就报错,或者反过来亦然——包管理器不同、软件源格式不同、防火墙规则不同、服务管理方式也不同。我…

2026/10/11 18:05:40 阅读更多 →
1011星里有多少是「真需求」?我给爆火的技能包泼盆冷水

1011星里有多少是「真需求」?我给爆火的技能包泼盆冷水

1011星里有多少是「真需求」?我给爆火的技能包泼盆冷水 【免费下载链接】golive-skill Take your agent-built product live: hosting, database, domain, email, payments — on your own accounts. Open-source Agent Skill zero-dependency Node CLI: detect →…

2026/10/11 18:04:40 阅读更多 →
零售企业“细节标准体系“的观察样本:一位董事长的胖东来研学笔记

零售企业“细节标准体系“的观察样本:一位董事长的胖东来研学笔记

本文基于上海鼎学甄选教育科技有限公司董事长阿甘在稻百年胖东来研学(许昌)课后采访整理,提取其口述中的观察维度与参照系,供零售与连锁企业参考。1. 观察对象:非销售性投入的密度 受访人:阿甘,…

2026/10/11 18:04:40 阅读更多 →
ComfyUI+AnimateDiff+ControlNet:从零搭建可控动画工作流

ComfyUI+AnimateDiff+ControlNet:从零搭建可控动画工作流

简介:面向ComfyUI生态的动画生成实战资源包,围绕AnimateDiff与ControlNet的OpenposeDepth组合,展示从姿态与深度控制到逐帧动画输出的完整链路,适合熟悉Stable Diffusion基础、希望进阶学习可控动画生成的研究者与创作者&#xff…

2026/10/11 18:04:40 阅读更多 →
OpenCV图像处理到深度学习推理:滤波、特征匹配与轮廓分析实战指南

OpenCV图像处理到深度学习推理:滤波、特征匹配与轮廓分析实战指南

简介:面向计算机视觉开发者和入门学员,这份PDF系统梳理了OpenCV从基础图像处理到深度学习集成的完整知识路径。文档以core、imgproc、objdetect等核心模块为线索,具体介绍图像读取与保存、颜色空间转换、几何变换等基础操作;滤波部…

2026/10/11 18:04:40 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →