YOLOv5烟叶病害检测:数据集、训练配置与避坑实战 简介YOLOv5烟叶病害识别项目资料包面向计算机、电子信息工程、数学等专业的大学生适用于课程设计、期末大作业和毕业设计也适合目标检测方向初学者快速上手。整套资料包含完整YOLOv5源码、已标注的烟叶病害数据集、对应标注文件、演示视频、PPT以及安装教程覆盖环境配置、模型训练、验证与结果演示全流程。包体共379个文件以jpg图像样本、txt标注信息、py源码、yaml模型配置、pt权重文件、mp4演示视频及docx环境部署文档等类型为主压缩包大小约717MB。目前已有946人学习下载。代码采用参数化编程注释详细、便于调整具备清晰模块划分能帮助读者快速理解YOLOv5目标检测实现逻辑并在自己数据集上迁移应用。 接到这个项目的时候先说下我的第一感受。烟叶病害识别这类农业AI落地的案例不算少但真正拿出来一个“标好数据能跑源码安装教程”三件套的资源还挺稀罕的。很多做植保智能化、农业巡检的朋友或者高校里做毕设选农业视觉方向的学生经常卡在“有算法没数据、有数据没标注”的尴尬地带。这套包里YOLOv5目标检测模型、烟叶病害数据集再加上标注文件是配套好的等于把抓数据、做标注这些耗时大头砍掉了。无论你是想快速跑通一个检测流程还是想把模型直接拿去部署到自己的巡检装置上这个组合都比较省心。一篇内容如果只讲“我有个模型和数据”价值有限。所以我花了两天时间把整套东西从目录结构、标签格式、训练配置到踩坑点全部拆了一遍。这篇内容会比较长讲的全是可以直接套用的实操方法和基于这套资源延伸出来的避坑经验适合正在训练YOLOv5模型但总被数据或环境卡住的人也适合刚接触农业视觉、想从数据集入手的初学者。1. 项目整体设计与选型逻辑1.1 为什么是YOLOv5来做烟叶病害检测烟叶病害识别的难点在于病害形状不规则、颜色变化大、早期病斑非常细小。如果用传统图像分类整张图给一个标签很容易漏掉局部小病斑如果用Faster R-CNN这种两阶段检测器精度有保障但推理速度在嵌入式或普通CPU设备上不太理想。YOLOv5处于一个很合适的位置单阶段检测速度和精度的平衡度好代码工程化程度高标注格式直接用YOLO的txt格式和LabelImg、Roboflow等标注工具可以无缝衔接。对我个人来说选YOLOv5还有一个现实原因生态成熟。不管是Windows还是Linux有大量现成的环境配置文档模型导出到ONNX、TensorRT的路线也清晰。如果你后续想部署到Jetson Nano或者树莓派上做边缘端识别YOLOv5的权重导出链路是最顺的之一。1.2 数据集资源拆解从目录到标注文件拿到压缩包后建议先不要急着解压跑代码先把目录结构看清楚。一个合格的目标检测项目数据集部分至少要有这几块images/训练和验证用的原始图片烟叶病害图像一般包括大田拍摄、室内拍摄、不同光照条件等。labels/对应的YOLO格式标注文件每一行对应一个目标框。classes.txt或data.yaml类别名称和类别数量定义。划分好的train.txt和val.txt记录哪些图参与训练、哪些图参与验证。这个包里的标注文件是按YOLOv5格式给的也就是每个txt文件名和图片名一一对应内容每行是class_id x_center y_center width height坐标值是归一化后的0到1之间小数。如果打开一个txt文件发现很多行说明这张图上可能有个特别密的病斑区域如果大量txt文件是空文件排查一下是不是漏标或者类别太稀疏这会影响后续训练效果。YOLO标注格式换算说明假设一张图片宽w、高h某个病斑框左上角(x_min, y_min)、右下角(x_max, y_max)LabelImg这类工具导出的XML里是绝对像素坐标转成YOLO格式要做一次换算x_center ((x_min x_max) / 2) / w y_center ((y_min y_max) / 2) / h box_width (x_max - x_min) / w box_height (y_max - y_min) / h如果你后续自己补标了几百张图建议写一个小脚本批量转别在Excel里手算。手算费时间不说一旦坐标系搞混训练出来的模型会出现严重的预测框偏移。2. 环境搭建与核心模块实操2.1 快速安装YOLOv5依赖我建议用Anaconda建一个独立虚拟环境避免把系统Python环境搞乱。以下是Windows和Ubuntu都通用的步骤conda create -n yolov5 python3.8 conda activate yolov5 cd yolov5-master pip install -r requirements.txtrequirements.txt里会装上torch、torchvision、opencv-python、matplotlib、numpy这些核心库。注意PyTorch的版本要和CUDA驱动匹配否则即使装好了也调用不了GPU。如果电脑显卡是NVIDIA的装之前先用nvidia-smi看下驱动最高支持的CUDA版本再对应装PyTorch。如果只是纯CPU环境比如老笔记本或者没有独立显卡的机器也能跑就是训练速度会慢很多。实测下来几百张烟叶病斑图用CPU训练200个epoch可能会等很久这种情况更适合下载官方预训练好的权重直接做推理验证或者调小图像尺寸和batch size做一次“能跑通”的流程验证。2.2 目录结构与源码模块说明安装完依赖后解压源码包目录结构大致如下yolov5-master/ ├── data/ # 存放数据集配置yaml ├── models/ # 模型结构定义 ├── utils/ # 通用工具函数 ├── train.py # 训练入口 ├── detect.py # 推理入口 ├── val.py # 模型评估入口 └── export.py # 模型导出入口在models/下有yolov5s、yolov5m、yolov5l、yolov5x这几种配置。同一份数据s版本训练快、显存占用小但精度相对低一点x版本精度高、速度慢。烟叶病斑这种小目标我个人经验是用s或m起步比较合理直接上x如果数据量不够反而容易过拟合。2.3 先跑通推理再动手训练拿到源码后建议第一次运行不直接训练而是先用官方预训练权重跑一次detect.py确认环境没问题python detect.py --weights yolov5s.pt --source data/images/bus.jpg如果能看到输出图像上正确框出人和车说明环境配置成功PyTorch和OpenCV协同工作正常。这时再把手头的烟叶样本图丢进去验证一下“没训练前模型是什么效果”通常是什么都框不出来或者给出完全错误的类别——这很正常因为官方权重是在COCO数据集上训练的根本没有烟叶病害的类别知识。这一步的意义是确认流程本身通顺后续就算训练效果不好也能确定是数据或参数的问题而不是环境问题。3. 数据集规范与训练全流程实战3.1 数据配置文件的编写YOLOv5训练前需要指定一个数据描述文件一般叫yc.yaml名字随意内容结构是train: D:/datasets/yancao/images/train val: D:/datasets/yancao/images/val nc: 3 names: [black_shank, tobacco_mosaic, frog_eye]nc是类别总数names是类别名列表顺序必须和标注文件里的class_id一一对应。比如标注txt里第一行开头是0就表示这个框对应names列表里第一个类别的病害。如果这里顺序搞反训练出来的模型就是“所有类别整体错位”检测结果会非常滑稽属于新手最容易踩的坑。需要注意train和val路径要用绝对路径或者确保相对路径是从当前运行目录能够找到的。很多人训练时报AssertionError: train: No images in ...多半是路径写错或图片目录为空。3.2 训练指令建议与超参数初调以最短路径跑通训练为例python train.py --data yc.yaml --weights yolov5s.pt --img 640 --epochs 200 --batch-size 16--weights yolov5s.pt加载COCO预训练权重做迁移学习收敛速度远快于随机初始化。--img 640输入图像尺寸。烟叶病斑很多是小目标图像像素本身如果很大建议先等比缩放到640或800别贪心直接拉到1280显存一下就爆了。--batch-size根据显存大小调节一般8G显存跑yolov5s用16是舒服的显存不够就减半。--epochs 200数据量不大、迁移学习场景下200轮已经能看到明显的收敛趋势。训练过程中YOLOv5会在runs/train/exp*目录下自动记录各种指标包括box_loss、cls_loss、mAP0.5等。要时刻关注训练曲线如果训练损失下降、验证损失反而上升大概率是过拟合了可以把epochs缩小、加一些数据增强或者直接提高验证集图片的多样性。关于自适应anchor策略YOLOv5默认在训练前期会自动计算数据集的目标框尺寸聚类以确定合适的anchor。烟叶病斑普遍是小而密集的框如果标注框普遍比COCO的默认anchor小很多建议在训练时加上--noautoanchor参数关闭自动调整手动修改models/yolov5s.yaml里的anchor值。关闭自动调整后anchor始终保持初始值。我的经验是小目标多的数据集把anchor设得更小更密检测召回率会有明显提升否则小病斑很容易丢失。3.3 评估预测效果与模型选择训练完看结果不要只看总mAP还要看每个类别的AP。烟叶病害类别之间的形态差异可能比较大有的病斑是圆形斑点有的是大面积坏死导致不同类别的AP相差很大。这时候值得检查对应类别的标签数量如果某个类别样本只有十几张那AP低是必然的优先补充该类别的训练数据。推理时使用training过程生成的最佳权重python detect.py --weights runs/train/exp/weights/best.pt --source ./test_images/ --conf-thres 0.25 --iou-thres 0.45--conf-thres默认0.25表示置信度低于0.25的框会被过滤。如果检测结果漏检多可以把置信度阈值调低到0.1再跑一遍如果误检多说明一批明显不是真实病斑的框被保留下来就把阈值调到0.4或0.5。这是一个迭代找平衡的过程没有绝对最优。4. 踩坑实录与常见问题排查4.1 环境与安装类问题Q1安装requirements依赖时非常慢或个别库装不上建议先换国内镜像源再来安装。实测用清华PyPI镜像能把安装时间缩短数倍。pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpletorch和torchvision如果装不上单独去PyTorch官网选择对应CUDA版本下载不要硬耗在镜像上。Q2显存不足CUDA out of memory优先把batch-size减小到4或2其次把图像尺寸从640降到512或416。如果还不行换yolov5s为更轻量的版本或者开启梯度累积在YOLOv5的代码里对batch进行拆分。Q3Windows下训练卡在dataloader阶段这是因为Windows的DataLoader默认num_workers进程启动逻辑和Linux不同。在训练命令里加上--workers 0问题基本会消失。4.2 数据集与标注常见问题Q4训练时提示标注文件为空或标签数始终为0检查标注文件路径中的文件名是否和图片文件名完全一致包括后缀不同也要注意jpg和JPG在部分环境下会出问题。YOLOv5按图片basename查找同名txt如果文件名长短不一致就会报空标签。Q5验证集loss下降但mAP波动大可能验证集图片太少或者验证集中病斑类型和训练集偏差太大。建议重新划分数据集尽量保证每个类别在train和val中的分布比例接近总体占比。这种场景下随机划分不可靠最好是按类别数量做分层抽样。Q6烟叶病斑太小检测框偏大且定位不准这个问题比较普遍。我实测有效的办法有三个一是训练时把--img参数调大比如从640提到960可保留小病斑的像素细节二是检查标注框是不是刚好框住整个病斑有很多标注框把“病斑周围发黄区域”都框进去了导致模型学习到的是“大范围变色”而不是“病斑”三是用小anchor上面提到过的--noautoanchor 修改anchor值对小目标检测效果明显。4.3 模型训练效果优化建议分类不均衡怎么办烟叶常见病害中有的类型几乎占了数据集的70%有的只有5%。如果总mAP还不错但某个稀有类别的AP几乎为0最简单的处理方法是对稀有类别的图像做额外的数据增强样本比如旋转、色彩抖动、复制粘贴小病斑块然后再把该类别图片重复采样进训练集。YOLOv5本身也支持--image-weights它会给样本少的类别更高采样权重特别适合这种场景。数据量太小能不能训如果全套数据只有两三百张图正常训练效果不稳定。我建议先做迁移学习跑通整个流程确认代码和数据格式没问题。之后再去采集更多自然环境下的大田数据特别是不同光照角度、不同生长阶段的烟叶图像。模型泛化能力靠数据多样性撑起来这句话在烟叶病害这种外观差异极大的场景里体现得特别明显。5. 实操总结与进一步扩展方向整套跑下来的感受是YOLOv5烟叶病害识别项目最核心的价值不在于那几个训练命令而在于“数据、标注、配置是一次齐全的”。目标检测项目里数据准备占整个流程70%以上的时间和精力套装资源把最重的工作预置好了后面训练模型、调试参数就成了纯算法优化层面的工作。给出几个后续可以继续往下走的方向比如把训练好的模型导出为ONNX然后用TensorRT在Jetson设备上部署做一个烟叶病害巡检的原型机这样在移动设备上实时推理的帧率会高很多python export.py --weights best.pt --include onnx --img 640再比如烟叶病斑有小而密的特点试着在YOLOv5基础上加入注意力模块或者用YOLOv8替换掉骨架重新训练比较同数据集下不同模型结构的精度差别。不过YOLOv8的label格式和v5是基本兼容的只是配置文件结构有细微差异切换成本不高。最后唠叨一句无论用哪套资源拿到后先确认你的实际应用场景和原始数据的需求差。模型训练出来后拿到大田实拍图上做一次野测是必须的桌面上看着变现良好的模型在实际光照、尘土、叶片叠影环境下可能打个折扣。把基准线提前定好后续做数据扩充或算法调优时还能不慌。本文还有配套的精品资源点击获取

相关新闻

最新新闻

从Telegram for macOS看大型Objective-C项目的架构设计模式

从Telegram for macOS看大型Objective-C项目的架构设计模式

从Telegram for macOS看大型Objective-C项目的架构设计模式 Telegram for macOS作为一款经典的即时通讯应用,其Objective-C代码库蕴含了丰富的架构设计经验。本文将深入剖析这一大型项目如何运用MVC、委托模式和单例管理等核心设计思想,打造稳定高效的桌…

2026/9/8 20:00:41
Impeccable 的 animate 命令:从运动论题到验证清单的前端动效实战工作流

Impeccable 的 animate 命令:从运动论题到验证清单的前端动效实战工作流

Impeccable 的 animate 命令:从运动论题到验证清单的前端动效实战工作流 【免费下载链接】impeccable The design language that makes your AI harness better at design. 项目地址: https://gitcode.com/GitHub_Trending/im/impeccable animate.md 是 Impe…

2026/9/8 20:00:41
一句话+WPS多维表格:从零搭建任务智能助手的实操指南

一句话+WPS多维表格:从零搭建任务智能助手的实操指南

说实话,我以前对“多维表格”这类东西是有点偏见的。总觉得表格就是表格,Excel用了十年,除了偶尔卡成白屏,好像也没啥不能忍的。真正让我改观的,是上个月被任务追着跑的那个周五——同时开着四个项目文档、十几个待办清…

2026/9/8 20:00:41
Codex + MCP 实战:从 Figma 设计稿到可运行页面的完整流程

Codex + MCP 实战:从 Figma 设计稿到可运行页面的完整流程

说实话,把 Figma 设计稿变成可以跑的页面,这事儿我前后折腾过不少方案:Dev Mode 复制样式、插件导出代码、交给程序员照着稿子手写…… 每种都有各自的问题,要么生成的是“半成品”,要么只能给你一堆标注,终…

2026/9/8 20:00:41
Puppeteer Browser.pages() 深度解析:枚举浏览器中所有打开的页面

Puppeteer Browser.pages() 深度解析:枚举浏览器中所有打开的页面

Puppeteer Browser.pages() 深度解析:枚举浏览器中所有打开的页面 【免费下载链接】puppeteer JavaScript API for Chrome and Firefox 项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer 本篇围绕 Puppeteer 官方 API 文档中 Browser.pa…

2026/9/8 20:00:41
用STM32打造智能奶瓶:从硬件选型到PID温控实战

用STM32打造智能奶瓶:从硬件选型到PID温控实战

简介:面向嵌入式开发者和智能硬件设计者,这份基于STM32的智能奶瓶项目源码包提供了完整工程源码、配套设计文档与移动端APP,可直接复刻一套软硬件结合的智能奶瓶方案。系统以STM32为主控,集成DS18B20温度传感器、HX711称重模块与水…

2026/9/8 19:55:40