1. 项目背景与核心价值
甘蔗作为全球重要的经济作物,其叶片病害直接影响产量和品质。传统病害识别依赖农技人员肉眼观察,效率低且主观性强。我在广西某甘蔗种植基地实习期间,亲眼目睹农户因未能及时发现褐斑病导致30亩甘蔗减产40%的案例,这促使我选择该课题作为毕业设计。
卷积神经网络(CNN)在图像分类领域的突破性进展,为农业病害识别提供了新思路。相比传统机器学习方法,CNN能自动提取叶片图像的深层特征,克服了人工设计特征的主观局限。本项目采用Python实现,因其丰富的深度学习生态(如TensorFlow/PyTorch)和便捷的图像处理库(OpenCV/PIL),特别适合学生进行算法验证和快速迭代。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据集构建与预处理
2.1 数据采集方案设计
在广西农科院合作基地,使用华为Mate40 Pro手机(5000万像素主摄)采集了5类样本:
- 健康叶片(800张)
- 褐斑病(650张)
- 锈病(600张)
- 赤腐病(550张)
- 黑穗病(500张)
拍摄时注意:
- 保持叶片平铺,避免褶皱阴影
- 采用白色KT板作为背景
- 光照条件:上午9-11点自然光
- 拍摄距离固定为30cm
2.2 数据增强策略
针对农业图像特点,采用组合增强:
python复制train_transforms = transforms.Compose([
transforms.RandomRotation(15), # 旋转补偿拍摄角度偏差
transforms.RandomHorizontalFlip(),
transforms.ColorJitter(brightness=0.2, contrast=0.2), # 模拟光照变化
transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
特别注意:避免过度使用高斯噪声和模糊增强,实测会降低农业图像的病害特征区分度
3. 模型架构设计与优化
3.1 改进的ResNet34模型
基于经典ResNet34进行三处改进:
- 输入层调整:将原7x7卷积改为3个3x3卷积堆叠,保留感受野同时减少参数
python复制self.conv1 = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=3, stride=2, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(64),
nn.ReLU(),
nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(64),
nn.ReLU()
)
- 引入SE注意力模块:在残差块后添加通道注意力
- 输出层改进:使用Label Smoothing CrossEntropy缓解类别不平衡
3.2 训练技巧
- 采用渐进式学习率:初始0.01,每10epoch衰减0.1
- 早停机制:验证集loss连续5轮不下降终止训练
- 混合精度训练:节省显存同时加速20%
4. 部署与性能优化
4.1 移动端部署方案
使用TensorFlow Lite转换模型:
bash复制tflite_convert \
--saved_model_dir=saved_model \
--output_file=model_quant.tflite \
--quantize_weights=float16
在树莓派4B上测试结果:
| 模型版本 | 推理时间(ms) | 准确率 | 内存占用(MB) |
|---|---|---|---|
| FP32 | 420 | 93.2% | 180 |
| FP16 | 210 | 92.8% | 95 |
| INT8 | 150 | 91.5% | 50 |
4.2 实际测试中的挑战
- 叶片重叠问题:开发基于OpenCV的GrabCut分割预处理
- 光照影响:添加自动白平衡算法
- 模型漂移现象:每月增量更新5%的新样本
5. 完整实现代码结构
code复制├── data
│ ├── raw_images # 原始图像
│ ├── augmented # 增强后图像
│ └── train_val_split.py # 数据集划分
├── models
│ ├── resnet_mod.py # 改进模型
│ └── train.py # 训练脚本
├── utils
│ ├── preprocess.py # 预处理
│ └── visualize.py # 可视化
└── app
├── mobile_app # 安卓应用
└── web_demo # Flask网页端
关键技巧:使用PyTorch Lightning重构训练代码后,实验迭代效率提升3倍,建议学生必学这个框架
我在最终答辩时,模型在独立测试集上达到94.3%的准确率,比传统SVM方法提升27%。这个项目让我深刻体会到:农业AI落地必须考虑实际场景限制,比如农民使用的千元机性能、田间不稳定的网络环境等,这些在实验室里容易被忽略的因素往往决定项目成败。
