🌱 基于YOLO和大语言模型的辣椒病虫害智能识别


1. 项目研究背景与意义
辣椒作为全球广泛种植的重要经济作物,在生长过程中极易受到各类病虫害侵袭(如细菌性斑点病、卷叶病毒病等)。传统的农业病害诊断严重依赖农业专家的经验,诊断周期长且具有主观性,无法满足现代化、规模化农业生产中“早发现、早治疗”的需求。
本项目旨在设计并实现一套辣椒病虫害智能识别与专家辅助诊断系统。系统通过轻量级目标检测模型(YOLOv8)对农田实拍图像进行毫秒级、高精度的病害病灶定位与分类;同时,系统引入了最新的开源多模态大语言模型(LLaVA)与 RAG(检索增强生成)技术,在识别病害的基础上提供具体、科学、交互式的农业防治与用药建议。本系统的研究不仅能够有效降低农业减产风险,也为探索深度学习与大模型在农业场景的工程化落地提供了重要参考价值,完全契合计算机与农业交叉类专业的研究生毕业设计工作量及深度要求。




2. 数据集详细描述
本项目核心训练与评测数据基于定制化的 Chili Leaf Disease Dataset 辣椒叶片病害图库。
2.1 数据集分布与类别
数据集包含常见的 6 种分类,涵盖了辣椒生长期最易感染的生理性与侵染性病害:
- 细菌性斑点病 (Bacterial Spot):叶片水渍状黑褐色不规则病斑。
- 尾孢叶斑病 (Cercospora Leaf Spot):褪绿小点,灰白色中央与深褐色边缘。
- 卷叶病毒病 (Curl Virus):叶片变小、增厚、皱缩及边缘向上卷曲。
- 营养缺乏 (Nutrition Deficiency):非侵染性的均匀黄化或叶脉失绿现象。
- 白斑病 (White spot):圆形或近圆形的白色至灰白色病斑。
- 健康叶片 (Healthy Leaf):无病害的正常健康参照样本。
2.2 数据集处理工程
项目中内置了专门针对原始目录设计的数据集清洗切分脚本(convert_to_yolo.py)。该脚本实现了:
- 自动抽取划分:严格按照
80% : 20%的比例自动划分训练集(Train)和验证集(Val)。 - 坐标归一化转换:自动将各类别的图片提取并映射至 YOLO 标准能够解析的相对坐标 TXT 标签文件。
- 配置生成:自适应生成
data.yaml配置清单,直接对接模型训练后端。
3. 核心算法与理论基础
3.1 目标检测算法:YOLOv8
本项目选用 Ultralytics 发布的最先进目标检测框架 YOLOv8 作为核心视觉识别底座。
- 骨干网络 (Backbone):采用了增强版的 CSPDarknet 设计,引入了 C2f 模块来取代原有的 C3,强化了网络在提取不同尺度病灶特征时的信息流梯度,从而提高对细小斑点病害的感知能力。
- 无锚框设计 (Anchor-Free):YOLOv8 摒弃了由人工经验设定的 Anchor Boxes,直接预测目标中心点及其边界距离(Decoupled Head),使模型具备极强的泛化能力。
3.2 多模态视觉语言模型:LLaVA
除了冰冷的框选和标签分类,本项目集成了视觉指令微调模型 LLaVA (Large Language-and-Vision Assistant)。
- LLaVA 将视觉编码器(如 CLIP ViT-L/14)与大语言模型(LLaMA/Vicuna)相结合,具备极强的看图说话能力。
- 项目中封装了针对农业领域的
System Prompt,引导 LLaVA “扮演顶尖农业专家”。
3.3 检索增强生成 (RAG)
为防止 AI 大模型“幻觉”现象发生错误用药,系统设计了 RAG 流程。当 YOLOv8 识别出具体病原时,系统会自动从 SQLite 知识库抽取该病害的标准《防治方法》和《症状描述》,拼接成 Context 送入大模型,使得最终生成的农药推荐准确可控。
4. 系统总体架构与模块设计
系统采用前后端分离的主流现代前后端架构。
┌───────────────────────────────────────────────────────────────┐
│ 前端 Web 展示层 (React + Vite) │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ ┌────────┐ │
│ │ 智能检测台 │ │ 数据分析大屏│ │ 模型在线训练│ │农业知识库│ │
│ └──────────────┘ └──────────────┘ └─────────────┘ └────────┘ │
└─────────────────────────┬─────────────────────────────────────┘
│ HTTP RESTful API (Axios通信)
┌─────────────────────────┴─────────────────────────────────────┐
│ 核心业务逻辑层 (FastAPI + Python) │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ YOLO 推理引擎 │ │ RAG 与多模态控制│ │ 多线程训练调度│ │
│ └──────────────┘ └──────────────┘ └─────────────┘ │
└────────┬────────────────────────┬──────────────────────┬──────┘
│ │ │
┌────────┴────────┐ ┌────────┴────────┐ ┌────────┴────────┐
│ SQLite 关系数据库│ │ 本地文件系统/模型│ │ Ollama 模型微服务│
│ (知识库/检测历史)│ │ (YOLO 权重/源图片)│ │ (LLaVA-13B) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
包含的五大主打前台应用:
- Dashboard 智能诊断:支持拖拽图片上传、病害实时框选与渲染、专家交互界面的呈现主体。
- Statistics 数据大屏:通过读取历史数据,统计出患病率排行、健康率走势图,并配合简单的规则提示提供系统级农场预警分析。
- Training 模型训练:用户可以在网页端自主选择数据集、设置 Epoch、并发 Batch,直接驱动后端的 YOLO 开启炼丹,并实时追踪 Loss、mAP 和精确召回率指标与前端进度条交互。
- Knowledge Base 农业词典:完整的独立网格化排布的图文库,列出本项目支持的常见病害指南卡片。
- History 留存记录:支持回看与销毁过往的诊断数据。
5. 核心代码模块解析
本项目结构清晰,各司其职,适合基于此扩展和二次开发:
backend/main.py: 基于 FastAPI 的路由中枢系统。处理请求鉴权、静态资源代理挂载,以及协调detector和analyzer返回病斑位置坐标与聊天文字。backend/engine.py: AI 模型调度工厂。封闭实现了YOLODetector(使用 PyTorch 驱动硬件进行推断) 及LLaVAAnalyzer(实现图像的 Base64 转码及动态 Prompt 构建以连接本地端大模型)。backend/training.py: 多线程训练管理器。通过 Python 的threading保护非阻塞的主线程运转,允许外部实时获取其子线程里ultralytics包实时吐出的训练日志数组。frontend/src/App.jsx: 前端 React 骨架。应用了 Tailwind CSS 构建“玻璃拟态(Glassmorphism)”全局外观,实现无感知的 SPA(单页应用)标签页路由切换机制。frontend/src/pages/: 存放了各面板业务的核心逻辑和可视化图表绘制。
6. 实验平台与环境要求
为保证顺利复现和训练,建议平台环境满足以下指标。
硬件要求
- CPU: 四核心及以上(推荐Intel i5/i7或同等规格)
- 内存: 8GB RAM(涉及大模型与图形识别交叠推荐 16GB 以上)
- GPU: NVIDIA GPU,具备 6GB 以上显存(强烈推荐用于模型训练;单纯测试推理 CPU 亦可平替)
软件环境
- 操作系统: Windows 10/11, Ubuntu 20.04+
- 关键依赖栈: Python 3.8+, Node.js 18.0+, PyTorch (推荐搭配对应 CUDA 版本的环境)
7. 快速部署与启动指南
步骤 1:安装 Ollama 与大模型基座
系统依赖本地的 LLaVA 多模态模型负责诊断输出。
- 前往
ollama.com或者在终端直接输入(Mac/Linux):curl -fsSL https://ollama.com/install.sh | sh - 运行模型拉取命令:
ollama pull llava
步骤 2:启动后端引擎(API 层)
cd backend
# 推荐使用虚拟环境或 conda,安装系统依赖
pip install -r requirements.txt
# 启动服务端 (若遇到 WinError 10013 端口占用,可修改为 --port 8080)
uvicorn main:app --reload --host 0.0.0.0 --port 8000
(系统首次运行时,会自动根据 data/diseases.json 在后台初始化创建 sql_app.db 农业词库数据库。)
步骤 3:启动前端可视化面板
cd frontend
# 拉取最新的 node_modules 依赖库
npm install
# 热部署启动 Vite 服务器
npm run dev
前端服务将运行在 http://localhost:5173
5. 访问应用
在浏览器打开 http://localhost:5173,开始使用系统!
📖 使用指南
智能诊断
- 上传图片
- 点击上传区域或拖拽图片到上传框
- 支持 JPG、PNG 格式
- 推荐分辨率:640x640
- 开始检测
- 点击"开始 AI 诊断"按钮
- 等待几秒钟,系统会自动检测病害
- 检测结果显示在图片上方
- AI 问答
- 在右侧对话框输入问题
- 例如:“如何防治这种病害?”
- AI 会基于检测结果和知识库回答
模型训练
- 准备数据集
- 使用 YOLO 格式的数据集
- 包含
data.yaml配置文件 - 或从 Roboflow 下载
- 配置参数
- 设置训练轮数(epochs)
- 选择批次大小(batch size)
- 选择模型尺寸(n/s/m/l/x)
- 开始训练
- 点击"开始训练"按钮
- 在终端查看实时日志
- 训练完成后查看指标
历史记录
- 查看所有诊断记录
- 点击记录查看详情
- 删除不需要的记录
- 导出数据(计划中)
📁 项目结构
XM/
├── backend/ # 后端代码
│ ├── main.py # FastAPI 主应用
│ ├── engine.py # YOLO 和 LLaVA 引擎
│ ├── training.py # 训练管理器
│ ├── models.py # 数据库模型
│ ├── database.py # 数据库配置
│ ├── dataset_service.py # 数据集管理
│ ├── requirements.txt # Python 依赖
│ ├── model.pt # YOLO 模型文件
│ ├── uploads/ # 上传的图片
│ ├── runs/ # 训练结果
│ └── datasets/ # 数据集目录
│
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── pages/
│ │ │ ├── Dashboard.jsx # 主诊断页面
│ │ │ ├── Training.jsx # 训练页面
│ │ │ └── History.jsx # 历史记录页面
│ │ ├── App.jsx # 应用主组件
│ │ └── index.css # 全局样式
│ ├── public/ # 静态资源
│ ├── package.json # Node 依赖
│ ├── vite.config.js # Vite 配置
│ ├── tailwind.config.js # Tailwind 配置
│ └── postcss.config.js # PostCSS 配置
│
├── data/
│ └── diseases.json # 病害知识库
│
└── README.md # 本文件