基于深度学习的小麦病虫害识别系统的设计与实现

作品简介


一、选题背景与意义

1.1 国内外研究现状

  • 传统方法 依赖植保专家田间巡查与显微观察,效率低、主观性强。
  • 机器视觉早期方法 基于手工特征(颜色直方图、LBP、HOG 等)配合 SVM/RF 分类,鲁棒性受光照、角度和品种差异限制。
  • 深度学习进展
  • 2017 年‐今,CNN 在 PlantVillage、AI Challenger 等公开数据集上将识别准确率提升至 95% 以上。
  • 国内外代表性工作:ResNet 识别苹果黑星病 (Ferentinos 2018)、EfficientNet 检测水稻纹枯病 (Zhang 2021)。
  • 不足
  1. 公开数据集中小麦病虫害类别稀缺,仍需田间实景数据补充;
  2. 多病斑、早期轻症识别难度大;
  3. 缺乏“模型‑前端‑后端”一体化可落地系统。

1.2 研究意义

  • 经济价值 小麦是我国第一大口粮作物,病虫害损失可达 10 %‐15 %。
  • 生态意义 智能监测可精准施药,减少化学农药 20 % 以上。
  • 学术价值 补充小麦病虫害实景数据集,探索轻量化模型在边缘设备部署。

二、研究目标与内容


三、技术路线

flowchart LR
A[数据采集] --> B[数据清洗与增强]
B --> C[模型架构设计]
C --> D[模型训练与调优]
D --> E[模型量化剪枝]
E --> F[ONNX 导出 & TensorRT 加速]
F --> G[系统集成 (Flask API)]
G --> H[前端展示 (Vue + ECharts)]
H --> I[田间试验验证]
创新点
  1. 引入 CutMix+RandAugment 联合法增强,提高轻症识别召回率;
  2. 轻量化注意力模块嵌入 EfficientNet,实现“高精度+小模型”;
  3. 端‑云协同:边缘侧实时监测,云端周期性模型微调,形成闭环。

四、关键技术难点与解决方案

难点预期方案病斑同质、背景复杂HSV‑Mask 预处理 + Focal Loss 解决类别不平衡轻量化与精度冲突NAS 搜索候选主干、采用知识蒸馏 & GPTQ 量化通信带宽受限图像先在端侧裁剪推断,仅上传推断结果及疑难样本

五、预期成果

  1. 小麦病虫害数据集(公开发布,CC‑BY 4.0)。
  2. 深度学习模型(ONNX & TensorRT engine)。
  3. 完整系统代码:训练、推理、Web 服务与前端。
  4. 毕业论文与 PPT;期望投稿 《农业工程学报》Computers and Electronics in Agriculture


六、可行性分析

  • 技术可行:已有 ResNet/EfficientNet 成功案例;Jetson Orin 支持 TensorRT。
  • 数据可行:与农学院植保实验室合作,可获取小麦田间资源。
  • 时间可行:任务分阶段拆解,并行推进采样与模型开发。
  • 经费可行:学校科研项目支持 GPU 服务器与边缘设备采购。

七、风险及对策

风险对策病虫害暴发期受气候影响采用往年图像补充,模拟数据增强田间网络不稳定本地缓存 + 4G 模块离线上传模型精度不达标方案 B:使用 ViT‑Tiny + Mixup;扩充样本论文进度延迟每周例会检查里程碑,双导师跟进

八、参考文献(节选)

  1. Ferentinos, K. P. “Deep Learning Models for Plant Disease Detection and Diagnosis.” Computers and Electronics in Agriculture, 2018.
  2. Zhang, Y. et al. “Lightweight CNN for Rice Disease Detection in Complex Scenes.” CEiA, 2021.
  3. Tan, M., & Le, Q. “EfficientNet: Rethinking Model Scaling for CNNs.” ICML, 2019.
  4. Howard, A. et al. “Searching for MobileNetV3.” ICCV, 2019.


以下是详细的设计部分参考:

2. 系统架构

系统主要分为数据处理模块、模型训练模块、推理与导出模块、Web 服务模块等几个部分,具体架构如下图所示:

flowchart LR
A[数据采集与标注] --> B[数据增强与预处理]
B --> C[模型训练与调优]
C --> D[模型导出(ONNX/TensorRT)]
D --> E[Web服务 (Flask API)]
E --> F[前端展示 (Vue + ECharts)]

关键模块:

  1. 数据采集与标注:通过与农田合作,收集小麦的病虫害图像并进行标注,生成数据集。
  2. 数据增强与预处理:使用 Albumentations 进行数据增强,处理图像的大小、颜色和角度等。
  3. 模型训练与调优:基于 EfficientNet-B0 设计模型,利用 CBAM 注意力机制提升识别精度。
  4. 模型导出与优化:将训练好的模型导出为 ONNX 格式,并通过 TensorRT 进行加速,适用于边缘计算设备。
  5. Web 服务:使用 Flask 创建 RESTful API,前端使用 Vue 构建用户交互界面,支持实时上传图像和展示识别结果。

3. 环境搭建

3.1 软件环境

# 创建虚拟环境
conda create -n wheat python=3.9
conda activate wheat

# 安装依赖包
pip install -r requirements.txt

requirements.txt 示例内容:

torch==2.2.0
torchvision==0.17.0
opencv-python
pandas
pyyaml
albumentations
scikit-learn
matplotlib
tqdm

4. 数据准备

4.1 数据集结构

数据集包括训练集和验证集,按类目进行组织:

data/
├── wheat_train/
│   ├── healthy/xxx.jpg
│   ├── powdery_mildew/xxx.jpg
│   └── ...
└── wheat_val/
    └── ...

每个文件夹包含相应类别的图像,类别包括:

  • healthy (健康)
  • powdery_mildew (白粉病)
  • leaf_blight (叶斑病)
  • stripe_rust (条锈病)
  • 其他常见的小麦病虫害类别

4.2 数据标注

数据标注可以采用两种方式:

  1. 文件夹结构:每个类别有一个独立文件夹,文件夹内是该类别的所有图像。
  2. CSV 文件:包含图像路径和标签。
path,label
/absolute/path/healthy/001.jpg,healthy
/absolute/path/powdery_mildew/001.jpg,powdery_mildew
...

4.3 数据增强与预处理

  • 使用 Albumentations 库对图像进行随机裁剪、旋转、缩放、亮度对比度调整等增强。
  • 处理图像的大小统一为 224x224,并进行归一化处理。

5. 配置文件 config.yaml

配置文件用于存储模型参数、训练参数等信息,用户可以通过修改该文件来调整训练过程。

model: efficientnet_b0          # 主干网络
num_classes: 11                 # 类别数
img_size: 224                   # 图像输入大小
batch_size: 32                  # 每批次大小
epochs: 100                     # 训练轮数
optimizer: adamw                # 优化器
lr: 2.5e-4                      # 学习率
scheduler: cosine               # 学习率调度器
loss: focal                     # 损失函数
cutmix: true                    # 是否使用 CutMix 数据增强
randaugment: 2                  # RandAugment 的强度
log_dir: runs/exp1              # TensorBoard 日志保存目录

用户可以通过命令行参数覆盖配置文件中的内容。

6. 模型训练

6.1 训练命令

python wheat_disease_pest_recognition.py --mode train --config config.yaml

训练过程包括以下几个步骤:

  1. 数据加载与增强:使用 datasets.py 加载数据集并进行增强。
  2. 模型构建与训练:使用 EfficientNet-B0 作为主干网络,结合 CBAM 注意力机制来提高模型性能。
  3. 优化器与调度:使用 AdamW 优化器和余弦退火调度器,采用 Focal Loss 解决类别不平衡问题。
  4. 日志与监控:使用 TensorBoard 记录训练过程中的损失值、准确率等信息。

6.2 训练过程中的关键技术

  • 数据增强:使用 Albumentations 进行数据增强,提高模型对不同图像的泛化能力。
  • 切换不同增强策略:在训练过程中,可以通过配置 cutmixrandaugment 来选择不同的数据增强方法。
  • 使用混合精度训练:通过 torch.cuda.amp 提高训练效率。

7. 模型推理与导出

7.1 单张推理

python infer.py --weights models/checkpoints/best.ckpt --source tests/example.jpg

7.2 导出 ONNX 模型

python export_onnx.py --weights models/checkpoints/best.ckpt --img-size 224
# 导出后的 ONNX 模型存储在 models/onnx/wheat.onnx

7.3 使用 TensorRT 加速

trtexec --onnx=models/onnx/wheat.onnx --saveEngine=models/tensorrt/wheat.engine --workspace=4096 --best
# 使用 TensorRT 推理
python infer.py --engine models/tensorrt/wheat.engine

8. Web 服务

8.1 API 构建(Flask)

from infer import Predictor
predictor = Predictor("models/tensorrt/wheat.engine")

@app.post("/predict")
def predict():
    imgs = [Image.open(f) for f in request.files.getlist("files")]
    results = [predictor(img) for img in imgs]
    return jsonify(results)
  • 上传图片:通过 POST /predict 上传图像进行病虫害识别。
  • 健康检查:通过 GET /health 路径检查服务状态。


具体代码案例参考见付费区域



创作时间: