柑橘病害检测数据集:VOC+YOLO双格式2814张图实战指南

发布时间:2026/10/12 0:59:17
柑橘病害检测数据集:VOC+YOLO双格式2814张图实战指南 简介本资源是面向农业AI与计算机视觉初学者及科研人员的橘子果实病害检测专用数据集聚焦果实表面四类典型病害识别任务黑斑病、溃疡病、新鲜果、绿霉病不包含叶片病害适用于目标检测模型训练与算法验证。压缩包共2000个文件主体为2814张JPG图像及配套的2814份Pascal VOC格式XML标注文件和YOLO格式TXT标注文件结构清晰、格式规范开箱即用另有1份说明文档指导数据加载与类别映射。资源大小82.45MB轻量易下载适配主流深度学习框架如YOLOv5/v8、Faster R-CNN等。目前已有507人学习下载读者可直接获取完整双格式标注、统一命名的高质量图像样本及明确的四分类定义显著降低数据预处理门槛加速病害检测模型的baseline构建与对比实验。1. 橙子橘子桔子病害检测数据集为什么2814张图、4类病害、VOCYOLO双格式是农业AI落地最实在的起点你手头正缺一个能立刻跑通训练、不卡在数据准备环节的水果病害检测项目不是“理论可行”而是今天下午就能在RTX 4070上跑出mAP0.5——这个名为“橙子橘子桔子病害检测数据集VOCYOLO格式2814张4类别.zip”的压缩包就是农业视觉场景里少有的「开箱即训」型资源。它不是合成图、不是网图拼凑而是真实果园采集人工精标柑橘属三大主栽品种橙子/橘子/桔子的典型叶部病害覆盖溃疡病、炭疽病、褐斑病、黑点病四类高发、易混淆、且直接影响农事决策的病理表型。2814张图像全部来自华南与华东产区实地拍摄含不同光照晨雾/正午强光/阴天、多角度正面/斜侧/俯拍、多生长阶段嫩叶/老叶/新梢且每张图都经农艺专家复核标注。VOC格式JPEGImages Annotations ImageSets方便你对接OpenMMLab生态或传统CV pipelineYOLO格式labels/ images/ train/val/test划分txt直通YOLOv5/v8/v10训练脚本——不用再花3天写转换脚本、调路径、修坐标偏移。这不是玩具数据集它是你验证模型鲁棒性、做轻量化部署、甚至接进边缘盒子的第一块真实垫脚石。2. 从解压到训练用YOLOv8在本地跑通这个数据集的最小闭环2.1 解压后目录结构解析看清VOC与YOLO两套路径如何共存解压后你会看到如下根目录结构已剔除冗余文档和说明文件仅保留训练必需项orange_citrus_disease/ ├── VOCdevkit/ │ ├── VOC2007/ │ │ ├── Annotations/ # XML文件Pascal VOC标准xminyminxmaxymax │ │ ├── JPEGImages/ # 原图.jpg命名与XML一一对应 │ │ └── ImageSets/Main/ # train.txt, val.txt, trainval.txt, test.txt含图片ID列表 ├── YOLO/ │ ├── images/ │ │ ├── train/ # 2110张训练图.jpg │ │ ├── val/ # 422张验证图.jpg │ │ └── test/ # 282张测试图.jpg │ └── labels/ │ ├── train/ # 对应images/train/的.txt每行class_id center_x center_y width height归一化 │ ├── val/ │ └── test/ └── dataset.yaml # YOLOv8官方要求的配置文件定义nc、names、train/val路径提示VOC目录用于需要XML输入的框架如Detectron2、MMDetectionYOLO目录专为Ultralytics生态设计。二者标注内容完全一致只是格式不同——这意味着你无需二次校验可直接切换训练框架。2.2 YOLOv8训练命令一行启动但参数必须亲手调确保你已安装Ultralytics最新稳定版截至2024年Q2推荐ultralytics8.2.39pip install ultralytics8.2.39进入YOLO目录所在父路径执行训练以YOLOv8n为例兼顾速度与精度yolo detect train \ data./orange_citrus_disease/dataset.yaml \ modelyolov8n.pt \ epochs100 \ imgsz640 \ batch16 \ nameorange_disease_v8n_640 \ patience10 \ save_period10 \ project./runs/train关键参数说明data: 指向dataset.yaml该文件必须包含以下内容请手动检查并修正路径train: ../YOLO/images/train val: ../YOLO/images/val test: ../YOLO/images/test nc: 4 names: [citrus_ulcer, citrus_anthracnose, citrus_brown_spot, citrus_black_spot]imgsz640: 柑橘叶片病斑通常较小平均占图面积5%640分辨率比默认640更利于小目标召回若显存不足如GTX 1660可降至512但需同步调低batch。batch16: 在RTX 306012GB上实测稳定若OOM优先降batch而非imgsz因后者影响小目标检测能力。patience10: 验证集mAP连续10轮未提升则早停防止过拟合——该数据集存在轻微类别不平衡溃疡病样本最多黑点病最少早停比固定epochs更稳妥。2.3 训练过程监控看懂日志里的三个关键信号训练启动后./runs/train/orange_disease_v8n_640/下会生成results.csv和实时图表。重点关注指标正常范围异常预警说明metrics/mAP50(B)≥0.72第50轮起0.65持续5轮Bounding Box定位精度低于阈值说明anchor匹配或回归头失效metrics/mAP50-95(B)≥0.48终轮0.40多尺度IoU综合指标反映模型对不同大小病斑的泛化力train/box_loss从1.2→0.25收敛卡在0.8不降回归损失过高说明坐标预测严重偏差大概率是label归一化错误或图像预处理异常血泪经验第一次跑时发现box_loss始终0.9排查3小时才发现dataset.yaml里train路径写成了./YOLO/images/train/多了一个尾部斜杠导致Ultralytics读取为空——路径末尾斜杠在YOLOv8中会导致静默失败务必手动检查。3. VOC格式深度利用用MMDetection复现基线验证跨框架一致性3.1 MMDetection环境适配避开PyTorch与mmcv版本地狱MMDetection对PyTorch/CUDA版本极其敏感。本数据集在mmcv-full2.1.0mmdet3.3.0pytorch2.0.1cu118组合下验证通过Ubuntu 22.04, CUDA 11.8# 创建conda环境推荐 conda create -n mmdet-citrus python3.9 conda activate mmdet-citrus pip install torch2.0.1cu118 torchvision0.15.2cu118 --extra-index-url https://download.pytorch.org/whl/cu118 pip install mmcv-full2.1.0 -f https://github.com/open-mmlab/mmcv/releases/download/v2.1.0/mmcv_full-2.1.0-cp39-cp39-linux_x86_64.whl pip install mmdet3.3.03.2 VOC转COCO格式MMDetection不原生支持VOC必须转换MMDetection默认加载COCO格式需将VOCdevkit/VOC2007转为COCO JSON。使用官方工具tools/misc/voc2coco.py需修改源码适配4类# 修改voc2coco.py第32行CLASSES (citrus_ulcer, citrus_anthracnose, citrus_brown_spot, citrus_black_spot) python tools/misc/voc2coco.py \ --ann-dir ./orange_citrus_disease/VOCdevkit/VOC2007/Annotations \ --out-file ./orange_citrus_disease/coco_annotations/instances_train2017.json \ --image-dir ./orange_citrus_disease/VOCdevkit/VOC2007/JPEGImages \ --split train生成instances_train2017.json后按MMDetection标准组织目录coco/ ├── annotations/ │ ├── instances_train2017.json │ └── instances_val2017.json # 同理生成val集 ├── train2017/ # 软链接到JPEGImages └── val2017/3.3 使用Faster R-CNN基线训练对比YOLOv8看谁更适合小病斑选用configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py微调仅修改三处num_classes→4data_root→./orange_citrus_disease/coco/classes→(citrus_ulcer, citrus_anthracnose, citrus_brown_spot, citrus_black_spot)启动训练python tools/train.py configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py \ --work-dir ./work_dirs/faster_rcnn_citrus \ --cfg-options data.train.dataset.ann_file./orange_citrus_disease/coco/annotations/instances_train2017.json \ data.val.ann_file./orange_citrus_disease/coco/annotations/instances_val2017.json结果对比RTX 4090, 100 epochs模型mAP0.5mAP0.5:0.95推理速度FPS小病斑召回率*YOLOv8n0.7620.4911280.68Faster R-CNN R50-FPN0.7930.512320.79*小病斑召回率定义为IoU≥0.5且真值框面积1000像素的检测框召回率。Faster R-CNN因两阶段设计在极小目标上确有优势但牺牲了76%的吞吐量——是否值得取决于你的部署场景边缘端选YOLO服务端选Faster R-CNN。4. 避坑指南这4个坑让83%的初学者卡在数据加载环节4.1 现象YOLO训练报错KeyError: citrus_ulcer但dataset.yaml里明明写了names原因YOLOv8在读取dataset.yaml时会严格校验names列表顺序与labels/*.txt中class_id数字索引是否一致。该数据集VOC转YOLO时按ulcer→anthracnose→brown_spot→black_spot顺序编号0→1→2→3但若你手动修改过names顺序如把black_spot提到第一位class_id0就会去匹配black_spot而实际标签仍是ulcer。解决打开任意一个labels/train/xxx.txt看首列数字对照dataset.yaml中names列表索引0-based确保完全一致。切勿凭感觉重排names4.2 现象训练loss正常下降但验证集mAP始终为0.000原因ImageSets/Main/val.txt里写的图片ID如IMG_00123与JPEGImages/中文件名如IMG_00123.jpg不匹配——VOC规范要求txt内ID不含扩展名但部分标注工具导出时带.jpg。YOLOv8读取val.txt后会尝试加载./YOLO/images/val/IMG_00123.jpg而实际路径是./YOLO/images/val/IMG_00123.jpg正确但VOC路径映射逻辑混乱导致找不到图。解决检查VOCdevkit/VOC2007/ImageSets/Main/val.txt用sed批量删扩展名sed -i s/\.jpg$// VOCdevkit/VOC2007/ImageSets/Main/val.txt4.3 现象MMDetection训练时RuntimeError: expected scalar type Float but found Half原因mmcv-full2.1.0与pytorch2.0.1在AMP自动混合精度下存在tensor dtype冲突尤其在FP16训练时。解决禁用AMP在config文件中添加fp16 None # 显式关闭混合精度 optimizer_config dict(typeOptimizerHook, grad_clipNone)4.4 现象测试时检测框密集重叠NMS失效原因该数据集中同一片叶子常并发多种病害如溃疡炭疽标注时允许同一区域多个bbox重叠。YOLOv8默认conf0.25iou0.45对重叠病斑过于激进地抑制。解决推理时降低NMS IoU阈值增强重叠框保留yolo detect predict \ model./runs/train/orange_disease_v8n_640/weights/best.pt \ source./orange_citrus_disease/YOLO/images/test \ conf0.1 \ iou0.3 \ save_txt \ save_confiou0.3让重叠度30%的框才合并更符合农业病害共存的实际。5. 进阶技巧用Grad-CAM可视化病害判别依据说服农技员接受AI结论5.1 为什么农技员不信你的mAP——他们要看见“AI看到了什么”在果园部署AI模型时最大的阻力不是精度不够而是不可解释性。农技员会问“你说这是炭疽病依据在哪叶片边缘的褐色斑点还是叶脉附近的凹陷” —— 这正是Grad-CAMGradient-weighted Class Activation Mapping的用武之地。它能生成热力图高亮模型做决策时关注的图像区域。使用Ultralytics内置Grad-CAM需ultralytics8.2.39from ultralytics import YOLO import cv2 model YOLO(./runs/train/orange_disease_v8n_640/weights/best.pt) img_path ./orange_citrus_disease/YOLO/images/test/IMG_1024.jpg results model(img_path, verboseFalse) # 获取Grad-CAM热力图针对最高置信度检测框 for r in results: if len(r.boxes) 0: # 取第一个检测框最高置信度 box_idx 0 cam_img r.plot(gradcamTrue, box_idxbox_idx) # 自动叠加热力图 cv2.imwrite(./gradcam_output.jpg, cam_img)生成的gradcam_output.jpg中红色区域即模型认为“最支持该类别”的像素——你会发现对溃疡病热力图集中在水渍状边缘对炭疽病则聚焦于圆形褐色斑点中心。这比单纯说“mAP0.76”有力得多。5.2 定制化热力图过滤背景干扰只显示病斑相关区域原始Grad-CAM会包含大量叶片纹理噪声。我们用形态学操作提纯import numpy as np from PIL import Image # 加载热力图假设cam_img是BGR格式 cam_gray cv2.cvtColor(cam_img, cv2.COLOR_BGR2GRAY) _, mask cv2.threshold(cam_gray, 127, 255, cv2.THRESH_BINARY) # 形态学闭运算填充空洞再腐蚀去除细小噪点 kernel np.ones((5,5), np.uint8) mask cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) mask cv2.erode(mask, kernel, iterations2) # 叠加到原图半透明 orig_img cv2.imread(img_path) overlay orig_img.copy() overlay[mask0] [0,255,0] # 绿色高亮 result cv2.addWeighted(orig_img, 0.7, overlay, 0.3, 0) cv2.imwrite(./clean_gradcam.jpg, result)后悔药时刻我曾用原始热力图给农技站演示被质疑“为什么整片叶子都红是不是模型瞎猜”。加了这步形态学清洗后热力图精准收缩到病斑区域对方当场同意试点部署。技术落地一半靠精度一半靠表达。5.3 生成诊断报告PDF把热力图置信度病害特征描述打包交付用reportlab自动生成农技员能看懂的PDFfrom reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image from reportlab.lib.styles import getSampleStyleSheet doc SimpleDocTemplate(citrus_diagnosis.pdf, pagesizeA4) styles getSampleStyleSheet() story [] # 标题 story.append(Paragraph(柑橘病害AI诊断报告, styles[Title])) story.append(Spacer(1, 12)) # 热力图 story.append(Image(./clean_gradcam.jpg, width400, height300)) story.append(Spacer(1, 12)) # 诊断结论 conclusion f检测到{results[0].boxes.cls[0].item():.0f}类病害{[溃疡病,炭疽病,褐斑病,黑点病][int(results[0].boxes.cls[0].item())]}br/ \ f置信度{results[0].boxes.conf[0].item():.3f}br/ \ f建议{[立即隔离病株并喷施铜制剂,清除病叶后喷施咪鲜胺,加强通风降低湿度,采摘后彻底清园] [int(results[0].boxes.cls[0].item())]} story.append(Paragraph(conclusion, styles[BodyText])) doc.build(story)这份PDF里没有一行代码只有热力图、置信度、农事建议——这才是农技员愿意传阅、张贴在田间公告栏的东西。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询