一、选题背景与意义
1.1 国内外研究现状
- 传统方法 依赖植保专家田间巡查与显微观察,效率低、主观性强。
- 机器视觉早期方法 基于手工特征(颜色直方图、LBP、HOG 等)配合 SVM/RF 分类,鲁棒性受光照、角度和品种差异限制。
- 深度学习进展
- 2017 年‐今,CNN 在 PlantVillage、AI Challenger 等公开数据集上将识别准确率提升至 95% 以上。
- 国内外代表性工作:ResNet 识别苹果黑星病 (Ferentinos 2018)、EfficientNet 检测水稻纹枯病 (Zhang 2021)。
- 不足:
- 公开数据集中小麦病虫害类别稀缺,仍需田间实景数据补充;
- 多病斑、早期轻症识别难度大;
- 缺乏“模型‑前端‑后端”一体化可落地系统。
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[田间试验验证]
创新点
- 引入 CutMix+RandAugment 联合法增强,提高轻症识别召回率;
- 轻量化注意力模块嵌入 EfficientNet,实现“高精度+小模型”;
- 端‑云协同:边缘侧实时监测,云端周期性模型微调,形成闭环。
四、关键技术难点与解决方案
难点预期方案病斑同质、背景复杂HSV‑Mask 预处理 + Focal Loss 解决类别不平衡轻量化与精度冲突NAS 搜索候选主干、采用知识蒸馏 & GPTQ 量化通信带宽受限图像先在端侧裁剪推断,仅上传推断结果及疑难样本
五、预期成果
- 小麦病虫害数据集(公开发布,CC‑BY 4.0)。
- 深度学习模型(ONNX & TensorRT engine)。
- 完整系统代码:训练、推理、Web 服务与前端。
- 毕业论文与 PPT;期望投稿 《农业工程学报》 或 Computers and Electronics in Agriculture。
六、可行性分析
- 技术可行:已有 ResNet/EfficientNet 成功案例;Jetson Orin 支持 TensorRT。
- 数据可行:与农学院植保实验室合作,可获取小麦田间资源。
- 时间可行:任务分阶段拆解,并行推进采样与模型开发。
- 经费可行:学校科研项目支持 GPU 服务器与边缘设备采购。
七、风险及对策
风险对策病虫害暴发期受气候影响采用往年图像补充,模拟数据增强田间网络不稳定本地缓存 + 4G 模块离线上传模型精度不达标方案 B:使用 ViT‑Tiny + Mixup;扩充样本论文进度延迟每周例会检查里程碑,双导师跟进
八、参考文献(节选)
- Ferentinos, K. P. “Deep Learning Models for Plant Disease Detection and Diagnosis.” Computers and Electronics in Agriculture, 2018.
- Zhang, Y. et al. “Lightweight CNN for Rice Disease Detection in Complex Scenes.” CEiA, 2021.
- Tan, M., & Le, Q. “EfficientNet: Rethinking Model Scaling for CNNs.” ICML, 2019.
- 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)]
关键模块:
- 数据采集与标注:通过与农田合作,收集小麦的病虫害图像并进行标注,生成数据集。
- 数据增强与预处理:使用
Albumentations
进行数据增强,处理图像的大小、颜色和角度等。 - 模型训练与调优:基于 EfficientNet-B0 设计模型,利用 CBAM 注意力机制提升识别精度。
- 模型导出与优化:将训练好的模型导出为 ONNX 格式,并通过 TensorRT 进行加速,适用于边缘计算设备。
- 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 数据标注
数据标注可以采用两种方式:
- 文件夹结构:每个类别有一个独立文件夹,文件夹内是该类别的所有图像。
- 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
训练过程包括以下几个步骤:
- 数据加载与增强:使用
datasets.py
加载数据集并进行增强。 - 模型构建与训练:使用
EfficientNet-B0
作为主干网络,结合CBAM
注意力机制来提高模型性能。 - 优化器与调度:使用
AdamW
优化器和余弦退火调度器,采用Focal Loss
解决类别不平衡问题。 - 日志与监控:使用 TensorBoard 记录训练过程中的损失值、准确率等信息。
6.2 训练过程中的关键技术
- 数据增强:使用
Albumentations
进行数据增强,提高模型对不同图像的泛化能力。 - 切换不同增强策略:在训练过程中,可以通过配置
cutmix
和randaugment
来选择不同的数据增强方法。 - 使用混合精度训练:通过
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
路径检查服务状态。
具体代码案例参考见付费区域