🥔 项目简介
本项目是一个基于深度学习的马铃薯叶片病害智能识别系统,专门用于识别马铃薯早疫病、马铃薯晚疫病和健康叶片三类状态。系统采用 Django 作为 Web 端入口,为用户提供直观易用的交互界面。用户在首页上传叶片图片后,后台调用 PyTorch 训练好的分类模型进行实时推理,并在页面中展示预测类别、置信度和候选类别概率。
相比传统的模板页面,本项目首页已改造成更贴近农业病害检测场景的专业工作台样式,包含以下核心模块:
- 图片上传预览区:支持拖拽上传和预览
- 模型选择面板:支持多种预训练模型切换
- 诊断结果展示区:显示主预测结果和置信度
- Top3 候选概率条:可视化展示各候选类别的置信度
- 病害说明模块:提供病害特征和防治建议
- 数据集概览面板:展示数据集统计信息
本系统旨在为农业技术人员和种植户提供快速、准确的病害诊断工具,助力马铃薯产业的健康发展。## 🛠️ 技术栈
后端框架
- Django:提供稳定的 Web 服务接口和用户界面
深度学习框架
- PyTorch:主流的深度学习框架,提供灵活的模型构建和训练接口
- torchvision:提供图像预处理、数据增强和预训练模型
模型架构
- Vision Transformer (ViT):基于注意力机制的视觉 Transformer 模型
- ResNet 系列:深度残差网络,包括 ResNet18、ResNet34、ResNet50
- MobileNet 系列:轻量级卷积网络,适合移动端部署
- 其他模型:AlexNet、VGG、DenseNet、Swin Transformer 等分类模型脚本
数据处理与增强
- ImageFolder:按目录结构自动加载数据集
- 数据预处理:Resize、CenterCrop、Normalize
- 数据增强:随机裁剪、水平翻转、颜色抖动等
结果记录与分析
- pandas:读取/写入训练指标 Excel 文件
- matplotlib:生成类别分布图和训练曲线图
- scikit-learn:计算 precision、recall、f1-score 等评估指标
前端技术
- HTML/CSS/JavaScript:构建响应式用户界面
- Bootstrap:提供现代化的 UI 组件和布局## 🖥️ 系统首页展示
下图展示了系统首页的工作台界面,该截图基于项目本地首页模板和数据集样例图片生成。图中的预测值为页面展示用样例,主要用于说明系统前端布局和识别结果展示方式。

界面布局说明
-
左侧功能区
- 图片上传区域:支持拖拽或点击上传
- 模型选择下拉框:支持切换不同预训练模型
- 识别按钮:触发病害识别流程
-
中间预览区
- 实时显示上传的叶片图片
- 支持图片缩放和旋转查看
-
右侧结果区
- 主预测结果:显示最高置信度的病害类别
- 置信度进度条:直观展示模型置信度
- Top3 候选结果:展示其他可能的病害类别及概率
- 病害说明:提供病害特征和防治建议
-
底部数据集概览
- 显示当前数据集统计信息
- 各类别样本数量分布## 📊 数据集介绍
数据集结构
项目数据集位于 djangoProject/data_set/potato 目录下,采用标准的 Train/Test 目录结构组织。当前本地数据统计如下:
| 类别 | 训练集数量 | 测试集数量 | 合计 |
|---|---|---|---|
| 马铃薯早疫病 | 300 张 | 100 张 | 400 张 |
| 马铃薯晚疫病 | 300 张 | 100 张 | 400 张 |
| 健康叶片 | 300 张 | 100 张 | 400 张 |
| 总计 | 900 张 | 300 张 | 1200 张 |
类别说明
-
Potato___Early_blight:马铃薯早疫病- 特征:叶片出现褐色斑点,边缘有黄色晕圈
- 发病部位:主要在中下部叶片
- 危害程度:中等,影响光合作用
-
Potato___Late_blight:马铃薯晚疫病- 特征:叶片出现水渍状暗绿色病斑,边缘有白色霉层
- 发病部位:全株叶片均可发生
- 危害程度:严重,可导致整株死亡
-
Potato___healthy:健康叶片- 特征:叶片颜色鲜绿,无病斑
- 生长状态:正常生长
数据预处理
所有图像在训练前会进行以下预处理:
- 尺寸统一:调整为 224×224 像素
- 数据增强 (仅训练集):
- 随机水平翻转
- 随机旋转(±15°)
- 颜色抖动
- 随机裁剪
- 归一化:使用 ImageNet 的均值和标准差进行归一化
数据集示例

## 🚀 系统功能
1. 叶片图片上传
- 支持格式:JPG、PNG、JPEG 等常见图片格式
- 上传方式:支持拖拽上传和文件选择器上传
- 大小限制:最大支持 10MB 的图片文件
- 格式验证:自动检测图片格式和完整性
2. 图片预览与处理
- 实时预览:前端在用户选择图片后立即展示待识别叶片
- 图片调整:支持缩放、旋转等基本操作
- 格式转换:自动将图片转换为模型输入格式
- 质量检查:验证图片是否包含有效叶片区域
3. 模型选择与切换
- 多模型支持:Vision Transformer、ResNet、MobileNet 等
- 权重管理:自动加载对应模型的预训练权重
- 性能对比:支持不同模型在相同图片上的识别结果对比
- 默认模型:系统默认使用 Vision Transformer 模型
4. 病害识别与推理
- 实时推理:后台调用 PyTorch 模型进行快速预测
- 类别映射:读取类别映射文件,将数字标签转换为可读名称
- 置信度计算:输出预测类别及对应的置信度分数
- Top3 结果:展示前三个最可能的病害类别及概率
5. 结果可视化展示
- 主预测结果:突出显示最高置信度的病害类别
- 置信度进度条:直观展示模型对预测结果的把握程度
- 候选结果列表:展示其他可能的病害类别及概率
- 病害说明卡片:提供病害特征、防治方法和注意事项
6. 数据集适配性
- 目录结构兼容 :自动识别
Train/Test或train/val等常见目录命名 - 类别自动检测:根据目录名称自动生成类别索引
- 数据统计:实时显示数据集各类别样本数量
- 格式验证 :检查数据集结构的完整性和正确性## 模型与核心流程说明
训练阶段首先通过ImageFolder按目录读取叶片图片,并根据目录名称自动生成类别索引。训练集使用随机裁剪、水平翻转等增强方式提高泛化能力;验证或测试阶段使用固定尺寸缩放与归一化,保证输入格式稳定。
模型部分保留了多个经典网络和 Transformer 网络的训练脚本,例如 AlexNet、VGG、ResNet、MobileNet、DenseNet、Swin Transformer 和 Vision Transformer。当前系统默认训练入口为python main_train.py --model vit --data_set potato,训练后会保存weights/best_model.pth作为页面推理权重。
预测阶段会读取上传图片,完成 Resize、CenterCrop、ToTensor 和 Normalize 处理,然后加载对应模型权重进行前向推理,最后将 softmax 概率最大的类别作为主要识别结果返回给前端。
训练与运行流程
- 准备数据集:将马铃薯叶片数据按
Train/Test/类别名放入data_set/potato。 - 启动训练:执行
python main_train.py --model vit --data_set potato --epoch 10。 - 查看结果:训练过程会输出 loss、accuracy、precision、recall、f1 等指标,并保存 Excel 结果文件。
- 启动 Web:安装 Django 等依赖后执行
python manage.py runserver。 - 页面识别:打开首页,上传叶片图片,查看预测类别和置信度。
效果展示与分析
下图从项目已有的部分 *_results.xlsx 文件中抽取前若干轮训练记录生成,用于展示训练记录可视化方式。由于本报告是快速生成版,如果后续重新训练马铃薯数据集,可以直接替换为新的训练日志和曲线。

从展示曲线可以看出,训练结果文件能够记录每轮验证准确率变化,便于对不同模型的收敛速度和稳定性进行比较。实际项目中可以进一步补充混淆矩阵、错误样本可视化和单类别召回率分析,用来判断早疫病与晚疫病之间是否存在误判。
项目总结与优化方向
本项目完成了从数据集加载、模型训练、预测推理到 Django 前端展示的完整流程,适合作为农作物病害识别类项目的基础版本。页面部分已经从通用模板改造成马铃薯病害识别场景,报告中的首页图、数据集样例和可视化图均来自本地项目内容。
后续可以继续优化的方向包括:增加真实训练后的最佳权重文件、加入混淆矩阵分析、扩展更多病害类别、增加历史识别记录、支持批量检测,以及在移动端进一步优化拍照上传体验。